blob: d4f467a509179307ea8e9acfb97236a11e02b634 [file] [log] [blame]
Tobias Grosser75805372011-04-29 06:27:021# Check if this is a in tree build.
2if (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 Zheng632f5f42012-03-16 13:24:4212 #FileCheck is not install by default, warn the user to Copy FileCheck
Hongbin Zhengc507b1e2012-03-16 14:34:2713 if( NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/FileCheck
14 OR NOT EXISTS ${LLVM_INSTALL_ROOT}/bin/not)
Johannes Doerfert9e7b17b2014-08-18 00:40:1315 message(WARNING "FileCheck or not are required by running regress tests, "
Hongbin Zhengc507b1e2012-03-16 14:34:2716 "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 Grosser75805372011-04-29 06:27:0220 # Add the llvm header path.
21 include_directories(${LLVM_INSTALL_ROOT}/include/)
Hongbin Zheng632f5f42012-03-16 13:24:4222
Hongbin Zhengb7c07f32012-03-27 07:56:0723 # 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 Grosser75805372011-04-29 06:27:0240
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 Zhengb7c07f32012-03-27 07:56:0747 # 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 Grosser75805372011-04-29 06:27:0252 # 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 Grosserf85d0e22015-02-04 21:56:2857
Michael Kruse84bf8a32015-09-11 20:47:1458 # 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 Grosserf85d0e22015-02-04 21:56:2886 # Make sure the isl c files are built as fPIC
87 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
Tobias Grosser75805372011-04-29 06:27:0288endif(NOT DEFINED LLVM_MAIN_SRC_DIR)
89
90set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
91set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
92
Tobias Grosserbc822eb2012-10-21 15:51:4993# Add path for custom modules
94set(CMAKE_MODULE_PATH
95 ${CMAKE_MODULE_PATH}
96 "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
97 )
98
99include("polly_macros")
100
Tobias Grosser75805372011-04-29 06:27:02101# Add appropriate flags for GCC
102if (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 Kruse441357d2015-07-21 12:22:36106elseif (MSVC)
107 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-")
108 add_definitions("-D_HAS_EXCEPTIONS=0")
109else ()
110 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
Tobias Grosser75805372011-04-29 06:27:02111endif ()
112
Tobias Grosser75805372011-04-29 06:27:02113# Add path for custom modules
114set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${POLLY_SOURCE_DIR}/cmake")
115
Rafael Espindolafa0841c2014-02-22 13:28:31116SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
117
Tobias Grosser6217e182012-08-03 12:50:07118option(POLLY_ENABLE_GPGPU_CODEGEN "Enable GPGPU code generation feature" OFF)
119if (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 Grossere9385172016-07-14 10:22:19124else(POLLY_ENABLE_GPGPU_CODEGEN)
125 set(GPU_CODEGEN FALSE)
Tobias Grosser6217e182012-08-03 12:50:07126endif(POLLY_ENABLE_GPGPU_CODEGEN)
Tobias Grosser75805372011-04-29 06:27:02127
Tobias Grossere9385172016-07-14 10:22:19128
Tobias Grosser88aeaf62012-06-06 12:16:10129# Support GPGPU code generation if the library is available.
130if (CUDALIB_FOUND)
131 INCLUDE_DIRECTORIES( ${CUDALIB_INCLUDE_DIR} )
132endif(CUDALIB_FOUND)
133
Tobias Grosser75805372011-04-29 06:27:02134include_directories(
Johannes Doerfert34558182014-05-28 16:54:42135 BEFORE
Tobias Grosser75805372011-04-29 06:27:02136 ${CMAKE_CURRENT_SOURCE_DIR}/include
137 ${CMAKE_CURRENT_SOURCE_DIR}/lib/JSON/include
Michael Krusedddfeb62015-06-25 16:50:13138 ${CMAKE_CURRENT_BINARY_DIR}/lib/External/isl/include
Tobias Grosser52a25232015-02-04 20:55:43139 ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/isl/include
Tobias Grossere9385172016-07-14 10:22:19140 ${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 Grosser75805372011-04-29 06:27:02143 ${CMAKE_CURRENT_BINARY_DIR}/include
144 )
145
Eugene Zelenko2487cb22016-06-21 18:14:01146if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
147 install(DIRECTORY include/
148 DESTINATION include
149 FILES_MATCHING
150 PATTERN "*.h"
151 PATTERN ".svn" EXCLUDE
152 )
Tobias Grosser71036882013-01-19 14:17:52153
Eugene Zelenko2487cb22016-06-21 18:14:01154 install(DIRECTORY ${POLLY_BINARY_DIR}/include/
155 DESTINATION include
156 FILES_MATCHING
157 PATTERN "*.h"
158 PATTERN "CMakeFiles" EXCLUDE
159 PATTERN ".svn" EXCLUDE
160 )
161endif()
Tobias Grosser75805372011-04-29 06:27:02162
163add_definitions( -D_GNU_SOURCE )
164
Tobias Grosserb6948c12016-02-04 07:16:36165add_subdirectory(docs)
Tobias Grosser75805372011-04-29 06:27:02166add_subdirectory(lib)
167add_subdirectory(test)
168add_subdirectory(tools)
169# TODO: docs.
170
171
172configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/polly/Config/config.h.cmake
173 ${POLLY_BINARY_DIR}/include/polly/Config/config.h )
174
Tobias Grosserc38af882013-02-14 16:19:16175# Add target to check formatting of polly files
Tobias Grosser25a99e982016-03-25 12:16:17176file( GLOB_RECURSE files *.h lib/*.cpp lib/*.c tools/*.cpp tools/*.c tools/*.h)
Tobias Grosser0db04b472013-03-23 01:04:48177file( GLOB_RECURSE jsonfiles lib/JSON/*.h lib/JSON/*.cpp)
Tobias Grosserd1e90f52016-07-05 15:26:33178file( GLOB_RECURSE external lib/External/*.h lib/External/*.c)
179list( REMOVE_ITEM files ${jsonfiles} ${external})
Michael Kruse69f37882015-09-14 16:59:50180
181set(check_format_depends)
182set(update_format_depends)
183set(i 0)
184foreach (file IN LISTS files)
185 add_custom_command(OUTPUT polly-check-format${i}
Tobias Grosser5da48f32015-10-15 12:18:37186 COMMAND clang-format -sort-includes -style=llvm ${file} | diff -u ${file} -
Michael Kruse69f37882015-09-14 16:59:50187 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 Grosser5da48f32015-10-15 12:18:37193 COMMAND clang-format -sort-includes -i -style=llvm ${file}
Michael Kruse69f37882015-09-14 16:59:50194 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)
200endforeach ()
201
202add_custom_target(polly-check-format DEPENDS ${check_format_depends})
Michael Kruse6362f5a2015-07-21 12:40:01203set_target_properties(polly-check-format PROPERTIES FOLDER "Polly")
Michael Kruse69f37882015-09-14 16:59:50204
205add_custom_target(polly-update-format DEPENDS ${update_format_depends})
Michael Kruse6362f5a2015-07-21 12:40:01206set_target_properties(polly-update-format PROPERTIES FOLDER "Polly")
Sebastian Popa8fb7242014-03-13 20:24:48207
208# Set the variable POLLY_LINK_LIBS in the llvm/tools/ dir.
209set(POLLY_LINK_LIBS ${POLLY_LINK_LIBS} PARENT_SCOPE)