@@ -23,6 +23,7 @@ version?=$(shell git describe --tags --always 2> /dev/null || echo "0")
23
23
BUILD_DEV_GUI? =OFF
24
24
BUILD_IMAGE_PROVIDER? =ON
25
25
26
+ cmake? =cmake
26
27
cmake_options? =-B ${build_dir}
27
28
28
29
CMAKE_GENERATOR? =Ninja
@@ -31,6 +32,8 @@ export CMAKE_GENERATOR
31
32
build_dir? =build
32
33
sudo? =sudo
33
34
35
+ default_rules? =configure prepare all test dist
36
+
34
37
debian_codename? =bookworm
35
38
36
39
packages? =cmake ninja-build build-essential python3-full ruby clang
@@ -40,6 +43,7 @@ packages+=python3-defusedxml # For extract_get.py
40
43
# TODO: remove for offline build
41
44
packages+=curl wget python3-pip
42
45
packages+ =expect
46
+ packages+ =gcovr
43
47
44
48
# For docs
45
49
packages+ =graphviz
@@ -62,6 +66,33 @@ rust_url?=https://sh.rustup.rs
62
66
RUST_VERSION? =1.71.0
63
67
export PATH := ${HOME}/.cargo/bin:${PATH}
64
68
69
+ app_dir? =opt
70
+
71
+ # To be overloaded from env
72
+ BRANCH_NAME? =tmp/local/${USER}/main
73
+ SONAR_HOST_URL? =https://sonarcloud.io)
74
+ SONAR_TOKEN? =${USER}
75
+
76
+ sonar_bw_url? =${SONAR_HOST_URL}/static/cpp/build-wrapper-linux-x86.zip
77
+ sonar_bw_file? =$(shell basename -- ${sonar_bw_url})
78
+ sonar_bw_app? =${app_dir}/build-wrapper-linux-x86/build-wrapper-linux-x86-64
79
+ sonar_bw_out_file? =${SONAR_OUT_DIR}/compile_commands.json
80
+
81
+ sonar_scanner_url? =https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.1.0.4889-linux-x64.zip
82
+ sonar_scanner_file? =$(shell basename -- ${sonar_scanner_url})
83
+ sonar_scanner_app? =${app_dir}/sonar-scanner-7.1.0.4889-linux-x64/bin/sonar-scanner
84
+
85
+ ifndef SONAR_OUT_DIR
86
+ gcovr? =gcovr
87
+ coverage_file? =${build_dir}/coverage.xml
88
+ sonar_bw_cmdline? =
89
+ else
90
+ default_rules+ =coverage sonar/deploy sonar/dist
91
+ cmake_options+=-DCOVERAGE =ON
92
+ gcovr? =gcovr --sonarqube
93
+ sonar_bw_cmdline? =${sonar_bw_app} --out-dir "${SONAR_OUT_DIR}"
94
+ coverage_file? =${SONAR_OUT_DIR}/coverage.xml
95
+ endif
65
96
66
97
# Allow overloading from env if needed
67
98
ifdef VERBOSE
@@ -166,7 +197,7 @@ setup/cmake:
166
197
--prefix=/usr/local \
167
198
--skip-license
168
199
rm -v " ${cmake_filename} "
169
- cmake --version
200
+ ${ cmake} --version
170
201
171
202
setup-cmake : setup/cmake
172
203
@@ -198,6 +229,54 @@ setup/debian/bookworm: setup/debian setup/rust setup/python setup/plantuml
198
229
setup : setup/debian/${debian_codename}
199
230
date -u
200
231
232
+ ${sonar_bw_app} :
233
+ @echo " ${project} : log: TODO: https://community.sonarsource.com/t/are-sonar-tools-versionned-on-public-sources/144031"
234
+ mkdir -p " ${@ D} "
235
+ cd " ${app_dir} " \
236
+ && wget -c " ${sonar_bw_url} " \
237
+ && unzip " ${sonar_bw_file} "
238
+ file -E " $@ "
239
+
240
+ ${sonar_scanner_app} :
241
+ mkdir -p " ${@ D} "
242
+ cd " ${app_dir} " \
243
+ && wget -c " ${sonar_scanner_url} " \
244
+ && unzip " ${sonar_scanner_file} "
245
+ file -E " $@ "
246
+
247
+ sonar/configure : configure
248
+ ls -l ${sonar_bw_out_file}
249
+
250
+ sonar/setup : ${sonar_bw_app} ${sonar_scanner_app}
251
+ file -E $^
252
+
253
+ ${SONAR_OUT_DIR}/compile_commands.json : coverage
254
+ ls $@
255
+
256
+ sonar/dist : ${coverage_file} sonar-project.properties .scannerwork/report-task.txt
257
+ @echo " ${project} : log: %@: Files for sonar/deploy"
258
+ ls -l " ${sonar_bw_out_file} "
259
+ ls -l " ${coverage_file} "
260
+ find " ${build_dir} " -iname " *.gc*" | wc -l # Can not be processed outside build env
261
+ tar cvfz " ${SONAR_OUT_DIR} /${@ F} .tar.gz" $^
262
+
263
+
264
+ .scannerwork/report-task.txt : ${sonar_scanner_app}
265
+ ls " ${sonar_bw_out_file} "
266
+ ls " ${coverage_file} "
267
+ @echo " ${project} : log: $@ : Uploading data to ${SONAR_HOST_URL} "
268
+ ${<} \
269
+ --define sonar.branch.name=${BRANCH_NAME} \
270
+ --define sonar.cfamily.compile-commands=" ${sonar_bw_out_file} " \
271
+ --define sonar.coverageReportPaths=" ${coverage_file} " \
272
+ --define sonar.host.url=" ${SONAR_HOST_URL} " \
273
+ --define sonar.token=" ${SONAR_TOKEN} " \
274
+ --debug
275
+ find .scannerwork -type f
276
+
277
+ sonar/deploy : .scannerwork/report-task.txt
278
+ @echo " ${project} : log: TODO: https://community.sonarsource.com/t/new-github-action-for-c-docker-project/136307/5?u=rzr"
279
+ ls -l $<
201
280
202
281
git/lfs/prepare :
203
282
[ ! -r .git/lfs/objects ] \
@@ -225,12 +304,13 @@ reconfigure: configure/clean configure
225
304
@date -u
226
305
227
306
${build_dir}/CMakeCache.txt : CMakeLists.txt
228
- cmake ${cmake_options}
307
+ ${sonar_bw_cmdline} ${ cmake} ${cmake_options}
229
308
230
309
all : ${build_dir}/CMakeCache.txt
231
- # cmake --build ${<D} \
310
+ # ${sonar_bw_cmdline} ${ cmake} --build ${<D} \
232
311
# || cat ${build_dir}/CMakeFiles/CMakeOutput.log
233
- cmake --build ${<D}
312
+ ${sonar_bw_cmdline} ${cmake} --build ${<D}
313
+
234
314
.PHONY : all
235
315
236
316
${build_dir}/% : all
@@ -239,11 +319,18 @@ ${build_dir}/%: all
239
319
${build_dir} : ${build_dir}/CMakeCache.txt
240
320
file -E " $<"
241
321
242
- test : ${build_dir}
322
+ test : ${build_dir} all
243
323
ctest --test-dir ${<} /${project_test_dir}
244
324
245
325
check : test
246
326
327
+ coverage : ${coverage_file}
328
+ ls -l " $<"
329
+
330
+ ${coverage_file} : test all
331
+ ${gcovr} --print-summary -o " $@ "
332
+ ls -l " $@ "
333
+
247
334
zwa_project? =z-wave-stack-binaries
248
335
zwa_ver? =25.1.0-28-g7e0b50f
249
336
zwa_rev? =v${zwa_ver}
@@ -278,14 +365,14 @@ zwa/test: ./scripts/tests/z-wave-stack-binaries-test.sh ${zwa_dir}
278
365
--zpc.datastore_file=${datastore_file} \
279
366
--zpc.ota.cache_path=${cache_path} \
280
367
--log.level=d" \
281
- time $< # Add debug=1 to begining of this line to trace
368
+ time $< # Add debug=1 to begining of this line to trace
282
369
283
370
dist/cmake : ${build_dir}
284
- cmake --build $< --target package
285
- cmake --build $< --target package_archive
371
+ ${ cmake} --build $< --target package
372
+ ${ cmake} --build $< --target package_archive
286
373
287
374
dist/deb : ${build_dir}
288
- cmake --build $< --target package
375
+ ${ cmake} --build $< --target package
289
376
install -d $< /$@
290
377
cp -av ${<} /* .deb $< /$@
291
378
@@ -296,9 +383,9 @@ distclean:
296
383
297
384
prepare : git/prepare
298
385
git --version
299
- cmake --version
386
+ ${ cmake} --version
300
387
301
- all/default : configure prepare all test dist
388
+ all/default : ${default_rules}
302
389
@date -u
303
390
304
391
run_args? =--help
@@ -353,6 +440,9 @@ prepare/docker: Dockerfile prepare
353
440
docker_workdir? =/usr/local/opt/${project}
354
441
docker_branch? =main
355
442
docker_url? =${url}.git\# ${docker_branch}
443
+ docker_builder_target?=builder
444
+ docker_builder_image? =${project}-${docker_builder_target}
445
+ docker_build_args? =
356
446
357
447
docker/% : Dockerfile
358
448
time docker run " ${project} :latest" -C " ${docker_workdir} " " ${@ F} "
@@ -363,14 +453,29 @@ test/docker: distclean prepare/docker docker/help docker/test docker/run
363
453
test/docker/build :
364
454
time docker build -t " ${project} :${docker_branch} " ${docker_url}
365
455
456
+ build/docker :
457
+ @echo " ${project} : log: $@ : Multistage build to minimize test image"
458
+ docker build \
459
+ --tag " ${docker_builder_image} :latest" \
460
+ --target ${docker_builder_target} \
461
+ ${docker_build_args} \
462
+ .
463
+ docker build --tag " ${project} :latest" ${docker_build_args} .
464
+
465
+ dist/docker :
466
+ @echo " ${project} : log: $@ : Extract artifacts from multistage build"
467
+ docker create --name " ${docker_builder_image} " " ${docker_builder_image} "
468
+ docker cp ${docker_builder_image} :${docker_workdir} /dist dist
469
+ docker cp ${docker_builder_image} :${docker_workdir} /${SONAR_OUT_DIR} ${SONAR_OUT_DIR}
470
+
366
471
docs : ./scripts/build/build_documentation.py doc ${PLANTUML_JAR_PATH} configure
367
472
@echo " # export PLANTUML_JAR_PATH=${plantuml_dir} /${plantuml_filename} "
368
473
@echo " $@ : PLANTUML_JAR_PATH=${PLANTUML_JAR_PATH} "
369
474
$< --output-dir $@
370
475
touch $@ /.nojekyll
371
476
372
477
zpc/docs/api : docs
373
- cmake --build build --target zpc_doxygen
478
+ ${ cmake} --build build --target zpc_doxygen
374
479
install -d docs/doxygen_zpc
375
480
cp -rfa build/zpc_doxygen_zpc/html/* docs/doxygen_zpc/
376
481
0 commit comments