Skip to content

Commit dc6cd81

Browse files
committed
Add Windows llvm debug build
1 parent 38fd6d1 commit dc6cd81

1 file changed

Lines changed: 105 additions & 18 deletions

File tree

.github/workflows/ci.yml

Lines changed: 105 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ jobs:
114114
compiler: msvc
115115
clang-runtime: '18'
116116

117+
- name: win2022-msvc-runtime18-debug
118+
os: windows-2022
119+
compiler: clang
120+
clang-runtime: '18'
121+
debug_build: true
122+
117123
- name: ubu22-clang15-runtime16-debug
118124
os: ubuntu-22.04
119125
compiler: clang-15
@@ -493,12 +499,26 @@ jobs:
493499
uses: actions/setup-python@v5
494500
with:
495501
python-version: 3.11
496-
- name: Save PR Info
497-
if: ${{ matrix.coverage == true }}
502+
- name: Save PR Info on Unix systems
503+
if: ${{ runner.os != 'windows' }}
498504
run: |
499505
mkdir -p ./pr
500506
echo ${{ github.event.number }} > ./pr/NR
501507
echo ${{ github.repository }} > ./pr/REPO
508+
export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-')
509+
echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV
510+
511+
- name: Save PR Info on Windows systems
512+
if: ${{ runner.os == 'windows' }}
513+
run: |
514+
#can be found
515+
mkdir ./pr
516+
echo "${{ github.event.number }}" > ./pr/NR
517+
echo ${{ github.repository }} > ./pr/REPO
518+
$env:LLVM_HASH_TEMP = (git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x )
519+
$env:LLVM_HASH = $env:LLVM_HASH_TEMP -replace "\t","-"
520+
echo "LLVM_HASH=$env:LLVM_HASH" >> $GITHUB_ENV
521+
502522
- uses: actions/upload-artifact@v4
503523
if: ${{ matrix.coverage == true }}
504524
with:
@@ -511,17 +531,32 @@ jobs:
511531
run: |
512532
echo "BUILD_TYPE=Release" >> $GITHUB_ENV
513533
echo "CLAD_CODE_COVERAGE=0" >> $GITHUB_ENV
534+
if [[ "${os}" == "macos"* ]]; then
535+
echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
536+
else
537+
echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
538+
fi
539+
514540
- name: Setup default Build Type on *nux (build_debug & asserts)
515541
if: ${{ (matrix.debug_build == true) && (runner.os != 'windows') }}
516542
run: |
517543
echo "BUILD_TYPE=Debug" >> $GITHUB_ENV
544+
if [[ "${os}" == "macos"* ]]; then
545+
echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
546+
else
547+
echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
548+
fi
549+
518550
- name: Setup default Build Type on Windows
519551
if: runner.os == 'windows'
520552
run: |
521553
$env:BUILD_TYPE="Release"
522554
$env:CLAD_CODE_COVERAGE="0"
523555
echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV
524556
echo "CLAD_CODE_COVERAGE=0" >> $env:GITHUB_ENV
557+
$env:ncpus=$([Environment]::ProcessorCount)
558+
echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
559+
525560
- name: Download Coverity Build Tool - Linux
526561
if: ${{ (matrix.coverity == true) && (runner.os == 'Linux') }}
527562
run: |
@@ -594,10 +629,10 @@ jobs:
594629
echo "PATH_TO_LLVM_BUILD=$env:PATH_TO_LLVM_BUILD" >> $env:GITHUB_ENV
595630
clang --version
596631
#
597-
$env:CC="clang"
598-
$env:CXX="clang++"
599-
echo "CC=clang" >> $env:GITHUB_ENV
600-
echo "CXX=clang++" >> $env:GITHUB_ENV
632+
$env:CC="clang-cl"
633+
$env:CXX="clang-cl"
634+
echo "CC=clang-cl" >> $env:GITHUB_ENV
635+
echo "CXX=clang-cl" >> $env:GITHUB_ENV
601636
}
602637
elseif ( "${{ matrix.compiler }}" -imatch "msvc" )
603638
{
@@ -609,7 +644,7 @@ jobs:
609644
}
610645
611646
- name: Setup LLVM/Clang on macOS
612-
if: runner.os == 'macOS'
647+
if: ${{ runner.os == 'macOS' && (matrix.debug_build != true) }}
613648
run: |
614649
#brew update
615650
brew install --ignore-dependencies llvm
@@ -665,14 +700,23 @@ jobs:
665700
# We need PATH_TO_LLVM_BUILD later
666701
echo "PATH_TO_LLVM_BUILD=$PATH_TO_LLVM_BUILD" >> $GITHUB_ENV
667702
703+
- name: Install deps on Windows
704+
if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' && matrix.debug_build == true }}
705+
run: |
706+
choco install ninja findutils
707+
choco upgrade cmake
708+
$env:PATH="C:\Program Files (x86)\GnuWin32\bin;$env:PATH"
709+
$env:PATH="C:\Program Files (x86)\Ninja\bin;$env:PATH"
710+
668711
- name: Restore Cache LLVM/Clang runtime build directory (debug_build==true)
669-
if: ${{ (matrix.debug_build == true) && (runner.os != 'windows') }}
712+
if: ${{ (matrix.debug_build == true) }}
670713
uses: actions/cache/restore@v4
671714
id: cache
672715
with:
673716
path: |
674717
llvm-project
675-
key: ${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-${{ env.BUILD_TYPE }}
718+
key: ${{ env.LLVM_HASH }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x
719+
676720
- name: Build LLVM/Cling on Unix if the cache is invalid (debug_build==true)
677721
if: ${{ (matrix.debug_build == true) && (runner.os != 'windows') && (steps.cache.outputs.cache-hit != 'true') }}
678722
run: |
@@ -682,7 +726,6 @@ jobs:
682726
# Build
683727
mkdir build
684728
cd build
685-
export CPU_COUNT="$(nproc --all)"
686729
cmake \
687730
-DLLVM_ENABLE_PROJECTS="clang" \
688731
-DLLVM_TARGETS_TO_BUILD="host;NVPTX" \
@@ -698,15 +741,43 @@ jobs:
698741
-DLLVM_INCLUDE_TESTS=OFF \
699742
-DLLVM_INCLUDE_DOCS=OFF \
700743
../llvm
701-
cmake --build . --target clang FileCheck llvm-config clang-repl --parallel ${CPU_COUNT}
744+
cmake --build . --target clang FileCheck llvm-config clang-repl --parallel ${{ env.ncpus }}
702745
cd ../../
746+
747+
748+
- name: Build LLVM/Cling on Windows systems if the cache is invalid
749+
if: ${{ (matrix.debug_build == true) && runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
750+
run: |
751+
git clone --depth=1 -b llvm-export-api-18.0 https://github.com/fsfod/llvm-project.git
752+
cd llvm-project
753+
cmake -S ./llvm/ -B build -G Ninja `
754+
-DCMAKE_ASM_MASM_FLAGS="-m64" `
755+
-DLLVM_ENABLE_PROJECTS="clang" `
756+
-DLLVM_ENABLE_PLUGINS=On `
757+
-DLLVM_TARGETS_TO_BUILD="host" `
758+
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
759+
-DCMAKE_CXX_COMPILER=clang-cl `
760+
-DCMAKE_C_COMPILER=clang-cl `
761+
-DCMAKE_ASM_MASM_COMPILER=llvm-ml `
762+
-DLLVM_BUILD_LLVM_DYLIB_VIS=On `
763+
-DLLVM_LINK_LLVM_DYLIB=On `
764+
-DCLANG_LINK_CLANG_DYLIB=On
765+
cmake --build build --config RelWithDebInfo --parallel ${{ env.ncpus }}
766+
rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
767+
cd .\llvm\
768+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
769+
cd ..\clang\
770+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
771+
cd ..\..
772+
703773
- name: Save Cache LLVM/Clang runtime build directory (debug_build==true)
704774
uses: actions/cache/save@v4
705-
if: ${{ (matrix.debug_build == true) && (runner.os != 'windows') && (steps.cache.outputs.cache-hit != 'true') }}
775+
if: ${{ (matrix.debug_build == true) && (steps.cache.outputs.cache-hit != 'true') }}
706776
with:
707777
path: |
708778
llvm-project
709779
key: ${{ steps.cache.outputs.cache-primary-key }}
780+
710781
- name: Set LLVM/Cling build path on Unix (debug_build==true)
711782
if: ${{ (matrix.debug_build == true) && (runner.os != 'windows') }}
712783
run: |
@@ -738,8 +809,9 @@ jobs:
738809
pip3 install lit # LLVM lit is not part of the llvm releases...
739810
# We need PATH_TO_LLVM_BUILD later
740811
echo "PATH_TO_LLVM_BUILD=$PATH_TO_LLVM_BUILD" >> $GITHUB_ENV
812+
741813
- name: Setup LLVM/Clang on Windows
742-
if: ${{ runner.os == 'windows' }}
814+
if: ${{ runner.os == 'windows' && (matrix.debug_build != true) }}
743815
run: |
744816
C:\Miniconda\condabin\conda.bat install -y -c conda-forge "clangdev=${{ matrix.clang-runtime }}"
745817
$env:PATH_TO_LLVM_BUILD="$env:CONDA\Library"
@@ -820,7 +892,7 @@ jobs:
820892
if: ${{ matrix.coverity == false && runner.os == 'windows' }}
821893
run: |
822894
mkdir obj
823-
cd obj
895+
cd obj
824896
if ( "$env:BUILD_TYPE" -eq "" )
825897
{
826898
$env:BUILD_TYPE="RelWithDebInfo"
@@ -829,10 +901,25 @@ jobs:
829901
{
830902
$env:CLAD_CODE_COVERAGE="0"
831903
}
832-
((Get-Content -path C:/Miniconda/Library/lib/cmake/llvm/LLVMConfig.cmake -Raw) -replace 'LLVM_ENABLE_DIA_SDK ON','LLVM_ENABLE_DIA_SDK OFF') | Set-Content -Path C:/Miniconda/Library/lib/cmake/llvm/LLVMConfig.cmake
833-
$lit = @(which lit)
834-
cmake -DClang_DIR="$env:PATH_TO_LLVM_BUILD" -DLLVM_DIR="$env:PATH_TO_LLVM_BUILD" -DCMAKE_BUILD_TYPE="$env:BUILD_TYPE" -DCLAD_CODE_COVERAGE="$env:CLAD_CODE_COVERAGE" -DCLAD_BUILD_STATIC_ONLY="ON" -DLLVM_EXTERNAL_LIT="$lit" "$env:GITHUB_WORKSPACE" ${{ matrix.extra_cmake_options }}
835-
cmake --build . --config Release
904+
if ( "${{ matrix.debug_build }}" -imatch "true" )
905+
{
906+
((Get-Content -path $env:GITHUB_WORKSPACE/llvm-project/build/lib/cmake/llvm/LLVMConfig.cmake -Raw) -replace 'LLVM_ENABLE_DIA_SDK ON','LLVM_ENABLE_DIA_SDK OFF') | Set-Content -Path $env:GITHUB_WORKSPACE/llvm-project/build/lib/cmake/llvm/LLVMConfig.cmake
907+
$env:PATH_TO_LLVM_BUILD="$env:GITHUB_WORKSPACE\llvm-project\build"
908+
echo "PATH_TO_LLVM_BUILD=$env:PATH_TO_LLVM_BUILD"
909+
echo "PATH_TO_LLVM_BUILD=$env:PATH_TO_LLVM_BUILD" >> $env:GITHUB_ENV
910+
$lit = @(which lit)
911+
cmake -G Ninja -DCMAKE_BUILD_TYPE="$env:BUILD_TYPE" -DClang_DIR="$env:PATH_TO_LLVM_BUILD" -DLLVM_DIR="$env:PATH_TO_LLVM_BUILD" -DLLVM_BUILD_LLVM_DYLIB_VIS=On -DLLVM_LINK_LLVM_DYLIB=On -DCLANG_LINK_CLANG_DYLIB=On -DCLAD_CODE_COVERAGE="$env:CLAD_CODE_COVERAGE" -DCLAD_BUILD_STATIC_ONLY="ON" -DLLVM_EXTERNAL_LIT="$lit" "$env:GITHUB_WORKSPACE" ${{ matrix.extra_cmake_options }}
912+
cmake --build . --config "$env:BUILD_TYPE" --parallel ${{ env.ncpus }}
913+
}
914+
else
915+
{
916+
((Get-Content -path C:/Miniconda/Library/lib/cmake/llvm/LLVMConfig.cmake -Raw) -replace 'LLVM_ENABLE_DIA_SDK ON','LLVM_ENABLE_DIA_SDK OFF') | Set-Content -Path C:/Miniconda/Library/lib/cmake/llvm/LLVMConfig.cmake
917+
$lit = @(which lit)
918+
cmake -DClang_DIR="$env:PATH_TO_LLVM_BUILD" -DLLVM_DIR="$env:PATH_TO_LLVM_BUILD" -DCMAKE_BUILD_TYPE="$env:BUILD_TYPE" -DCLAD_CODE_COVERAGE="$env:CLAD_CODE_COVERAGE" -DCLAD_BUILD_STATIC_ONLY="ON" -DLLVM_EXTERNAL_LIT="$lit" "$env:GITHUB_WORKSPACE" ${{ matrix.extra_cmake_options }}
919+
cmake --build . --config Release --parallel ${{ env.ncpus }}
920+
}
921+
922+
836923
- name: Build Clad for Coverity Scan
837924
if: ${{ matrix.coverity == true }}
838925
run: |

0 commit comments

Comments
 (0)