diff options
author | Derek Schuff <dschuff@chromium.org> | 2016-05-07 10:41:41 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-07 10:41:41 -0700 |
commit | b80ff5c73351d0e6762d8122914bb6c10bcd8d9f (patch) | |
tree | 7ae4722ca2fb97461d287fa104d6795503cc14d2 | |
parent | 40068a9f3c614ba15131a8a90d8586816799f11a (diff) | |
download | binaryen-b80ff5c73351d0e6762d8122914bb6c10bcd8d9f.tar.gz binaryen-b80ff5c73351d0e6762d8122914bb6c10bcd8d9f.tar.bz2 binaryen-b80ff5c73351d0e6762d8122914bb6c10bcd8d9f.zip |
Use more static libraries in the CMake build (#451)
* Factor passes and emscripten-optimizer into static libs
This removes the redundancies from the source sets in the main
CMakeLists.txt.
* Make passes an object lib
* Use static libs with --whole-archive because Travis has old cmake
-rw-r--r-- | CMakeLists.txt | 83 | ||||
-rwxr-xr-x | auto_update_tests.py | 4 | ||||
-rwxr-xr-x | check.py | 4 | ||||
-rw-r--r-- | src/emscripten-optimizer/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/passes/CMakeLists.txt | 17 | ||||
-rw-r--r-- | src/passes/pass.cpp (renamed from src/pass.cpp) | 0 | ||||
-rw-r--r-- | src/support/CMakeLists.txt | 10 |
7 files changed, 53 insertions, 71 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 126bf3a6d..2ecc51a9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ IF(MSVC) ELSE() ADD_COMPILE_FLAG("/O2") ENDIF() + SET(all_passes passes) ELSE() SET(THREADS_PREFER_PTHREAD_FLAG ON) SET(CMAKE_THREAD_PREFER_PTHREAD ON) @@ -72,6 +73,11 @@ ELSE() ADD_COMPILE_FLAG("-O2") ADD_DEFINITIONS("-UNDEBUG") # Keep asserts. ENDIF() + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + SET(all_passes "-force_load" passes) + ELSE() + SET(all_passes "-Wl,--whole-archive" passes "-Wl,-no-whole-archive") + ENDIF() ENDIF() # clang doesn't print colored diagnostics when invoked from Ninja @@ -83,141 +89,84 @@ ENDIF() # Static libraries ADD_SUBDIRECTORY(src/asmjs) +ADD_SUBDIRECTORY(src/emscripten-optimizer) +ADD_SUBDIRECTORY(src/passes) +ADD_SUBDIRECTORY(src/support) # Sources. -SET(support_SOURCES - src/support/archive.cpp - src/support/bits.cpp - src/support/colors.cpp - src/support/command-line.cpp - src/support/file.cpp - src/support/safe_integer.cpp - src/support/threads.cpp -) -ADD_LIBRARY(support STATIC ${support_SOURCES}) SET(binaryen_c_SOURCES src/binaryen-c.cpp src/cfg/Relooper.cpp - src/pass.cpp - src/passes/LowerIfElse.cpp - src/passes/MergeBlocks.cpp - src/passes/NameManager.cpp - src/passes/OptimizeInstructions.cpp - src/passes/PostEmscripten.cpp - src/passes/Print.cpp - src/passes/RemoveImports.cpp - src/passes/RemoveUnusedBrs.cpp - src/passes/RemoveUnusedNames.cpp - src/passes/SimplifyLocals.cpp - src/passes/ReorderLocals.cpp - src/passes/Vacuum.cpp - src/passes/Metrics.cpp src/wasm.cpp ) ADD_LIBRARY(binaryen-c SHARED ${binaryen_c_SOURCES}) -TARGET_LINK_LIBRARIES(binaryen-c asmjs support) +TARGET_LINK_LIBRARIES(binaryen-c asmjs ${all_passes} support) SET(binaryen-shell_SOURCES src/binaryen-shell.cpp - src/pass.cpp - src/passes/LowerIfElse.cpp - src/passes/MergeBlocks.cpp - src/passes/NameManager.cpp - src/passes/OptimizeInstructions.cpp - src/passes/PostEmscripten.cpp - src/passes/Print.cpp - src/passes/RemoveImports.cpp - src/passes/RemoveUnusedBrs.cpp - src/passes/RemoveUnusedNames.cpp - src/passes/SimplifyLocals.cpp - src/passes/ReorderLocals.cpp - src/passes/Vacuum.cpp - src/passes/Metrics.cpp src/wasm.cpp ) ADD_EXECUTABLE(binaryen-shell ${binaryen-shell_SOURCES}) -TARGET_LINK_LIBRARIES(binaryen-shell asmjs support) +TARGET_LINK_LIBRARIES(binaryen-shell asmjs emscripten-optimizer ${all_passes} support) SET_PROPERTY(TARGET binaryen-shell PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET binaryen-shell PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS binaryen-shell DESTINATION bin) SET(asm2wasm_SOURCES src/asm2wasm-main.cpp - src/pass.cpp - src/passes/MergeBlocks.cpp - src/passes/OptimizeInstructions.cpp - src/passes/PostEmscripten.cpp - src/passes/Print.cpp - src/passes/RemoveUnusedBrs.cpp - src/passes/RemoveUnusedNames.cpp - src/passes/SimplifyLocals.cpp - src/passes/ReorderLocals.cpp - src/passes/Vacuum.cpp - src/emscripten-optimizer/parser.cpp - src/emscripten-optimizer/simple_ast.cpp - src/emscripten-optimizer/optimizer-shared.cpp src/wasm.cpp ) ADD_EXECUTABLE(asm2wasm ${asm2wasm_SOURCES}) -TARGET_LINK_LIBRARIES(asm2wasm asmjs support) +TARGET_LINK_LIBRARIES(asm2wasm asmjs emscripten-optimizer ${all_passes} support) SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET asm2wasm PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS asm2wasm DESTINATION bin) SET(wasm2asm_SOURCES src/wasm2asm-main.cpp - src/emscripten-optimizer/parser.cpp - src/emscripten-optimizer/simple_ast.cpp - src/emscripten-optimizer/optimizer-shared.cpp src/wasm.cpp ) ADD_EXECUTABLE(wasm2asm ${wasm2asm_SOURCES}) -TARGET_LINK_LIBRARIES(wasm2asm asmjs support) +TARGET_LINK_LIBRARIES(wasm2asm asmjs emscripten-optimizer support) SET_PROPERTY(TARGET wasm2asm PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET wasm2asm PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS wasm2asm DESTINATION bin) SET(s2wasm_SOURCES - src/pass.cpp - src/passes/Print.cpp src/wasm-linker.cpp src/s2wasm-main.cpp src/wasm.cpp ) ADD_EXECUTABLE(s2wasm ${s2wasm_SOURCES}) -TARGET_LINK_LIBRARIES(s2wasm asmjs support) +TARGET_LINK_LIBRARIES(s2wasm asmjs passes support) SET_PROPERTY(TARGET s2wasm PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET s2wasm PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS s2wasm DESTINATION bin) SET(wasm_as_SOURCES - src/pass.cpp - src/passes/Print.cpp src/wasm-as.cpp src/wasm.cpp ) ADD_EXECUTABLE(wasm-as ${wasm_as_SOURCES}) -TARGET_LINK_LIBRARIES(wasm-as asmjs support) +TARGET_LINK_LIBRARIES(wasm-as asmjs passes support) SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET wasm-as PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS wasm-as DESTINATION bin) SET(wasm_dis_SOURCES - src/pass.cpp - src/passes/Print.cpp src/wasm-dis.cpp src/wasm.cpp ) ADD_EXECUTABLE(wasm-dis ${wasm_dis_SOURCES}) -TARGET_LINK_LIBRARIES(wasm-dis support) +TARGET_LINK_LIBRARIES(wasm-dis passes support) SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD 11) SET_PROPERTY(TARGET wasm-dis PROPERTY CXX_STANDARD_REQUIRED ON) INSTALL(TARGETS wasm-dis DESTINATION bin) diff --git a/auto_update_tests.py b/auto_update_tests.py index 5380fc737..5fa106747 100755 --- a/auto_update_tests.py +++ b/auto_update_tests.py @@ -100,14 +100,14 @@ for t in sorted(os.listdir(os.path.join('test', 'example'))): cmd = ['-Isrc', '-g', '-lasmjs', '-lsupport', '-Llib/.', '-pthread', '-o', output_file] if t.endswith('.cpp'): cmd = [os.path.join('test', 'example', t), - os.path.join('src', 'pass.cpp'), + os.path.join('src', 'passes', 'pass.cpp'), os.path.join('src', 'wasm.cpp'), os.path.join('src', 'passes', 'Print.cpp')] + cmd elif t.endswith('.c'): # build the C file separately extra = [os.environ.get('CC') or 'gcc', os.path.join('test', 'example', t), '-c', '-o', 'example.o', - '-Isrc', '-g', '-lasmjs', '-lsupport', '-Llib/.', '-pthread'] + '-Isrc', '-g', '-Llib/.', '-pthread'] print ' '.join(extra) subprocess.check_call(extra) # Link against the binaryen C library DSO, using an executable-relative rpath @@ -599,14 +599,14 @@ for t in sorted(os.listdir(os.path.join('test', 'example'))): cmd = ['-Isrc', '-g', '-lasmjs', '-lsupport', '-Llib/.', '-pthread', '-o', output_file] if t.endswith('.cpp'): cmd = [os.path.join('test', 'example', t), - os.path.join('src', 'pass.cpp'), + os.path.join('src', 'passes', 'pass.cpp'), os.path.join('src', 'wasm.cpp'), os.path.join('src', 'passes', 'Print.cpp')] + cmd elif t.endswith('.c'): # build the C file separately extra = [os.environ.get('CC') or 'gcc', os.path.join('test', 'example', t), '-c', '-o', 'example.o', - '-Isrc', '-g', '-lasmjs', '-lsupport', '-Llib/.', '-pthread'] + '-Isrc', '-g', '-Llib/.', '-pthread'] print ' '.join(extra) subprocess.check_call(extra) # Link against the binaryen C library DSO, using an executable-relative rpath diff --git a/src/emscripten-optimizer/CMakeLists.txt b/src/emscripten-optimizer/CMakeLists.txt new file mode 100644 index 000000000..6c302b991 --- /dev/null +++ b/src/emscripten-optimizer/CMakeLists.txt @@ -0,0 +1,6 @@ +SET(emscripten-optimizer_SOURCES + optimizer-shared.cpp + parser.cpp + simple_ast.cpp +) +ADD_LIBRARY(emscripten-optimizer STATIC ${emscripten-optimizer_SOURCES}) diff --git a/src/passes/CMakeLists.txt b/src/passes/CMakeLists.txt new file mode 100644 index 000000000..460910978 --- /dev/null +++ b/src/passes/CMakeLists.txt @@ -0,0 +1,17 @@ +SET(passes_SOURCES + pass.cpp + LowerIfElse.cpp + MergeBlocks.cpp + Metrics.cpp + NameManager.cpp + OptimizeInstructions.cpp + PostEmscripten.cpp + Print.cpp + RemoveImports.cpp + RemoveUnusedBrs.cpp + RemoveUnusedNames.cpp + ReorderLocals.cpp + SimplifyLocals.cpp + Vacuum.cpp +) +ADD_LIBRARY(passes STATIC ${passes_SOURCES}) diff --git a/src/pass.cpp b/src/passes/pass.cpp index e4cc35554..e4cc35554 100644 --- a/src/pass.cpp +++ b/src/passes/pass.cpp diff --git a/src/support/CMakeLists.txt b/src/support/CMakeLists.txt new file mode 100644 index 000000000..08546e3ee --- /dev/null +++ b/src/support/CMakeLists.txt @@ -0,0 +1,10 @@ +SET(support_SOURCES + archive.cpp + bits.cpp + colors.cpp + command-line.cpp + file.cpp + safe_integer.cpp + threads.cpp +) +ADD_LIBRARY(support STATIC ${support_SOURCES}) |