Skip to content

Commit 0c58de1

Browse files
authored
Reland "Link binaryen tools against the dylib" (#2892)
Reland of #2864 Also ensure a relative install rpath by adding setup to each tool config. The CMake code is cribbed from LLVM's implementation.
1 parent 0dff178 commit 0c58de1

File tree

5 files changed

+62
-97
lines changed

5 files changed

+62
-97
lines changed

CMakeLists.txt

Lines changed: 49 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,37 @@ function(ADD_LINK_FLAG value)
6969
ENDFOREACH(variable)
7070
endfunction()
7171

72+
function(binaryen_setup_rpath name)
73+
if(CMAKE_INSTALL_RPATH)
74+
return()
75+
endif()
76+
77+
if (APPLE)
78+
set(_install_name_dir INSTALL_NAME_DIR "@rpath")
79+
set(_install_rpath "@loader_path/../lib")
80+
elseif(UNIX)
81+
set(_install_rpath "\$ORIGIN/../lib")
82+
if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
83+
set_property(TARGET ${name} APPEND_STRING PROPERTY
84+
LINK_FLAGS " -Wl,-z,origin ")
85+
endif()
86+
else()
87+
return()
88+
endif()
89+
90+
set_target_properties(${name} PROPERTIES
91+
BUILD_WITH_INSTALL_RPATH On
92+
INSTALL_RPATH "${_install_rpath}"
93+
${_install_name_dir})
94+
endfunction()
95+
7296
# Options
7397

7498
option(BUILD_STATIC_LIB "Build as a static library" OFF)
99+
if (MSVC)
100+
# We don't have dllexport declarations set up for windows yet.
101+
set(BUILD_STATIC_LIB ON)
102+
endif()
75103

76104
# For now, don't include full DWARF support in JS builds, for size.
77105
if (NOT EMSCRIPTEN)
@@ -280,95 +308,27 @@ install(TARGETS binaryen
280308

281309
install(FILES src/binaryen-c.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
282310

283-
set(wasm-shell_SOURCES
284-
src/tools/wasm-shell.cpp
285-
)
286-
add_executable(wasm-shell ${wasm-shell_SOURCES} ${binaryen_objs})
287-
target_link_libraries(wasm-shell ${CMAKE_THREAD_LIBS_INIT})
288-
set_property(TARGET wasm-shell PROPERTY CXX_STANDARD 14)
289-
set_property(TARGET wasm-shell PROPERTY CXX_STANDARD_REQUIRED ON)
290-
install(TARGETS wasm-shell DESTINATION ${CMAKE_INSTALL_BINDIR})
291-
292-
set(wasm-opt_SOURCES
293-
src/tools/wasm-opt.cpp
294-
)
295-
add_executable(wasm-opt ${wasm-opt_SOURCES} ${binaryen_objs})
296-
target_link_libraries(wasm-opt ${CMAKE_THREAD_LIBS_INIT})
297-
set_property(TARGET wasm-opt PROPERTY CXX_STANDARD 14)
298-
set_property(TARGET wasm-opt PROPERTY CXX_STANDARD_REQUIRED ON)
299-
install(TARGETS wasm-opt DESTINATION ${CMAKE_INSTALL_BINDIR})
300-
301-
set(wasm-metadce_SOURCES
302-
src/tools/wasm-metadce.cpp
303-
)
304-
add_executable(wasm-metadce ${wasm-metadce_SOURCES} ${binaryen_objs})
305-
target_link_libraries(wasm-metadce ${CMAKE_THREAD_LIBS_INIT})
306-
set_property(TARGET wasm-metadce PROPERTY CXX_STANDARD 14)
307-
set_property(TARGET wasm-metadce PROPERTY CXX_STANDARD_REQUIRED ON)
308-
install(TARGETS wasm-metadce DESTINATION ${CMAKE_INSTALL_BINDIR})
309-
310-
set(asm2wasm_SOURCES
311-
src/tools/asm2wasm.cpp
312-
)
313-
add_executable(asm2wasm ${asm2wasm_SOURCES} ${binaryen_objs})
314-
target_link_libraries(asm2wasm ${CMAKE_THREAD_LIBS_INIT})
315-
set_property(TARGET asm2wasm PROPERTY CXX_STANDARD 14)
316-
set_property(TARGET asm2wasm PROPERTY CXX_STANDARD_REQUIRED ON)
317-
install(TARGETS asm2wasm DESTINATION ${CMAKE_INSTALL_BINDIR})
318-
319-
set(wasm2js_SOURCES
320-
src/tools/wasm2js.cpp
321-
)
322-
add_executable(wasm2js ${wasm2js_SOURCES} ${binaryen_objs})
323-
target_link_libraries(wasm2js ${CMAKE_THREAD_LIBS_INIT})
324-
set_property(TARGET wasm2js PROPERTY CXX_STANDARD 14)
325-
set_property(TARGET wasm2js PROPERTY CXX_STANDARD_REQUIRED ON)
326-
install(TARGETS wasm2js DESTINATION ${CMAKE_INSTALL_BINDIR})
327-
328-
set(wasm-emscripten-finalize_SOURCES
329-
src/tools/wasm-emscripten-finalize.cpp
330-
)
331-
add_executable(wasm-emscripten-finalize ${wasm-emscripten-finalize_SOURCES} ${binaryen_objs})
332-
target_link_libraries(wasm-emscripten-finalize ${CMAKE_THREAD_LIBS_INIT})
333-
set_property(TARGET wasm-emscripten-finalize PROPERTY CXX_STANDARD 14)
334-
set_property(TARGET wasm-emscripten-finalize PROPERTY CXX_STANDARD_REQUIRED ON)
335-
install(TARGETS wasm-emscripten-finalize DESTINATION ${CMAKE_INSTALL_BINDIR})
336-
337-
set(wasm_as_SOURCES
338-
src/tools/wasm-as.cpp
339-
)
340-
add_executable(wasm-as ${wasm_as_SOURCES} ${binaryen_objs})
341-
target_link_libraries(wasm-as ${CMAKE_THREAD_LIBS_INIT})
342-
set_property(TARGET wasm-as PROPERTY CXX_STANDARD 14)
343-
set_property(TARGET wasm-as PROPERTY CXX_STANDARD_REQUIRED ON)
344-
install(TARGETS wasm-as DESTINATION ${CMAKE_INSTALL_BINDIR})
345-
346-
set(wasm_dis_SOURCES
347-
src/tools/wasm-dis.cpp
348-
)
349-
add_executable(wasm-dis ${wasm_dis_SOURCES} ${binaryen_objs})
350-
target_link_libraries(wasm-dis ${CMAKE_THREAD_LIBS_INIT})
351-
set_property(TARGET wasm-dis PROPERTY CXX_STANDARD 14)
352-
set_property(TARGET wasm-dis PROPERTY CXX_STANDARD_REQUIRED ON)
353-
install(TARGETS wasm-dis DESTINATION ${CMAKE_INSTALL_BINDIR})
354-
355-
set(wasm-ctor-eval_SOURCES
356-
src/tools/wasm-ctor-eval.cpp
357-
)
358-
add_executable(wasm-ctor-eval ${wasm-ctor-eval_SOURCES} ${binaryen_objs})
359-
target_link_libraries(wasm-ctor-eval ${CMAKE_THREAD_LIBS_INIT})
360-
set_property(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD 14)
361-
set_property(TARGET wasm-ctor-eval PROPERTY CXX_STANDARD_REQUIRED ON)
362-
install(TARGETS wasm-ctor-eval DESTINATION ${CMAKE_INSTALL_BINDIR})
363-
364-
set(wasm-reduce_SOURCES
365-
src/tools/wasm-reduce.cpp
366-
)
367-
add_executable(wasm-reduce ${wasm-reduce_SOURCES} ${binaryen_objs})
368-
target_link_libraries(wasm-reduce ${CMAKE_THREAD_LIBS_INIT})
369-
set_property(TARGET wasm-reduce PROPERTY CXX_STANDARD 14)
370-
set_property(TARGET wasm-reduce PROPERTY CXX_STANDARD_REQUIRED ON)
371-
install(TARGETS wasm-reduce DESTINATION ${CMAKE_INSTALL_BINDIR})
311+
function(binaryen_add_executable name sources)
312+
add_executable(${name} ${sources})
313+
target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT})
314+
target_link_libraries(${name} binaryen)
315+
set_property(TARGET ${name} PROPERTY CXX_STANDARD 14)
316+
set_property(TARGET ${name} PROPERTY CXX_STANDARD_REQUIRED ON)
317+
binaryen_setup_rpath(${name})
318+
install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_BINDIR})
319+
endfunction()
320+
321+
binaryen_add_executable(wasm-opt src/tools/wasm-opt.cpp)
322+
binaryen_add_executable(wasm-shell src/tools/wasm-shell.cpp)
323+
binaryen_add_executable(wasm-metadce src/tools/wasm-metadce.cpp)
324+
binaryen_add_executable(asm2wasm src/tools/asm2wasm.cpp)
325+
binaryen_add_executable(wasm2js src/tools/wasm2js.cpp)
326+
binaryen_add_executable(wasm-emscripten-finalize src/tools/wasm-emscripten-finalize.cpp)
327+
binaryen_add_executable(wasm-as src/tools/wasm-as.cpp)
328+
binaryen_add_executable(wasm-dis src/tools/wasm-dis.cpp)
329+
binaryen_add_executable(wasm-ctor-eval src/tools/wasm-ctor-eval.cpp)
330+
binaryen_add_executable(wasm-reduce src/tools/wasm-reduce.cpp)
331+
372332

