blob: 29347dc8fe1ec366a414b04557f2a7c23f2726c5 [file] [log] [blame]
Eric Fiselierddd4a7e2015-12-30 01:02:38 +00001
2
3macro(internal_find_llvm_parts)
Eric Fiselier156a46d2015-07-30 22:30:34 +00004# Rely on llvm-config.
5 set(CONFIG_OUTPUT)
6 find_program(LLVM_CONFIG "llvm-config")
7 if(DEFINED LLVM_PATH)
8 set(LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIR} CACHE PATH "Path to llvm/include")
9 set(LLVM_PATH ${LLVM_PATH} CACHE PATH "Path to LLVM source tree")
10 set(LLVM_MAIN_SRC_DIR ${LLVM_PATH})
11 set(LLVM_CMAKE_PATH "${LLVM_PATH}/cmake/modules")
12 elseif(LLVM_CONFIG)
13 message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}")
14 set(CONFIG_COMMAND ${LLVM_CONFIG}
15 "--includedir"
16 "--prefix"
17 "--src-root")
18 execute_process(
19 COMMAND ${CONFIG_COMMAND}
20 RESULT_VARIABLE HAD_ERROR
21 OUTPUT_VARIABLE CONFIG_OUTPUT
22 )
23 if(NOT HAD_ERROR)
24 string(REGEX REPLACE
25 "[ \t]*[\r\n]+[ \t]*" ";"
26 CONFIG_OUTPUT ${CONFIG_OUTPUT})
27 else()
28 string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}")
29 message(STATUS "${CONFIG_COMMAND_STR}")
30 message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
31 endif()
32
33 list(GET CONFIG_OUTPUT 0 INCLUDE_DIR)
34 list(GET CONFIG_OUTPUT 1 LLVM_OBJ_ROOT)
35 list(GET CONFIG_OUTPUT 2 MAIN_SRC_DIR)
36
37 set(LLVM_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include")
38 set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree")
39 set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
40 set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/share/llvm/cmake")
41 else()
42 set(LLVM_FOUND OFF)
43 return()
44 endif()
45
46 if (NOT EXISTS ${LLVM_MAIN_SRC_DIR})
Eric Fiselierd419fe22015-08-12 06:36:19 +000047 set(LLVM_FOUND OFF)
48 message(WARNING "Not found: ${LLVM_MAIN_SRC_DIR}")
49 return()
Eric Fiselier156a46d2015-07-30 22:30:34 +000050 endif()
51
52 if(NOT EXISTS ${LLVM_CMAKE_PATH})
Eric Fiselierd419fe22015-08-12 06:36:19 +000053 set(LLVM_FOUND OFF)
54 message(WARNING "Not found: ${LLVM_CMAKE_PATH}")
55 return()
Eric Fiselier156a46d2015-07-30 22:30:34 +000056 endif()
57
58 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
59 list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
60
61 set(LLVM_FOUND ON)
Eric Fiselierddd4a7e2015-12-30 01:02:38 +000062endmacro(internal_find_llvm_parts)
Eric Fiselier156a46d2015-07-30 22:30:34 +000063
64
Eric Fiselierddd4a7e2015-12-30 01:02:38 +000065macro(internal_simulate_llvm_options)
Eric Fiselier156a46d2015-07-30 22:30:34 +000066 # LLVM Options --------------------------------------------------------------
Eric Fiselierddd4a7e2015-12-30 01:02:38 +000067 # Configure the LLVM CMake options expected by libc++.
68
Eric Fiselier156a46d2015-07-30 22:30:34 +000069 include(FindPythonInterp)
70 if( NOT PYTHONINTERP_FOUND )
71 message(WARNING "Failed to find python interpreter. "
72 "The libc++ test suite will be disabled.")
73 set(LLVM_INCLUDE_TESTS OFF)
74 endif()
75
76 if (NOT DEFINED LLVM_INCLUDE_TESTS)
77 set(LLVM_INCLUDE_TESTS ${LLVM_FOUND})
78 endif()
Eric Fiselierf12577b2015-08-22 20:26:42 +000079 if (NOT DEFINED LLVM_INCLUDE_DOCS)
80 set(LLVM_INCLUDE_DOCS ${LLVM_FOUND})
81 endif()
Eric Fiselierd720d1f2015-08-22 19:40:49 +000082 if (NOT DEFINED LLVM_ENABLE_SPHINX)
83 set(LLVM_ENABLE_SPHINX OFF)
84 endif()
Eric Fiselier156a46d2015-07-30 22:30:34 +000085
86 # Required LIT Configuration ------------------------------------------------
87 # Define the default arguments to use with 'lit', and an option for the user
88 # to override.
89 set(LIT_ARGS_DEFAULT "-sv --show-xfail --show-unsupported")
90 if (MSVC OR XCODE)
91 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
92 endif()
93 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
94
95 # Make sure we can use the console pool for recent cmake and ninja > 1.5
96 # Needed for add_lit_testsuite
97 if(CMAKE_VERSION VERSION_LESS 3.1.20141117)
98 set(cmake_3_2_USES_TERMINAL)
99 else()
100 set(cmake_3_2_USES_TERMINAL USES_TERMINAL)
101 endif()
102
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000103 # Required doc configuration
104 if (LLVM_ENABLE_SPHINX)
105 message(STATUS "Sphinx enabled.")
106 find_package(Sphinx REQUIRED)
107 else()
108 message(STATUS "Sphinx disabled.")
109 endif()
110
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000111 # FIXME - This is cribbed from HandleLLVMOptions.cmake.
112 if(WIN32)
113 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
114 if(CYGWIN)
115 set(LLVM_ON_WIN32 0)
116 set(LLVM_ON_UNIX 1)
117 else(CYGWIN)
118 set(LLVM_ON_WIN32 1)
119 set(LLVM_ON_UNIX 0)
120 endif(CYGWIN)
121 else(WIN32)
122 if(UNIX)
123 set(LLVM_ON_WIN32 0)
124 set(LLVM_ON_UNIX 1)
125 if(APPLE)
126 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
127 else(APPLE)
128 set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
129 endif(APPLE)
130 else(UNIX)
131 MESSAGE(SEND_ERROR "Unable to determine platform")
132 endif(UNIX)
133 endif(WIN32)
Eric Fiselierddd4a7e2015-12-30 01:02:38 +0000134endmacro(internal_simulate_llvm_options)
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000135
Eric Fiselierddd4a7e2015-12-30 01:02:38 +0000136
137macro(handle_out_of_tree_llvm)
138 # This macro should not be called unless we are building out of tree.
139 # Enforce that.
140 if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
141 message(FATAL_ERROR "libc++ incorrectly configured for out-of-tree LLVM")
142 endif()
143
144 # Attempt to find an LLVM installation and source directory. Warn if they
145 # are not found.
146 internal_find_llvm_parts()
147 if (NOT LLVM_FOUND)
148 message(WARNING "UNSUPPORTED LIBCXX CONFIGURATION DETECTED: "
149 "llvm-config not found and LLVM_PATH not defined.\n"
150 "Reconfigure with -DLLVM_CONFIG=path/to/llvm-config "
151 "or -DLLVM_PATH=path/to/llvm-source-root.")
152 endif()
153
154 # Simulate the LLVM CMake options and variables provided by an in-tree LLVM.
155 internal_simulate_llvm_options()
156
157 # Additionally include the LLVM CMake functions if we can find the module.
Eric Fiselier156a46d2015-07-30 22:30:34 +0000158 include(AddLLVM OPTIONAL)
Eric Fiselierddd4a7e2015-12-30 01:02:38 +0000159endmacro()