Use abs64 instead abs; some platforms don't have a 64-bit abs overload. Noticed by...
[llvm/avr.git] / CMakeLists.txt
blob90586fbe7b859fc99a1c2c33ee3d0bbc9344356d
1 # See docs/CMake.html for instructions about how to build LLVM with CMake.
3 project(LLVM)
4 cmake_minimum_required(VERSION 2.6.1)
6 set(PACKAGE_NAME llvm)
7 set(PACKAGE_VERSION 2.6svn)
8 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
9 set(PACKAGE_BUGREPORT "llvmbugs@cs.uiuc.edu")
11 if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
12   message(FATAL_ERROR "In-source builds are not allowed.
13 CMake would overwrite the makefiles distributed with LLVM.
14 Please create a directory and run cmake from there, passing the path
15 to this source directory as the last argument.
16 This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
17 Please delete them.")
18 endif()
20 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
22 include(FindPerl)
24 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
25 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include)
26 set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
27 set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin)
28 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
29 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
31 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
32   file(GLOB_RECURSE
33     tablegenned_files_on_include_dir
34     "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen")
35   file(GLOB_RECURSE
36     tablegenned_files_on_lib_dir
37     "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc")
38   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
39     message(FATAL_ERROR "Apparently there is a previous in-source build,
40 probably as the result of running `configure' and `make' on
41 ${LLVM_MAIN_SRC_DIR}.
42 This may cause problems. The suspicious files are:
43 ${tablegenned_files_on_lib_dir}
44 ${tablegenned_files_on_include_dir}
45 Please clean the source directory.")
46   endif()
47 endif()
49 set(LLVM_ALL_TARGETS
50   Alpha
51   ARM
52   Blackfin
53   CBackend
54   CellSPU
55   CppBackend
56   Mips
57   MSIL
58   MSP430
59   PIC16
60   PowerPC
61   Sparc
62   SystemZ
63   X86
64   XCore
65   )
67 if( MSVC )
68   set(LLVM_TARGETS_TO_BUILD X86
69     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
70 else( MSVC )
71   set(LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS}
72     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
73 endif( MSVC )
75 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
77 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
78   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
79 else()
80   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
81 endif()
83 if( LLVM_ENABLE_ASSERTIONS )
84   # MSVC doesn't like _DEBUG on release builds. See PR 4379.
85   if( NOT MSVC )
86     add_definitions( -D_DEBUG )
87   endif()
88   # On Release builds cmake automatically defines NDEBUG, so we
89   # explicitly undefine it:
90   if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
91     add_definitions( -UNDEBUG )
92   endif()
93 else()
94   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
95     add_definitions( -DNDEBUG )
96   endif()
97 endif()
99 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
100   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
101 endif()
103 set(LLVM_ENUM_TARGETS "")
104 foreach(c ${LLVM_TARGETS_TO_BUILD})
105   list(FIND LLVM_ALL_TARGETS ${c} idx)
106   if( idx LESS 0 )
107     message(FATAL_ERROR "The target `${c}' does not exists.
108     It should be one of\n${LLVM_ALL_TARGETS}")
109   else()
110     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n")
111   endif()
112 endforeach(c)
114 # Produce llvm/Config/Targets.def
115 configure_file(
116   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
117   ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def
118   )
120 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
122 # Add path for custom modules
123 set(CMAKE_MODULE_PATH
124   ${CMAKE_MODULE_PATH}
125   "${LLVM_MAIN_SRC_DIR}/cmake"
126   "${LLVM_MAIN_SRC_DIR}/cmake/modules"
127   )
129 include(AddLLVMDefinitions)
131 if(WIN32)
132   if(CYGWIN)
133     set(LLVM_ON_WIN32 0)
134     set(LLVM_ON_UNIX 1)
135   else(CYGWIN)
136     set(LLVM_ON_WIN32 1)
137     set(LLVM_ON_UNIX 0)
138   endif(CYGWIN)
139   set(LTDL_SHLIB_EXT ".dll")
140   set(EXEEXT ".exe")
141   # Maximum path length is 160 for non-unicode paths
142   set(MAXPATHLEN 160)
143 else(WIN32)
144   if(UNIX)
145     set(LLVM_ON_WIN32 0)
146     set(LLVM_ON_UNIX 1)
147     set(LTDL_SHLIB_EXT ".so")
148     set(EXEEXT "")
149     # FIXME: Maximum path length is currently set to 'safe' fixed value
150     set(MAXPATHLEN 2024)
151   else(UNIX)
152     MESSAGE(SEND_ERROR "Unable to determine platform")
153   endif(UNIX)
154 endif(WIN32)
156 if( EXISTS ${LLVM_TOOLS_BINARY_DIR}/llvm-config )
157   set(HAVE_LLVM_CONFIG 1)
158 endif( EXISTS ${LLVM_TOOLS_BINARY_DIR}/llvm-config )
160 include(config-ix)
162 option(LLVM_ENABLE_PIC "Build Position-Independent Code" OFF)
164 set(ENABLE_PIC 0)
165 if( LLVM_ENABLE_PIC )
166   if( SUPPORTS_FPIC_FLAG )
167     message(STATUS "Building with -fPIC")
168     add_llvm_definitions(-fPIC)
169     set(ENABLE_PIC 1)
170  else( SUPPORTS_FPIC_FLAG )
171     message(STATUS "Warning: -fPIC not supported.")
172   endif()
173 endif()
175 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} )
176 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
177 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
179 # set(CMAKE_VERBOSE_MAKEFILE true)
181 add_llvm_definitions( -D__STDC_LIMIT_MACROS )
182 add_llvm_definitions( -D__STDC_CONSTANT_MACROS )
184 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
185   # TODO: support other platforms and toolchains.
186   option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF)
187   if( LLVM_BUILD_32_BITS )
188     message(STATUS "Building 32 bits executables and libraries.")
189     add_llvm_definitions( -m32 )
190     list(APPEND CMAKE_EXE_LINKER_FLAGS -m32)
191     list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32)
192     set( LLVM_PLO_FLAGS -melf_i386 ${LLVM_PLO_FLAGS} )
193   endif( LLVM_BUILD_32_BITS )
194 endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
196 if( MSVC )
197   # List of valid CRTs for MSVC
198   set(MSVC_CRT
199     MD
200     MDd)
202   set(LLVM_USE_CRT "" CACHE STRING "Specify VC++ CRT to use for debug/release configurations.")
203   add_llvm_definitions( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS )
204   add_llvm_definitions( -D_SCL_SECURE_NO_WARNINGS -DCRT_NONSTDC_NO_WARNINGS )
205   add_llvm_definitions( -D_SCL_SECURE_NO_DEPRECATE )
206   add_llvm_definitions( -wd4146 -wd4503 -wd4996 -wd4800 -wd4244 -wd4624 )
207   add_llvm_definitions( -wd4355 -wd4715 -wd4180 -wd4345 -wd4224 )
209   # Suppress 'new behavior: elements of array 'array' will be default initialized'
210   add_llvm_definitions( -wd4351 )
212   if (NOT ${LLVM_USE_CRT} STREQUAL "")
213     list(FIND MSVC_CRT ${LLVM_USE_CRT} idx)
214     if (idx LESS 0)
215       message(FATAL_ERROR "Invalid value for LLVM_USE_CRT: ${LLVM_USE_CRT}. Valid options are one of: ${MSVC_CRT}")
216     endif (idx LESS 0)
217     add_llvm_definitions("/${LLVM_USE_CRT}")
218     message(STATUS "Using VC++ CRT: ${LLVM_USE_CRT}")
219   endif (NOT ${LLVM_USE_CRT} STREQUAL "")
220 endif( MSVC )
222 include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR})
224 include(AddLLVM)
225 include(TableGen)
227 add_subdirectory(lib/Support)
228 add_subdirectory(lib/System)
230 # Everything else depends on Support and System:
231 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} )
233 set(LLVM_TABLEGEN "tblgen" CACHE
234   STRING "Native TableGen executable. Saves building one when cross-compiling.")
235 # Effective tblgen executable to be used:
236 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})
238 add_subdirectory(utils/TableGen)
240 if( CMAKE_CROSSCOMPILING )
241   # This adds a dependency on target `tblgen', so must go after utils/TableGen
242   include( CrossCompileLLVM )
243 endif( CMAKE_CROSSCOMPILING )
245 add_subdirectory(include/llvm)
247 add_subdirectory(lib/VMCore)
248 add_subdirectory(lib/CodeGen)
249 add_subdirectory(lib/CodeGen/SelectionDAG)
250 add_subdirectory(lib/CodeGen/AsmPrinter)
251 add_subdirectory(lib/Bitcode/Reader)
252 add_subdirectory(lib/Bitcode/Writer)
253 add_subdirectory(lib/Transforms/Utils)
254 add_subdirectory(lib/Transforms/Instrumentation)
255 add_subdirectory(lib/Transforms/Scalar)
256 add_subdirectory(lib/Transforms/IPO)
257 add_subdirectory(lib/Transforms/Hello)
258 add_subdirectory(lib/Linker)
259 add_subdirectory(lib/Analysis)
260 add_subdirectory(lib/Analysis/IPA)
261 add_subdirectory(lib/MC)
263 add_subdirectory(utils/FileCheck)
265  set(LLVM_ENUM_ASM_PRINTERS "")
266  set(LLVM_ENUM_ASM_PARSERS "")
267  foreach(t ${LLVM_TARGETS_TO_BUILD})
268   message(STATUS "Targeting ${t}")
269   add_subdirectory(lib/Target/${t})
270   add_subdirectory(lib/Target/${t}/TargetInfo)
271   if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmPrinter/CMakeLists.txt )
272    add_subdirectory(lib/Target/${t}/AsmPrinter)
273     set(LLVM_ENUM_ASM_PRINTERS 
274         "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
275  endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmPrinter/CMakeLists.txt )
276   if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmParser/CMakeLists.txt )
277    add_subdirectory(lib/Target/${t}/AsmParser)
278     set(LLVM_ENUM_ASM_PARSERS 
279         "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n")
280  endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmParser/CMakeLists.txt )
281 endforeach(t)
283 # Produce llvm/Config/AsmPrinters.def
284 configure_file(
285   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in
286   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmPrinters.def
287   )
289 # Produce llvm/Config/AsmParsers.def
290 configure_file(
291   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in
292   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmParsers.def
293   )
295 add_subdirectory(lib/ExecutionEngine)
296 add_subdirectory(lib/ExecutionEngine/Interpreter)
297 add_subdirectory(lib/ExecutionEngine/JIT)
298 add_subdirectory(lib/Target)
299 add_subdirectory(lib/AsmParser)
300 add_subdirectory(lib/Debugger)
301 add_subdirectory(lib/Archive)
303 add_subdirectory(projects)
304 add_subdirectory(tools)
306 option(LLVM_EXAMPLES "Build LLVM example programs." OFF)
307 if (LLVM_EXAMPLES)
308   add_subdirectory(examples)
309 endif ()
311 install(DIRECTORY include
312   DESTINATION .
313   PATTERN ".svn" EXCLUDE
314   PATTERN "*.cmake" EXCLUDE
315   PATTERN "*.in" EXCLUDE
316   )
318 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
319   DESTINATION .
320   )
322 # TODO: make and install documentation.