Skip to content

Commit 7074d87

Browse files
authored
Simplify cmake by having a single binaryen library target (WebAssembly#7238)
Instead of declaring a separate static library target for each subdirectory, declare a single binaryen library target up front and then add sources to it from each subdirectory. Requires updating the minimum cmake version to avoid policy errors.
1 parent 81035b0 commit 7074d87

File tree

12 files changed

+32
-53
lines changed

12 files changed

+32
-53
lines changed

CMakeLists.txt

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Version set according the the cmake versions available in Ubuntu/Bionic:
2-
# https://packages.ubuntu.com/bionic/cmake
3-
cmake_minimum_required(VERSION 3.10.2)
2+
# https://packages.ubuntu.com/focal/cmake
3+
cmake_minimum_required(VERSION 3.16.3)
44

55
# Needed for C++17 (std::variant)
66
# TODO(https://github.com/WebAssembly/binaryen/issues/4299): We need
@@ -172,12 +172,12 @@ if(NOT EMSCRIPTEN)
172172
endif()
173173
endif()
174174

175-
# Compiler setup.
175+
# Compiler setup. Use SYSTEM to avoid warnings and errors from third-party headers.
176176

177177
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
178-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/FP16/include)
178+
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FP16/include)
179179
if(BUILD_LLVM_DWARF)
180-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-project/include)
180+
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-project/include)
181181
endif()
182182

