1if (COMPILER_RT_BUILD_SANITIZERS)
2  set(SANITIZER_HEADERS
3    sanitizer/allocator_interface.h
4    sanitizer/asan_interface.h
5    sanitizer/common_interface_defs.h
6    sanitizer/coverage_interface.h
7    sanitizer/dfsan_interface.h
8    sanitizer/hwasan_interface.h
9    sanitizer/linux_syscall_hooks.h
10    sanitizer/lsan_interface.h
11    sanitizer/msan_interface.h
12    sanitizer/netbsd_syscall_hooks.h
13    sanitizer/scudo_interface.h
14    sanitizer/tsan_interface.h
15    sanitizer/tsan_interface_atomic.h
16    sanitizer/ubsan_interface.h
17    )
18  set(FUZZER_HEADERS
19    fuzzer/FuzzedDataProvider.h
20    )
21endif(COMPILER_RT_BUILD_SANITIZERS)
22
23if (COMPILER_RT_BUILD_MEMPROF)
24  set(MEMPROF_HEADERS
25    sanitizer/memprof_interface.h
26    )
27endif(COMPILER_RT_BUILD_MEMPROF)
28
29if (COMPILER_RT_BUILD_XRAY)
30  set(XRAY_HEADERS
31    xray/xray_interface.h
32    xray/xray_log_interface.h
33    xray/xray_records.h
34    )
35endif(COMPILER_RT_BUILD_XRAY)
36
37if (COMPILER_RT_BUILD_PROFILE)
38  set(PROFILE_HEADERS
39    profile/InstrProfData.inc
40    )
41endif(COMPILER_RT_BUILD_PROFILE)
42
43set(COMPILER_RT_HEADERS
44  ${SANITIZER_HEADERS}
45  ${FUZZER_HEADERS}
46  ${MEMPROF_HEADERS}
47  ${XRAY_HEADERS}
48  ${PROFILE_HEADERS})
49
50set(output_dir ${COMPILER_RT_OUTPUT_DIR}/include)
51
52# Copy compiler-rt headers to the build tree.
53set(out_files)
54foreach( f ${COMPILER_RT_HEADERS} )
55  set( src ${CMAKE_CURRENT_SOURCE_DIR}/${f} )
56  set( dst ${output_dir}/${f} )
57  add_custom_command(OUTPUT ${dst}
58    DEPENDS ${src}
59    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
60    COMMENT "Copying compiler-rt's ${f}...")
61  list(APPEND out_files ${dst})
62endforeach( f )
63
64add_custom_target(compiler-rt-headers ALL DEPENDS ${out_files})
65add_dependencies(compiler-rt compiler-rt-headers)
66set_target_properties(compiler-rt-headers PROPERTIES FOLDER "Compiler-RT Misc")
67
68# Install sanitizer headers.
69install(FILES ${SANITIZER_HEADERS}
70  COMPONENT compiler-rt-headers
71  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
72  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/sanitizer)
73# Install fuzzer headers.
74install(FILES ${FUZZER_HEADERS}
75  COMPONENT compiler-rt-headers
76  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
77  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/fuzzer)
78# Install xray headers.
79install(FILES ${XRAY_HEADERS}
80  COMPONENT compiler-rt-headers
81  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
82  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/xray)
83# Install profile headers.
84install(FILES ${PROFILE_HEADERS}
85  COMPONENT compiler-rt-headers
86  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
87  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/profile)
88
89if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDEs.
90  add_custom_target(install-compiler-rt-headers
91                    DEPENDS compiler-rt-headers
92                    COMMAND "${CMAKE_COMMAND}"
93                            -DCMAKE_INSTALL_COMPONENT="compiler-rt-headers"
94                            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
95                    USES_TERMINAL)
96  add_custom_target(install-compiler-rt-headers-stripped
97                    DEPENDS compiler-rt-headers
98                    COMMAND "${CMAKE_COMMAND}"
99                            -DCMAKE_INSTALL_COMPONENT="compiler-rt-headers"
100                            -DCMAKE_INSTALL_DO_STRIP=1
101                            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
102                    USES_TERMINAL)
103endif()
104