373333
# binaryen.js
374334
#

src/asmjs/shared-constants.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ cashew::IString WASM_I64_UDIV("__wasm_i64_udiv");
101101
cashew::IString WASM_I64_SREM("__wasm_i64_srem");
102102
cashew::IString WASM_I64_UREM("__wasm_i64_urem");
103103

104+
cashew::IString ASM_FUNC("asmFunc");
105+
cashew::IString ABORT_FUNC("abort");
106+
cashew::IString FUNCTION_TABLE("FUNCTION_TABLE");
107+
cashew::IString NO_RESULT("wasm2js$noresult"); // no result at all
108+
// result in an expression, no temp var
109+
cashew::IString EXPRESSION_RESULT("wasm2js$expresult");
110+
104111
namespace ABI {
105112
namespace wasm2js {
106113

src/asmjs/shared-constants.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ extern cashew::IString WASM_I64_SDIV;
103103
extern cashew::IString WASM_I64_UDIV;
104104
extern cashew::IString WASM_I64_SREM;
105105
extern cashew::IString WASM_I64_UREM;
106+
// wasm2js constants
107+
extern cashew::IString ASM_FUNC;
108+
extern cashew::IString ABORT_FUNC;
109+
extern cashew::IString FUNCTION_TABLE;
110+
extern cashew::IString NO_RESULT;
111+
extern cashew::IString EXPRESSION_RESULT;
106112
} // namespace wasm
107113

108114
#endif // wasm_asmjs_shared_constants_h

src/tools/wasm2js.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
// wasm2js console tool
1919
//
2020

21-
#include "wasm2js.h"
2221
#include "optimization-options.h"
2322
#include "pass.h"
2423
#include "support/colors.h"

src/wasm2js.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,6 @@ namespace wasm {
5252

5353
using namespace cashew;
5454

55-
IString ASM_FUNC("asmFunc");
56-
IString ABORT_FUNC("abort");
57-
IString FUNCTION_TABLE("FUNCTION_TABLE");
58-
IString NO_RESULT("wasm2js$noresult"); // no result at all
59-
// result in an expression, no temp var
60-
IString EXPRESSION_RESULT("wasm2js$expresult");
61-
6255
// Appends extra to block, flattening out if extra is a block as well
6356
void flattenAppend(Ref ast, Ref extra) {
6457
int index;

0 commit comments

Comments
 (0)