@@ -3,20 +3,230 @@ name: Build emsdk dependencies
33on :
44 workflow_dispatch :
55 inputs :
6- branch :
6+ llvm_build :
77 description : ' LLVM Webassembly arm64'
88 required : false
99 default : false
1010 type : boolean
11+ llvm_build_cross_compilation :
12+ description : ' LLVM Webassembly arm64 (cross compilation)'
13+ required : false
14+ default : false
15+ type : boolean
16+ binaryen_build :
17+ description : ' Binaryen Arm64'
18+ required : false
19+ default : false
20+ type : boolean
21+ emscripten_build :
22+ description : ' Emscripten'
23+ required : false
24+ default : false
25+ type : boolean
26+ nodejs_build :
27+ description : ' Node.js arm64'
28+ required : false
29+ default : false
30+ type : boolean
31+ wasm_binaries_build :
32+ description : ' WASM binaries arm64'
33+ required : false
34+ default : false
35+ type : boolean
1136
1237jobs :
1338 build-llvm-webassembly-arm64 :
39+ if : ${{ inputs.llvm_build || inputs.wasm_binaries_build }}
1440
15- runs-on : windows-latest
41+ runs-on : [self-hosted, Windows, ARM64, WASM]
42+ timeout-minutes : 600
1643
1744 steps :
1845
1946 - name : Build LLVM WebAssembly arm64
47+ shell : cmd
48+ run : |
49+ git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git --single-branch --depth 1
50+ cd llvm-project
51+ if exist build_arm64 rmdir /s /q build_arm64
52+ call "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" arm64
53+ cmake -G Ninja -S llvm -B build_arm64 ^
54+ -DCLANG_ENABLE_ARCMT=OFF ^
55+ -DCLANG_ENABLE_STATIC_ANALYZER=OFF ^
56+ -DCMAKE_BUILD_TYPE=Release ^
57+ -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ^
58+ -DCMAKE_CXX_COMPILER_LAUNCHER='ccache' ^
59+ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^
60+ -DCMAKE_LINKER="C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\Llvm\x64\bin\lld-link.exe" ^
61+ -DLLVM_BUILD_LLVM_DYLIB=OFF ^
62+ -DLLVM_LINK_LLVM_DYLIB=OFF ^
63+ -DLLVM_DISTRIBUTION_COMPONENTS='clang;lld;llvm-ar;llvm-addr2line;llvm-cxxfilt;llvm-dwarfdump;llvm-dwp;llvm-nm;llvm-objcopy;llvm-objdump;llvm-ranlib;llvm-readobj;llvm-size;llvm-strings;llvm-strip;llvm-symbolizer;clang-resource-headers' ^
64+ -DLLVM_ENABLE_ASSERTIONS=OFF ^
65+ -DLLVM_ENABLE_BINDINGS=OFF ^
66+ -DLLVM_ENABLE_LIBXML2=OFF ^
67+ -DLLVM_ENABLE_PROJECTS='lld;clang' ^
68+ -DLLVM_ENABLE_TERMINFO=ON ^
69+ -DLLVM_INCLUDE_EXAMPLES=OFF ^
70+ -DLLVM_INCLUDE_TESTS=OFF ^
71+ -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON ^
72+ -DLLVM_TARGETS_TO_BUILD='host;WebAssembly' ^
73+ -DLLVM_TOOL_LTO_BUILD=OFF ^
74+ -DLLVM_TOOLCHAIN_TOOLS='clang;lld;llvm-ar;llvm-addr2line;llvm-cxxfilt;llvm-dwarfdump;llvm-dwp;llvm-nm;llvm-objcopy;llvm-objdump;llvm-ranlib;llvm-readobj;llvm-size;llvm-strings;llvm-strip;llvm-symbolizer;clang-resource-headers' ^
75+ -DLLVM_USE_CRT_RELEASE=MT ^
76+ -DLLVM_USE_CRT_DEBUG=MTd
77+ cd build_arm64
78+ ninja -v install-distribution
79+
80+ - name : Pack llvm-arm64.zip
81+ run : |
82+ cd llvm-project/build_arm64
83+ $unneeded_tool = 'clang-check', 'clang-cl', 'clang-cpp',
84+ 'clang-extdef-mapping', 'clang-format',
85+ 'clang-func-mapping', 'clang-import-test',
86+ 'clang-linker-wrapper', 'clang-offload-bundler',
87+ 'clang-offload-packager', 'clang-refactor',
88+ 'clang-rename', 'clang-repl', 'clang-scan-deps',
89+ 'diagtool', 'git-clang-format', 'hmaptool', 'ld.lld',
90+ 'ld64.lld', 'ld64.lld.darwinnew', 'ld64.lld.darwinold',
91+ 'lld-link', 'libclang.dll', 'llvm-cov', 'llvm-ml',
92+ 'llvm-lib', 'llvm-pdbutil', 'llvm-profdata',
93+ 'llvm-rc'
94+ foreach ($tool in $unneeded_tool) {
95+ $tool = "bin" + $tool + ".exe"
96+ if (Test-Path $tool) {
97+ "Remove " + $tool
98+ Remove-Item $tool
99+ }
100+ }
101+ Compress-Archive -Path bin,lib\clang -DestinationPath llvm-arm64
102+
103+ - name : Archive llvm-arm64.zip
104+ uses : actions/upload-artifact@v3
105+ with :
106+ name : llvm-arm64.zip
107+ path : llvm-project/build_arm64/llvm-arm64.zip
108+ retention-days : 1
109+
110+ build-llvm-webassembly-arm64_cross_compilation :
111+ if : ${{ inputs.llvm_build_llvm_build_cross_compilation }}
112+
113+ runs-on : windows-latest
114+
115+ steps :
116+
117+ - name : Build LLVM WebAssembly arm64 (Cross Compilation)
118+ run : |
119+ Set-PSDebug -Trace 1
120+ git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git --single-branch --branch main --depth 1
121+ cd llvm-project
122+ cmake -S llvm -B build_host -DLLVM_ENABLE_PROJECTS='lld;clang' -DLLVM_TARGETS_TO_BUILD=""
123+ cmake --build build_host --target llvm-tblgen llvm-nm clang-tblgen --config MinSizeRel
124+ $llvm_root = Get-Location
125+ cmake -S llvm -B build_arm64 -A ARM64 `
126+ -DLLVM_TABLEGEN="$llvm_root\build_host\MinSizeRel\bin\llvm-tblgen.exe" `
127+ -DCLANG_TABLEGEN="$llvm_root\build_host\MinSizeRel\bin\clang-tblgen.exe" `
128+ -DLLVM_NM="$llvm_root\build_host\MinSizeRel\bin\llvm-nm.exe" `
129+ -DLLVM_ENABLE_PROJECTS='lld;clang' -DLLVM_TARGETS_TO_BUILD="host;WebAssembly" `
130+ -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF
131+ cmake --build build_arm64 --config MinSizeRel
132+
133+ build-binaryen :
134+ if : ${{ inputs.binaryen_build || inputs.wasm_binaries_build}}
135+
136+ runs-on : [self-hosted, Windows, ARM64, WASM]
137+
138+ steps :
139+ - name : Build Binaryen for Arm64
140+ shell : cmd
141+ run : |
142+ git clone https://github.com/WebAssembly/binaryen.git --single-branch --depth 1
143+ cd binaryen
144+ git submodule init
145+ git submodule update
146+ if exist bin rmdir /s /q bin
147+ call "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" arm64
148+ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER='ccache' .
149+ ninja
150+
151+
152+ - name : Archive binaryen-arm64.zip
153+ uses : actions/upload-artifact@v3
154+ with :
155+ name : binaryen-arm64.zip
156+ path : binaryen/binaryen-arm64.zip
157+ retention-days : 1
158+
159+ build-nodejs :
160+ if : ${{ inputs.nodejs_build }}
161+
162+ runs-on : [self-hosted, Windows, ARM64, WASM]
163+
164+ steps :
165+
166+ - name : Build Node.js arm64
167+ run : |
168+ Set-PSDebug -Trace 1
169+ git clone https://github.com/Windows-on-ARM-Experiments/node.git --single-branch -b fix-arm64-compilation --depth 1
170+ cd node
171+ .\vcbuild openssl-no-asm arm64
172+
173+ build-emscripten :
174+ if : ${{ inputs.emscripten_build || inputs.wasm_binaries_build }}
175+
176+ runs-on : [ubuntu-latest]
177+
178+ steps :
179+
180+ - name : Build Emscripten
181+ run : |
182+ git clone https://github.com/emscripten-core/emscripten.git --single-branch --depth 1
183+ cd emscripten
184+ ./tools/install.py ../emscripten_package
185+ npm ci --production --no-optional ../emscripten_package
186+ cd ../emscripten_package
187+ zip -r ../emscripten_package.zip .
188+
189+ - name : Archive emscripten_package.zip
190+ uses : actions/upload-artifact@v3
191+ with :
192+ name : emscripten_package.zip
193+ path : emscripten_package.zip
194+ retention-days : 1
195+
196+ build-wasm-binaries :
197+ if : ${{ inputs.wasm_binaries_build }}
198+ needs : [build-emscripten, build-binaryen, build-llvm-webassembly-arm64]
199+
200+ runs-on : [windows-latest]
201+
202+ steps :
203+
204+ - uses : actions/download-artifact@v3
205+ with :
206+ name : emscripten_package.zip
207+
208+ - uses : actions/download-artifact@v3
209+ with :
210+ name : llvm-arm64.zip
211+
212+ - uses : actions/download-artifact@v3
213+ with :
214+ name : binaryen-arm64.zip
215+
216+ - name : Pack wasm-binaries for Arm64
20217 run : |
21- set
22218 ls
219+ New-Item -ItemType Directory -Force -Path emsdk/emscripten
220+ Expand-Archive -LiteralPath emscripten_package.zip -DestinationPath emsdk\emscripten
221+ Expand-Archive -LiteralPath llvm-arm64.zip -DestinationPath emsdk
222+ Expand-Archive -LiteralPath binaryen-arm64.zip -DestinationPath emsdk
223+ cd emsdk
224+ Compress-Archive -Path * -DestinationPath wasm-binaries-arm64
225+
226+ - name : Archive wasm-binaries-arm64.zip
227+ uses : actions/upload-artifact@v3
228+ with :
229+ name : wasm-binaries-arm64.zip
230+ path : emsdk/wasm-binaries-arm64.zip
231+ retention-days : 3
232+
0 commit comments