diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml index 75fb1f310..64fbb5fff 100644 --- a/.github/workflows/emscripten.yml +++ b/.github/workflows/emscripten.yml @@ -269,6 +269,13 @@ jobs: cd llvm-project # Build + mkdir native_build + cd native_build + cmake -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm/ + cmake --build . --target llvm-tblgen clang-tblgen --parallel $(nproc --all) + $env:PWD_DIR= $PWD.Path + $env:NATIVE_DIR="$env:PWD_DIR/bin/" + cd .. mkdir build if ( "${{ matrix.cling }}" -imatch "On" ) { @@ -295,23 +302,21 @@ jobs: -DLLVM_BUILD_TOOLS=OFF ` -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` + -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` ..\llvm emmake make clang cling lld gtest_main } else { cp -r ..\patches\llvm\emscripten-clang${{ matrix.clang-runtime }}* - cp -r ..\patches\llvm\Windows-emscripten-clang${{ matrix.clang-runtime }}* #FIXME: Apply patches without hardcoding if ( "${{ matrix.clang-runtime }}" -imatch "19" ) { - git apply -v Windows-emscripten-clang19-1-CrossCompile.patch git apply -v emscripten-clang19-2-shift-temporary-files-to-tmp-dir.patch git apply -v emscripten-clang19-3-remove-zdefs.patch } elseif ( "${{ matrix.clang-runtime }}" -imatch "20" ) { - git apply -v Windows-emscripten-clang20-1-CrossCompile.patch git apply -v emscripten-clang20-2-shift-temporary-files-to-tmp-dir.patch } cd build @@ -336,6 +341,7 @@ jobs: -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` -G Ninja ` + -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` ..\llvm emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm } diff --git a/Emscripten-build-instructions.md b/Emscripten-build-instructions.md index 7bf9fa849..497205553 100644 --- a/Emscripten-build-instructions.md +++ b/Emscripten-build-instructions.md @@ -63,8 +63,6 @@ On Windows execute the following ```powershell cd .\llvm-project\ cp -r ..\patches\llvm\emscripten-clang20* -cp -r ..\patches\llvm\Windows-emscripten-clang20* -git apply -v Windows-emscripten-clang20-1-CrossCompile.patch git apply -v emscripten-clang20-2-shift-temporary-files-to-tmp-dir.patch ``` @@ -108,6 +106,13 @@ emmake make lldWasm -j $(nproc --all) or executing ```powershell +mkdir native_build +cd native_build +cmake -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm/ +cmake --build . --target llvm-tblgen clang-tblgen --parallel $(nproc --all) +$env:PWD_DIR= $PWD.Path +$env:NATIVE_DIR="$env:PWD_DIR/bin/" +cd .. mkdir build cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release ` @@ -129,6 +134,7 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release ` -DLLVM_BUILD_TOOLS=OFF ` -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` + -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` -G Ninja ` ..\llvm emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm diff --git a/docs/Emscripten-build-instructions.rst b/docs/Emscripten-build-instructions.rst index 385988631..82af5fc7e 100644 --- a/docs/Emscripten-build-instructions.rst +++ b/docs/Emscripten-build-instructions.rst @@ -82,8 +82,6 @@ On Windows execute the following cd .\llvm-project\ cp -r ..\patches\llvm\emscripten-clang20* - cp -r ..\patches\llvm\Windows-emscripten-clang20* - git apply -v Windows-emscripten-clang20-1-CrossCompile.patch git apply -v emscripten-clang20-2-shift-temporary-files-to-tmp-dir.patch We are now in a position to build an emscripten build of llvm by executing the following on Linux @@ -128,6 +126,13 @@ or executing .. code:: powershell + mkdir native_build + cd native_build + cmake -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_BUILD_TYPE=Release -G Ninja ../llvm/ + cmake --build . --target llvm-tblgen clang-tblgen --parallel $(nproc --all) + $env:PWD_DIR= $PWD.Path + $env:NATIVE_DIR="$env:PWD_DIR/bin/" + cd .. mkdir build cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release ` @@ -149,6 +154,7 @@ or executing -DLLVM_BUILD_TOOLS=OFF ` -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` + -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` -G Ninja ` ..\llvm emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm diff --git a/patches/llvm/Windows-emscripten-clang19-1-CrossCompile.patch b/patches/llvm/Windows-emscripten-clang19-1-CrossCompile.patch deleted file mode 100644 index a1ffeccc8..000000000 --- a/patches/llvm/Windows-emscripten-clang19-1-CrossCompile.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/llvm/cmake/modules/CrossCompile.cmake b/llvm/cmake/modules/CrossCompile.cmake -index 39b4abaa0..474ceddbb 100644 ---- a/llvm/cmake/modules/CrossCompile.cmake -+++ b/llvm/cmake/modules/CrossCompile.cmake -@@ -74,10 +74,12 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype) - endif() - - add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt -- COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -+ COMMAND ${CMAKE_COMMAND} -G Ninja - -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}" -- -DCMAKE_C_COMPILER_LAUNCHER="${CMAKE_C_COMPILER_LAUNCHER}" -- -DCMAKE_CXX_COMPILER_LAUNCHER="${CMAKE_CXX_COMPILER_LAUNCHER}" -+ -DCMAKE_C_COMPILER="clang-cl" -+ -DCMAKE_CXX_COMPILER="clang-cl" -+ -DCMAKE_ASM_MASM_COMPILER=llvm-ml -+ -DCMAKE_ASM_MASM_FLAGS="-m64" - ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_CURRENT_SOURCE_DIR} - ${CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name}} - -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE diff --git a/patches/llvm/Windows-emscripten-clang20-1-CrossCompile.patch b/patches/llvm/Windows-emscripten-clang20-1-CrossCompile.patch deleted file mode 100644 index a1ffeccc8..000000000 --- a/patches/llvm/Windows-emscripten-clang20-1-CrossCompile.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/llvm/cmake/modules/CrossCompile.cmake b/llvm/cmake/modules/CrossCompile.cmake -index 39b4abaa0..474ceddbb 100644 ---- a/llvm/cmake/modules/CrossCompile.cmake -+++ b/llvm/cmake/modules/CrossCompile.cmake -@@ -74,10 +74,12 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype) - endif() - - add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt -- COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -+ COMMAND ${CMAKE_COMMAND} -G Ninja - -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}" -- -DCMAKE_C_COMPILER_LAUNCHER="${CMAKE_C_COMPILER_LAUNCHER}" -- -DCMAKE_CXX_COMPILER_LAUNCHER="${CMAKE_CXX_COMPILER_LAUNCHER}" -+ -DCMAKE_C_COMPILER="clang-cl" -+ -DCMAKE_CXX_COMPILER="clang-cl" -+ -DCMAKE_ASM_MASM_COMPILER=llvm-ml -+ -DCMAKE_ASM_MASM_FLAGS="-m64" - ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_CURRENT_SOURCE_DIR} - ${CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name}} - -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE