Skip to content

Commit 5c81d48

Browse files
ImmanuelHaffnerkripken
authored andcommitted
Collect all object files from the object libraries in a CMake variable (#2477)
using the `$<TARGET_OBJECTS:objlib>` syntax. Use this variable when adding `libbinaryen` as static or shared library. Additionally, use the variable with the object files to simplify the `TARGET_LINK_LIBRARIES` commands: add the object libraries to the sources of executables and drop the use of our libraries in `TARGET_LINK_LIBRARIES`. (Object libraries cannot be linked but must be used as sources. See https://cmake.org/pipermail/cmake/2018-June/067721.html)
1 parent ec53d11 commit 5c81d48

8 files changed

Lines changed: 41 additions & 41 deletions

File tree

CMakeLists.txt

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -184,19 +184,30 @@ ADD_SUBDIRECTORY(src/passes)
184184
ADD_SUBDIRECTORY(src/support)
185185
ADD_SUBDIRECTORY(src/wasm)
186186

187+
# Object files
188+
SET(binaryen_objs
189+
$<TARGET_OBJECTS:passes>
190+
$<TARGET_OBJECTS:wasm>
191+
$<TARGET_OBJECTS:asmjs>
192+
$<TARGET_OBJECTS:emscripten-optimizer>
193+
$<TARGET_OBJECTS:ir>
194+
$<TARGET_OBJECTS:cfg>
195+
$<TARGET_OBJECTS:support>)
196+
187197
# Sources.
188198

189199

190200
SET(binaryen_SOURCES
191201
src/binaryen-c.cpp
192202
)
193203
IF(BUILD_STATIC_LIB)
194-
ADD_LIBRARY(binaryen STATIC ${binaryen_SOURCES})
204+
MESSAGE(STATUS "Building libbinaryen as statically linked library.")
205+
ADD_LIBRARY(binaryen STATIC ${binaryen_SOURCES} ${binaryen_objs})
195206
ADD_DEFINITIONS(-DBUILD_STATIC_LIBRARY)
196207
ELSE()
197-
ADD_LIBRARY(binaryen SHARED ${binaryen_SOURCES})
208+
MESSAGE(STATUS "Building libbinaryen as shared library.")
209+
ADD_LIBRARY(binaryen SHARED ${binaryen_SOURCES} ${binaryen_objs})
198210
ENDIF()
199-
TARGET_LINK_LIBRARIES(binaryen passes wasm asmjs emscripten-optimizer ir cfg support)
200211
INSTALL(TARGETS binaryen DESTINATION ${CMAKE_INSTALL_LIBDIR})
201212

202213
INSTALL(FILES src/binaryen-c.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
@@ -210,99 +221,89 @@ ENDIF()
210221
SET(wasm-shell_SOURCES
211222
src/tools/wasm-shell.cpp
212223
)
213-
ADD_EXECUTABLE(wasm-shell
214-
${wasm-shell_SOURCES})
215-
TARGET_LINK_LIBRARIES(wasm-shell wasm asmjs emscripten-optimizer passes ir cfg support wasm)
224+
ADD_EXECUTABLE(wasm-shell ${wasm-shell_SOURCES} ${binaryen_objs})
225+
TARGET_LINK_LIBRARIES(wasm-shell ${CMAKE_THREAD_LIBS_INIT})
216226
SET_PROPERTY(TARGET wasm-shell PROPERTY CXX_STANDARD 14)
217227
SET_PROPERTY(TARGET wasm-shell PROPERTY CXX_STANDARD_REQUIRED ON)
218228
INSTALL(TARGETS wasm-shell DESTINATION ${CMAKE_INSTALL_BINDIR})
219229

220230
SET(wasm-opt_SOURCES
221231
src/tools/wasm-opt.cpp
222232
)
223-
ADD_EXECUTABLE(wasm-opt
224-
${wasm-opt_SOURCES})
225-
TARGET_LINK_LIBRARIES(wasm-opt wasm asmjs emscripten-optimizer passes ir cfg support wasm)
233+
ADD_EXECUTABLE(wasm-opt ${wasm-opt_SOURCES} ${binaryen_objs})
234+
TARGET_LINK_LIBRARIES(wasm-opt ${CMAKE_THREAD_LIBS_INIT})
226235
SET_PROPERTY(TARGET wasm-opt PROPERTY CXX_STANDARD 14)
227236
SET_PROPERTY(TARGET wasm-opt PROPERTY CXX_STANDARD_REQUIRED ON)
228237
INSTALL(TARGETS wasm-opt DESTINATION ${CMAKE_INSTALL_BINDIR})
229238

230239
SET(wasm-metadce_SOURCES
231240
src/tools/wasm-metadce.cpp
232241
)
233-
ADD_EXECUTABLE(wasm-metadce
234-
${wasm-metadce_SOURCES})
235-
TARGET_LINK_LIBRARIES(wasm-metadce wasm asmjs emscripten-optimizer passes ir cfg support wasm)
242+
ADD_EXECUTABLE(wasm-metadce ${wasm-metadce_SOURCES} ${binaryen_objs})
243+
TARGET_LINK_LIBRARIES(wasm-metadce ${CMAKE_THREAD_LIBS_INIT})
236244
SET_PROPERTY(TARGET wasm-metadce PROPERTY CXX_STANDARD 14)
237245
SET_PROPERTY(TARGET wasm-metadce PROPERTY CXX_STANDARD_REQUIRED ON)
238246
INSTALL(TARGETS wasm-metadce DESTINATION bin)
239247

240248
SET(asm2wasm_SOURCES
241249
src/tools/asm2wasm.cpp
242250
)
243-
ADD_EXECUTABLE(asm2wasm
244-
${asm2wasm_SOURCES})
245-
TARGET_LINK_LIBRARIES(asm2wasm emscripten-optimizer passes wasm asmjs ir cfg support)
251+
ADD_EXECUTABLE(asm2wasm ${asm2wasm_SOURCES} ${binaryen_objs})
252+
TARGET_LINK_LIBRARIES(asm2wasm ${CMAKE_THREAD_LIBS_INIT})
246253
SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD 14)
247254
SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD_REQUIRED ON)
248255
INSTALL(TARGETS asm2wasm DESTINATION ${CMAKE_INSTALL_BINDIR})
249256

250257
SET(wasm2js_SOURCES
251258
src/tools/wasm2js.cpp
252259
)
253-
ADD_EXECUTABLE(wasm2js
254-
${wasm2js_SOURCES})
255-
TARGET_LINK_LIBRARIES(wasm2js passes wasm asmjs emscripten-optimizer ir cfg support)
260+
ADD_EXECUTABLE(wasm2js ${wasm2js_SOURCES} ${binaryen_objs})
261+
TARGET_LINK_LIBRARIES(wasm2js ${CMAKE_THREAD_LIBS_INIT})
256262
SET_PROPERTY(TARGET wasm2js PROPERTY CXX_STANDARD 14)
257263
SET_PROPERTY(TARGET wasm2js PROPERTY CXX_STANDARD_REQUIRED ON)
258264
INSTALL(TARGETS wasm2js DESTINATION ${CMAKE_INSTALL_BINDIR})
259265

260266
SET(wasm-emscripten-finalize_SOURCES
261267
src/tools/wasm-emscripten-finalize.cpp
262268
)
263-
ADD_EXECUTABLE(wasm-emscripten-finalize
264-
${wasm-emscripten-finalize_SOURCES})
265-
TARGET_LINK_LIBRARIES(wasm-emscripten-finalize passes wasm asmjs ir cfg support)
269+
ADD_EXECUTABLE(wasm-emscripten-finalize ${wasm-emscripten-finalize_SOURCES} ${binaryen_objs})
270+
TARGET_LINK_LIBRARIES(wasm-emscripten-finalize ${CMAKE_THREAD_LIBS_INIT})
266271
SET_PROPERTY(TARGET wasm-emscripten-finalize PROPERTY CXX_STANDARD 14)
267272
SET_PROPERTY(TARGET wasm-emscripten-finalize PROPERTY CXX_STANDARD_REQUIRED ON)
268273
INSTALL(TARGETS wasm-emscripten-finalize DESTINATION ${CMAKE_INSTALL_BINDIR})
269274

270275
SET(wasm_as_SOURCES
271276
src/tools/wasm-as.cpp
272277
)
273-
ADD_EXECUTABLE(wasm-as
274-
${wasm_as_SOURCES})
275-
TARGET_LINK_LIBRARIES(wasm-as wasm asmjs passes ir cfg support wasm)
278+
ADD_EXECUTABLE(wasm-as ${wasm_as_SOURCES} ${binaryen_objs})
279+
TARGET_LINK_LIBRARIES(wasm-as ${CMAKE_THREAD_LIBS_INIT})
276280
SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD 14)
277281
SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD_REQUIRED ON)
278282
INSTALL(TARGETS wasm-as DESTINATION ${CMAKE_INSTALL_BINDIR})
279283

