4242          latest-factors : | 
4343            msvc Optimized-Debug 
4444            gcc UBSan Coverage 
45-             clang UBSan ASan 
45+             clang UBSan ASan MSan  
4646            apple-clang UBSan ASan 
4747           factors : ' ' 
4848          runs-on : | 
@@ -66,21 +66,29 @@ jobs:
6666            clang: git build-essential pkg-config python3 curl openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev g++-14=14.2.0-4ubuntu2~24.04 
6767            msvc: '' 
6868           extra-values : | 
69-             llvm-hash: a1b6e7ff393533a5c4f3bdfd4efe5da106e2de2b 
69+             use-libcxx: {{#if (ieq compiler 'clang') }}true{{else}}false{{/if}} 
70+             llvm-path: {{#if (ieq compiler 'msvc') }}/a{{else if (ieq compiler 'apple-clang')}}/Users/runner/work{{else}}/__w{{/if}}/llvm 
71+             libcxx-runtimes: libcxx{{#if (ne compiler 'msvc')}};libcxxabi{{/if}} 
72+             llvm-hash: 3f797a8342c3dbe4a260b26f948d8776ff490431 
7073            llvm-build-preset-prefix: {{#if optimized-debug}}debwithopt{{else}}{{{lowercase build-type}}}{{/if}} 
7174            llvm-build-preset-os: {{#if (ieq os 'windows') }}win{{else}}unix{{/if}} 
72-             llvm-sanitizer: {{#if (eq compiler 'gcc')}}{{else if ubsan}}-UBSan {{else if asan}}-ASan {{else if msan}}-MSan{{/if}} 
75+             llvm-sanitizer: {{#if (eq compiler 'gcc')}}{{else if ubsan}}-UBSan2 {{else if asan}}-ASan2 {{else if msan}}-MSan{{/if}} 
7376            llvm-build-preset: {{{ llvm-build-preset-prefix }}}-{{{ llvm-build-preset-os }}} 
7477            llvm-compiler-version: {{#if (or (contains version '*') (contains version '^'))}}{{else}}-{{{ version }}}{{/if}} 
7578            llvm-archive-basename: llvm-{{{ lowercase os }}}-{{{ compiler }}}{{{ llvm-compiler-version }}}-{{{ llvm-build-preset-prefix }}}{{{ llvm-sanitizer }}}-{{{ substr llvm-hash 0 7 }}} 
76-             llvm-root: ../third-party/llvm-project/install 
7779            llvm-archive-extension: {{#if (ieq os 'windows') }}7z{{else}}tar.bz2{{/if}} 
7880            llvm-archive-filename: {{{ llvm-archive-basename }}}.{{{ llvm-archive-extension }}} 
7981            llvm-sanitizer-config: {{#if (and (ne compiler 'clang') (ne compiler 'apple-clang'))}}{{else if ubsan}}Undefined{{else if asan}}Address{{else if msan}}MemoryWithOrigins{{/if}} 
80-             mrdocs-flags: {{#if (and (eq compiler 'gcc') (not asan)) }}-static{{/if}}{{#if (and (eq compiler 'clang') msan) }}-fsanitize-memory-track-origins{{/if}} 
81-             mrdocs-ccflags: {{{ ccflags }}} {{{ mrdocs-flags }}} 
82-             mrdocs-cxxflags: {{{ cxxflags }}} {{{ mrdocs-flags }}} 
83-             mrdocs-linkflags: {{#if asan }}-fsanitize=address{{/if}} 
82+             llvm-enable-assertions: {{#if (ieq use-libcxx 'true')}}ON{{else}}OFF{{/if}} 
83+             common-flags-base: {{#if (ieq compiler 'clang')}}-gz=zstd {{/if}} 
84+             common-flags: {{{ common-flags-base }}}{{#if msan }}-fsanitize-memory-track-origins {{/if}} 
85+             common-cxxflags-base: {{#if (ieq use-libcxx 'true') }}-nostdinc++ -isystem{{{ llvm-path }}}/include/c++/v1{{/if}} 
86+             common-ccflags: {{{ ccflags }}} {{{ common-flags }}} 
87+             common-cxxflags: {{{ cxxflags }}} {{{ common-flags }}} {{{ common-cxxflags-base }}} 
88+             common-ldflags: {{{ ldflags }}} {{#if (ieq use-libcxx 'true') }}-nostdlib++ -L{{{ llvm-path }}}/lib -lc++abi -lc++ -Wl,-rpath,{{{ llvm-path }}}/lib {{/if}}{{#if ubsan }}-fsanitize=undefined {{/if}}{{#if asan }}-fsanitize=address {{/if}}{{#if msan }}-fsanitize=memory {{/if}} 
89+             mrdocs-flags: {{#if (and (eq compiler 'gcc') (not asan)) }}-static{{/if}} 
90+             mrdocs-ccflags: {{{ common-ccflags }}} {{{ mrdocs-flags }}} 
91+             mrdocs-cxxflags: {{{ common-cxxflags }}} {{{ mrdocs-flags }}} 
8492            mrdocs-package-generators: {{#if (ieq os 'windows') }}7Z ZIP WIX{{else}}TGZ TXZ{{/if}} 
8593            mrdocs-release-package-artifact: release-packages-{{{ lowercase os }}} 
8694           output-file : matrix.json 
@@ -198,18 +206,15 @@ jobs:
198206        with :
199207          apt-get : ${{ matrix.install }} 
200208
201-       - name : Resolve LLVM Root 
202-         id : resolve-llvm-root 
209+       - name : Install LLVM packages 
210+         if : matrix.compiler == 'clang' 
211+         env :
212+           DEBIAN_FRONTEND : ' noninteractive' 
213+           TZ : ' Etc/UTC' 
203214        run : | 
204-           set -x 
205-           cd .. 
206-           llvm_root=$(pwd)/third-party/llvm-project/install 
207-           if [[ ${{ runner.os }} == 'Windows' ]]; then 
208-               llvm_root=$(echo "$llvm_root" | sed 's/\\/\//g') 
209-               llvm_root=$(echo $llvm_root | sed 's|^/d/|D:/|') 
210-               echo "$llvm_root" 
211-           fi 
212-           echo -E "llvm-root=$llvm_root" >> $GITHUB_OUTPUT 
215+           echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-21 main" >> /etc/apt/sources.list 
216+           apt-get update 
217+           apt-get install -y libclang-18-dev libclang-19-dev libclang-20-dev libclang-21-dev 
213218
214219       - name : Resolve Third-Party Directory 
215220        id : resolve-third-party-dir 
@@ -228,7 +233,7 @@ jobs:
228233        id : llvm-cache 
229234        uses : actions/cache@v4 
230235        with :
231-           path : ${{ steps.resolve- llvm-root.outputs.llvm-root  }} 
236+           path : ${{ matrix. llvm-path  }} 
232237          key : ${{ matrix.llvm-archive-basename }} 
233238
234239      - name : Download LLVM Binaries 
@@ -261,6 +266,41 @@ jobs:
261266              echo "found=$found" >> $GITHUB_OUTPUT 
262267          fi 
263268
269+        - name : Install libc++ 
270+         id : install_libcxx 
271+         uses : 
alandefreitas/cpp-actions/[email protected]   272+         if : steps.llvm-cache.outputs.cache-hit != 'true' && steps.llvm-download.outputs.found != 'true' 
273+         with :
274+           cmake-version : ' >=3.26' 
275+           source-dir : ../third-party/llvm-project/runtimes 
276+           git-repository : https://github.com/llvm/llvm-project.git 
277+           git-tag : ${{ matrix.llvm-hash }} 
278+           download-dir : ../third-party/llvm-project 
279+           build-dir : ${sourceDir}/build 
280+           build-type : ${{ matrix.build-type }} 
281+           extra-args : | 
282+             -D LLVM_USE_SANITIZER=${{ matrix.llvm-sanitizer-config }} 
283+             -D LLVM_OPTIMIZED_TABLEGEN=ON 
284+             -D LLVM_ENABLE_LIBCXX=OFF 
285+             -D LLVM_ENABLE_PROJECT="" 
286+             -D LLVM_ENABLE_RUNTIMES="${{ matrix.libcxx-runtimes }}" 
287+             -D LIBCXXABI_USE_LLVM_UNWINDER=OFF 
288+             -D CMAKE_C_FLAGS="${{ matrix.common-flags-base }}" 
289+             -D CMAKE_CXX_FLAGS="${{ matrix.common-flags-base }}" 
290+ 
291+            cc : ${{ steps.setup-cpp.outputs.cc }} 
292+           cxx : ${{ steps.setup-cpp.outputs.cxx }} 
293+           generator : Ninja 
294+           install : true 
295+           install-prefix : ${{ matrix.llvm-path }} 
296+           run-tests : false 
297+           trace-commands : true 
298+ 
299+       - name : Remove libcxx build-dir 
300+         if : steps.install_libcxx.outcome == 'success' 
301+         run : | 
302+           rm -r ../third-party/llvm-project/runtimes/build 
303+ 
264304       - name : Install LLVM 
265305        id : install_llvm 
266306        uses : 
alandefreitas/cpp-actions/[email protected]   @@ -274,26 +314,34 @@ jobs:
274314          patches : | 
275315            ./third-party/llvm/CMakePresets.json 
276316            ./third-party/llvm/CMakeUserPresets.json 
277-            build-dir : ${sourceDir}/llvm/ build 
317+            build-dir : ${sourceDir}/build 
278318          preset : ${{ matrix.llvm-build-preset }} 
279319          build-type : ${{ matrix.build-type }} 
280-           #  The LLVM_USE_SANITIZER option doesn't support GCC.
281320          extra-args : | 
282-             -DLLVM_USE_SANITIZER=${{ matrix.llvm-sanitizer-config }} 
321+             -D LLVM_ENABLE_ASSERTIONS=${{ matrix.llvm-enable-assertions }} 
322+             -D LLVM_USE_SANITIZER="${{ matrix.llvm-sanitizer-config }}" 
323+             -D LLVM_OPTIMIZED_TABLEGEN=ON 
324+             -D LLVM_COMPILER_CHECKED=ON 
325+             -D LLVM_BUILD_TOOLS=OFF 
326+             -D CLANG_BUILD_TOOLS=OFF 
327+             -D LLVM_ENABLE_RUNTIMES="" 
328+             -D CMAKE_C_FLAGS="${{ matrix.common-flags-base }}" 
329+             -D CMAKE_CXX_FLAGS="${{ matrix.common-flags-base }} ${{ matrix.common-cxxflags-base }}" 
330+             -D CMAKE_SHARED_LINKER_FLAGS="${{ matrix.common-ldflags }}" 
331+             -D CMAKE_EXE_LINKER_FLAGS="${{ matrix.common-ldflags }}" 
283332           cc : ${{ steps.setup-cpp.outputs.cc }} 
284333          cxx : ${{ steps.setup-cpp.outputs.cxx }} 
285-           ccflags : -gz=zstd 
286-           cxxflags : -gz=zstd 
287334          generator : Ninja 
288335          install : true 
289-           install-prefix : ${sourceDir}/../install  
336+           install-prefix : ${{ matrix.llvm-path }}  
290337          run-tests : false 
291338          trace-commands : true 
292339
293340      - name : Remove LLVM build-dir 
294341        if : steps.install_llvm.outcome == 'success' 
295342        run : | 
296-           rm -r ../third-party/llvm-project/llvm/llvm/build 
343+           ls -laR "${{ matrix.llvm-path }}" 
344+           rm -r ../third-party/llvm-project 
297345
298346       - name : Install Duktape 
299347        uses : 
alandefreitas/cpp-actions/[email protected]   @@ -306,8 +354,8 @@ jobs:
306354           build-dir : ${sourceDir}/build 
307355          cc : ${{ steps.setup-cpp.outputs.cc }} 
308356          cxx : ${{ steps.setup-cpp.outputs.cxx }} 
309-           ccflags : ${{ matrix.ccflags }} 
310-           cxxflags : ${{ matrix.cxxflags }} 
357+           ccflags : ${{ matrix.common- ccflags }} 
358+           cxxflags : ${{ matrix.common- cxxflags }} 
311359          build-type : ${{ matrix.build-type }} 
312360          shared : false 
313361          install : true 
@@ -325,11 +373,12 @@ jobs:
325373          build-dir : ${sourceDir}/build 
326374          cc : ${{ steps.setup-cpp.outputs.cc }} 
327375          cxx : ${{ steps.setup-cpp.outputs.cxx }} 
328-           ccflags : ${{ matrix.ccflags }} 
329-           cxxflags : ${{ matrix.cxxflags }} 
376+           ccflags : ${{ matrix.common- ccflags }} 
377+           cxxflags : ${{ matrix.common- cxxflags }} 
330378          build-type : Release 
331379          shared : false 
332380          extra-args : | 
381+             -D CMAKE_SHARED_LINKER_FLAGS="${{ matrix.common-ldflags }}" 
333382            -D LIBXML2_WITH_PROGRAMS=ON 
334383            -D LIBXML2_WITH_FTP=OFF  
335384            -D LIBXML2_WITH_HTTP=OFF 
@@ -388,11 +437,10 @@ jobs:
388437          install-prefix : .local 
389438          extra-args : | 
390439            -D MRDOCS_BUILD_DOCS=OFF 
391-             -D CMAKE_EXE_LINKER_FLAGS=${{ matrix.mrdocs-linkflags }} 
392-             -D LLVM_ROOT=${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/llvm-project/install 
393-             -D Clang_ROOT=${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/llvm-project/install 
394-             -D duktape_ROOT=${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/duktape/install 
395-             -D Duktape_ROOT=${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/duktape/install 
440+             -D CMAKE_EXE_LINKER_FLAGS="${{ matrix.common-ldflags }}" 
441+             -D LLVM_ROOT="${{ matrix.llvm-path }}" 
442+             -D duktape_ROOT="${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/duktape/install" 
443+             -D Duktape_ROOT="${{ steps.resolve-third-party-dir.outputs.third-party-dir }}/duktape/install" 
396444            ${{ runner.os == 'Windows' && '-D libxml2_ROOT=../third-party/libxml2/install' || '' }} 
397445            ${{ runner.os == 'Windows' && '-D LibXml2_ROOT=../third-party/libxml2/install' || '' }} 
398446           export-compile-commands : true 
@@ -882,25 +930,12 @@ jobs:
882930          fi 
883931          echo "exists=$exists" >> $GITHUB_OUTPUT 
884932
885-        - name : Resolve LLVM Root 
886-         id : resolve-llvm-root 
887-         run : | 
888-           set -x 
889-           cd .. 
890-           llvm_root=$(pwd)/third-party/llvm-project/install 
891-           if [[ ${{ runner.os }} == 'Windows' ]]; then 
892-               llvm_root=$(echo "$llvm_root" | sed 's/\\/\//g') 
893-               llvm_root=$(echo $llvm_root | sed 's|^/d/|D:/|') 
894-               echo "$llvm_root" 
895-           fi 
896-           echo -E "llvm-root=$llvm_root" >> $GITHUB_OUTPUT 
897- 
898933       - name : LLVM Binaries 
899934        id : llvm-cache 
900935        if : steps.website-releases.outputs.exists != 'true' 
901936        uses : actions/cache@v4 
902937        with :
903-           path : ${{ steps.resolve- llvm-root.outputs.llvm-root  }} 
938+           path : ${{ matrix. llvm-path  }} 
904939          key : ${{ matrix.llvm-archive-basename }} 
905940
906941      - name : Compress LLVM 
0 commit comments