diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2019-11-29 18:27:40 +0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2019-11-29 18:30:39 +0100 |
commit | 39954a958623431acb8642372f881cbdb7bb789d (patch) | |
tree | f1269181a1d02cfaa202abaa8ddb0417afe7eec7 | |
parent | 895ce1bb6cc77324c377baa08eb98666768e5c6d (diff) |
Make libnixrust a dynamic library
This is a hack to fix the build on macOS, which was failing because
libnixrust.a contains compiler builtins that clash with
libclang_rt.osx.a. There's probably a better solution...
https://hydra.nixos.org/build/107473280
-rw-r--r-- | nix-rust/Cargo.toml | 2 | ||||
-rw-r--r-- | nix-rust/local.mk | 26 |
2 files changed, 21 insertions, 7 deletions
diff --git a/nix-rust/Cargo.toml b/nix-rust/Cargo.toml index 8b56dc89c..c4f4ceb09 100644 --- a/nix-rust/Cargo.toml +++ b/nix-rust/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [lib] name = "nixrust" -crate-type = ["staticlib"] +crate-type = ["cdylib"] [dependencies] tar = "0.4" diff --git a/nix-rust/local.mk b/nix-rust/local.mk index ed1e640c9..7645d5394 100644 --- a/nix-rust/local.mk +++ b/nix-rust/local.mk @@ -6,15 +6,29 @@ else RUST_DIR = debug endif -libnixrust_PATH := $(d)/target/$(RUST_DIR)/libnixrust.a -libnixrust_INSTALL_PATH := $(libnixrust_PATH) +libnixrust_PATH := $(d)/target/$(RUST_DIR)/libnixrust.$(SO_EXT) +libnixrust_INSTALL_PATH := $(libdir)/libnixrust.$(SO_EXT) libnixrust_LDFLAGS_USE := -L$(d)/target/$(RUST_DIR) -lnixrust -ldl -libnixrust_LDFLAGS_USE_INSTALLED := $(libnixrust_LDFLAGS_USE) +libnixrust_LDFLAGS_USE_INSTALLED := -L$(libdir) -lnixrust -ldl -$(d)/target/$(RUST_DIR)/libnixrust.a: $(wildcard $(d)/src/*.rs) $(d)/Cargo.toml +ifeq ($(OS), Darwin) +libnixrust_BUILD_FLAGS = NIX_LDFLAGS="-undefined dynamic_lookup" +else +libnixrust_LDFLAGS_USE += -Wl,-rpath,$(abspath $(d)/target/$(RUST_DIR)) +libnixrust_LDFLAGS_USE_INSTALLED += -Wl,-rpath,$(libdir) +endif + +$(libnixrust_PATH): $(wildcard $(d)/src/*.rs) $(d)/Cargo.toml $(trace-gen) cd nix-rust && CARGO_HOME=$$(if [[ -d vendor ]]; then echo vendor; fi) \ - cargo build $(RUST_MODE) $$(if [[ -d vendor ]]; then echo --offline; fi) \ - && touch target/$(RUST_DIR)/libnixrust.a + $(libnixrust_BUILD_FLAGS) \ + cargo build $(RUST_MODE) $$(if [[ -d vendor ]]; then echo --offline; fi) \ + && touch target/$(RUST_DIR)/libnixrust.$(SO_EXT) + +$(libnixrust_INSTALL_PATH): $(libnixrust_PATH) + $(target-gen) cp $^ $@ +ifeq ($(OS), Darwin) + install_name_tool -id $@ $@ +endif dist-files += $(d)/vendor |