Skip to content

Commit 833ca02

Browse files
committed
ocamlopt: do not link -lzstd nor zstd.n.o by default, only for compilerlibs
To this end, we produce a new library libcomprmarsh.a, containing runtime/zstd.n.o, and attach both -lcomprmarsh and -lzstd to ocamlcommon.cmxa. (cherry picked and much improved from commit 9398511)
1 parent 8ccc5ce commit 833ca02

6 files changed

Lines changed: 34 additions & 12 deletions

File tree

Makefile

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,16 @@ utils/config_%.mli: utils/config.mli
412412
beforedepend:: utils/config_main.mli utils/config_boot.mli
413413

414414
$(addprefix compilerlibs/ocamlcommon., cma cmxa): \
415-
OC_OCAML_COMMON_LDFLAGS = += -linkall
415+
OC_COMMON_LINKFLAGS += -linkall
416+
417+
COMPRESSED_MARSHALING_FLAGS=-cclib -lcomprmarsh \
418+
$(patsubst %, -ccopt %, $(filter-out -l%,$(ZSTD_LIBS))) \
419+
$(patsubst %, -cclib %, $(filter -l%,$(ZSTD_LIBS))) \
420+
421+
compilerlibs/ocamlcommon.cmxa: \
422+
OC_NATIVE_LINKFLAGS += $(COMPRESSED_MARSHALING_FLAGS)
423+
424+
compilerlibs/ocamlcommon.cmxa: stdlib/libcomprmarsh.$(A)
416425

417426
partialclean::
418427
rm -f compilerlibs/ocamlcommon.cma
@@ -930,8 +939,6 @@ ocamlc_SOURCES = driver/main.mli driver/main.ml
930939

931940
ocamlc$(EXE): OC_BYTECODE_LINKFLAGS += -compat-32 -g
932941

933-
ocamlc.opt$(EXE): OC_NATIVE_LINKFLAGS += $(addprefix -cclib ,$(BYTECCLIBS))
934-
935942
partialclean::
936943
rm -f ocamlc ocamlc.exe ocamlc.opt ocamlc.opt.exe
937944

@@ -1135,15 +1142,15 @@ runtime_COMMON_C_SOURCES = \
11351142
sys \
11361143
$(TSAN_NATIVE_RUNTIME_C_SOURCES) \
11371144
$(UNIX_OR_WIN32) \
1138-
weak \
1139-
zstd
1145+
weak
11401146

11411147
runtime_BYTECODE_ONLY_C_SOURCES = \
11421148
backtrace_byt \
11431149
fail_byt \
11441150
fix_code \
11451151
interp \
1146-
startup_byt
1152+
startup_byt \
1153+
zstd
11471154
runtime_BYTECODE_C_SOURCES = \
11481155
$(runtime_COMMON_C_SOURCES:%=runtime/%.c) \
11491156
$(runtime_BYTECODE_ONLY_C_SOURCES:%=runtime/%.c)
@@ -1174,7 +1181,8 @@ runtime_PROGRAMS = runtime/ocamlrun$(EXE)
11741181
runtime_BYTECODE_STATIC_LIBRARIES = $(addprefix runtime/, \
11751182
ld.conf libcamlrun.$(A))
11761183
runtime_BYTECODE_SHARED_LIBRARIES =
1177-
runtime_NATIVE_STATIC_LIBRARIES = runtime/libasmrun.$(A)
1184+
runtime_NATIVE_STATIC_LIBRARIES = \
1185+
runtime/libasmrun.$(A) runtime/libcomprmarsh.$(A)
11781186
runtime_NATIVE_SHARED_LIBRARIES =
11791187

11801188
ifeq "$(RUNTIMED)" "true"
@@ -1225,6 +1233,8 @@ libasmruni_OBJECTS = \
12251233
libasmrunpic_OBJECTS = $(runtime_NATIVE_C_SOURCES:.c=.npic.$(O)) \
12261234
$(runtime_ASM_OBJECTS:.$(O)=_libasmrunpic.$(O))
12271235

1236+
libcomprmarsh_OBJECTS = runtime/zstd.n.o
1237+
12281238
## General (non target-specific) assembler and compiler flags
12291239

12301240
runtime_CPPFLAGS = -DCAMLDLLIMPORT= -DIN_CAML_RUNTIME
@@ -1350,6 +1360,9 @@ runtime/libasmrun_pic.$(A): $(libasmrunpic_OBJECTS)
13501360
runtime/libasmrun_shared.$(SO): $(libasmrunpic_OBJECTS)
13511361
$(V_MKDLL)$(MKDLL) -o $@ $^ $(NATIVECCLIBS)
13521362

