blob: 05b0244c3b54d3efa4a1b01d2046fb43b8a5ccc4 [file] [log] [blame]
Eric Fiselier0f932cb2015-12-30 03:39:03 +00001macro(find_llvm_parts)
Eric Fiselier156a46d2015-07-30 22:30:34 +00002# Rely on llvm-config.
3 set(CONFIG_OUTPUT)
Chris Bieneman6567d582016-08-18 21:31:51 +00004 if(NOT LLVM_CONFIG_PATH)
5 find_program(LLVM_CONFIG_PATH "llvm-config")
6 endif()
Eric Fiselier156a46d2015-07-30 22:30:34 +00007 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")
Chris Bieneman6567d582016-08-18 21:31:51 +000012 elseif(LLVM_CONFIG_PATH)
13 message(STATUS "Found LLVM_CONFIG_PATH as ${LLVM_CONFIG_PATH}")
14 set(CONFIG_COMMAND ${LLVM_CONFIG_PATH}
Eric Fiselier156a46d2015-07-30 22:30:34 +000015 "--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")
Niels Ole Salscheider3d915482016-02-04 23:17:20 +000040 set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
Eric Fiselier156a46d2015-07-30 22:30:34 +000041 else()
42 set(LLVM_FOUND OFF)
43 return()
44 endif()
45
Michal Gorny66952682016-10-19 12:34:17 +000046 if (EXISTS "${LLVM_CMAKE_PATH}")
47 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
48 elseif (EXISTS "${LLVM_MAIN_SRC_DIR}/cmake/modules")
49 list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
50 else()
Eric Fiselierd419fe22015-08-12 06:36:19 +000051 set(LLVM_FOUND OFF)
Michal Gorny66952682016-10-19 12:34:17 +000052 message(WARNING "Neither ${LLVM_CMAKE_PATH} nor ${LLVM_MAIN_SRC_DIR}/cmake/modules found")
Eric Fiselierd419fe22015-08-12 06:36:19 +000053 return()
Eric Fiselier156a46d2015-07-30 22:30:34 +000054 endif()
55
Eric Fiselier156a46d2015-07-30 22:30:34 +000056 set(LLVM_FOUND ON)
Eric Fiselier0f932cb2015-12-30 03:39:03 +000057endmacro(find_llvm_parts)
Eric Fiselier156a46d2015-07-30 22:30:34 +000058
Chris Bienemanabead602016-09-01 18:46:53 +000059# If this is a standalone build not running as an external project of LLVM
60# we need to later make some decisions differently.
61if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
62 # The intent is that this doesn't necessarily mean the LLVM is installed (it
63 # could be a build directory), but it means we need to treat the LLVM
64 # directory as read-only.
Chris Bieneman6a349a12016-09-01 19:47:39 +000065 set(LIBCXX_USING_INSTALLED_LLVM 1)
Chris Bienemanabead602016-09-01 18:46:53 +000066endif()
Eric Fiselier156a46d2015-07-30 22:30:34 +000067
Chris Bieneman6a349a12016-09-01 19:47:39 +000068if (LIBCXX_USING_INSTALLED_LLVM OR LIBCXX_STANDALONE_BUILD)
Chris Bieneman6567d582016-08-18 21:31:51 +000069 set(LIBCXX_STANDALONE_BUILD 1)
Eric Fiselier0f932cb2015-12-30 03:39:03 +000070 message(STATUS "Configuring for standalone build.")
71
72 find_llvm_parts()
73
Eric Fiselier156a46d2015-07-30 22:30:34 +000074 # LLVM Options --------------------------------------------------------------
75 include(FindPythonInterp)
76 if( NOT PYTHONINTERP_FOUND )
77 message(WARNING "Failed to find python interpreter. "
78 "The libc++ test suite will be disabled.")
79 set(LLVM_INCLUDE_TESTS OFF)
80 endif()
81
82 if (NOT DEFINED LLVM_INCLUDE_TESTS)
83 set(LLVM_INCLUDE_TESTS ${LLVM_FOUND})
84 endif()
Eric Fiselierf12577b2015-08-22 20:26:42 +000085 if (NOT DEFINED LLVM_INCLUDE_DOCS)
86 set(LLVM_INCLUDE_DOCS ${LLVM_FOUND})
87 endif()
Eric Fiselierd720d1f2015-08-22 19:40:49 +000088 if (NOT DEFINED LLVM_ENABLE_SPHINX)
89 set(LLVM_ENABLE_SPHINX OFF)
90 endif()
Eric Fiselier156a46d2015-07-30 22:30:34 +000091
92 # Required LIT Configuration ------------------------------------------------
93 # Define the default arguments to use with 'lit', and an option for the user
94 # to override.
95 set(LIT_ARGS_DEFAULT "-sv --show-xfail --show-unsupported")
96 if (MSVC OR XCODE)
97 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
98 endif()
99 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
100
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000101 # Required doc configuration
102 if (LLVM_ENABLE_SPHINX)
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000103 find_package(Sphinx REQUIRED)
Eric Fiselierd720d1f2015-08-22 19:40:49 +0000104 endif()
105
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000106 # FIXME - This is cribbed from HandleLLVMOptions.cmake.
107 if(WIN32)
108 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
109 if(CYGWIN)
110 set(LLVM_ON_WIN32 0)
111 set(LLVM_ON_UNIX 1)
112 else(CYGWIN)
113 set(LLVM_ON_WIN32 1)
114 set(LLVM_ON_UNIX 0)
115 endif(CYGWIN)
116 else(WIN32)
117 if(UNIX)
118 set(LLVM_ON_WIN32 0)
119 set(LLVM_ON_UNIX 1)
120 if(APPLE)
121 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
122 else(APPLE)
123 set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
124 endif(APPLE)
125 else(UNIX)
126 MESSAGE(SEND_ERROR "Unable to determine platform")
127 endif(UNIX)
128 endif(WIN32)
129
Eric Fiselier0f932cb2015-12-30 03:39:03 +0000130 # Add LLVM Functions --------------------------------------------------------
Eric Fiselier156a46d2015-07-30 22:30:34 +0000131 include(AddLLVM OPTIONAL)
Eric Fiselier0f932cb2015-12-30 03:39:03 +0000132endif()