blob: 9c5dd81092616a7d5f4b30981091a39c94ee46eb [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)
4 find_program(LLVM_CONFIG "llvm-config")
5 if(DEFINED LLVM_PATH)
6 set(LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIR} CACHE PATH "Path to llvm/include")
7 set(LLVM_PATH ${LLVM_PATH} CACHE PATH "Path to LLVM source tree")
8 set(LLVM_MAIN_SRC_DIR ${LLVM_PATH})
9 set(LLVM_CMAKE_PATH "${LLVM_PATH}/cmake/modules")
10 elseif(LLVM_CONFIG)
11 message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}")
12 set(CONFIG_COMMAND ${LLVM_CONFIG}
13 "--includedir"
14 "--prefix"
15 "--src-root")
16 execute_process(
17 COMMAND ${CONFIG_COMMAND}
18 RESULT_VARIABLE HAD_ERROR
19 OUTPUT_VARIABLE CONFIG_OUTPUT
20 )
21 if(NOT HAD_ERROR)
22 string(REGEX REPLACE
23 "[ \t]*[\r\n]+[ \t]*" ";"
24 CONFIG_OUTPUT ${CONFIG_OUTPUT})
25 else()
26 string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}")
27 message(STATUS "${CONFIG_COMMAND_STR}")
28 message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
29 endif()
30
31 list(GET CONFIG_OUTPUT 0 INCLUDE_DIR)
32 list(GET CONFIG_OUTPUT 1 LLVM_OBJ_ROOT)
33 list(GET CONFIG_OUTPUT 2 MAIN_SRC_DIR)
34
35 set(LLVM_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include")
36 set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree")
37 set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
Niels Ole Salscheider3d915482016-02-04 23:17:20 +000038 set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
Eric Fiselier156a46d2015-07-30 22:30:34 +000039 else()
40 set(LLVM_FOUND OFF)
41 return()
42 endif()
43
44 if (NOT EXISTS ${LLVM_MAIN_SRC_DIR})
Eric Fiselierd419fe22015-08-12 06:36:19 +000045 set(LLVM_FOUND OFF)
46 message(WARNING "Not found: ${LLVM_MAIN_SRC_DIR}")
47 return()
Eric Fiselier156a46d2015-07-30 22:30:34 +000048 endif()
49
50 if(NOT EXISTS ${LLVM_CMAKE_PATH})
Eric Fiselierd419fe22015-08-12 06:36:19 +000051 set(LLVM_FOUND OFF)
52 message(WARNING "Not found: ${LLVM_CMAKE_PATH}")
53 return()
Eric Fiselier156a46d2015-07-30 22:30:34 +000054 endif()
55
56 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
57 list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
58
59 set(LLVM_FOUND ON)
Eric Fiselier0f932cb2015-12-30 03:39:03 +000060endmacro(find_llvm_parts)
Eric Fiselier156a46d2015-07-30 22:30:34 +000061
62
Eric Fiselier0f932cb2015-12-30 03:39:03 +000063if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
64 set(LIBCXX_BUILT_STANDALONE 1)
65 message(STATUS "Configuring for standalone build.")
66
67 find_llvm_parts()
68
Eric Fiselier156a46d2015-07-30 22:30:34 +000069 # LLVM Options --------------------------------------------------------------
70 include(FindPythonInterp)
71 if( NOT PYTHONINTERP_FOUND )
72 message(WARNING "Failed to find python interpreter. "
73 "The libc++ test suite will be disabled.")
74 set(LLVM_INCLUDE_TESTS OFF)
75 endif()
76
77 if (NOT DEFINED LLVM_INCLUDE_TESTS)
78 set(LLVM_INCLUDE_TESTS ${LLVM_FOUND})
79 endif()
Eric Fiselierf12577b2015-08-22 20:26:42 +000080 if (NOT DEFINED LLVM_INCLUDE_DOCS)
81 set(LLVM_INCLUDE_DOCS ${LLVM_FOUND})
82 endif()
Eric Fiselierd720d1f2015-08-22 19:40:49 +000083 if (NOT DEFINED LLVM_ENABLE_SPHINX)
84 set(LLVM_ENABLE_SPHINX OFF)
85 endif()
Eric Fiselier156a46d2015-07-30 22:30:34 +000086
87 # Required LIT Configuration ------------------------------------------------
88 # Define the default arguments to use with 'lit', and an option for the user
89 # to override.
90 set(LIT_ARGS_DEFAULT "-sv --show-xfail --show-unsupported")
91 if (MSVC OR XCODE)
92 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
93 endif()
94 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
95
Eric Fiselierd720d1f2015-08-22 19:40:49 +000096 # Required doc configuration
97 if (LLVM_ENABLE_SPHINX)
98 message(STATUS "Sphinx enabled.")
99 find_package(Sphinx REQUIRED)
100 else()
101 message(STATUS "Sphinx disabled.")
102 endif()
103
Eric Fiselier0b09dd12015-10-15 22:41:51 +0000104 # FIXME - This is cribbed from HandleLLVMOptions.cmake.
105 if(WIN32)
106 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
107 if(CYGWIN)
108 set(LLVM_ON_WIN32 0)
109 set(LLVM_ON_UNIX 1)
110 else(CYGWIN)
111 set(LLVM_ON_WIN32 1)
112 set(LLVM_ON_UNIX 0)
113 endif(CYGWIN)
114 else(WIN32)
115 if(UNIX)
116 set(LLVM_ON_WIN32 0)
117 set(LLVM_ON_UNIX 1)
118 if(APPLE)
119 set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
120 else(APPLE)
121 set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
122 endif(APPLE)
123 else(UNIX)
124 MESSAGE(SEND_ERROR "Unable to determine platform")
125 endif(UNIX)
126 endif(WIN32)
127
Eric Fiselier0f932cb2015-12-30 03:39:03 +0000128 # Add LLVM Functions --------------------------------------------------------
Eric Fiselier156a46d2015-07-30 22:30:34 +0000129 include(AddLLVM OPTIONAL)
Eric Fiselier0f932cb2015-12-30 03:39:03 +0000130endif()