blob: b795f248c4df16ca02552cf01fdf35ea01feb46b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
cmake_minimum_required(VERSION 3.4.3)
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
message(STATUS "IWYU: out-of-tree configuration")
set(IWYU_IN_TREE OFF)
else()
message(STATUS "IWYU: in-tree configuration")
set(IWYU_IN_TREE ON)
endif()
if (NOT IWYU_IN_TREE)
cmake_policy(SET CMP0048 NEW)
project(include-what-you-use)
find_package(LLVM CONFIG REQUIRED)
find_package(Clang CONFIG REQUIRED)
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
include(AddLLVM)
include(HandleLLVMOptions)
endif()
message(STATUS "IWYU: configuring for LLVM ${LLVM_VERSION}...")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
add_definitions(${LLVM_DEFINITIONS})
include_directories(
${LLVM_INCLUDE_DIRS}
${CLANG_INCLUDE_DIRS}
)
set(LLVM_LINK_COMPONENTS
Option
Support
X86AsmParser
X86Desc
X86Info
)
add_llvm_executable(include-what-you-use
iwyu.cc
iwyu_ast_util.cc
iwyu_cache.cc
iwyu_driver.cc
iwyu_getopt.cc
iwyu_globals.cc
iwyu_include_picker.cc
iwyu_lexer_utils.cc
iwyu_location_util.cc
iwyu_output.cc
iwyu_path_util.cc
iwyu_preprocessor.cc
iwyu_verrs.cc
)
if (IWYU_IN_TREE)
# Add a dependency on clang-headers to ensure the builtin headers are
# available when IWYU is executed from the build dir.
# The clang-headers target is only available in in-tree builds.
add_dependencies(include-what-you-use clang-headers)
endif()
if (MINGW)
# Work around 'too many sections' error with MINGW/GCC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
endif()
if (MSVC)
# Disable warnings for IWYU, and disable exceptions in MSVC's STL.
add_definitions(
-wd4722 # Suppress ''destructor'' : destructor never returns, potential memory leak
-D_HAS_EXCEPTIONS=0
)
# Enable bigobj support and sane C++ exception semantics.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj /EHsc")
# Put project in solution folder
set_target_properties(include-what-you-use
PROPERTIES FOLDER "Clang executables"
)
endif()
target_link_libraries(include-what-you-use
PRIVATE
clangBasic
clangLex
clangAST
clangSema
clangFrontend
clangDriver
# Revision [1] in clang moved PCHContainerOperations from Frontend
# to Serialization, but this broke builds that set
# -DBUILD_SHARED_LIBS=on. Revision [2] is a followup that works
# around the issue by adding an explicit dependency on Serialization
# wherever there was a dependency on Frontend. Since we depend on
# Frontend, we need an explicit dependency on Serialization too.
# [1] https://llvm.org/viewvc/llvm-project?view=revision&revision=348907
# [2] https://llvm.org/viewvc/llvm-project?view=revision&revision=348915
clangSerialization
)
# Platform dependencies.
if (WIN32)
target_link_libraries(include-what-you-use
PRIVATE
shlwapi # For PathMatchSpecA
)
endif()
# Pick up Git revision so we can report it in version information.
include(FindGit)
if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE IWYU_GIT_REV
OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
message(STATUS "Warning: IWYU Git version info not found, DO NOT release "
"from this build tree!")
endif()
add_definitions(-DIWYU_GIT_REV="${IWYU_GIT_REV}")
# Install programs
install(TARGETS include-what-you-use RUNTIME DESTINATION bin)
install(PROGRAMS fix_includes.py iwyu_tool.py DESTINATION bin)
# Install mapping files
file(GLOB MAPPING_FILES *.imp)
install(FILES ${MAPPING_FILES} DESTINATION share/include-what-you-use)
|