Skip to content

Commit b1ceb01

Browse files
committed
Make whole_archive a makefile function; add Base.Linking.whole_archive
1 parent dc0a6e5 commit b1ceb01

File tree

6 files changed

+28
-20
lines changed

6 files changed

+28
-20
lines changed

Make.inc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,11 +1508,9 @@ RPATH_LIB := $(RPATH_ORIGIN)
15081508

15091509
# --whole-archive
15101510
ifeq ($(OS), Darwin)
1511-
WHOLE_ARCHIVE := -Xlinker -force_load
1512-
NO_WHOLE_ARCHIVE :=
1511+
whole_archive = $(and $(1),-Xlinker -force_load $(1))
15131512
else
1514-
WHOLE_ARCHIVE := -Wl,--whole-archive
1515-
NO_WHOLE_ARCHIVE := -Wl,--no-whole-archive
1513+
whole_archive = $(and $(1),-Wl,--whole-archive $(1) -Wl,--no-whole-archive)
15161514
endif
15171515

15181516
# Initialize these once, then add to them in OS-specific blocks
@@ -1558,8 +1556,7 @@ ifeq (,$(findstring aarch64,$(ARCH)))
15581556
OSLIBS += -lgcc_s
15591557
endif
15601558

1561-
OSLIBS += -Wl,--export-dynamic -Wl,--version-script=$(BUILDROOT)/src/julia.expmap \
1562-
$(NO_WHOLE_ARCHIVE)
1559+
OSLIBS += -Wl,--export-dynamic -Wl,--version-script=$(BUILDROOT)/src/julia.expmap -Wl,--no-whole-archive
15631560
endif
15641561

15651562
ifeq ($(OS), OpenBSD)
@@ -1585,7 +1582,7 @@ endif
15851582
ifeq ($(OS), WINNT)
15861583
HAVE_SSP := 1
15871584
OSLIBS += -Wl,--export-all-symbols -Wl,--version-script=$(BUILDROOT)/src/julia.expmap \
1588-
$(NO_WHOLE_ARCHIVE) -lpsapi -lkernel32 -lws2_32 -liphlpapi -lwinmm -ldbghelp -luserenv -lsecur32 -latomic -lole32
1585+
-Wl,--no-whole-archive -lpsapi -lkernel32 -lws2_32 -liphlpapi -lwinmm -ldbghelp -luserenv -lsecur32 -latomic -lole32
15891586
# N.B.: Unlike in the sysimage, we cannot -Wl,--disable-auto-import -Wl,--disable-runtime-pseudo-reloc here, because libstdc++/LLVM are not fully correct under
15901587
# enforced visibility at this point.
15911588
JLDFLAGS += -Wl,--stack,8388608

base/linking.jl

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ function ld()
107107
end
108108

109109
const WHOLE_ARCHIVE = if Sys.isapple()
110-
"-force_load"
110+
"-all_load"
111111
else
112112
"--whole-archive"
113113
end
@@ -118,6 +118,17 @@ else
118118
"--no-whole-archive"
119119
end
120120

121+
# Prefer whole_archive to WHOLE_ARCHIVE
122+
whole_archive(paths::String; is_cc=false) = whole_archive([paths]; is_cc)
123+
function whole_archive(paths::Vector{String}; is_cc=false)
124+
cc_arg(a) = is_cc ? "-Wl,$a" : a
125+
if Sys.isapple()
126+
Cmd(collect(Iterators.flatmap(p -> (cc_arg("-force_load"), p), paths)))
127+
else
128+
`$(cc_arg("--whole-archive")) $paths $(cc_arg("--no-whole-archive"))`
129+
end
130+
end
131+
121132
const SHARED = if Sys.isapple()
122133
"-dylib"
123134
else
@@ -152,7 +163,7 @@ function link_image_cmd(path, out)
152163
end
153164

154165
V = verbose_linking() ? "--verbose" : ""
155-
`$(ld()) $V $SHARED -o $out $WHOLE_ARCHIVE $path $NO_WHOLE_ARCHIVE $PRIVATE_LIBDIR $SHLIBDIR $LIBS`
166+
`$(ld()) $V $SHARED -o $out $(whole_archive(path)) $PRIVATE_LIBDIR $SHLIBDIR $LIBS`
156167
end
157168