280284
SET(wasm_dis_SOURCES
281285
src/tools/wasm-dis.cpp
282286
)
283-
ADD_EXECUTABLE(wasm-dis
284-
${wasm_dis_SOURCES})
285-
TARGET_LINK_LIBRARIES(wasm-dis wasm asmjs emscripten-optimizer passes ir cfg support wasm)
287+
ADD_EXECUTABLE(wasm-dis ${wasm_dis_SOURCES} ${binaryen_objs})
288+
TARGET_LINK_LIBRARIES(wasm-dis ${CMAKE_THREAD_LIBS_INIT})
286289
SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD 14)
287290
SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD_REQUIRED ON)
288291
INSTALL(TARGETS wasm-dis DESTINATION ${CMAKE_INSTALL_BINDIR})
289292

290293
SET(wasm-ctor-eval_SOURCES
291294
src/tools/wasm-ctor-eval.cpp
292295
)
293-
ADD_EXECUTABLE(wasm-ctor-eval
294-
${wasm-ctor-eval_SOURCES})
295-
TARGET_LINK_LIBRARIES(wasm-ctor-eval emscripten-optimizer passes wasm asmjs ir cfg support)
296+
ADD_EXECUTABLE(wasm-ctor-eval ${wasm-ctor-eval_SOURCES} ${binaryen_objs})
297+
TARGET_LINK_LIBRARIES(wasm-ctor-eval ${CMAKE_THREAD_LIBS_INIT})
296298
SET_PROPERTY(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD 14)
297299
SET_PROPERTY(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD_REQUIRED ON)
298300
INSTALL(TARGETS wasm-ctor-eval DESTINATION bin)
299301

