aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-11-29 18:27:40 +0100
committerEelco Dolstra <edolstra@gmail.com>2019-11-29 18:30:39 +0100
commit39954a958623431acb8642372f881cbdb7bb789d (patch)
treef1269181a1d02cfaa202abaa8ddb0417afe7eec7
parent895ce1bb6cc77324c377baa08eb98666768e5c6d (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.toml2
-rw-r--r--nix-rust/local.mk26
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