1
1
add_library (secp256k1 )
2
2
3
+ # Allow projects in the same source tree to use this as if it had been imported.
4
+ # The prefix has to match the NAMESPACE in `install(EXPORT)` further down.
5
+ add_library (${PROJECT_NAME} ::secp256k1 ALIAS secp256k1 )
6
+
3
7
set_property (TARGET secp256k1 PROPERTY PUBLIC_HEADER
4
8
${PROJECT_SOURCE_DIR} /include/secp256k1.h
5
9
${PROJECT_SOURCE_DIR} /include/secp256k1_preallocated.h
@@ -54,40 +58,24 @@ add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
54
58
# from being exported.
55
59
target_sources (secp256k1 PRIVATE secp256k1.c $< TARGET_OBJECTS:secp256k1_precomputed> )
56
60
57
- # Create a helper lib that parent projects can use to link secp256k1 into a
58
- # static lib.
59
- add_library (secp256k1_objs INTERFACE )
60
- target_sources (secp256k1_objs INTERFACE $< TARGET_OBJECTS:secp256k1> $< TARGET_OBJECTS:secp256k1_precomputed> )
61
-
62
- add_library (secp256k1_asm INTERFACE )
63
61
if (SECP256K1_ASM STREQUAL "arm32" )
64
- add_library (secp256k1_asm_arm OBJECT EXCLUDE_FROM_ALL )
65
- target_sources (secp256k1_asm_arm PUBLIC
66
- asm/field_10x26_arm.s
67
- )
68
- target_sources (secp256k1 PRIVATE $< TARGET_OBJECTS:secp256k1_asm_arm> )
69
- target_sources (secp256k1_objs INTERFACE $< TARGET_OBJECTS:secp256k1_asm_arm> )
70
- target_link_libraries (secp256k1_asm INTERFACE secp256k1_asm_arm )
62
+ add_library (secp256k1_asm OBJECT EXCLUDE_FROM_ALL asm/field_10x26_arm.s )
63
+ else ()
64
+ add_library (secp256k1_asm INTERFACE )
71
65
endif ()
72
66
73
- if (WIN32 )
74
- # Define our export symbol only for shared libs.
75
- set_target_properties (secp256k1 PROPERTIES DEFINE_SYMBOL SECP256K1_DLL_EXPORT )
76
- target_compile_definitions (secp256k1 INTERFACE $< $< NOT:$< BOOL:${BUILD_SHARED_LIBS} > > :SECP256K1_STATIC> )
77
- endif ()
67
+ # When building a static libary, SECP256K1_STATIC must be defined both for itself and downstream.
68
+ # Note that the generator expression is evaluated in the context of the consuming target!
69
+ target_compile_definitions (secp256k1 PUBLIC $< $< STREQUAL:$< TARGET_PROPERTY:secp256k1,TYPE> ,STATIC_LIBRARY> :SECP256K1_STATIC> )
70
+ set_target_properties (secp256k1 PROPERTIES C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON )
78
71
79
72
# Object libs don't know if they're being built for a shared or static lib.
80
73
# Grab the PIC property from secp256k1 which knows.
81
74
get_target_property (use_pic secp256k1 POSITION_INDEPENDENT_CODE )
82
75
set_target_properties (secp256k1_precomputed PROPERTIES POSITION_INDEPENDENT_CODE ${use_pic} )
83
76
84
- # Add the include path for parent projects so that they don't have to manually add it.
85
- target_include_directories (secp256k1 INTERFACE
86
- $< BUILD_INTERFACE:$< $< NOT:$< BOOL:${PROJECT_IS_TOP_LEVEL} > > :${PROJECT_SOURCE_DIR} /include> >
87
- )
88
- set_target_properties (secp256k1_objs PROPERTIES
89
- INTERFACE_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:secp256k1,INTERFACE_INCLUDE_DIRECTORIES>"
90
- )
77
+ # Add the include path for projects in the same source tree.
78
+ target_include_directories (secp256k1 INTERFACE $< BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include> )
91
79
92
80
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
93
81
# see below "Calculate the version variables" in build-aux/ltmain.sh.
@@ -123,18 +111,21 @@ if(SECP256K1_BUILD_BENCHMARK)
123
111
add_executable (bench bench.c )
124
112
target_link_libraries (bench secp256k1 )
125
113
add_executable (bench_internal bench_internal.c )
114
+ target_compile_definitions (bench_internal PRIVATE $< TARGET_PROPERTY:secp256k1,INTERFACE_COMPILE_DEFINITIONS> )
126
115
target_link_libraries (bench_internal secp256k1_precomputed secp256k1_asm )
127
116
add_executable (bench_ecmult bench_ecmult.c )
117
+ target_compile_definitions (bench_ecmult PRIVATE $< TARGET_PROPERTY:secp256k1,INTERFACE_COMPILE_DEFINITIONS> )
128
118
target_link_libraries (bench_ecmult secp256k1_precomputed secp256k1_asm )
129
119
endif ()
130
120
131
121
if (SECP256K1_BUILD_TESTS )
132
122
add_executable (noverify_tests tests.c )
123
+ target_compile_definitions (noverify_tests PRIVATE $< TARGET_PROPERTY:secp256k1,INTERFACE_COMPILE_DEFINITIONS> )
133
124
target_link_libraries (noverify_tests secp256k1_precomputed secp256k1_asm )
134
125
add_test (NAME secp256k1_noverify_tests COMMAND noverify_tests )
135
126
if (NOT CMAKE_BUILD_TYPE STREQUAL "Coverage" )
136
127
add_executable (tests tests.c )
137
- target_compile_definitions (tests PRIVATE VERIFY )
128
+ target_compile_definitions (tests PRIVATE VERIFY $< TARGET_PROPERTY:secp256k1,INTERFACE_COMPILE_DEFINITIONS > )
138
129
target_link_libraries (tests secp256k1_precomputed secp256k1_asm )
139
130
add_test (NAME secp256k1_tests COMMAND tests )
140
131
endif ()
@@ -144,7 +135,10 @@ if(SECP256K1_BUILD_EXHAUSTIVE_TESTS)
144
135
# Note: do not include secp256k1_precomputed in exhaustive_tests (it uses runtime-generated tables).
145
136
add_executable (exhaustive_tests tests_exhaustive.c )
146
137
target_link_libraries (exhaustive_tests secp256k1_asm )
147
- target_compile_definitions (exhaustive_tests PRIVATE $< $< NOT:$< CONFIG:Coverage> > :VERIFY> )
138
+ target_compile_definitions (exhaustive_tests PRIVATE
139
+ $< $< NOT:$< CONFIG:Coverage> > :VERIFY>
140
+ $< TARGET_PROPERTY:secp256k1,INTERFACE_COMPILE_DEFINITIONS>
141
+ )
148
142
add_test (NAME secp256k1_exhaustive_tests COMMAND exhaustive_tests )
149
143
endif ()
150
144
0 commit comments