diff --git a/recipes/recipes_emscripten/cppinterop/build.sh b/recipes/recipes_emscripten/cppinterop/build.sh index b23dfa58edf..86898f54380 100644 --- a/recipes/recipes_emscripten/cppinterop/build.sh +++ b/recipes/recipes_emscripten/cppinterop/build.sh @@ -5,14 +5,14 @@ export CMAKE_PREFIX_PATH=$PREFIX export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX # Configure step -emcmake cmake -DCMAKE_BUILD_TYPE=Release \ +emcmake cmake -DCMAKE_BUILD_TYPE=Release \ -DUSE_CLING=OFF \ -DUSE_REPL=ON \ -DCMAKE_PREFIX_PATH=$PREFIX \ -DLLVM_DIR=$PREFIX \ -DLLD_DIR=$PREFIX \ -DClang_DIR=$PREFIX \ - -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_PREFIX=$PREFIX \ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ ../ diff --git a/recipes/recipes_emscripten/cppinterop/patches/lld.patch b/recipes/recipes_emscripten/cppinterop/patches/lld.patch index f1273ec98b7..c50a511d08a 100644 --- a/recipes/recipes_emscripten/cppinterop/patches/lld.patch +++ b/recipes/recipes_emscripten/cppinterop/patches/lld.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index bcd16a9..8060d9f 100644 +index bcd16a9..1b0a528 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,11 +24,28 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) @@ -97,36 +97,11 @@ index bcd16a9..8060d9f 100644 ## Find supported Clang if (DEFINED CLANG_VERSION) -@@ -237,6 +299,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - if (USE_CLING) - include_directories(SYSTEM ${CLING_INCLUDE_DIRS}) - endif(USE_CLING) -+ include_directories(SYSTEM ${LLD_INCLUDE_DIRS}) - include_directories(SYSTEM ${CLANG_INCLUDE_DIRS}) - include_directories(SYSTEM ${LLVM_INCLUDE_DIRS}) - separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) -@@ -247,6 +310,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - endif(USE_CLING) - message(STATUS "CLANG_INCLUDE_DIRS: ${CLANG_INCLUDE_DIRS}") - message(STATUS "LLVM_INCLUDE_DIRS: ${LLVM_INCLUDE_DIRS}") -+ message(STATUS "LLD_INCLUDE_DIRS: ${LLD_INCLUDE_DIRS}") - message(STATUS "LLVM_DEFINITIONS_LIST: ${LLVM_DEFINITIONS_LIST}") - - # If the llvm sources are present add them with higher priority. -@@ -299,7 +363,7 @@ endif() - - # Add appropriate flags for GCC - if (LLVM_COMPILER_IS_GCC_COMPATIBLE) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common -Woverloaded-virtual -Wcast-qual -fno-strict-aliasing -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings") -+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common -Woverloaded-virtual -Wcast-qual -fno-strict-aliasing -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -fPIC") - endif () - - # Fixes "C++ exception handler used, but unwind semantics are not enabled" warning Windows diff --git a/lib/Interpreter/CMakeLists.txt b/lib/Interpreter/CMakeLists.txt -index 7f4ca53..a151d96 100644 +index 7f4ca53..7df92e7 100644 --- a/lib/Interpreter/CMakeLists.txt +++ b/lib/Interpreter/CMakeLists.txt -@@ -1,108 +1,22 @@ +@@ -1,106 +1,126 @@ -set(LLVM_LINK_COMPONENTS - ${LLVM_TARGETS_TO_BUILD} - BinaryFormat @@ -142,19 +117,16 @@ index 7f4ca53..a151d96 100644 -if ("LLVMOrcDebugging" IN_LIST LLVM_AVAILABLE_LIBS) - list(APPEND LLVM_LINK_COMPONENTS OrcDebugging) -endif() -+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) -+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-s SIDE_MODULE=1 -s EXPORT_ALL=1 -s LINKABLE=1") -+set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-s SIDE_MODULE=1 -s EXPORT_ALL=1 -s LINKABLE=1") -+set(CMAKE_STRIP FALSE) -+ -+add_llvm_library(clangCppInterOp -+ SHARED ++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) -set(DLM -+ CppInterOp.cpp - DynamicLibraryManager.cpp - DynamicLibraryManagerSymbol.cpp - Paths.cpp +- DynamicLibraryManager.cpp +- DynamicLibraryManagerSymbol.cpp +- Paths.cpp -) -if (USE_CLING) - set(LLVM_OPTIONAL_SOURCES ${LLVM_OPTIONAL_SOURCES} ${DLM}) @@ -163,14 +135,20 @@ index 7f4ca53..a151d96 100644 -if (USE_REPL) - #Use DML optional sources -endif(USE_REPL) -- ++ add_llvm_library(clangCppInterOp ++ SHARED + -if (USE_CLING) - set(cling_clang_interp clingInterpreter) -endif() -if (USE_REPL) - set(cling_clang_interp clangInterpreter) -endif() -- ++ CppInterOp.cpp ++ DynamicLibraryManager.cpp ++ DynamicLibraryManagerSymbol.cpp ++ Paths.cpp + -set(link_libs - ${cling_clang_interp} - clangAST @@ -178,12 +156,43 @@ index 7f4ca53..a151d96 100644 - clangFrontend - clangLex - clangSema -- ) ++ # Additional libraries from Clang and LLD ++ LINK_LIBS ++ clangInterpreter ++ ) ++else() ++ set(LLVM_LINK_COMPONENTS ++ ${LLVM_TARGETS_TO_BUILD} ++ BinaryFormat ++ Core ++ Object ++ OrcJit ++ Support + ) ++ # FIXME: Investigate why this needs to be conditionally included. ++ if ("LLVMFrontendDriver" IN_LIST LLVM_AVAILABLE_LIBS) ++ list(APPEND LLVM_LINK_COMPONENTS FrontendDriver) ++ endif() ++ if ("LLVMOrcDebugging" IN_LIST LLVM_AVAILABLE_LIBS) ++ list(APPEND LLVM_LINK_COMPONENTS OrcDebugging) ++ endif() - if(NOT WIN32) - list(APPEND link_libs dl) - endif() -- ++ set(DLM ++ DynamicLibraryManager.cpp ++ DynamicLibraryManagerSymbol.cpp ++ Paths.cpp ++ ) ++ if (USE_CLING) ++ set(LLVM_OPTIONAL_SOURCES ${LLVM_OPTIONAL_SOURCES} ${DLM}) ++ set(DLM) ++ endif(USE_CLING) ++ if (USE_REPL) ++ #Use DML optional sources ++ endif(USE_REPL) + -# Get rid of libLLVM-X.so which is appended to the list of static libraries. -if (LLVM_LINK_LLVM_DYLIB) - set(new_libs ${link_libs}) @@ -201,8 +210,37 @@ index 7f4ca53..a151d96 100644 - list(APPEND static_transitive_libs ${transitive_lib}) - else() - # Filter our libLLVM.so and friends. -- continue() -- endif() ++ if (USE_CLING) ++ set(cling_clang_interp clingInterpreter) ++ endif() ++ if (USE_REPL) ++ set(cling_clang_interp clangInterpreter) ++ endif() ++ ++ set(link_libs ++ ${cling_clang_interp} ++ clangAST ++ clangBasic ++ clangFrontend ++ clangLex ++ clangSema ++ ) ++ ++ if(NOT WIN32) ++ list(APPEND link_libs dl) ++ endif() ++ ++ # Get rid of libLLVM-X.so which is appended to the list of static libraries. ++ if (LLVM_LINK_LLVM_DYLIB) ++ set(new_libs ${link_libs}) ++ set(libs ${new_libs}) ++ while(NOT "${new_libs}" STREQUAL "") ++ foreach(lib ${new_libs}) ++ if(TARGET ${lib}) ++ get_target_property(transitive_libs ${lib} INTERFACE_LINK_LIBRARIES) ++ if (NOT transitive_libs) + continue() + endif() - if(NOT ${transitive_lib} IN_LIST libs) - list(APPEND newer_libs ${transitive_lib}) - list(APPEND libs ${transitive_lib}) @@ -230,21 +268,57 @@ index 7f4ca53..a151d96 100644 - clangStaticAnalyzerCore - ) -endif(LLVM_LINK_LLVM_DYLIB) -- ++ foreach(transitive_lib ${transitive_libs}) ++ get_target_property(lib_type ${transitive_lib} TYPE) ++ if("${lib_type}" STREQUAL "STATIC_LIBRARY") ++ list(APPEND static_transitive_libs ${transitive_lib}) ++ else() ++ # Filter our libLLVM.so and friends. ++ continue() ++ endif() ++ if(NOT ${transitive_lib} IN_LIST libs) ++ list(APPEND newer_libs ${transitive_lib}) ++ list(APPEND libs ${transitive_lib}) ++ endif() ++ endforeach(transitive_lib) ++ # Update the target properties with the list of only static libraries. ++ set_target_properties(${lib} PROPERTIES INTERFACE_LINK_LIBRARIES "${static_transitive_libs}") ++ set(static_transitive_libs "") ++ endif() ++ endforeach(lib) ++ set(new_libs ${newer_libs}) ++ set(newer_libs "") ++ endwhile() ++ # We just got rid of the libLLVM.so and other components shipped as shared ++ # libraries, we need to make up for the missing dependency. ++ list(APPEND LLVM_LINK_COMPONENTS ++ Coverage ++ FrontendHLSL ++ LTO ++ ) ++ # We will need to append the missing dependencies to pull in the right ++ # LLVM library dependencies. ++ list(APPEND link_libs ++ clangCodeGen ++ clangStaticAnalyzerCore ++ ) ++ endif(LLVM_LINK_LLVM_DYLIB) + -add_llvm_library(clangCppInterOp - DISABLE_LLVM_LINK_LLVM_DYLIB - CppInterOp.cpp - ${DLM} -+ # Additional libraries from Clang and LLD - LINK_LIBS +- LINK_LIBS - ${link_libs} - ) -+ clangInterpreter -+) ++ add_llvm_library(clangCppInterOp ++ DISABLE_LLVM_LINK_LLVM_DYLIB ++ CppInterOp.cpp ++ ${DLM} ++ LINK_LIBS ++ ${link_libs} ++ ) ++endif() string(REPLACE ";" "\;" _VER CPPINTEROP_VERSION) set_source_files_properties(CppInterOp.cpp PROPERTIES COMPILE_DEFINITIONS - "LLVM_BINARY_DIR=\"${LLVM_BINARY_DIR}\";CPPINTEROP_VERSION=\"${_VAR}\"" --) -+) -\ No newline at end of file diff --git a/recipes/recipes_emscripten/cppinterop/recipe.yaml b/recipes/recipes_emscripten/cppinterop/recipe.yaml index 8dbdf816489..9b9f8873b2f 100644 --- a/recipes/recipes_emscripten/cppinterop/recipe.yaml +++ b/recipes/recipes_emscripten/cppinterop/recipe.yaml @@ -13,7 +13,7 @@ source: - patches/new.patch build: - number: 3 + number: 4 requirements: build: