Skip to content

Commit

Permalink
Make libnixrust a dynamic library
Browse files Browse the repository at this point in the history
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
  • Loading branch information
edolstra committed Nov 29, 2019
1 parent 895ce1b commit 39954a9
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion nix-rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ edition = "2018"

[lib]
name = "nixrust"
crate-type = ["staticlib"]
crate-type = ["cdylib"]

[dependencies]
tar = "0.4"
Expand Down
26 changes: 20 additions & 6 deletions nix-rust/local.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 39954a9

Please sign in to comment.