https://github.com/mcbarton updated https://github.com/llvm/llvm-project/pull/150977
>From de878527f1671d6effa690a7e01d86cd41446fcc Mon Sep 17 00:00:00 2001 From: mcbarton <150042563+mcbar...@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:33:29 +0100 Subject: [PATCH 1/2] Enable running ClangReplInterpreterTests in an Emscripten environment --- clang/unittests/Interpreter/CMakeLists.txt | 59 +++++++++++++++---- .../IncrementalCompilerBuilderTest.cpp | 3 + .../unittests/Interpreter/InterpreterTest.cpp | 9 +++ llvm/cmake/modules/AddLLVM.cmake | 4 +- .../TargetInfo/WebAssemblyTargetInfo.cpp | 5 +- 5 files changed, 65 insertions(+), 15 deletions(-) diff --git a/clang/unittests/Interpreter/CMakeLists.txt b/clang/unittests/Interpreter/CMakeLists.txt index 1dda9024075a1..347eb4b639ef3 100644 --- a/clang/unittests/Interpreter/CMakeLists.txt +++ b/clang/unittests/Interpreter/CMakeLists.txt @@ -1,3 +1,34 @@ +if(EMSCRIPTEN) +set(LLVM_COMPONENTS_TO_LINK + "" + ) +set(LLVM_LIBS_TO_LINK + "" + ) +set(CLANG_LIBS_TO_LINK + clangInterpreter + ) +else() +set(LLVM_COMPONENTS_TO_LINK + ${LLVM_TARGETS_TO_BUILD} + Core + MC + OrcJIT + Support + TargetParser + ) +set(LLVM_LIBS_TO_LINK + LLVMTestingSupport + ) +set(CLANG_LIBS_TO_LINK + clangAST + clangBasic + clangInterpreter + clangFrontend + clangSema + ) +endif() + add_distinct_clang_unittest(ClangReplInterpreterTests IncrementalCompilerBuilderTest.cpp IncrementalProcessingTest.cpp @@ -8,24 +39,28 @@ add_distinct_clang_unittest(ClangReplInterpreterTests EXPORT_SYMBOLS CLANG_LIBS - clangAST - clangBasic - clangInterpreter - clangFrontend - clangSema + ${CLANG_LIBS_TO_LINK} LINK_LIBS - LLVMTestingSupport + ${LLVM_LIBS_TO_LINK} LLVM_COMPONENTS - ${LLVM_TARGETS_TO_BUILD} - Core - MC - OrcJIT - Support - TargetParser + ${LLVM_COMPONENTS_TO_LINK} ) +if(EMSCRIPTEN) +target_link_options(ClangReplInterpreterTests + PUBLIC "SHELL: -s MAIN_MODULE=1" + PUBLIC "SHELL: -s ALLOW_MEMORY_GROWTH=1" + PUBLIC "SHELL: -s STACK_SIZE=32mb" + PUBLIC "SHELL: -s INITIAL_MEMORY=128mb" + PUBLIC "SHELL: --emrun" +) +set_target_properties(ClangReplInterpreterTests PROPERTIES + SUFFIX ".html" +) +endif() + # Exceptions on Windows are not yet supported. if(NOT WIN32) add_subdirectory(ExceptionTests) diff --git a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp index c4a40071f55cf..7c17e28bf1a68 100644 --- a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp +++ b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp @@ -37,6 +37,9 @@ TEST(IncrementalCompilerBuilder, SetCompilerArgs) { } TEST(IncrementalCompilerBuilder, SetTargetTriple) { +#ifdef EMSCRIPTEN + GTEST_SKIP() << "Test fails for Emscipten builds"; +#endif auto CB = clang::IncrementalCompilerBuilder(); CB.SetTargetTriple("armv6-none-eabi"); auto CI = cantFail(CB.CreateCpp()); diff --git a/clang/unittests/Interpreter/InterpreterTest.cpp b/clang/unittests/Interpreter/InterpreterTest.cpp index 768058b954d49..ad345d2f9e1b6 100644 --- a/clang/unittests/Interpreter/InterpreterTest.cpp +++ b/clang/unittests/Interpreter/InterpreterTest.cpp @@ -147,6 +147,9 @@ TEST_F(InterpreterTest, DeclsAndStatements) { } TEST_F(InterpreterTest, UndoCommand) { +#ifdef EMSCRIPTEN + GTEST_SKIP() << "Test fails for Emscipten builds"; +#endif Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"}; // Create the diagnostic engine with unowned consumer. @@ -256,6 +259,9 @@ static NamedDecl *LookupSingleName(Interpreter &Interp, const char *Name) { } TEST_F(InterpreterTest, InstantiateTemplate) { +#ifdef EMSCRIPTEN + GTEST_SKIP() << "Test fails for Emscipten builds"; +#endif // FIXME: We cannot yet handle delayed template parsing. If we run with // -fdelayed-template-parsing we try adding the newly created decl to the // active PTU which causes an assert. @@ -295,6 +301,9 @@ TEST_F(InterpreterTest, InstantiateTemplate) { } TEST_F(InterpreterTest, Value) { +#ifdef EMSCRIPTEN + GTEST_SKIP() << "Test fails for Emscipten builds"; +#endif std::vector<const char *> Args = {"-fno-sized-deallocation"}; std::unique_ptr<Interpreter> Interp = createInterpreter(Args); diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 83772ed8d2b13..40614d2b47868 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -1764,7 +1764,9 @@ function(add_unittest test_suite test_name) set(LLVM_REQUIRES_RTTI OFF) endif() - list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream + if(NOT EMSCRIPTEN) + list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream + endif() add_llvm_executable(${test_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) get_subproject_title(subproject_title) set_target_properties(${test_name} PROPERTIES FOLDER "${subproject_title}/Tests/Unit") diff --git a/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp b/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp index e65fa8e60aeb1..d0371374daf2d 100644 --- a/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp +++ b/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp @@ -29,8 +29,9 @@ Target &llvm::getTheWebAssemblyTarget64() { extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeWebAssemblyTargetInfo() { - RegisterTarget<Triple::wasm32> X(getTheWebAssemblyTarget32(), "wasm32", - "WebAssembly 32-bit", "WebAssembly"); + RegisterTarget<Triple::wasm32, /*HasJIT=*/true> X( + getTheWebAssemblyTarget32(), "wasm32", "WebAssembly 32-bit", + "WebAssembly"); RegisterTarget<Triple::wasm64> Y(getTheWebAssemblyTarget64(), "wasm64", "WebAssembly 64-bit", "WebAssembly"); } >From ded0a3b199e2cd2e90810f54e54bc5b2c9310dfe Mon Sep 17 00:00:00 2001 From: mcbarton <matthew.c.bar...@hotmail.co.uk> Date: Mon, 28 Jul 2025 19:49:02 +0100 Subject: [PATCH 2/2] Switch EMSCRIPTEN for __EMSCRIPTEN__ in PR --- .../Interpreter/IncrementalCompilerBuilderTest.cpp | 2 +- clang/unittests/Interpreter/InterpreterTest.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp index 7c17e28bf1a68..b67a1f01be4b6 100644 --- a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp +++ b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp @@ -37,7 +37,7 @@ TEST(IncrementalCompilerBuilder, SetCompilerArgs) { } TEST(IncrementalCompilerBuilder, SetTargetTriple) { -#ifdef EMSCRIPTEN +#ifdef __EMSCRIPTEN__ GTEST_SKIP() << "Test fails for Emscipten builds"; #endif auto CB = clang::IncrementalCompilerBuilder(); diff --git a/clang/unittests/Interpreter/InterpreterTest.cpp b/clang/unittests/Interpreter/InterpreterTest.cpp index ad345d2f9e1b6..52d2b83fdb36f 100644 --- a/clang/unittests/Interpreter/InterpreterTest.cpp +++ b/clang/unittests/Interpreter/InterpreterTest.cpp @@ -147,7 +147,7 @@ TEST_F(InterpreterTest, DeclsAndStatements) { } TEST_F(InterpreterTest, UndoCommand) { -#ifdef EMSCRIPTEN +#ifdef __EMSCRIPTEN__ GTEST_SKIP() << "Test fails for Emscipten builds"; #endif Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"}; @@ -259,7 +259,7 @@ static NamedDecl *LookupSingleName(Interpreter &Interp, const char *Name) { } TEST_F(InterpreterTest, InstantiateTemplate) { -#ifdef EMSCRIPTEN +#ifdef __EMSCRIPTEN__ GTEST_SKIP() << "Test fails for Emscipten builds"; #endif // FIXME: We cannot yet handle delayed template parsing. If we run with @@ -301,7 +301,7 @@ TEST_F(InterpreterTest, InstantiateTemplate) { } TEST_F(InterpreterTest, Value) { -#ifdef EMSCRIPTEN +#ifdef __EMSCRIPTEN__ GTEST_SKIP() << "Test fails for Emscipten builds"; #endif std::vector<const char *> Args = {"-fno-sized-deallocation"}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits