From 54f9fcb6366862c7ed3f3041d2fd334205340eec Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Sat, 22 Jul 2023 13:15:55 +0900 Subject: [PATCH] move dyld logic into a separate library for now, the dylink.0 custom section support is left in the main library. ideally it would be nicer to have some api to allow users like dyld to parse and validate their own custom sections. --- CMakeLists.txt | 8 +++++++- cli/repl.h | 3 +++ lib/CMakeLists.txt | 7 ------- libdyld/CMakeLists.txt | 32 ++++++++++++++++++++++++++++++++ {lib => libdyld}/dyld.c | 0 {lib => libdyld}/dyld.h | 0 {lib => libdyld}/dyld_plt.c | 0 {lib => libdyld}/dyld_plt.h | 0 8 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 libdyld/CMakeLists.txt rename {lib => libdyld}/dyld.c (100%) rename {lib => libdyld}/dyld.h (100%) rename {lib => libdyld}/dyld_plt.c (100%) rename {lib => libdyld}/dyld_plt.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index cdf0c10c..24253005 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,9 @@ add_subdirectory(lib) if(TOYWASM_ENABLE_WASI) add_subdirectory(libwasi) endif() +if(TOYWASM_ENABLE_DYLD) +add_subdirectory(libdyld) +endif() if(CMAKE_C_COMPILER_TARGET MATCHES "wasm") set(TOYWASM_CLI "${CMAKE_CURRENT_SOURCE_DIR}/test/toywasm-on-toywasm.py") @@ -48,7 +51,10 @@ set(cli_sources ) add_executable(toywasm-cli ${cli_sources}) -target_link_libraries(toywasm-cli toywasm-lib-core $<$:toywasm-lib-wasi> m) +target_link_libraries(toywasm-cli toywasm-lib-core + $<$:toywasm-lib-wasi> + $<$:toywasm-lib-dyld> + m) set_target_properties(toywasm-cli PROPERTIES OUTPUT_NAME toywasm) add_test(NAME toywasm-cli-simple-module COMMAND diff --git a/cli/repl.h b/cli/repl.h index 651de3ea..fc8d7a32 100644 --- a/cli/repl.h +++ b/cli/repl.h @@ -1,6 +1,9 @@ #include +#include "toywasm_config.h" +#if defined(TOYWASM_ENABLE_DYLD) #include "dyld.h" +#endif #include "options.h" #include "type.h" diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 5972ebc3..1fc0a6b2 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -45,12 +45,6 @@ list(APPEND lib_core_sources endif() endif() -if(TOYWASM_ENABLE_DYLD) -list(APPEND lib_core_sources - "dyld.c" - "dyld_plt.c") -endif() - if(TOYWASM_ENABLE_WRITER) set(lib_core_sources_writer "module_writer.c" @@ -61,7 +55,6 @@ set(lib_core_headers "bitmap.h" "cell.h" "context.h" - "dyld.h" "dylink_type.h" "exec_context.h" "fileio.h" diff --git a/libdyld/CMakeLists.txt b/libdyld/CMakeLists.txt new file mode 100644 index 00000000..32668c87 --- /dev/null +++ b/libdyld/CMakeLists.txt @@ -0,0 +1,32 @@ +# lib-dyld + +set(lib_dyld_sources + "dyld.c" + "dyld_plt.c" +) + +set(lib_dyld_headers + "dyld.h" +) + +add_library(toywasm-lib-dyld STATIC ${lib_dyld_sources}) +set_target_properties(toywasm-lib-dyld PROPERTIES OUTPUT_NAME toywasm-dyld) +if (USE_IPO) +# Note: -flto=full seems to produce considerably faster code +# than -flto=thin for us. However, cmake INTERPROCEDURAL_OPTIMIZATION +# always use -flto=thin for clang. +# cf. https://gitlab.kitware.com/cmake/cmake/-/issues/16808 +set_property(TARGET toywasm-lib-dyld PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() +set_property(TARGET toywasm-lib-dyld PROPERTY PUBLIC_HEADER ${lib_dyld_headers}) +target_link_libraries(toywasm-lib-dyld toywasm-lib-core) +target_include_directories(toywasm-lib-dyld + INTERFACE + $ + $) + +install(TARGETS toywasm-lib-dyld + EXPORT toywasm-lib-dyld-config + PUBLIC_HEADER DESTINATION include/toywasm) +install(EXPORT toywasm-lib-dyld-config + DESTINATION lib/cmake/toywasm-lib-dyld) diff --git a/lib/dyld.c b/libdyld/dyld.c similarity index 100% rename from lib/dyld.c rename to libdyld/dyld.c diff --git a/lib/dyld.h b/libdyld/dyld.h similarity index 100% rename from lib/dyld.h rename to libdyld/dyld.h diff --git a/lib/dyld_plt.c b/libdyld/dyld_plt.c similarity index 100% rename from lib/dyld_plt.c rename to libdyld/dyld_plt.c diff --git a/lib/dyld_plt.h b/libdyld/dyld_plt.h similarity index 100% rename from lib/dyld_plt.h rename to libdyld/dyld_plt.h