158169
function link_image(path, out, internal_stderr::IO=stderr, internal_stdout::IO=stdout)

contrib/juliac/juliac.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,11 @@ function link_products()
202202
julia_libs = Base.shell_split(Base.isdebugbuild() ? "-ljulia-debug -ljulia-internal-debug" : "-ljulia -ljulia-internal")
203203
try
204204
if output_type == "--output-lib"
205-
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -shared -Wl,$(Base.Linking.WHOLE_ARCHIVE) $img_path -Wl,$(Base.Linking.NO_WHOLE_ARCHIVE) $(julia_libs)`
205+
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -shared $(Base.Linking.whole_archive(img_path)) $(julia_libs)`
206206
elseif output_type == "--output-sysimage"
207-
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -shared -Wl,$(Base.Linking.WHOLE_ARCHIVE) $img_path -Wl,$(Base.Linking.NO_WHOLE_ARCHIVE) $(julia_libs)`
207+
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -shared -Wl,$(Base.Linking.whole_archive(img_path)) $(julia_libs)`
208208
else
209-
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -Wl,$(Base.Linking.WHOLE_ARCHIVE) $img_path -Wl,$(Base.Linking.NO_WHOLE_ARCHIVE) $(julia_libs)`
209+
cmd2 = `$(cc) $(allflags) $(rpath) -o $outname -Wl,$(Base.Linking.whole_archive(img_path)) $(julia_libs)`
210210
end
211211
verbose && println("Running: $cmd2")
212212
run(cmd2)

src/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ LIBJULIA_PATH_REL := libjulia
203203
endif
204204

205205
COMMON_LIBPATHS := -L$(build_libdir) -L$(build_shlibdir)
206-
RT_LIBS := $(WHOLE_ARCHIVE) $(LIBUV) $(WHOLE_ARCHIVE) $(LIBUTF8PROC) $(NO_WHOLE_ARCHIVE) $(LIBUNWIND) $(RT_LLVMLINK) $(OSLIBS) $(LIBTRACYCLIENT) $(LIBITTAPI) -lzstd
206+
RT_LIBS := $(call whole_archive,$(LIBUV)) $(call whole_archive,$(LIBUTF8PROC)) $(LIBUNWIND) $(RT_LLVMLINK) $(OSLIBS) $(LIBTRACYCLIENT) $(LIBITTAPI) -lzstd
207207
# NB: CG needs uv_mutex_* symbols, but we expect to export them from libjulia-internal
208208
CG_LIBS := $(LIBUNWIND) $(CG_LLVMLINK) $(OSLIBS) $(LIBTRACYCLIENT) $(LIBITTAPI)
209209

@@ -212,9 +212,9 @@ RT_LIBS += $(MMTK_LIB)
212212
CG_LIBS += $(MMTK_LIB)
213213
endif
214214

215-
RT_DEBUG_LIBS := $(COMMON_LIBPATHS) $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp-debug.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport-debug.a -ljulia-debug $(RT_LIBS)
215+
RT_DEBUG_LIBS := $(COMMON_LIBPATHS) $(call whole_archive,$(BUILDDIR)/flisp/libflisp-debug.a) $(call whole_archive,$(BUILDDIR)/support/libsupport-debug.a) -ljulia-debug $(RT_LIBS)
216216
CG_DEBUG_LIBS := $(COMMON_LIBPATHS) $(CG_LIBS) -ljulia-debug -ljulia-internal-debug
217-
RT_RELEASE_LIBS := $(COMMON_LIBPATHS) $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport.a -ljulia $(RT_LIBS)
217+
RT_RELEASE_LIBS := $(COMMON_LIBPATHS) $(call whole_archive,$(BUILDDIR)/flisp/libflisp.a) $(call whole_archive,$(BUILDDIR)/support/libsupport.a) -ljulia $(RT_LIBS)
218218
CG_RELEASE_LIBS := $(COMMON_LIBPATHS) $(CG_LIBS) -ljulia -ljulia-internal
219219

220220
OBJS := $(SRCS:%=$(BUILDDIR)/%.o)
@@ -355,7 +355,7 @@ $(build_shlibdir)/libccalllazybar.$(SHLIB_EXT): $(SRCDIR)/ccalllazybar.c $(build
355355
@$(call PRINT_CC, $(CC) $(JCFLAGS) $(JCPPFLAGS) $(FLAGS_COMMON) -O3 $< $(fPIC) -shared -o $@ $(LDFLAGS) $(COMMON_LIBPATHS) $(call SONAME_FLAGS,libccalllazybar.$(SHLIB_EXT)) -lccalllazyfoo)
356356

357357
$(build_shlibdir)/libllvmcalltest.$(SHLIB_EXT): $(SRCDIR)/llvmcalltest.cpp $(LLVM_CONFIG_ABSOLUTE)
358-
@$(call PRINT_CC, $(CXX) $(JCXXFLAGS) $(LLVM_CXXFLAGS) $(FLAGS_COMMON) $(CPPFLAGS) $(CXXFLAGS) -O3 $< $(fPIC) -shared -o $@ $(LDFLAGS) $(COMMON_LIBPATHS) $(NO_WHOLE_ARCHIVE) $(CG_LLVMLINK)) -lpthread
358+
@$(call PRINT_CC, $(CXX) $(JCXXFLAGS) $(LLVM_CXXFLAGS) $(FLAGS_COMMON) $(CPPFLAGS) $(CXXFLAGS) -O3 $< $(fPIC) -shared -o $@ $(LDFLAGS) $(COMMON_LIBPATHS) $(CG_LLVMLINK)) -lpthread
359359

360360
.PHONY: julia_flisp.boot.inc.phony
361361
julia_flisp.boot.inc.phony: $(BUILDDIR)/julia_flisp.boot.inc

sysimage.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ VERSDIR := v$(shell cut -d. -f1-2 < $(JULIAHOME)/VERSION)
1818

1919
$(build_private_libdir)/%.$(SHLIB_EXT): $(build_private_libdir)/%-o.a
2020
@$(call PRINT_LINK, $(CXX) $(LDFLAGS) -shared $(fPIC) -L$(build_private_libdir) -L$(build_libdir) -L$(build_shlibdir) -o $@ \
21-
$(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) \
21+
$(call whole_archive,$<) \
2222
$(if $(findstring -debug,$(notdir $@)),-ljulia-internal-debug -ljulia-debug,-ljulia-internal -ljulia) \
2323
$$([ $(OS) = WINNT ] && echo '' $(LIBM) -lssp -Wl,--disable-auto-import -Wl,--disable-runtime-pseudo-reloc))
2424
@$(INSTALL_NAME_CMD)$(notdir $@) $@

test/trimming/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ $(BIN)/libsimple-o.a: $(SRCDIR)/libsimple.jl $(JULIAC_BUILDSCRIPT)
5252
$(JULIA) -t 1 -J $(JULIA_LIBDIR)/julia/sys.$(SHLIB_EXT) --startup-file=no --history-file=no --output-o $@ --output-incremental=no --strip-ir --strip-metadata --experimental --trim $(JULIAC_BUILDSCRIPT) $< --output-lib true $(BIN)/bindinginfo_libsimple.json
5353

5454
$(BIN)/hello$(EXE): $(BIN)/hello-o.a
55-
$(CC) -o $@ $(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
55+
$(CC) -o $@ $(call whole_archive,$<) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
5656

5757
$(BIN)/trimmability$(EXE): $(BIN)/trimmability-o.a
58-
$(CC) -o $@ $(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
58+
$(CC) -o $@ $(call whole_archive,$<) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
5959

6060
$(BIN)/basic_jll$(EXE): $(BIN)/basic_jll-o.a
61-
$(CC) -o $@ $(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
61+
$(CC) -o $@ $(call whole_archive,$<) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS) $(LDFLAGS_ADD) $(LDFLAGS)
6262

6363
$(BIN)/capplication$(EXE): $(SRCDIR)/capplication.c $(SRCDIR)/libsimple.h $(BIN)/libsimple-o.a
6464
$(CC) -I$(BIN) -I$(SRCDIR) -I$(JULIA_LIBDIR) -o $@ $< -Wl,--whole-archive $(BIN)/libsimple-o.a -Wl,--no-whole-archive $(LDFLAGS_ADD) $(LDFLAGS) $(CPPFLAGS_ADD) $(CPPFLAGS) $(CFLAGS_ADD) $(CFLAGS)

0 commit comments

Comments
 (0)