Skip to content

Commit 05d1525

Browse files
committed
build: Create .la library for crc32c
Libtool will yell at you if you try to link a shared library against static ones. This change creates a libtool archive library for crc32c and allows a shared library to be linked against it portably. Also specify -static in both: - ..._la_CXXFLAGS so that libtool will avoid building two versions of each object (one PIC, one non-PIC). We just need the one that is suitable for static linking. - ..._la_LDFLAGS so that libtool will create a static library. [META] This change is done in preparation for a future commit where we link the libbitcoinkernel library against this one.
1 parent 64caf94 commit 05d1525

File tree

1 file changed

+36
-28
lines changed

1 file changed

+36
-28
lines changed

src/Makefile.crc32c.include

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
# Distributed under the MIT software license, see the accompanying
33
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

5-
LIBCRC32C_INT = crc32c/libcrc32c.a
5+
LIBCRC32C_INT = crc32c/libcrc32c.la
66

7-
EXTRA_LIBRARIES += $(LIBCRC32C_INT)
7+
noinst_LTLIBRARIES += $(LIBCRC32C_INT)
88

99
LIBCRC32C = $(LIBCRC32C_INT)
1010

@@ -33,41 +33,49 @@ else
3333
CRC32C_CPPFLAGS_INT += -DBYTE_ORDER_BIG_ENDIAN=0
3434
endif
3535

36-
crc32c_libcrc32c_a_CPPFLAGS = $(AM_CPPFLAGS) $(CRC32C_CPPFLAGS_INT) $(CRC32C_CPPFLAGS)
37-
crc32c_libcrc32c_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
38-
39-
crc32c_libcrc32c_a_SOURCES =
40-
crc32c_libcrc32c_a_SOURCES += crc32c/include/crc32c/crc32c.h
41-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_arm64.h
42-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_arm64_check.h
43-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_internal.h
44-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_prefetch.h
45-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_read_le.h
46-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_round_up.h
47-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_sse42_check.h
48-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_sse42.h
49-
50-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c.cc
51-
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_portable.cc
36+
crc32c_libcrc32c_la_CPPFLAGS = $(AM_CPPFLAGS) $(CRC32C_CPPFLAGS_INT) $(CRC32C_CPPFLAGS)
37+
38+
# Specify -static in both CXXFLAGS and LDFLAGS so libtool will only build a
39+
# static version of this library. We don't need a dynamic version, and a dynamic
40+
# version can't be used on windows anyway because the library doesn't currently
41+
# export DLL symbols.
42+
crc32c_libcrc32c_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
43+
crc32c_libcrc32c_la_LDFLAGS = $(AM_LDFLAGS) -static
44+
45+
crc32c_libcrc32c_la_SOURCES =
46+
crc32c_libcrc32c_la_SOURCES += crc32c/include/crc32c/crc32c.h
47+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_arm64.h
48+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_arm64_check.h
49+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_internal.h
50+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_prefetch.h
51+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_read_le.h
52+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_round_up.h
53+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_sse42_check.h
54+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_sse42.h
55+
56+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c.cc
57+
crc32c_libcrc32c_la_SOURCES += crc32c/src/crc32c_portable.cc
5258

5359
if ENABLE_SSE42
54-
LIBCRC32C_SSE42_INT = crc32c/libcrc32c_sse42.a
55-
EXTRA_LIBRARIES += $(LIBCRC32C_SSE42_INT)
60+
LIBCRC32C_SSE42_INT = crc32c/libcrc32c_sse42.la
61+
noinst_LTLIBRARIES += $(LIBCRC32C_SSE42_INT)
5662
LIBCRC32C += $(LIBCRC32C_SSE42_INT)
5763

58-
crc32c_libcrc32c_sse42_a_CPPFLAGS = $(crc32c_libcrc32c_a_CPPFLAGS)
59-
crc32c_libcrc32c_sse42_a_CXXFLAGS = $(crc32c_libcrc32c_a_CXXFLAGS) $(SSE42_CXXFLAGS)
64+
crc32c_libcrc32c_sse42_la_CPPFLAGS = $(crc32c_libcrc32c_la_CPPFLAGS)
65+
crc32c_libcrc32c_sse42_la_CXXFLAGS = $(crc32c_libcrc32c_la_CXXFLAGS) $(SSE42_CXXFLAGS)
66+
crc32c_libcrc32c_sse42_la_LDFLAGS = $(crc32c_libcrc32c_la_LDFLAGS)
6067

61-
crc32c_libcrc32c_sse42_a_SOURCES = crc32c/src/crc32c_sse42.cc
68+
crc32c_libcrc32c_sse42_la_SOURCES = crc32c/src/crc32c_sse42.cc
6269
endif
6370

6471
if ENABLE_ARM_CRC
65-
LIBCRC32C_ARM_CRC_INT = crc32c/libcrc32c_arm_crc.a
66-
EXTRA_LIBRARIES += $(LIBCRC32C_ARM_CRC_INT)
72+
LIBCRC32C_ARM_CRC_INT = crc32c/libcrc32c_arm_crc.la
73+
noinst_LTLIBRARIES += $(LIBCRC32C_ARM_CRC_INT)
6774
LIBCRC32C += $(LIBCRC32C_ARM_CRC_INT)
6875

69-
crc32c_libcrc32c_arm_crc_a_CPPFLAGS = $(crc32c_libcrc32c_a_CPPFLAGS)
70-
crc32c_libcrc32c_arm_crc_a_CXXFLAGS = $(crc32c_libcrc32c_a_CXXFLAGS) $(ARM_CRC_CXXFLAGS)
76+
crc32c_libcrc32c_arm_crc_la_CPPFLAGS = $(crc32c_libcrc32c_la_CPPFLAGS)
77+
crc32c_libcrc32c_arm_crc_la_CXXFLAGS = $(crc32c_libcrc32c_la_CXXFLAGS) $(ARM_CRC_CXXFLAGS)
78+
crc32c_libcrc32c_arm_crc_la_LDFLAGS = $(crc32c_libcrc32c_la_LDFLAGS)
7179

72-
crc32c_libcrc32c_arm_crc_a_SOURCES = crc32c/src/crc32c_arm64.cc
80+
crc32c_libcrc32c_arm_crc_la_SOURCES = crc32c/src/crc32c_arm64.cc
7381
endif

0 commit comments

Comments
 (0)