Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 1 | # Check if this is a in tree build. |
| 2 | if (NOT DEFINED LLVM_MAIN_SRC_DIR) |
| 3 | project(Polly) |
| 4 | cmake_minimum_required(VERSION 2.8) |
| 5 | |
| 6 | # Where is LLVM installed? |
| 7 | set(LLVM_INSTALL_ROOT "" CACHE PATH "Root of LLVM install.") |
| 8 | # Check if the LLVM_INSTALL_ROOT valid. |
| 9 | if( NOT EXISTS ${LLVM_INSTALL_ROOT}/include/llvm ) |
| 10 | message(FATAL_ERROR "LLVM_INSTALL_ROOT (${LLVM_INSTALL_ROOT}) is not a valid LLVM installation.") |
| 11 | endif(NOT EXISTS ${LLVM_INSTALL_ROOT}/include/llvm) |
Hongbin Zheng | 632f5f4 | 2012-03-16 13:24:42 | [diff] [blame] | 12 | #FileCheck is not install by default, warn the user to Copy FileCheck |
Hongbin Zheng | c507b1e | 2012-03-16 14:34:27 | [diff] [blame] | 13 | if( NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/FileCheck |
| 14 | OR NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/not) |
Johannes Doerfert | 9e7b17b | 2014-08-18 00:40:13 | [diff] [blame] | 15 | message(WARNING "FileCheck or not are required by running regress tests, " |
Hongbin Zheng | c507b1e | 2012-03-16 14:34:27 | [diff] [blame] | 16 | "but they are not installed! Please copy it to " |
| 17 | "${LLVM_INSTALL_ROOT}/bin.") |
| 18 | endif(NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/FileCheck |
| 19 | OR NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/not) |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 20 | # Add the llvm header path. |
| 21 | include_directories(${LLVM_INSTALL_ROOT}/include/) |
Hongbin Zheng | 632f5f4 | 2012-03-16 13:24:42 | [diff] [blame] | 22 | |
Hongbin Zheng | b7c07f3 | 2012-03-27 07:56:07 | [diff] [blame] | 23 | # Get the system librarys that will link into LLVM. |
| 24 | function(get_system_libs return_var) |
| 25 | # Returns in `return_var' a list of system libraries used by LLVM. |
| 26 | if( NOT MSVC ) |
| 27 | if( MINGW ) |
| 28 | set(system_libs ${system_libs} imagehlp psapi) |
| 29 | elseif( CMAKE_HOST_UNIX ) |
| 30 | if( HAVE_LIBDL ) |
| 31 | set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) |
| 32 | endif() |
| 33 | if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD ) |
| 34 | set(system_libs ${system_libs} pthread) |
| 35 | endif() |
| 36 | endif( MINGW ) |
| 37 | endif( NOT MSVC ) |
| 38 | set(${return_var} ${system_libs} PARENT_SCOPE) |
| 39 | endfunction(get_system_libs) |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 40 | |
| 41 | # Now set the header paths. |
| 42 | execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --includedir |
| 43 | OUTPUT_VARIABLE LLVM_INCLUDE_DIR |
| 44 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 45 | include_directories( ${LLVM_INCLUDE_DIR} ) |
| 46 | |
Hongbin Zheng | b7c07f3 | 2012-03-27 07:56:07 | [diff] [blame] | 47 | # Get the TARGET_TRIPLE |
| 48 | execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --host-target |
| 49 | OUTPUT_VARIABLE TARGET_TRIPLE |
| 50 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 51 | |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 52 | # And then set the cxx flags. |
| 53 | execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --cxxflags |
| 54 | OUTPUT_VARIABLE LLVM_CXX_FLAGS |
| 55 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 56 | set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${LLVM_CXX_FLAGS}) |
Tobias Grosser | f85d0e2 | 2015-02-04 21:56:28 | [diff] [blame] | 57 | |
Michael Kruse | 84bf8a3 | 2015-09-11 20:47:14 | [diff] [blame] | 58 | # Check LLVM_ENABLE_ASSERTIONS |
| 59 | execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --assertion-mode |
| 60 | OUTPUT_VARIABLE LLVM_ENABLE_ASSERTIONS |
| 61 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 62 | # Copied from LLVM's HandleLLVMOptions.cmake |
| 63 | if( LLVM_ENABLE_ASSERTIONS ) |
| 64 | # MSVC doesn't like _DEBUG on release builds. See PR 4379. |
| 65 | if( NOT MSVC ) |
| 66 | add_definitions( -D_DEBUG ) |
| 67 | endif() |
| 68 | # On non-Debug builds cmake automatically defines NDEBUG, so we |
| 69 | # explicitly undefine it: |
| 70 | if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) |
| 71 | add_definitions( -UNDEBUG ) |
| 72 | # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines. |
| 73 | foreach (flags_var_to_scrub |
| 74 | CMAKE_CXX_FLAGS_RELEASE |
| 75 | CMAKE_CXX_FLAGS_RELWITHDEBINFO |
| 76 | CMAKE_CXX_FLAGS_MINSIZEREL |
| 77 | CMAKE_C_FLAGS_RELEASE |
| 78 | CMAKE_C_FLAGS_RELWITHDEBINFO |
| 79 | CMAKE_C_FLAGS_MINSIZEREL) |
| 80 | string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " |
| 81 | "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") |
| 82 | endforeach() |
| 83 | endif() |
| 84 | endif() |
| 85 | |
Tobias Grosser | f85d0e2 | 2015-02-04 21:56:28 | [diff] [blame] | 86 | # Make sure the isl c files are built as fPIC |
| 87 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 88 | endif(NOT DEFINED LLVM_MAIN_SRC_DIR) |
| 89 | |
| 90 | set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 91 | set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) |
| 92 | |
Tobias Grosser | bc822eb | 2012-10-21 15:51:49 | [diff] [blame] | 93 | # Add path for custom modules |
| 94 | set(CMAKE_MODULE_PATH |
| 95 | ${CMAKE_MODULE_PATH} |
| 96 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake" |
| 97 | ) |
| 98 | |
| 99 | include("polly_macros") |
| 100 | |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 101 | # Add appropriate flags for GCC |
| 102 | if (CMAKE_COMPILER_IS_GNUCXX) |
| 103 | # FIXME: Turn off exceptions, RTTI: |
| 104 | # -fno-exceptions -fno-rtti |
| 105 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common -Woverloaded-virtual -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -fno-exceptions -fno-rtti") |
Michael Kruse | 441357d | 2015-07-21 12:22:36 | [diff] [blame] | 106 | elseif (MSVC) |
| 107 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-") |
| 108 | add_definitions("-D_HAS_EXCEPTIONS=0") |
| 109 | else () |
| 110 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 111 | endif () |
| 112 | |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 113 | # Add path for custom modules |
| 114 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${POLLY_SOURCE_DIR}/cmake") |
| 115 | |
Rafael Espindola | fa0841c | 2014-02-22 13:28:31 | [diff] [blame] | 116 | SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) |
| 117 | |
Tobias Grosser | 6217e18 | 2012-08-03 12:50:07 | [diff] [blame] | 118 | option(POLLY_ENABLE_GPGPU_CODEGEN "Enable GPGPU code generation feature" OFF) |
| 119 | if (POLLY_ENABLE_GPGPU_CODEGEN) |
| 120 | # Do not require CUDA, as GPU code generation test cases can be run without |
| 121 | # a cuda library. |
| 122 | FIND_PACKAGE(CUDA) |
| 123 | set(GPU_CODEGEN TRUE) |
Tobias Grosser | e938517 | 2016-07-14 10:22:19 | [diff] [blame^] | 124 | else(POLLY_ENABLE_GPGPU_CODEGEN) |
| 125 | set(GPU_CODEGEN FALSE) |
Tobias Grosser | 6217e18 | 2012-08-03 12:50:07 | [diff] [blame] | 126 | endif(POLLY_ENABLE_GPGPU_CODEGEN) |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 127 | |
Tobias Grosser | e938517 | 2016-07-14 10:22:19 | [diff] [blame^] | 128 | |
Tobias Grosser | 88aeaf6 | 2012-06-06 12:16:10 | [diff] [blame] | 129 | # Support GPGPU code generation if the library is available. |
| 130 | if (CUDALIB_FOUND) |
| 131 | INCLUDE_DIRECTORIES( ${CUDALIB_INCLUDE_DIR} ) |
| 132 | endif(CUDALIB_FOUND) |
| 133 | |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 134 | include_directories( |
Johannes Doerfert | 3455818 | 2014-05-28 16:54:42 | [diff] [blame] | 135 | BEFORE |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 136 | ${CMAKE_CURRENT_SOURCE_DIR}/include |
| 137 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/JSON/include |
Michael Kruse | dddfeb6 | 2015-06-25 16:50:13 | [diff] [blame] | 138 | ${CMAKE_CURRENT_BINARY_DIR}/lib/External/isl/include |
Tobias Grosser | 52a2523 | 2015-02-04 20:55:43 | [diff] [blame] | 139 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/isl/include |
Tobias Grosser | e938517 | 2016-07-14 10:22:19 | [diff] [blame^] | 140 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/pet/include |
| 141 | ${CMAKE_CURRENT_BINARY_DIR}/lib/External/ppcg |
| 142 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/ppcg |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 143 | ${CMAKE_CURRENT_BINARY_DIR}/include |
| 144 | ) |
| 145 | |
Eugene Zelenko | 2487cb2 | 2016-06-21 18:14:01 | [diff] [blame] | 146 | if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) |
| 147 | install(DIRECTORY include/ |
| 148 | DESTINATION include |
| 149 | FILES_MATCHING |
| 150 | PATTERN "*.h" |
| 151 | PATTERN ".svn" EXCLUDE |
| 152 | ) |
Tobias Grosser | 7103688 | 2013-01-19 14:17:52 | [diff] [blame] | 153 | |
Eugene Zelenko | 2487cb2 | 2016-06-21 18:14:01 | [diff] [blame] | 154 | install(DIRECTORY ${POLLY_BINARY_DIR}/include/ |
| 155 | DESTINATION include |
| 156 | FILES_MATCHING |
| 157 | PATTERN "*.h" |
| 158 | PATTERN "CMakeFiles" EXCLUDE |
| 159 | PATTERN ".svn" EXCLUDE |
| 160 | ) |
| 161 | endif() |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 162 | |
| 163 | add_definitions( -D_GNU_SOURCE ) |
| 164 | |
Tobias Grosser | b6948c1 | 2016-02-04 07:16:36 | [diff] [blame] | 165 | add_subdirectory(docs) |
Tobias Grosser | 7580537 | 2011-04-29 06:27:02 | [diff] [blame] | 166 | add_subdirectory(lib) |
| 167 | add_subdirectory(test) |
| 168 | add_subdirectory(tools) |
| 169 | # TODO: docs. |
| 170 | |
| 171 | |
| 172 | configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/polly/Config/config.h.cmake |
| 173 | ${POLLY_BINARY_DIR}/include/polly/Config/config.h ) |
| 174 | |
Tobias Grosser | c38af88 | 2013-02-14 16:19:16 | [diff] [blame] | 175 | # Add target to check formatting of polly files |
Tobias Grosser | 25a99e98 | 2016-03-25 12:16:17 | [diff] [blame] | 176 | file( GLOB_RECURSE files *.h lib/*.cpp lib/*.c tools/*.cpp tools/*.c tools/*.h) |
Tobias Grosser | 0db04b47 | 2013-03-23 01:04:48 | [diff] [blame] | 177 | file( GLOB_RECURSE jsonfiles lib/JSON/*.h lib/JSON/*.cpp) |
Tobias Grosser | d1e90f5 | 2016-07-05 15:26:33 | [diff] [blame] | 178 | file( GLOB_RECURSE external lib/External/*.h lib/External/*.c) |
| 179 | list( REMOVE_ITEM files ${jsonfiles} ${external}) |
Michael Kruse | 69f3788 | 2015-09-14 16:59:50 | [diff] [blame] | 180 | |
| 181 | set(check_format_depends) |
| 182 | set(update_format_depends) |
| 183 | set(i 0) |
| 184 | foreach (file IN LISTS files) |
| 185 | add_custom_command(OUTPUT polly-check-format${i} |
Tobias Grosser | 5da48f3 | 2015-10-15 12:18:37 | [diff] [blame] | 186 | COMMAND clang-format -sort-includes -style=llvm ${file} | diff -u ${file} - |
Michael Kruse | 69f3788 | 2015-09-14 16:59:50 | [diff] [blame] | 187 | VERBATIM |
| 188 | COMMENT "Checking format of ${file}..." |
| 189 | ) |
| 190 | list(APPEND check_format_depends "polly-check-format${i}") |
| 191 | |
| 192 | add_custom_command(OUTPUT polly-update-format${i} |
Tobias Grosser | 5da48f3 | 2015-10-15 12:18:37 | [diff] [blame] | 193 | COMMAND clang-format -sort-includes -i -style=llvm ${file} |
Michael Kruse | 69f3788 | 2015-09-14 16:59:50 | [diff] [blame] | 194 | VERBATIM |
| 195 | COMMENT "Updating format of ${file}..." |
| 196 | ) |
| 197 | list(APPEND update_format_depends "polly-update-format${i}") |
| 198 | |
| 199 | math(EXPR i ${i}+1) |
| 200 | endforeach () |
| 201 | |
| 202 | add_custom_target(polly-check-format DEPENDS ${check_format_depends}) |
Michael Kruse | 6362f5a | 2015-07-21 12:40:01 | [diff] [blame] | 203 | set_target_properties(polly-check-format PROPERTIES FOLDER "Polly") |
Michael Kruse | 69f3788 | 2015-09-14 16:59:50 | [diff] [blame] | 204 | |
| 205 | add_custom_target(polly-update-format DEPENDS ${update_format_depends}) |
Michael Kruse | 6362f5a | 2015-07-21 12:40:01 | [diff] [blame] | 206 | set_target_properties(polly-update-format PROPERTIES FOLDER "Polly") |
Sebastian Pop | a8fb724 | 2014-03-13 20:24:48 | [diff] [blame] | 207 | |
| 208 | # Set the variable POLLY_LINK_LIBS in the llvm/tools/ dir. |
| 209 | set(POLLY_LINK_LIBS ${POLLY_LINK_LIBS} PARENT_SCOPE) |