diff options
| -rw-r--r-- | defs/jit.mk | 17 | ||||
| -rw-r--r-- | yjit/yjit.mk | 4 | ||||
| -rw-r--r-- | zjit/zjit.mk | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/defs/jit.mk b/defs/jit.mk index 27b14e7a07..2c1e819684 100644 --- a/defs/jit.mk +++ b/defs/jit.mk @@ -22,7 +22,7 @@ RUST_LIB_TOUCH = touch $@ # ld: warning: object file (target/debug/libjit.a(<libcapstone object>)) was built for # newer macOS version (15.2) than being linked (15.0) # This limits us to an older set of macOS API in the rust code, but we don't use any. -$(RUST_LIB): $(srcdir)/ruby.rs +$(RUST_LIB): $(srcdir)/ruby.rs target/.rustc-version $(Q)if [ '$(ZJIT_SUPPORT)' != no -a '$(YJIT_SUPPORT)' != no ]; then \ echo 'building YJIT and ZJIT ($(JIT_CARGO_SUPPORT:yes=release) mode)'; \ elif [ '$(ZJIT_SUPPORT)' != no ]; then \ @@ -37,7 +37,7 @@ $(RUST_LIB): $(srcdir)/ruby.rs $(RUST_LIB_TOUCH) else ifneq ($(strip $(RLIB_DIR)),) # combo build -$(RUST_LIB): $(srcdir)/ruby.rs +$(RUST_LIB): $(srcdir)/ruby.rs target/.rustc-version $(ECHO) 'building $(@F)' $(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \ $(RUSTC_FLAGS) \ @@ -54,7 +54,7 @@ $(RUST_LIB): $(srcdir)/ruby.rs JIT_RLIB = $(TOP_BUILD_DIR)/$(RLIB_DIR)/libjit.rlib $(YJIT_RLIB): $(JIT_RLIB) $(ZJIT_RLIB): $(JIT_RLIB) -$(JIT_RLIB): +$(JIT_RLIB): target/.rustc-version $(ECHO) 'building $(@F)' $(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \ --edition=2024 \ @@ -77,6 +77,17 @@ endif rust-libobj: $(RUST_LIBOBJ) rust-lib: $(RUST_LIB) +rustc-version-check: target/.rustc-version + +target/.rustc-version: PHONY + $(eval prev_version := $(if $(wildcard $@),$(shell cat $@))) + $(eval curr_version := $(shell $(RUSTC) -V | cut -d' ' -f2)) + $(eval clean := $(filter-out $(prev_version),$(curr_version))) + $(if $(clean),$(ECHO) Cleaning $(@D) for rustc $(curr_version)) + $(if $(clean),$(Q)$(RMALL) $(@D)) + $(if $(clean),$(Q)$(MAKEDIRS) $(@D)) + $(if $(clean),$(Q)echo $(curr_version) > $@) + # For Darwin only: a list of symbols that we want the glommed Rust static lib to export. # Unfortunately, using wildcard like '_rb_*' with -exported-symbol does not work, at least # not on version 820.1. Assume llvm-nm, so XCode 8.0 (from 2016) or newer. diff --git a/yjit/yjit.mk b/yjit/yjit.mk index 21fd96514b..187ea758a2 100644 --- a/yjit/yjit.mk +++ b/yjit/yjit.mk @@ -16,14 +16,14 @@ BUILD_YJIT_LIBS = $(TOP_BUILD_DIR)/$(YJIT_LIBS) # In a YJIT-only build (no ZJIT) ifneq ($(strip $(YJIT_LIBS)),) yjit-libs: $(BUILD_YJIT_LIBS) -$(BUILD_YJIT_LIBS): $(YJIT_SRC_FILES) +$(BUILD_YJIT_LIBS): $(YJIT_SRC_FILES) target/.rustc-version $(ECHO) 'building Rust YJIT (release mode)' $(gnumake_recursive)$(Q) $(RUSTC) $(YJIT_RUSTC_ARGS) else ifneq ($(strip $(RLIB_DIR)),) # combo build # Absolute path to avoid VPATH ambiguity YJIT_RLIB = $(TOP_BUILD_DIR)/$(RLIB_DIR)/libyjit.rlib -$(YJIT_RLIB): $(YJIT_SRC_FILES) +$(YJIT_RLIB): $(YJIT_SRC_FILES) target/.rustc-version $(ECHO) 'building $(@F)' $(gnumake_recursive)$(Q) $(RUSTC) '-L$(@D)' --extern=jit $(YJIT_RUSTC_ARGS) diff --git a/zjit/zjit.mk b/zjit/zjit.mk index 58b45d8787..92839cf0a1 100644 --- a/zjit/zjit.mk +++ b/zjit/zjit.mk @@ -20,14 +20,14 @@ BUILD_ZJIT_LIBS = $(TOP_BUILD_DIR)/$(ZJIT_LIBS) # In a ZJIT-only build (no YJIT) ifneq ($(strip $(ZJIT_LIBS)),) -$(BUILD_ZJIT_LIBS): $(ZJIT_SRC_FILES) +$(BUILD_ZJIT_LIBS): $(ZJIT_SRC_FILES) target/.rustc-version $(ECHO) 'building Rust ZJIT (release mode)' $(gnumake_recursive)$(Q) $(RUSTC) $(ZJIT_RUSTC_ARGS) else ifneq ($(strip $(RLIB_DIR)),) # combo build # Absolute path to avoid VPATH ambiguity ZJIT_RLIB = $(TOP_BUILD_DIR)/$(RLIB_DIR)/libzjit.rlib -$(ZJIT_RLIB): $(ZJIT_SRC_FILES) +$(ZJIT_RLIB): $(ZJIT_SRC_FILES) target/.rustc-version $(ECHO) 'building $(@F)' $(gnumake_recursive)$(Q) $(RUSTC) '-L$(@D)' --extern=jit $(ZJIT_RUSTC_ARGS) |