1363+
runtime/libcomprmarsh.$(A): $(libcomprmarsh_OBJECTS)
1364+
$(V_MKLIB)$(call MKLIB,$@, $^)
1365+
13531366
## Runtime target-specific preprocessor and compiler flags
13541367

13551368
runtime/%.$(O): OC_CPPFLAGS += $(runtime_CPPFLAGS)
@@ -1506,9 +1519,12 @@ runtimeopt: stdlib/libasmrun.$(A)
15061519
makeruntimeopt: runtime-allopt
15071520
stdlib/libasmrun.$(A): runtime-allopt
15081521
cd stdlib; $(LN) ../runtime/libasmrun.$(A) .
1522+
stdlib/libcomprmarsh.$(A): runtime/libcomprmarsh.$(A)
1523+
cd stdlib; $(LN) ../runtime/libcomprmarsh.$(A)
15091524

15101525
clean::
15111526
rm -f stdlib/libasmrun.a stdlib/libasmrun.lib
1527+
rm -f stdlib/libcomprmarsh.a stdlib/libcomprmarsh.lib
15121528

15131529
# Dependencies
15141530

Makefile.config.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ CPPFLAGS=@CPPFLAGS@
173173
OCAMLC_CFLAGS=@ocamlc_cflags@
174174

175175
OCAMLC_CPPFLAGS=@ocamlc_cppflags@
176-
BYTECCLIBS=@cclibs@
176+
ZSTD_LIBS=@zstd_libs@
177+
BYTECCLIBS=@zstd_libs@ @cclibs@
177178
EXE=@exeext@
178179
OUTPUTEXE=@outputexe@$(EMPTY)
179180
SUPPORTS_SHARED_LIBRARIES=@supports_shared_libraries@

configure

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

configure.ac

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ AC_SUBST([oc_dll_ldflags])
164164
AC_SUBST([oc_exe_ldflags])
165165
AC_SUBST([cclibs])
166166
AC_SUBST([native_ldflags])
167+
AC_SUBST([zstd_libs])
167168
AC_SUBST([ocamlc_cflags])
168169
AC_SUBST([ocamlc_cppflags])
169170
AC_SUBST([flexdll_source_dir])
@@ -2132,6 +2133,8 @@ AC_PATH_TOOL([PKG_CONFIG], [pkg-config], [false])
21322133
## ZSTD compression library
21332134

21342135
zstd_status=""
2136+
zstd_libs=""
2137+
21352138
AS_IF([test x"$with_zstd" != "xno"],
21362139
# Try pkg-config first, as it gives the most reliable results
21372140
AS_IF([${PKG_CONFIG} libzstd 2>/dev/null],
@@ -2154,7 +2157,6 @@ AS_IF([test x"$with_zstd" != "xno"],
21542157

21552158
AS_IF([test x"$zstd_status" = "xok"],
21562159
[AC_MSG_NOTICE([compressed compilation artefacts supported])
2157-
cclibs="$cclibs $zstd_libs"
21582160
internal_cppflags="$internal_cppflags $zstd_flags"
21592161
AC_DEFINE([HAS_ZSTD])],
21602162
[AS_CASE(["$with_zstd"],

ocamltest/ocamltest_config.ml.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ let exe = {@QS@|@exeext@|@QS@}
8080
let mkdll = {@QS@|@mkdll_exp@|@QS@}
8181
let mkexe = {@QS@|@mkexe_exp@|@QS@}
8282

83-
let bytecc_libs = {@QS@|@cclibs@|@QS@}
83+
let bytecc_libs = {@QS@|@zstd_libs@ @cclibs@|@QS@}
8484

8585
let nativecc_libs = {@QS@|@cclibs@|@QS@}
8686

utils/config.generated.ml.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ let ocamlc_cppflags = {@QS@|@ocamlc_cppflags@|@QS@}
3333
the two drivers should be identical. *)
3434
let ocamlopt_cflags = {@QS@|@ocamlc_cflags@|@QS@}
3535
let ocamlopt_cppflags = {@QS@|@ocamlc_cppflags@|@QS@}
36-
let bytecomp_c_libraries = {@QS@|@cclibs@|@QS@}
36+
let bytecomp_c_libraries = {@QS@|@zstd_libs@ @cclibs@|@QS@}
3737
(* bytecomp_c_compiler and native_c_compiler have been supported for a
3838
long time and are retained for backwards compatibility.
3939
For programs that don't need compatibility with older OCaml releases

0 commit comments

Comments
 (0)