183183
# Add output directory to include path so config.h can be found
@@ -400,10 +400,15 @@ if(UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
400400
endif()
401401
endif()
402402

403-
# Static libraries
404-
# Current (partial) dependency structure is as follows:
405-
# tools -> passes -> wasm -> asmjs -> support
406-
# TODO: It's odd that wasm should depend on asmjs, maybe we should fix that.
403+
if(BUILD_STATIC_LIB)
404+
message(STATUS "Building libbinaryen as statically linked library.")
405+
add_library(binaryen STATIC)
406+
add_definitions(-DBUILD_STATIC_LIBRARY)
407+
else()
408+
message(STATUS "Building libbinaryen as shared library.")
409+
add_library(binaryen SHARED)
410+
endif()
411+
407412
add_subdirectory(src/ir)
408413
add_subdirectory(src/asmjs)
409414
add_subdirectory(src/cfg)
@@ -430,39 +435,16 @@ if(BUILD_TESTS)
430435
add_subdirectory(test/gtest)
431436
endif()
432437

433-
# Object files
434-
set(binaryen_objs
435-
$<TARGET_OBJECTS:passes>
436-
$<TARGET_OBJECTS:wasm>
437-
$<TARGET_OBJECTS:asmjs>
438-
$<TARGET_OBJECTS:emscripten-optimizer>
439-
$<TARGET_OBJECTS:ir>
440-
$<TARGET_OBJECTS:cfg>
441-
$<TARGET_OBJECTS:support>
442-
$<TARGET_OBJECTS:analysis>
443-
$<TARGET_OBJECTS:parser>
444-
$<TARGET_OBJECTS:interpreter>)
445-
446-
if(BUILD_LLVM_DWARF)
447-
SET(binaryen_objs ${binaryen_objs} $<TARGET_OBJECTS:llvm_dwarf>)
448-
endif()
449-
450438
# Sources.
451439

452440
file(GLOB binaryen_HEADERS src/*.h)
453441
set(binaryen_SOURCES
454442
src/binaryen-c.cpp
455443
${binaryen_HEADERS}
456444
)
457-
if(BUILD_STATIC_LIB)
458-
message(STATUS "Building libbinaryen as statically linked library.")
459-
add_library(binaryen STATIC ${binaryen_SOURCES} ${binaryen_objs})
460-
add_definitions(-DBUILD_STATIC_LIBRARY)
461-
else()
462-
message(STATUS "Building libbinaryen as shared library.")
463-
add_library(binaryen SHARED ${binaryen_SOURCES} ${binaryen_objs})
464-
endif()
445+
target_sources(binaryen PRIVATE ${binaryen_SOURCES})
465446
target_link_libraries(binaryen ${CMAKE_THREAD_LIBS_INIT})
447+
466448
if(INSTALL_LIBS OR NOT BUILD_STATIC_LIB)
467449
install(TARGETS binaryen
468450
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
@@ -483,7 +465,7 @@ if(EMSCRIPTEN)
483465
# binaryen.js WebAssembly variant
484466
add_executable(binaryen_wasm
485467
${binaryen_SOURCES})
486-
target_link_libraries(binaryen_wasm wasm asmjs emscripten-optimizer passes ir cfg support analysis parser interpreter wasm)
468+
target_link_libraries(binaryen_wasm binaryen)
487469
target_link_libraries(binaryen_wasm "-sFILESYSTEM")
488470
target_link_libraries(binaryen_wasm "-sEXPORT_NAME=Binaryen")
489471
target_link_libraries(binaryen_wasm "-sNODERAWFS=0")
@@ -513,7 +495,7 @@ if(EMSCRIPTEN)
513495
# binaryen.js JavaScript variant
514496
add_executable(binaryen_js
515497
${binaryen_SOURCES})
516-
target_link_libraries(binaryen_js wasm asmjs emscripten-optimizer passes ir cfg support analysis parser interpreter wasm)
498+
target_link_libraries(binaryen_js binaryen)
517499
target_link_libraries(binaryen_js "-sWASM=0")
518500
target_link_libraries(binaryen_js "-sWASM_ASYNC_COMPILATION=0")
519501
if(${CMAKE_CXX_COMPILER_VERSION} STREQUAL "6.0.1")

src/analysis/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ set(analysis_SOURCES
33
cfg.cpp
44
${analysis_HEADERS}
55
)
6-
add_library(analysis OBJECT ${analysis_SOURCES})
6+
target_sources(binaryen PRIVATE ${analysis_SOURCES})

src/asmjs/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ set(asmjs_SOURCES
55
shared-constants.cpp
66
${asmjs_HEADERS}
77
)
8-
add_library(asmjs OBJECT ${asmjs_SOURCES})
8+
target_sources(binaryen PRIVATE ${asmjs_SOURCES})

src/cfg/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ set(cfg_SOURCES
33
Relooper.cpp
44
${cfg_HEADERS}
55
)
6-
add_library(cfg OBJECT ${cfg_SOURCES})
6+
target_sources(binaryen PRIVATE ${cfg_SOURCES})

src/emscripten-optimizer/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ set(emscripten-optimizer_SOURCES
55
simple_ast.cpp
66
${emscripten-optimizer_HEADERS}
77
)
8-
add_library(emscripten-optimizer OBJECT ${emscripten-optimizer_SOURCES})
8+
target_sources(binaryen PRIVATE ${emscripten-optimizer_SOURCES})

src/interpreter/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ set(interpreter_SOURCES
44
interpreter.cpp
55
${interpreter_HEADERS}
66
)
7-
add_library(interpreter OBJECT ${interpreter_SOURCES})
7+
target_sources(binaryen PRIVATE ${interpreter_SOURCES})

src/ir/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ set(ir_SOURCES
2424
module-splitting.cpp
2525
${ir_HEADERS}
2626
)
27-
add_library(ir OBJECT ${ir_SOURCES})
27+
target_sources(binaryen PRIVATE ${ir_SOURCES})

src/parser/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ set(parser_SOURCES
1212
wat-parser.cpp
1313
${parser_HEADERS}
1414
)
15-
add_library(parser OBJECT ${parser_SOURCES})
15+
target_sources(binaryen PRIVATE ${parser_SOURCES})

src/passes/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,4 @@ if(EMSCRIPTEN)
144144
list(REMOVE_ITEM passes_SOURCES "hash-stringify-walker.cpp")
145145
list(REMOVE_ITEM passes_SOURCES "Outlining.cpp")
146146
endif()
147-
add_library(passes OBJECT ${passes_SOURCES})
147+
target_sources(binaryen PRIVATE ${passes_SOURCES})

src/support/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ set(support_SOURCES
2222
# suffix_tree_node source files no longer depend on LLVM code in the
2323
# third_party folder
2424
if(EMSCRIPTEN)
25-
add_library(support OBJECT ${support_SOURCES})
25+
target_sources(binaryen PRIVATE ${support_SOURCES})
2626
else()
2727
set(support_with_suffix_tree_SOURCES
2828
suffix_tree.cpp
2929
suffix_tree_node.cpp
3030
${support_SOURCES}
3131
)
32-
add_library(support OBJECT ${support_with_suffix_tree_SOURCES})
32+
target_sources(binaryen PRIVATE ${support_with_suffix_tree_SOURCES})
3333
endif()

0 commit comments

Comments
 (0)