blob: 748bdf543969e29f46086c8a9ef38fc73293c6e7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
parameters:
arch: 'i686'
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-20.04
steps:
- template: Setup.yml
parameters:
os: 'Serenity'
- template: Caches.yml
parameters:
arch: '${{ parameters.arch }}'
coverage: '${{ parameters.coverage }}'
toolchain: 'clang'
build_directory: 'Build/${{ parameters.arch }}clang'
toolchain_ccache_path: '$(LLVM_CCACHE_DIR)'
toolchain_ccache_size: '$(LLVM_CCACHE_MAXSIZE)'
serenity_ccache_path: '$(SERENITY_CCACHE_DIR)'
- script: ./Toolchain/BuildClang.sh --ci
displayName: Extract 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 }} \
-DENABLE_PCI_IDS_DOWNLOAD=OFF \
-DENABLE_USB_IDS_DOWNLOAD=OFF \
-DCMAKE_C_COMPILER=gcc-11 \
-DCMAKE_CXX_COMPILER=g++-11
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: 'fbdev=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'
|