blob: bf629a927cf39dafa3e7cf03f137dae98848dc50 [file] [log] [blame]
Eric Fiselierce5695f2015-12-30 03:39:03 +00001macro(find_llvm_parts)
Eric Fiseliereb6e2ea2015-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")
Dan Albert1d4a1ed2016-05-25 22:36:09 -070038 set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/share/llvm/cmake")
Eric Fiseliereb6e2ea2015-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})
Dan Albert1d4a1ed2016-05-25 22:36:09 -070045 message(FATAL_ERROR "Not found: ${LLVM_MAIN_SRC_DIR}")
Eric Fiseliereb6e2ea2015-07-30 22:30:34 +000046 endif()
47
48 if(NOT EXISTS ${LLVM_CMAKE_PATH})
Dan Albert1d4a1ed2016-05-25 22:36:09 -070049 message(FATAL_ERROR "Not found: ${LLVM_CMAKE_PATH}")
Eric Fiseliereb6e2ea2015-07-30 22:30:34 +000050 endif()
51
52 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
53 list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
54
55 set(LLVM_FOUND ON)
Eric Fiselierce5695f2015-12-30 03:39:03 +000056endmacro(find_llvm_parts)
Eric Fiseliereb6e2ea2015-07-30 22:30:34 +000057
58
Eric Fiselierce5695f2015-12-30 03:39:03 +000059if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
60 set(LIBCXX_BUILT_STANDALONE 1)
61 message(STATUS "Configuring for standalone build.")
62
63 find_llvm_parts()
64
Eric Fiseliereb6e2ea2015-07-30 22:30:34 +000065 # LLVM Options --------------------------------------------------------------
66 include(FindPythonInterp)
67 if( NOT PYTHONINTERP_FOUND )
68 message(WARNING "Failed to find python interpreter. "
69 "The libc++ test suite will be disabled.")
70 set(LLVM_INCLUDE_TESTS OFF)
71 endif()
72
73 if (NOT DEFINED LLVM_INCLUDE_TESTS)
74 set(LLVM_INCLUDE_TESTS ${LLVM_FOUND})
75 endif()
76
77 # Required LIT Configuration ------------------------------------------------
78 # Define the default arguments to use with 'lit', and an option for the user
79 # to override.
80 set(LIT_ARGS_DEFAULT "-sv --show-xfail --show-unsupported")
81 if (MSVC OR XCODE)
82 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
83 endif()
84 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
85
86 # Make sure we can use the console pool for recent cmake and ninja > 1.5
87 # Needed for add_lit_testsuite
88 if(CMAKE_VERSION VERSION_LESS 3.1.20141117)
89 set(cmake_3_2_USES_TERMINAL)
90 else()
91 set(cmake_3_2_USES_TERMINAL USES_TERMINAL)
92 endif()
93
Eric Fiselierce5695f2015-12-30 03:39:03 +000094 # Add LLVM Functions --------------------------------------------------------
Eric Fiseliereb6e2ea2015-07-30 22:30:34 +000095 include(AddLLVM OPTIONAL)
Eric Fiselierce5695f2015-12-30 03:39:03 +000096endif()