@@ -333,12 +333,18 @@ function(target_code_coverage TARGET_NAME)
333
333
if (target_type STREQUAL "SHARED_LIBRARY" AND target_code_coverage_ALL)
334
334
if (CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang"
335
335
OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang" )
336
- add_custom_target (
337
- ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
336
+ add_custom_command (
337
+ OUTPUT
338
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
338
339
COMMAND
339
340
${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME} >" >
340
341
${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
341
342
DEPENDS ${TARGET_NAME} )
343
+ add_custom_target (
344
+ ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
345
+ DEPENDS
346
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
347
+ )
342
348
343
349
if (NOT TARGET ccov-libs)
344
350
message (
@@ -374,8 +380,8 @@ function(target_code_coverage TARGET_NAME)
374
380
# Run the executable, generating raw profile data Make the run data
375
381
# available for further processing. Separated to allow Windows to run this
376
382
# target serially.
377
- add_custom_target (
378
- ccov-run- ${target_code_coverage_COVERAGE_TARGET_NAME}
383
+ add_custom_command (
384
+ OUTPUT ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw
379
385
COMMAND
380
386
${CMAKE_COMMAND} -E env ${CMAKE_CROSSCOMPILING_EMULATOR}
381
387
${target_code_coverage_PRE_ARGS}
@@ -384,22 +390,27 @@ function(target_code_coverage TARGET_NAME)
384
390
COMMAND
385
391
${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME} >"
386
392
${LINKED_OBJECTS} >
387
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/$$ {target_code_coverage_COVERAGE_TARGET_NAME}
393
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
388
394
COMMAND
389
395
${CMAKE_COMMAND} -E echo
390
396
"${CMAKE_CURRENT_BINARY_DIR} /${target_code_coverage_COVERAGE_TARGET_NAME} .profraw"
391
397
>
392
398
${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/${target_code_coverage_COVERAGE_TARGET_NAME}
399
+ COMMAND ${CMAKE_COMMAND} -E rm -f
400
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
393
401
DEPENDS ccov-libs ${TARGET_NAME} )
402
+ add_custom_target (
403
+ ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
404
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw)
394
405
395
406
# Merge the generated profile data so llvm-cov can process it
396
- add_custom_target (
397
- ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME}
407
+ add_custom_command (
408
+ OUTPUT ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
398
409
COMMAND
399
410
${LLVM_PROFDATA_PATH} merge -sparse
400
411
${target_code_coverage_COVERAGE_TARGET_NAME} .profraw -o
401
412
${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
402
- DEPENDS )
413
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw )
403
414
404
415
# Ignore regex only works on LLVM >= 7
405
416
if (LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0" )
@@ -416,7 +427,7 @@ function(target_code_coverage TARGET_NAME)
416
427
${LLVM_COV_PATH} show $<TARGET_FILE:${TARGET_NAME} >
417
428
-instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
418
429
-show-line-counts-or -regions ${LINKED_OBJECTS} ${EXCLUDE_REGEX}
419
- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
430
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
420
431
421
432
# Print out a summary of the coverage information to the command line
422
433
add_custom_target (
@@ -425,7 +436,7 @@ function(target_code_coverage TARGET_NAME)
425
436
${LLVM_COV_PATH} report $<TARGET_FILE:${TARGET_NAME} >
426
437
-instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
427
438
${LINKED_OBJECTS} ${EXCLUDE_REGEX}
428
- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
439
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
429
440
430
441
# Export coverage information so continuous integration tools (e.g.
431
442
# Jenkins) can consume it
@@ -436,7 +447,7 @@ function(target_code_coverage TARGET_NAME)
436
447
-instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
437
448
-format="text" ${LINKED_OBJECTS} ${EXCLUDE_REGEX} >
438
449
${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /${target_code_coverage_COVERAGE_TARGET_NAME} .json
439
- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
450
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
440
451
441
452
# Only generates HTML output of the coverage information for perusal
442
453
add_custom_target (
@@ -447,15 +458,12 @@ function(target_code_coverage TARGET_NAME)
447
458
-show-line-counts-or -regions
448
459
-output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /${target_code_coverage_COVERAGE_TARGET_NAME}
449
460
-format="html" ${LINKED_OBJECTS} ${EXCLUDE_REGEX}
450
- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
461
+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
451
462
452
463
# Generates HTML output of the coverage information for perusal
453
464
add_custom_target (
454
465
ccov-${target_code_coverage_COVERAGE_TARGET_NAME}
455
- COMMAND
456
- DEPENDS ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
457
- ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}
458
- ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} )
466
+ DEPENDS ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} )
459
467
460
468
elseif (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
461
469
"GNU" )
@@ -556,14 +564,14 @@ function(target_code_coverage TARGET_NAME)
556
564
557
565
# ALL
558
566
if (target_code_coverage_ALL)
559
- if (NOT TARGET ccov-all -processing )
567
+ if (NOT TARGET ccov-all -run )
560
568
message (
561
569
FATAL_ERROR
562
570
"Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'."
563
571
)
564
572
endif ()
565
573
566
- add_dependencies (ccov-all -processing
574
+ add_dependencies (ccov-all -run
567
575
ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} )
568
576
endif ()
569
577
endif ()
@@ -612,34 +620,36 @@ function(add_code_coverage_all_targets)
612
620
if (CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang"
613
621
OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang" )
614
622
623
+ add_custom_target (ccov-all -run)
624
+
615
625
# Merge the profile data for all of the run targets
616
626
if (WIN32 )
617
- add_custom_target (
618
- ccov-all -processing
627
+ add_custom_command (
628
+ OUTPUT ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata
619
629
COMMAND powershell cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
620
630
${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list
621
631
COMMAND powershell cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
622
632
${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list
623
633
COMMAND
624
634
powershell -Command $$FILELIST = Get -Content
625
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list \;
626
- llvm-profdata.exe merge -o
627
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse $$FILELIST)
635
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list \; llvm-profdata.exe
636
+ merge -o ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse
637
+ $$FILELIST
638
+ DEPENDS ccov-all -run)
628
639
else ()
629
- add_custom_target (
630
- ccov-all -processing
640
+ add_custom_command (
641
+ OUTPUT ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata
631
642
COMMAND
632
- ${CMAKE_COMMAND} -E cat
633
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
643
+ ${CMAKE_COMMAND} -E cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
634
644
${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list
635
645
COMMAND
636
- ${CMAKE_COMMAND} -E cat
637
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
646
+ ${CMAKE_COMMAND} -E cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
638
647
${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list
639
648
COMMAND
640
649
${LLVM_PROFDATA_PATH} merge -o
641
650
${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse `cat
642
- ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list`)
651
+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list`
652
+ DEPENDS ccov-all -run)
643
653
endif ()
644
654
645
655
# Regex exclude only available for LLVM >= 7
@@ -660,7 +670,7 @@ function(add_code_coverage_all_targets)
660
670
report $$FILELIST
661
671
-instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
662
672
${EXCLUDE_REGEX}
663
- DEPENDS ccov-all -processing )
673
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
664
674
else ()
665
675
add_custom_target (
666
676
ccov-all -report
@@ -669,7 +679,7 @@ function(add_code_coverage_all_targets)
669
679
${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list`
670
680
-instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
671
681
${EXCLUDE_REGEX}
672
- DEPENDS ccov-all -processing )
682
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
673
683
endif ()
674
684
675
685
# Export coverage information so continuous integration tools (e.g. Jenkins)
@@ -684,7 +694,7 @@ function(add_code_coverage_all_targets)
684
694
-instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
685
695
-format="text" ${EXCLUDE_REGEX} >
686
696
${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /coverage.json
687
- DEPENDS ccov-all -processing )
697
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
688
698
else ()
689
699
add_custom_target (
690
700
ccov-all -export
@@ -694,7 +704,7 @@ function(add_code_coverage_all_targets)
694
704
-instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
695
705
-format="text" ${EXCLUDE_REGEX} >
696
706
${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /coverage.json
697
- DEPENDS ccov-all -processing )
707
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
698
708
endif ()
699
709
700
710
# Generate HTML output of all added targets for perusal
@@ -709,7 +719,7 @@ function(add_code_coverage_all_targets)
709
719
-show-line-counts-or -regions
710
720
-output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /all -merged
711
721
-format="html" ${EXCLUDE_REGEX}
712
- DEPENDS ccov-all -processing )
722
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
713
723
else ()
714
724
add_custom_target (
715
725
ccov-all
@@ -720,7 +730,7 @@ function(add_code_coverage_all_targets)
720
730
-show-line-counts-or -regions
721
731
-output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /all -merged
722
732
-format="html" ${EXCLUDE_REGEX}
723
- DEPENDS ccov-all -processing )
733
+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
724
734
endif ()
725
735
726
736
elseif (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
0 commit comments