diff --git a/mk/platform.mk b/mk/platform.mk index d1ac90835c5..9bfae5e9691 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -22,6 +22,7 @@ ifneq ($(findstring freebsd,$(CFG_OSTYPE)),) CFG_UNIXY := 1 CFG_LDENV := LD_LIBRARY_PATH CFG_DEF_SUFFIX := .bsd.def + CFG_INSTALL_NAME = endif ifneq ($(findstring linux,$(CFG_OSTYPE)),) @@ -48,6 +49,7 @@ ifneq ($(findstring linux,$(CFG_OSTYPE)),) CFG_PERF_TOOL := /usr/bin/time --verbose endif endif + CFG_INSTALL_NAME = endif ifneq ($(findstring darwin,$(CFG_OSTYPE)),) @@ -71,6 +73,8 @@ ifneq ($(findstring darwin,$(CFG_OSTYPE)),) CFG_GCCISH_LINK_FLAGS += -m32 CFG_DSYMUTIL := dsymutil CFG_DEF_SUFFIX := .darwin.def + # Mac requires this flag to make rpath work + CFG_INSTALL_NAME = -Wl,-install_name,@rpath/$(1) endif ifneq ($(findstring mingw,$(CFG_OSTYPE)),) @@ -154,7 +158,7 @@ ifdef CFG_WINDOWSY CFG_GCCISH_CFLAGS += -march=i686 CFG_GCCISH_LINK_FLAGS += -shared -fPIC endif - + CFG_INSTALL_NAME = endif @@ -169,7 +173,7 @@ ifeq ($(CFG_C_COMPILER),clang) CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \ -MM $(2) CFG_LINK_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_LINK_FLAGS) -o $(1) \ - $(CFG_GCCISH_DEF_FLAG)$(3) $(2) + $(CFG_GCCISH_DEF_FLAG)$(3) $(2) $(call CFG_INSTALL_NAME,$(4)) else ifeq ($(CFG_C_COMPILER),gcc) CC=gcc @@ -181,7 +185,7 @@ ifeq ($(CFG_C_COMPILER),gcc) CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \ -MM $(2) CFG_LINK_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_LINK_FLAGS) -o $(1) \ - $(CFG_GCCISH_DEF_FLAG)$(3) $(2) + $(CFG_GCCISH_DEF_FLAG)$(3) $(2) $(call CFG_INSTALL_NAME,$(4)) else CFG_ERR := $(error please try on a system with gcc or clang) endif diff --git a/mk/rt.mk b/mk/rt.mk index decbd1bc175..15f5aba566d 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -112,7 +112,7 @@ rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF) $(RU @$(call E, link: $@) $(Q)$(call CFG_LINK_C,$@, $(RUNTIME_OBJS) \ $(CFG_GCCISH_POST_LIB_FLAGS) $(RUNTIME_LIBS) \ - $(CFG_LIBUV_LINK_FLAGS),$(RUNTIME_DEF)) + $(CFG_LIBUV_LINK_FLAGS),$(RUNTIME_DEF),$(CFG_RUNTIME)) # FIXME: For some reason libuv's makefiles can't figure out the correct definition # of CC on the mingw I'm using, so we are explicitly using gcc. Also, we diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk index af1f7bfbd0f..d8f9dd2ce52 100644 --- a/mk/rustllvm.mk +++ b/mk/rustllvm.mk @@ -17,7 +17,7 @@ rustllvm/$(CFG_RUSTLLVM): $(RUSTLLVM_OBJS_OBJS) \ $(Q)$(call CFG_LINK_C,$@,$(RUSTLLVM_OBJS_OBJS) \ $(CFG_GCCISH_PRE_LIB_FLAGS) $(CFG_LLVM_LIBS) \ $(CFG_GCCISH_POST_LIB_FLAGS) \ - $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF)) + $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF),$(CFG_RUSTLLVM)) rustllvm/%.o: rustllvm/%.cpp $(MKFILES) @$(call E, compile: $@) diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs index 4e903af1951..231762a79dd 100644 --- a/src/comp/back/link.rs +++ b/src/comp/back/link.rs @@ -567,6 +567,13 @@ fn link_binary(sess: session::session, if sess.get_opts().library { gcc_args += [lib_cmd]; + + // On mac we need to tell the linker to let this library + // be rpathed + if sess.get_targ_cfg().os == session::os_macos { + gcc_args += ["-Wl,-install_name,@rpath/" + + fs::basename(saved_out_filename)]; + } } else { // FIXME: why do we hardcode -lm? gcc_args += ["-lm", main];