From bc0016828ec637625a32a285ef526aadd2334410 Mon Sep 17 00:00:00 2001 From: Thorsten Beier Date: Wed, 29 Nov 2023 11:09:32 +0100 Subject: [PATCH] Unify wasm kernels (#137) * unify-wasm kernels --- CMakeLists.txt | 35 ++++++++++++++------ share/jupyter/kernels/xsqlite/kernel.json.in | 5 ++- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7823deb..9806065 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,9 +60,8 @@ OPTION(XSQL_USE_SHARED_XEUS_SQLITE "Link xsqlite with the xeus-sqlite shared lib OPTION(XSQL_DOWNLOAD_GTEST "build gtest from downloaded sources" OFF) OPTION(XSQL_BUILD_TESTS "xeus-sqlite test suite" OFF) -OPTION(XSQL_EMSCRIPTEN_WASM_BUILD "Build for wasm with emscripten" OFF) -if(XSQL_EMSCRIPTEN_WASM_BUILD) +if(EMSCRIPTEN) # for the emscripten build we need a FindSQLite3.cmake since # we install sqlite in a non-standart way set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_emscripten;${CMAKE_MODULE_PATH}") @@ -114,7 +113,7 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib; ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") -if(XSQL_EMSCRIPTEN_WASM_BUILD) +if(EMSCRIPTEN) add_compile_definitions(XSQL_EMSCRIPTEN_WASM_BUILD) endif() @@ -218,10 +217,9 @@ macro(xsql_create_target target_name linkage output_name) ${XSQL_XEUS_TARGET} xvega SQLiteCpp - SQLite::SQLite3 ) - if(NOT XSQL_EMSCRIPTEN_WASM_BUILD) + if(NOT EMSCRIPTEN) # find_package(Threads) # TODO: add Threads as a dependence of xeus-static? target_link_libraries(${target_name} PRIVATE ${CMAKE_THREAD_LIBS_INIT}) endif() @@ -284,18 +282,23 @@ if(XSQL_BUILD_TESTS) add_subdirectory(test) endif() -if(XSQL_EMSCRIPTEN_WASM_BUILD) +if(EMSCRIPTEN) find_package(xeus-lite REQUIRED) - add_executable(xeus_kernel src/main_emscripten_kernel.cpp ) - target_link_libraries(xeus_kernel PRIVATE xeus-sqlite-static xeus-lite) - target_compile_features(xeus_kernel PRIVATE cxx_std_17) - target_link_options(xeus_kernel + include(WasmBuildOptions) + add_executable(xsqlite src/main_emscripten_kernel.cpp ) + target_link_libraries(xsqlite PRIVATE xeus-sqlite-static xeus-lite) + target_compile_features(xsqlite PRIVATE cxx_std_17) + + xeus_wasm_compile_options(xsqlite) + xeus_wasm_link_options(xsqlite "web,worker") + + target_link_options(xsqlite PUBLIC "SHELL: -s FETCH=1" PUBLIC "SHELL: -s NO_EXIT_RUNTIME=1" PUBLIC "SHELL: -s 'ASYNCIFY_IMPORTS=[\"async_ems_init_idbfs\", \"async_ems_sync_db\"]'" PUBLIC "SHELL: -s FORCE_FILESYSTEM=1" ) - target_link_libraries(xeus_kernel idbfs.js) + # target_link_libraries(xsqlite idbfs.js) endif() # Installation @@ -323,7 +326,9 @@ endif () if (XSQL_BUILD_XSQLITE_EXECUTABLE) install(TARGETS xsqlite RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() +if (XSQL_BUILD_XSQLITE_EXECUTABLE OR EMSCRIPTEN) # Configuration and data directories for jupyter and xeus_sqlite set(XJUPYTER_DATA_DIR "share/jupyter" CACHE STRING "Jupyter data directory") @@ -368,3 +373,11 @@ if (XSQL_BUILD_SHARED) FILE ${PROJECT_NAME}Targets.cmake DESTINATION ${XEUS_SQLITE_CMAKECONFIG_INSTALL_DIR}) endif () + +if(EMSCRIPTEN) + install(FILES + "$/xsqlite.js" + "$/xsqlite.wasm" + DESTINATION ${XJUPYTER_DATA_DIR}/kernels/xsqlite) + +endif() \ No newline at end of file diff --git a/share/jupyter/kernels/xsqlite/kernel.json.in b/share/jupyter/kernels/xsqlite/kernel.json.in index 9065903..522d434 100644 --- a/share/jupyter/kernels/xsqlite/kernel.json.in +++ b/share/jupyter/kernels/xsqlite/kernel.json.in @@ -5,5 +5,8 @@ "-f", "{connection_file}" ], - "language": "sqlite" + "language": "sqlite", + "metadata":{ + "wasm_name" : "xsqlite" + } }