mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
0a7d0362ea
This was useful when building both i686 and x86_64 SerenityOS targets as we could use a single toolchain build for both targets. But now all this extra job does is create the opportunity for the toolchain to need to be built twice (i.e. if the pipelines are backed up and the toolchain cache is busted between these jobs while the x86_64 step is waiting for a VM).
130 lines
4.2 KiB
YAML
130 lines
4.2 KiB
YAML
parameters:
|
|
arch: 'x86_64'
|
|
coverage: 'OFF'
|
|
|
|
jobs:
|
|
- job: 'Serenity_Clang_${{ parameters.arch }}_Coverage_${{ parameters.coverage }}'
|
|
timeoutInMinutes: 0 # Setting to 0 means the maximum allowed timeout is used.
|
|
|
|
variables:
|
|
- name: LLVM_CCACHE_DIR
|
|
value: $(Build.SourcesDirectory)/Toolchain/.ccache
|
|
- name: LLVM_CCACHE_MAXSIZE
|
|
value: 20GB
|
|
- name: SERENITY_CCACHE_DIR
|
|
value: $(Build.SourcesDirectory)/.ccache
|
|
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
|
|
steps:
|
|
- template: Setup.yml
|
|
parameters:
|
|
os: 'Serenity'
|
|
|
|
- template: Caches.yml
|
|
parameters:
|
|
arch: '${{ parameters.arch }}'
|
|
coverage: '${{ parameters.coverage }}'
|
|
toolchain: 'clang'
|
|
download_cache_path: 'Build/caches'
|
|
toolchain_ccache_path: '$(LLVM_CCACHE_DIR)'
|
|
toolchain_ccache_size: '$(LLVM_CCACHE_MAXSIZE)'
|
|
serenity_ccache_path: '$(SERENITY_CCACHE_DIR)'
|
|
|
|
- script: ./Toolchain/BuildClang.sh --ci
|
|
displayName: Build Toolchain
|
|
env:
|
|
TRY_USE_LOCAL_TOOLCHAIN: 'y'
|
|
|
|
- script: |
|
|
mkdir -p Build/superbuild
|
|
displayName: 'Create Build Directory'
|
|
|
|
- script: |
|
|
cmake -S Meta/CMake/Superbuild -B Build/superbuild -GNinja \
|
|
-DSERENITY_ARCH=${{ parameters.arch }} \
|
|
-DSERENITY_TOOLCHAIN=Clang \
|
|
-DENABLE_UNDEFINED_SANITIZER=ON \
|
|
-DENABLE_USERSPACE_COVERAGE_COLLECTION=${{ parameters.coverage }} \
|
|
-DDUMP_REGIONS_ON_CRASH=ON \
|
|
-DENABLE_PCI_IDS_DOWNLOAD=OFF \
|
|
-DENABLE_USB_IDS_DOWNLOAD=OFF \
|
|
-DCMAKE_C_COMPILER=gcc-12 \
|
|
-DCMAKE_CXX_COMPILER=g++-12
|
|
displayName: 'Create Build Environment'
|
|
workingDirectory: $(Build.SourcesDirectory)
|
|
env:
|
|
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
|
|
|
|
- script: |
|
|
cmake --build ./Build/superbuild
|
|
displayName: 'Build'
|
|
workingDirectory: $(Build.SourcesDirectory)
|
|
env:
|
|
CCACHE_DIR: '$(SERENITY_CCACHE_DIR)'
|
|
|
|
- script: |
|
|
ninja install && ninja image
|
|
displayName: 'Create RootFS'
|
|
workingDirectory: $(Build.SourcesDirectory)/Build/${{ parameters.arch }}clang
|
|
|
|
- script: |
|
|
ninja run
|
|
|
|
echo "##[group]Verify Output File"
|
|
mkdir fsmount
|
|
sudo mount -t ext2 -o loop,rw _disk_image fsmount
|
|
|
|
echo "Results: "
|
|
sudo cat fsmount/home/anon/test-results.log
|
|
echo "##[endgroup]"
|
|
|
|
if ! sudo grep -q "Failed: 0" fsmount/home/anon/test-results.log
|
|
then
|
|
echo "##[error]:^( Tests failed, failing job"
|
|
exit 1
|
|
fi
|
|
sudo umount fsmount
|
|
displayName: 'Test'
|
|
workingDirectory: $(Build.SourcesDirectory)/Build/${{ parameters.arch }}clang
|
|
timeoutInMinutes: 60
|
|
env:
|
|
SERENITY_QEMU_CPU: 'max,vmx=off'
|
|
SERENITY_KERNEL_CMDLINE: 'graphics_subsystem_mode=off panic=shutdown system_mode=self-test'
|
|
SERENITY_RUN: 'ci'
|
|
|
|
- script: |
|
|
[ ! -e debug.log ] || cat debug.log
|
|
displayName: 'Print Target Logs'
|
|
workingDirectory: $(Build.SourcesDirectory)/Build/${{ parameters.arch }}clang
|
|
condition: failed()
|
|
|
|
- ${{ if eq(parameters.coverage, 'ON') }}:
|
|
- script: |
|
|
./Meta/analyze-qemu-coverage.sh
|
|
displayName: 'Aggregate Coverage Results'
|
|
workingDirectory: $(Build.SourcesDirectory)
|
|
env:
|
|
SERENITY_TOOLCHAIN: Clang
|
|
SERENITY_ARCH: ${{ parameters.arch }}
|
|
|
|
# FIXME: Deploy the static html pages somewhere
|
|
# FIXME: Alter script to also (instead?) produce a raw coverage.txt file for ingestion into sonar cloud
|
|
# Note: tmp_profile_data/Coverage.profdata has the entire combined profile data, but creating the raw txt requires
|
|
# all of the instrumented binaries and the profdata file.
|
|
- ${{ if eq(parameters.coverage, 'ON') }}:
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
targetPath: $(Build.SourcesDirectory)/Build/${{ parameters.arch }}clang/reports
|
|
artifactType: 'pipeline'
|
|
artifactName: 'Coverage'
|
|
|
|
|
|
- script: |
|
|
echo "##[section]Toolchain Cache"
|
|
CCACHE_DIR='$(LLVM_CCACHE_DIR)' ccache -s
|
|
|
|
echo "##[section]Serenity Cache"
|
|
CCACHE_DIR='$(SERENITY_CCACHE_DIR)' ccache -s
|
|
displayName: 'Cache Stats'
|