Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions recipes/recipes_emscripten/xwidgets/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ mkdir build
cd build

# Configure step
cmake ${CMAKE_ARGS} .. \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DXWIDGETS_BUILD_SHARED_LIBS=OFF \
-DXWIDGETS_BUILD_STATIC_LIBS=ON \
emcmake cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DXWIDGETS_BUILD_SHARED_LIBS=ON \
-DXWIDGETS_BUILD_STATIC_LIBS=ON \
-DCMAKE_FIND_ROOT_PATH=$PREFIX \
..

# Build step
ninja install
# Build & Install step
emmake make -j8 install
86 changes: 86 additions & 0 deletions recipes/recipes_emscripten/xwidgets/patches/shared.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f9124dc..1dec0b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,13 @@
cmake_minimum_required(VERSION 3.8)
project(xwidgets)

+if(EMSCRIPTEN)
+ set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
+ set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-s SIDE_MODULE=1")
+ set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-s SIDE_MODULE=1")
+ set(CMAKE_STRIP FALSE)
+endif()
+
set(XWIDGETS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(XWIDGETS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)

@@ -20,6 +27,10 @@ include(CMakePackageConfigHelpers)

set(XWIDGETS_INSTALL_LIBRARY_DIR "\"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}\"")

+# Define the path to the shared library for use with CppInterOp dynamic loading
+set(XWIDGETS_CPPINTEROP_LIBRARY_PATH "\"/lib/${CMAKE_SHARED_LIBRARY_PREFIX}xwidgets${CMAKE_SHARED_LIBRARY_SUFFIX}\"")
+message(STATUS "XWIDGETS_CPPINTEROP_LIBRARY_PATH = ${XWIDGETS_CPPINTEROP_LIBRARY_PATH}")
+
configure_file(
"${XWIDGETS_INCLUDE_DIR}/xwidgets/xwidgets_config_cling.hpp.in"
"${XWIDGETS_INCLUDE_DIR}/xwidgets/xwidgets_config_cling.hpp"
@@ -157,6 +168,7 @@ macro(xwidgets_create_target target_name linkage output_name)
)

target_link_libraries(${target_name} PUBLIC ${XEUS_TARGET_NAME} xproperty)
+ set_target_properties(${target_name} PROPERTIES NO_SONAME 1)

set_target_properties(
${target_name}
@@ -182,7 +194,11 @@ macro(xwidgets_create_target target_name linkage output_name)
OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"
OR CMAKE_CXX_COMPILER_ID MATCHES "Intel"
)
- target_compile_options(${target_name} PUBLIC -Wunused-parameter -Wextra -Wreorder)
+ if (EMSCRIPTEN)
+ target_compile_options(${target_name} PRIVATE -fPIC)
+ else ()
+ target_compile_options(${target_name} PUBLIC -Wunused-parameter -Wextra -Wreorder)
+ endif()

message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
endif()
diff --git a/include/xwidgets/xwidgets_config.hpp b/include/xwidgets/xwidgets_config.hpp
index eee5149..a4aec7c 100644
--- a/include/xwidgets/xwidgets_config.hpp
+++ b/include/xwidgets/xwidgets_config.hpp
@@ -102,7 +102,7 @@
))

// Load libxwidgets runtime.
-#ifdef __CLING__
+#if defined(__CLANG_REPL__) && defined(__EMSCRIPTEN__)
#include "xwidgets_config_cling.hpp"
#endif

diff --git a/include/xwidgets/xwidgets_config_cling.hpp.in b/include/xwidgets/xwidgets_config_cling.hpp.in
index cbac2cd..3c0fc1f 100644
--- a/include/xwidgets/xwidgets_config_cling.hpp.in
+++ b/include/xwidgets/xwidgets_config_cling.hpp.in
@@ -9,7 +9,16 @@
#ifndef XWIDGETS_CONFIG_CLING_HPP
#define XWIDGETS_CONFIG_CLING_HPP

-#pragma cling add_library_path(@XWIDGETS_INSTALL_LIBRARY_DIR@)
-#pragma cling load("libxwidgets")
+// #pragma cling add_library_path(@XWIDGETS_INSTALL_LIBRARY_DIR@)
+// #pragma cling load("libxwidgets")
+
+#pragma once
+#ifdef __EMSCRIPTEN__
+# include <clang/Interpreter/CppInterOp.h>
+static bool _xwidgets_loaded = []() {
+ Cpp::LoadLibrary(@XWIDGETS_CPPINTEROP_LIBRARY_PATH@, false);
+ return true;
+}();
+#endif

#endif
7 changes: 5 additions & 2 deletions recipes/recipes_emscripten/xwidgets/recipe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@ package:
source:
url: https://github.com/jupyter-xeus/xwidgets/archive/refs/tags/${{ version }}.tar.gz
sha256: 07c789b7936b19a123f37ac1edfd0598a89f23e02d4eeffc9976817be68bee42
patches:
- patches/shared.patch

build:
number: 3
number: 4

requirements:
build:
- ${{ compiler("cxx") }}
- cmake
- ninja
- make
host:
- nlohmann_json >=3.11
- xeus >=5,<6
Expand All @@ -31,6 +33,7 @@ tests:
- test -d $PREFIX/include/xwidgets
- test -f $PREFIX/include/xwidgets/xtransport.hpp
- test -f $PREFIX/lib/libxwidgets.a
- test -f $PREFIX/lib/libxwidgets.so

about:
license: BSD-3-Clause
Expand Down