Teach InstCombine to fold "(shr exact X, Y) == 0" --> X == 0, fixing #1 from
[llvm/stm8.git] / CMakeLists.txt
blob95ae9e8e43e8eb9e72a8b51e656aa511d652dbe8
1 # See docs/CMake.html for instructions about how to build LLVM with CMake.
3 project(LLVM)
4 cmake_minimum_required(VERSION 2.8)
6 # Add path for custom modules
7 set(CMAKE_MODULE_PATH
8   ${CMAKE_MODULE_PATH}
9   "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
10   "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
11   )
13 set(PACKAGE_VERSION "2.9")
15 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
17 include(VersionFromVCS)
19 option(LLVM_APPEND_VC_REV
20   "Append the version control system revision id to LLVM version" OFF)
22 if( LLVM_APPEND_VC_REV )
23   add_version_info_from_vcs(PACKAGE_VERSION)
24 endif()
26 set(PACKAGE_NAME llvm)
27 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
28 set(PACKAGE_BUGREPORT "llvmbugs@cs.uiuc.edu")
30 if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
31   message(FATAL_ERROR "In-source builds are not allowed.
32 CMake would overwrite the makefiles distributed with LLVM.
33 Please create a directory and run cmake from there, passing the path
34 to this source directory as the last argument.
35 This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
36 Please delete them.")
37 endif()
39 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
41 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
42 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include)
43 set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
44 set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin)
45 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
46 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
48 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
49   file(GLOB_RECURSE
50     tablegenned_files_on_include_dir
51     "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen")
52   file(GLOB_RECURSE
53     tablegenned_files_on_lib_dir
54     "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc")
55   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
56     message(FATAL_ERROR "Apparently there is a previous in-source build,
57 probably as the result of running `configure' and `make' on
58 ${LLVM_MAIN_SRC_DIR}.
59 This may cause problems. The suspicious files are:
60 ${tablegenned_files_on_lib_dir}
61 ${tablegenned_files_on_include_dir}
62 Please clean the source directory.")
63   endif()
64 endif()
66 set(LLVM_ALL_TARGETS
67   Alpha
68   ARM
69   Blackfin
70   CBackend
71   CellSPU
72   CppBackend
73   Mips
74   MBlaze
75   MSP430
76   PowerPC
77   PTX
78   Sparc
79   SystemZ
80   X86
81   XCore
82   )
84 if( MSVC )
85   set(LLVM_TARGETS_TO_BUILD X86
86     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
87 else( MSVC )
88   set(LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS}
89     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
90 endif( MSVC )
92 option(LLVM_ENABLE_CBE_PRINTF_A "Set to ON if CBE is enabled for printf %a output" ON)
93 if(LLVM_ENABLE_CBE_PRINTF_A)
94   set(ENABLE_CBE_PRINTF_A 1)
95 endif()
97 option(LLVM_ENABLE_TIMESTAMPS "Enable embedding timestamp information in build" ON)
98 if(LLVM_ENABLE_TIMESTAMPS)
99   set(ENABLE_TIMESTAMPS 1)
100 endif()
102 option(LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF)
103 set(FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so")
104 set(FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h")
106 set(LLVM_TARGET_ARCH "host"
107   CACHE STRING "Set target to use for LLVM JIT or use \"host\" for automatic detection.")
109 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
111 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
112   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
113 endif()
115 set(LLVM_ENUM_TARGETS "")
116 foreach(c ${LLVM_TARGETS_TO_BUILD})
117   list(FIND LLVM_ALL_TARGETS ${c} idx)
118   if( idx LESS 0 )
119     message(FATAL_ERROR "The target `${c}' does not exist.
120     It should be one of\n${LLVM_ALL_TARGETS}")
121   else()
122     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n")
123   endif()
124 endforeach(c)
126 # Produce llvm/Config/Targets.def
127 configure_file(
128   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
129   ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def
130   )
132 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
134 include(AddLLVMDefinitions)
136 option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON)
138 include(config-ix)
140 include(HandleLLVMOptions)
142 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
143   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
144 else()
145   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
146 endif()
148 configure_file(
149   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/config.h.cmake
150   ${LLVM_BINARY_DIR}/include/llvm/Config/config.h)
152 configure_file(
153   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/llvm-config.h.cmake
154   ${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h)
156 configure_file(
157   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/DataTypes.h.cmake
158   ${LLVM_BINARY_DIR}/include/llvm/Support/DataTypes.h)
160 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} )
161 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
162 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
164 # MSVC has a gazillion warnings with this.
165 if( MSVC )
166   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." OFF)
167 else( MSVC )
168   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON)
169 endif()
171 option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
172 option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
174 set(CMAKE_INCLUDE_CURRENT_DIR ON)
176 include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR})
178 if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
179    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include llvm/Support/Solaris.h")
180 endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
182 include(AddLLVM)
183 include(TableGen)
185 if( MINGW )
186   get_system_libs(LLVM_SYSTEM_LIBS_LIST)
187   foreach(l ${LLVM_SYSTEM_LIBS_LIST})
188     set(LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS} -l${l}")
189   endforeach()
190   set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
191   set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
192 endif()
194 if( MINGW )
195   # People report that -O3 is unreliable on MinGW. The traditional
196   # build also uses -O2 for that reason:
197   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
198 endif()
200 # Put this before tblgen. Else we have a circular dependence.
201 add_subdirectory(lib/Support)
203 set(LLVM_TABLEGEN "tblgen" CACHE
204   STRING "Native TableGen executable. Saves building one when cross-compiling.")
205 # Effective tblgen executable to be used:
206 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})
208 add_subdirectory(utils/TableGen)
210 if( CMAKE_CROSSCOMPILING )
211   # This adds a dependency on target `tblgen', so must go after utils/TableGen
212   include( CrossCompileLLVM )
213 endif( CMAKE_CROSSCOMPILING )
215 add_subdirectory(include/llvm)
217 add_subdirectory(lib)
219 add_subdirectory(utils/FileCheck)
220 add_subdirectory(utils/FileUpdate)
221 add_subdirectory(utils/count)
222 add_subdirectory(utils/not)
223 add_subdirectory(utils/llvm-lit)
225 add_subdirectory(projects)
227 option(LLVM_BUILD_TOOLS
228   "Build the LLVM tools. If OFF, just generate build targets." ON)
229 option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON)
230 if( LLVM_INCLUDE_TOOLS )
231   add_subdirectory(tools)
232 endif()
234 option(LLVM_BUILD_EXAMPLES
235   "Build the LLVM example programs. If OFF, just generate build targets." OFF)
236 option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON)
237 if( LLVM_INCLUDE_EXAMPLES )
238   add_subdirectory(examples)
239 endif()
241 option(LLVM_BUILD_TESTS
242   "Build LLVM unit tests. If OFF, just generate build targes." OFF)
243 if( LLVM_INCLUDE_TESTS )
244   add_subdirectory(test)
245   add_subdirectory(utils/unittest)
246   add_subdirectory(unittests)
247   if (MSVC)
248     # This utility is used to prevent chrashing tests from calling Dr. Watson on
249     # Windows.
250     add_subdirectory(utils/KillTheDoctor)
251   endif()
252 endif()
254 add_subdirectory(cmake/modules)
256 install(DIRECTORY include/
257   DESTINATION include
258   FILES_MATCHING
259   PATTERN "*.def"
260   PATTERN "*.h"
261   PATTERN "*.td"
262   PATTERN "*.inc"
263   PATTERN "LICENSE.TXT"
264   PATTERN ".svn" EXCLUDE
265   )
267 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/
268   DESTINATION include
269   FILES_MATCHING
270   PATTERN "*.def"
271   PATTERN "*.h"
272   PATTERN "*.gen"
273   PATTERN "*.inc"
274   # Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def"
275   PATTERN "CMakeFiles" EXCLUDE
276   PATTERN ".svn" EXCLUDE
277   )
279 # TODO: make and install documentation.
281 set(CPACK_PACKAGE_VENDOR "LLVM")
282 set(CPACK_PACKAGE_VERSION_MAJOR 2)
283 set(CPACK_PACKAGE_VERSION_MINOR 9)
284 add_version_info_from_vcs(CPACK_PACKAGE_VERSION_PATCH)
285 include(CPack)
287 # Workaround for MSVS10 to avoid the Dialog Hell
288 # FIXME: This could be removed with future version of CMake.
289 if(MSVC_VERSION EQUAL 1600)
290   set(LLVM_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/LLVM.sln")
291   if( EXISTS "${LLVM_SLN_FILENAME}" )
292     file(APPEND "${LLVM_SLN_FILENAME}" "\n# This should be regenerated!\n")
293   endif()
294 endif()