Use multiple definition approach on Linux instead

This commit is contained in:
Akash Levy 2026-04-16 11:20:26 -07:00
parent 29024f215a
commit f1f38cd765
2 changed files with 9 additions and 22 deletions

View File

@ -578,8 +578,11 @@ else
LIBS_VERIFIC += -Wl,--whole-archive $(patsubst %,$(VERIFIC_DIR)/%/*-linux.a,$(VERIFIC_COMPONENTS)) -Wl,--no-whole-archive -lz
endif
# Silimate extension override objects: compile .cpp files and patch pre-compiled
# archives to localize overridden symbols, producing .a from .raw.a
# Silimate extension override objects: compile .cpp files. On macOS we patch the
# pre-compiled archives (from .raw.a originals) to localize overridden symbols,
# since the macOS linker doesn't support --allow-multiple-definition. On Linux
# we just copy .raw.a to .a and rely on --allow-multiple-definition so override
# .o definitions (linked before the archives) take precedence.
ifeq ($(ENABLE_VERIFIC_SILIMATE_EXTENSIONS),1)
$(VERIFIC_DIR)/database/DBSilimate.o: $(VERIFIC_DIR)/database/DBSilimate.cpp
@ -620,29 +623,13 @@ $(VERIFIC_DIR)/verilog/verilog-mac.a: $(VERIFIC_DIR)/verilog/verilog-mac.raw.a $
else
VERIFIC_LIB_OS_SUFFIX = linux
LINKFLAGS += -Wl,--allow-multiple-definition
$(VERIFIC_DIR)/_override_syms.txt: $(VERIFIC_SILIMATE_OBJS)
$(Q) nm -g --defined-only $^ | awk '$$2 ~ /^[TDBR]$$/ {print $$NF}' | sort -u > $@
$(VERIFIC_DIR)/database/database-linux.a: $(VERIFIC_DIR)/database/database-linux.raw.a $(VERIFIC_DIR)/_override_syms.txt
$(VERIFIC_DIR)/database/database-linux.a: $(VERIFIC_DIR)/database/database-linux.raw.a
$(Q) cp $< $@
$(Q) mkdir -p $@_patch_tmp
$(Q) cd $@_patch_tmp && ar x $(CURDIR)/$@ && \
for o in *.o; do \
objcopy --weaken-symbols=$(CURDIR)/$(VERIFIC_DIR)/_override_syms.txt "$$o" 2>/dev/null || true; \
done
$(Q) ar rcs $@ $@_patch_tmp/*.o
$(Q) rm -rf $@_patch_tmp
$(VERIFIC_DIR)/verilog/verilog-linux.a: $(VERIFIC_DIR)/verilog/verilog-linux.raw.a $(VERIFIC_DIR)/_override_syms.txt
$(VERIFIC_DIR)/verilog/verilog-linux.a: $(VERIFIC_DIR)/verilog/verilog-linux.raw.a
$(Q) cp $< $@
$(Q) mkdir -p $@_patch_tmp
$(Q) cd $@_patch_tmp && ar x $(CURDIR)/$@ && \
for o in *.o; do \
objcopy --weaken-symbols=$(CURDIR)/$(VERIFIC_DIR)/_override_syms.txt "$$o" 2>/dev/null || true; \
done
$(Q) ar rcs $@ $@_patch_tmp/*.o
$(Q) rm -rf $@_patch_tmp
endif

@ -1 +1 @@
Subproject commit a38fbdb575b50565f041f31909015c07e11020e5
Subproject commit f6114043ecf341de28b3fca6f173a4aeee94ac24