@@ -505,78 +505,82 @@ endif()
505
505
if (SANITIZER_COMMON_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND
506
506
(OS_NAME MATCHES "Android|Darwin|Linux|FreeBSD" OR
507
507
(OS_NAME MATCHES "Windows" AND MSVC )))
508
- set (COMPILER_RT_HAS_SANITIZER_COMMON TRUE )
509
- else ()
510
- set (COMPILER_RT_HAS_SANITIZER_COMMON FALSE )
508
+ list (APPEND DEFAULT_RUNTIMES sanitizer_common)
511
509
endif ()
512
510
513
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND
514
- (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4))
515
- set (COMPILER_RT_HAS_INTERCEPTION TRUE )
516
- else ()
517
- set (COMPILER_RT_HAS_INTERCEPTION FALSE )
511
+ if (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)
512
+ list (APPEND DEFAULT_RUNTIMES interception)
513
+ list (APPEND REQUIRES_COMMON interception)
518
514
endif ()
519
515
520
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH AND
516
+ if (ASAN_SUPPORTED_ARCH AND
521
517
(NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4))
522
- set (COMPILER_RT_HAS_ASAN TRUE )
523
- else ()
524
- set (COMPILER_RT_HAS_ASAN FALSE )
518
+ list (APPEND DEFAULT_RUNTIMES asan)
519
+ list (APPEND REQUIRES_COMMON asan)
525
520
endif ()
526
521
527
522
if (OS_NAME MATCHES "Linux|FreeBSD|Windows" )
528
- set (COMPILER_RT_ASAN_HAS_STATIC_RUNTIME TRUE )
529
- else ()
530
- set (COMPILER_RT_ASAN_HAS_STATIC_RUNTIME FALSE )
523
+ set (COMPILER_RT_ASAN_HAS_STATIC_RUNTIME On )
531
524
endif ()
532
525
533
526
# TODO: Add builtins support.
534
527
535
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND
528
+ if (DFSAN_SUPPORTED_ARCH AND
536
529
OS_NAME MATCHES "Linux" )
537
- set (COMPILER_RT_HAS_DFSAN TRUE )
538
- else ()
539
- set (COMPILER_RT_HAS_DFSAN FALSE )
530
+ list (APPEND DEFAULT_RUNTIMES dfsan)
531
+ list (APPEND REQUIRES_COMMON dfsan)
540
532
endif ()
541
533
542
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND
543
- OS_NAME MATCHES "Linux|FreeBSD" )
544
- set (COMPILER_RT_HAS_LSAN TRUE )
545
- else ()
546
- set (COMPILER_RT_HAS_LSAN FALSE )
534
+ if (LSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux|FreeBSD" )
535
+ list (APPEND DEFAULT_RUNTIMES lsan)
536
+ list (APPEND REQUIRES_COMMON lsan)
547
537
endif ()
548
538
549
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND MSAN_SUPPORTED_ARCH AND
539
+ if (MSAN_SUPPORTED_ARCH AND
550
540
OS_NAME MATCHES "Linux" )
551
- set (COMPILER_RT_HAS_MSAN TRUE )
552
- else ()
553
- set (COMPILER_RT_HAS_MSAN FALSE )
541
+ list (APPEND DEFAULT_RUNTIMES msan)
542
+ list (APPEND REQUIRES_COMMON msan)
554
543
endif ()
555
544
556
545
if (PROFILE_SUPPORTED_ARCH AND
557
546
OS_NAME MATCHES "Darwin|Linux|FreeBSD" )
558
- set (COMPILER_RT_HAS_PROFILE TRUE )
559
- else ()
560
- set (COMPILER_RT_HAS_PROFILE FALSE )
547
+ list (APPEND DEFAULT_RUNTIMES profile)
561
548
endif ()
562
549
563
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND
550
+ if (TSAN_SUPPORTED_ARCH AND
564
551
OS_NAME MATCHES "Darwin|Linux|FreeBSD" )
565
- set (COMPILER_RT_HAS_TSAN TRUE )
566
- else ()
567
- set (COMPILER_RT_HAS_TSAN FALSE )
552
+ list (APPEND DEFAULT_RUNTIMES tsan)
553
+ list (APPEND REQUIRES_COMMON tsan)
568
554
endif ()
569
555
570
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND
556
+ if (UBSAN_SUPPORTED_ARCH AND
571
557
OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows" )
572
- set (COMPILER_RT_HAS_UBSAN TRUE )
573
- else ()
574
- set (COMPILER_RT_HAS_UBSAN FALSE )
558
+ list (APPEND DEFAULT_RUNTIMES ubsan)
559
+ list (APPEND REQUIRES_COMMON ubsan)
575
560
endif ()
561
+ list (APPEND DEFAULT_RUNTIMES cfi)
576
562
577
- if (COMPILER_RT_HAS_SANITIZER_COMMON AND SAFESTACK_SUPPORTED_ARCH AND
563
+ if (SAFESTACK_SUPPORTED_ARCH AND
578
564
OS_NAME MATCHES "Darwin|Linux|FreeBSD" )
579
- set (COMPILER_RT_HAS_SAFESTACK TRUE )
580
- else ()
581
- set (COMPILER_RT_HAS_SAFESTACK FALSE )
565
+ list (APPEND DEFAULT_RUNTIMES safestack)
566
+ list (APPEND REQUIRES_COMMON safestack)
567
+ endif ()
568
+
569
+ set (COMPILER_RT_RUNTIMES_TO_BUILD "all"
570
+ CACHE STRING "Semicolon-separated list of runtimes to build, or \" all\" ." )
571
+
572
+ if (COMPILER_RT_RUNTIMES_TO_BUILD STREQUAL "all" )
573
+ set (COMPILER_RT_RUNTIMES_TO_BUILD ${DEFAULT_RUNTIMES} )
574
+ endif ()
575
+
576
+ # Several of the runtimes produce object libraries that are consumed by other
577
+ # runtimes (i.e. asan relies on ubsan). If you're building a library that relies
578
+ # on common bits we need to build this full set of libraries.
579
+ list_union(SHOULD_BUILD_COMMON REQUIRES_COMMON COMPILER_RT_RUNTIMES_TO_BUILD)
580
+
581
+ if (SHOULD_BUILD_COMMON)
582
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD sanitizer_common)
583
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD lsan)
584
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD ubsan)
585
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD interception)
582
586
endif ()
0 commit comments