Skip to content

Commit 66157d0

Browse files
authored
Build Symengine as a shared object (#2306)
* Build Symengine as a shared object
1 parent d0fa599 commit 66157d0

File tree

3 files changed

+101
-6
lines changed

3 files changed

+101
-6
lines changed
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1+
# Create build directory
2+
mkdir -p build
3+
cd build
4+
15
emcmake cmake \
26
-DCMAKE_CXX_STANDARD=17 \
37
-DCMAKE_BUILD_TYPE=Release \
48
-DBUILD_TESTS=OFF \
59
-DBUILD_BENCHMARKS=OFF \
610
-DINTEGER_CLASS=boostmp \
711
-DWITH_BOOST=ON \
12+
-DBoost_INCLUDE_DIR=$PREFIX/include \
13+
-DBUILD_SHARED_LIBS=ON \
814
-DCMAKE_PREFIX_PATH=$PREFIX \
915
-DCMAKE_INSTALL_PREFIX=$PREFIX \
1016
-DCMAKE_INSTALL_LIBDIR=lib \
1117
-DBUILD_FOR_DISTRIBUTION=yes \
12-
-DBUILD_SHARED_LIBS=no \
13-
-DBoost_INCLUDE_DIR=$PREFIX/include \
1418
-DWITH_SYMENGINE_THREAD_SAFE=ON \
1519
-DWITH_SYMENGINE_RCP=ON \
1620
-DWITH_FLINT=OFF \
@@ -19,7 +23,6 @@ emcmake cmake \
1923
-DWITH_MPFR=OFF \
2024
-DWITH_MPC=OFF \
2125
-DWITH_OPENMP=OFF \
22-
-S . \
23-
-B build
26+
..
2427

25-
emmake cmake --build build --target install
28+
emmake make install -j8
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
diff --git a/symengine/CMakeLists.txt b/symengine/CMakeLists.txt
2+
index 2ae82f97..2ecc489f 100644
3+
--- a/symengine/CMakeLists.txt
4+
+++ b/symengine/CMakeLists.txt
5+
@@ -1,3 +1,8 @@
6+
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
7+
+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-s SIDE_MODULE=1")
8+
+set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-s SIDE_MODULE=1")
9+
+set(CMAKE_STRIP FALSE)
10+
+
11+
if (WITH_SYMENGINE_TEUCHOS)
12+
add_subdirectory(utilities/teuchos)
13+
# Include Teuchos headers:
14+
@@ -275,6 +280,9 @@ include(GNUInstallDirs)
15+
# Configure SymEngine using our CMake options:
16+
set(SYMENGINE_CLING_LIBRARY_DIR "\"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}\"")
17+
18+
+set(SYMENGINE_CPPINTEROP_LIBRARY_PATH "\"/lib/${CMAKE_SHARED_LIBRARY_PREFIX}symengine${CMAKE_SHARED_LIBRARY_SUFFIX}\"")
19+
+message(STATUS "SYMENGINE_CPPINTEROP_LIBRARY_PATH = ${SYMENGINE_CPPINTEROP_LIBRARY_PATH}")
20+
+
21+
configure_file(symengine_config.h.in symengine_config.h)
22+
configure_file(symengine_config_cling.h.in symengine_config_cling.h)
23+
24+
@@ -283,7 +291,9 @@ include_directories(BEFORE ${symengine_BINARY_DIR})
25+
# Include the source directory
26+
include_directories(BEFORE ${symengine_SOURCE_DIR})
27+
28+
-add_library(symengine ${SRC})
29+
+add_library(symengine SHARED
30+
+${SRC}
31+
+)
32+
33+
include(GenerateExportHeader)
34+
generate_export_header(symengine)
35+
@@ -321,6 +331,7 @@ if (WITH_SYMENGINE_TEUCHOS)
36+
target_link_libraries(symengine teuchos)
37+
endif()
38+
target_link_libraries(symengine ${LIBS})
39+
+set_target_properties(symengine PROPERTIES NO_SONAME 1)
40+
41+
if (WITH_LLVM AND NOT SYMENGINE_LLVM_LINK_DOWNSTREAM AND NOT WITH_SYMENGINE_TEUCHOS)
42+
if (${EXCLUDE_LIBS})
43+
diff --git a/symengine/expression.h b/symengine/expression.h
44+
index 5d0c63e7..c6427bc4 100644
45+
--- a/symengine/expression.h
46+
+++ b/symengine/expression.h
47+
@@ -341,11 +341,11 @@ struct print_coefficient_impl<U, typename std::enable_if<std::is_same<
48+
} // namespace piranha
49+
#endif // HAVE_SYMENGINE_PIRANHA
50+
51+
-// Utility functions for xeus-cling
52+
+// Utility functions for xeus-cpp
53+
namespace SymEngine
54+
{
55+
56+
-#ifdef __CLING__
57+
+#if defined(__CLANG_REPL__)
58+
// clang-format off
59+
#if defined(__has_include) && __has_include(<nlohmann/json.hpp>)
60+
// clang-format on
61+
diff --git a/symengine/symengine_config.h.in b/symengine/symengine_config.h.in
62+
index f90b9974..6394dce6 100644
63+
--- a/symengine/symengine_config.h.in
64+
+++ b/symengine/symengine_config.h.in
65+
@@ -93,7 +93,7 @@
66+
67+
#include <symengine/symengine_export.h>
68+
69+
-#ifdef __CLING__
70+
+#if defined(__CLANG_REPL__) && defined(__EMSCRIPTEN__)
71+
#include "symengine/symengine_config_cling.h"
72+
#endif
73+
74+
diff --git a/symengine/symengine_config_cling.h.in b/symengine/symengine_config_cling.h.in
75+
index bf99d723..91ea1042 100644
76+
--- a/symengine/symengine_config_cling.h.in
77+
+++ b/symengine/symengine_config_cling.h.in
78+
@@ -1,7 +1,10 @@
79+
#ifndef SYMENGINE_CONFIG_CLING_HPP
80+
#define SYMENGINE_CONFIG_CLING_HPP
81+
82+
-#pragma cling add_library_path(@SYMENGINE_CLING_LIBRARY_DIR@)
83+
-#pragma cling load("@CMAKE_SHARED_LIBRARY_PREFIX@symengine")
84+
+#include "clang/Interpreter/CppInterOp.h"
85+
+static bool _symengine_loaded = []() {
86+
+ Cpp::LoadLibrary(@SYMENGINE_CPPINTEROP_LIBRARY_PATH@);
87+
+ return true;
88+
+}();
89+
90+
#endif

recipes/recipes_emscripten/symengine/recipe.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ source:
1010
sha256: 11c5f64e9eec998152437f288b8429ec001168277d55f3f5f1df78e3cf129707
1111
url: https://github.com/symengine/symengine/releases/download/v${{ version }}/symengine-${{
1212
version }}.tar.gz
13+
patches:
14+
- patches/shared.patch
1315

1416
build:
15-
number: 1
17+
number: 3
1618

1719
requirements:
1820
build:

0 commit comments

Comments
 (0)