300302
SET(wasm-reduce_SOURCES
301303
src/tools/wasm-reduce.cpp
302304
)
303-
ADD_EXECUTABLE(wasm-reduce
304-
${wasm-reduce_SOURCES})
305-
TARGET_LINK_LIBRARIES(wasm-reduce wasm asmjs passes wasm ir cfg support)
305+
ADD_EXECUTABLE(wasm-reduce ${wasm-reduce_SOURCES} ${binaryen_objs})
306+
TARGET_LINK_LIBRARIES(wasm-reduce ${CMAKE_THREAD_LIBS_INIT})
306307
SET_PROPERTY(TARGET wasm-reduce PROPERTY CXX_STANDARD 14)
307308
SET_PROPERTY(TARGET wasm-reduce PROPERTY CXX_STANDARD_REQUIRED ON)
308309
INSTALL(TARGETS wasm-reduce DESTINATION ${CMAKE_INSTALL_BINDIR})

src/asmjs/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ SET(asmjs_SOURCES
33
asmangle.cpp
44
shared-constants.cpp
55
)
6-
ADD_LIBRARY(asmjs STATIC ${asmjs_SOURCES})
6+
ADD_LIBRARY(asmjs OBJECT ${asmjs_SOURCES})

src/cfg/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
SET(cfg_SOURCES
22
Relooper.cpp
33
)
4-
ADD_LIBRARY(cfg STATIC ${cfg_SOURCES})
4+
ADD_LIBRARY(cfg OBJECT ${cfg_SOURCES})

src/emscripten-optimizer/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ SET(emscripten-optimizer_SOURCES
33
parser.cpp
44
simple_ast.cpp
55
)
6-
ADD_LIBRARY(emscripten-optimizer STATIC ${emscripten-optimizer_SOURCES})
6+
ADD_LIBRARY(emscripten-optimizer OBJECT ${emscripten-optimizer_SOURCES})

src/ir/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ SET(ir_SOURCES
44
LocalGraph.cpp
55
ReFinalize.cpp
66
)
7-
ADD_LIBRARY(ir STATIC ${ir_SOURCES})
7+
ADD_LIBRARY(ir OBJECT ${ir_SOURCES})

src/passes/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,4 @@ SET(passes_SOURCES
7272
Vacuum.cpp
7373
${CMAKE_CURRENT_BINARY_DIR}/WasmIntrinsics.cpp
7474
)
75-
ADD_LIBRARY(passes STATIC ${passes_SOURCES})
75+
ADD_LIBRARY(passes OBJECT ${passes_SOURCES})

src/support/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@ SET(support_SOURCES
88
safe_integer.cpp
99
threads.cpp
1010
)
11-
ADD_LIBRARY(support STATIC ${support_SOURCES})
12-
TARGET_LINK_LIBRARIES(support ${CMAKE_THREAD_LIBS_INIT})
11+
ADD_LIBRARY(support OBJECT ${support_SOURCES})

src/wasm/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ SET(wasm_SOURCES
1010
wasm-type.cpp
1111
wasm-validator.cpp
1212
)
13-
ADD_LIBRARY(wasm STATIC ${wasm_SOURCES})
13+
ADD_LIBRARY(wasm OBJECT ${wasm_SOURCES})

0 commit comments

Comments
 (0)