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_XRAY)
24  set(XRAY_HEADERS
25    xray/xray_interface.h
26    xray/xray_log_interface.h
27    xray/xray_records.h
28    )
29endif(COMPILER_RT_BUILD_XRAY)
30
31if (COMPILER_RT_BUILD_PROFILE)
32  set(PROFILE_HEADERS
33    profile/InstrProfData.inc
34    )
35endif(COMPILER_RT_BUILD_PROFILE)
36
37set(COMPILER_RT_HEADERS
38  ${SANITIZER_HEADERS}
39  ${FUZZER_HEADERS}
40  ${XRAY_HEADERS}
41  ${PROFILE_HEADERS})
42
43set(output_dir ${COMPILER_RT_OUTPUT_DIR}/include)
44
45# Copy compiler-rt headers to the build tree.
46set(out_files)
47foreach( f ${COMPILER_RT_HEADERS} )
48  set( src ${CMAKE_CURRENT_SOURCE_DIR}/${f} )
49  set( dst ${output_dir}/${f} )
50  add_custom_command(OUTPUT ${dst}
51    DEPENDS ${src}
52    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
53    COMMENT "Copying compiler-rt's ${f}...")
54  list(APPEND out_files ${dst})
55endforeach( f )
56
57add_custom_target(compiler-rt-headers ALL DEPENDS ${out_files})
58add_dependencies(compiler-rt compiler-rt-headers)
59set_target_properties(compiler-rt-headers PROPERTIES FOLDER "Compiler-RT Misc")
60
61# Install sanitizer headers.
62install(FILES ${SANITIZER_HEADERS}
63  COMPONENT compiler-rt-headers
64  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
65  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/sanitizer)
66# Install fuzzer headers.
67install(FILES ${FUZZER_HEADERS}
68  COMPONENT compiler-rt-headers
69  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
70  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/fuzzer)
71# Install xray headers.
72install(FILES ${XRAY_HEADERS}
73  COMPONENT compiler-rt-headers
74  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
75  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/xray)
76# Install profile headers.
77install(FILES ${PROFILE_HEADERS}
78  COMPONENT compiler-rt-headers
79  PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
80  DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/profile)
81
82if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDEs.
83  add_custom_target(install-compiler-rt-headers
84                    DEPENDS compiler-rt-headers
85                    COMMAND "${CMAKE_COMMAND}"
86                            -DCMAKE_INSTALL_COMPONENT="compiler-rt-headers"
87                            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
88                    USES_TERMINAL)
89  add_custom_target(install-compiler-rt-headers-stripped
90                    DEPENDS compiler-rt-headers
91                    COMMAND "${CMAKE_COMMAND}"
92                            -DCMAKE_INSTALL_COMPONENT="compiler-rt-headers"
93                            -DCMAKE_INSTALL_DO_STRIP=1
94                            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
95                    USES_TERMINAL)
96endif()
97