Shrink Thumb2 movcc instructions.
[llvm/avr.git] / CMakeLists.txt
blob12860eeff320fe667a548e524900c887712e6e76
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 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
23 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include)
24 set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
25 set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin)
26 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
27 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
29 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
30   file(GLOB_RECURSE
31     tablegenned_files_on_include_dir
32     "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen")
33   file(GLOB_RECURSE
34     tablegenned_files_on_lib_dir
35     "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc")
36   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
37     message(FATAL_ERROR "Apparently there is a previous in-source build,
38 probably as the result of running `configure' and `make' on
39 ${LLVM_MAIN_SRC_DIR}.
40 This may cause problems. The suspicious files are:
41 ${tablegenned_files_on_lib_dir}
42 ${tablegenned_files_on_include_dir}
43 Please clean the source directory.")
44   endif()
45 endif()
47 set(LLVM_ALL_TARGETS
48   Alpha
49   ARM
50   Blackfin
51   CBackend
52   CellSPU
53   CppBackend
54   Mips
55   MSIL
56   MSP430
57   PIC16
58   PowerPC
59   Sparc
60   SystemZ
61   X86
62   XCore
63   )
65 if( MSVC )
66   set(LLVM_TARGETS_TO_BUILD X86
67     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
68 else( MSVC )
69   set(LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS}
70     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
71 endif( MSVC )
73 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
75 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
76   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
77 else()
78   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
79 endif()
81 if( LLVM_ENABLE_ASSERTIONS )
82   # MSVC doesn't like _DEBUG on release builds. See PR 4379.
83   if( NOT MSVC )
84     add_definitions( -D_DEBUG )
85   endif()
86   # On Release builds cmake automatically defines NDEBUG, so we
87   # explicitly undefine it:
88   if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
89     add_definitions( -UNDEBUG )
90   endif()
91 else()
92   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
93     add_definitions( -DNDEBUG )
94   endif()
95 endif()
97 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
98   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
99 endif()
101 set(LLVM_ENUM_TARGETS "")
102 foreach(c ${LLVM_TARGETS_TO_BUILD})
103   list(FIND LLVM_ALL_TARGETS ${c} idx)
104   if( idx LESS 0 )
105     message(FATAL_ERROR "The target `${c}' does not exists.
106     It should be one of\n${LLVM_ALL_TARGETS}")
107   else()
108     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n")
109   endif()
110 endforeach(c)
112 # Produce llvm/Config/Targets.def
113 configure_file(
114   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
115   ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def
116   )
118 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
120 # Add path for custom modules
121 set(CMAKE_MODULE_PATH
122   ${CMAKE_MODULE_PATH}
123   "${LLVM_MAIN_SRC_DIR}/cmake"
124   "${LLVM_MAIN_SRC_DIR}/cmake/modules"
125   )
127 include(AddLLVMDefinitions)
129 if(WIN32)
130   if(CYGWIN)
131     set(LLVM_ON_WIN32 0)
132     set(LLVM_ON_UNIX 1)
133   else(CYGWIN)
134     set(LLVM_ON_WIN32 1)
135     set(LLVM_ON_UNIX 0)
136   endif(CYGWIN)
137   set(LTDL_SHLIB_EXT ".dll")
138   set(EXEEXT ".exe")
139   # Maximum path length is 160 for non-unicode paths
140   set(MAXPATHLEN 160)
141 else(WIN32)
142   if(UNIX)
143     set(LLVM_ON_WIN32 0)
144     set(LLVM_ON_UNIX 1)
145     set(LTDL_SHLIB_EXT ".so")
146     set(EXEEXT "")
147     # FIXME: Maximum path length is currently set to 'safe' fixed value
148     set(MAXPATHLEN 2024)
149   else(UNIX)
150     MESSAGE(SEND_ERROR "Unable to determine platform")
151   endif(UNIX)
152 endif(WIN32)
154 include(config-ix)
156 option(LLVM_ENABLE_PIC "Build Position-Independent Code" OFF)
158 set(ENABLE_PIC 0)
159 if( LLVM_ENABLE_PIC )
160   if( SUPPORTS_FPIC_FLAG )
161     message(STATUS "Building with -fPIC")
162     add_llvm_definitions(-fPIC)
163     set(ENABLE_PIC 1)
164  else( SUPPORTS_FPIC_FLAG )
165     message(STATUS "Warning: -fPIC not supported.")
166   endif()
167 endif()
169 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} )
170 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
171 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
173 # set(CMAKE_VERBOSE_MAKEFILE true)
175 add_llvm_definitions( -D__STDC_LIMIT_MACROS )
176 add_llvm_definitions( -D__STDC_CONSTANT_MACROS )
178 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
179   # TODO: support other platforms and toolchains.
180   option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF)
181   if( LLVM_BUILD_32_BITS )
182     message(STATUS "Building 32 bits executables and libraries.")
183     add_llvm_definitions( -m32 )
184     list(APPEND CMAKE_EXE_LINKER_FLAGS -m32)
185     list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32)
186     set( LLVM_PLO_FLAGS -melf_i386 ${LLVM_PLO_FLAGS} )
187   endif( LLVM_BUILD_32_BITS )
188 endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
190 if( MSVC )
191   # List of valid CRTs for MSVC
192   set(MSVC_CRT
193     MD
194     MDd)
196   set(LLVM_USE_CRT "" CACHE STRING "Specify VC++ CRT to use for debug/release configurations.")
197   add_llvm_definitions( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS )
198   add_llvm_definitions( -D_SCL_SECURE_NO_WARNINGS -DCRT_NONSTDC_NO_WARNINGS )
199   add_llvm_definitions( -D_SCL_SECURE_NO_DEPRECATE )
200   add_llvm_definitions( -wd4146 -wd4503 -wd4996 -wd4800 -wd4244 -wd4624 )
201   add_llvm_definitions( -wd4355 -wd4715 -wd4180 -wd4345 -wd4224 )
203   # Suppress 'new behavior: elements of array 'array' will be default initialized'
204   add_llvm_definitions( -wd4351 )
206   if (NOT ${LLVM_USE_CRT} STREQUAL "")
207     list(FIND MSVC_CRT ${LLVM_USE_CRT} idx)
208     if (idx LESS 0)
209       message(FATAL_ERROR "Invalid value for LLVM_USE_CRT: ${LLVM_USE_CRT}. Valid options are one of: ${MSVC_CRT}")
210     endif (idx LESS 0)
211     add_llvm_definitions("/${LLVM_USE_CRT}")
212     message(STATUS "Using VC++ CRT: ${LLVM_USE_CRT}")
213   endif (NOT ${LLVM_USE_CRT} STREQUAL "")
214 endif( MSVC )
216 include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR})
218 include(AddLLVM)
219 include(TableGen)
221 add_subdirectory(lib/Support)
222 add_subdirectory(lib/System)
224 # Everything else depends on Support and System:
225 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} )
227 set(LLVM_TABLEGEN "tblgen" CACHE
228   STRING "Native TableGen executable. Saves building one when cross-compiling.")
229 # Effective tblgen executable to be used:
230 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})
232 add_subdirectory(utils/TableGen)
234 if( CMAKE_CROSSCOMPILING )
235   # This adds a dependency on target `tblgen', so must go after utils/TableGen
236   include( CrossCompileLLVM )
237 endif( CMAKE_CROSSCOMPILING )
239 add_subdirectory(include/llvm)
241 add_subdirectory(lib/VMCore)
242 add_subdirectory(lib/CodeGen)
243 add_subdirectory(lib/CodeGen/SelectionDAG)
244 add_subdirectory(lib/CodeGen/AsmPrinter)
245 add_subdirectory(lib/Bitcode/Reader)
246 add_subdirectory(lib/Bitcode/Writer)
247 add_subdirectory(lib/Transforms/Utils)
248 add_subdirectory(lib/Transforms/Instrumentation)
249 add_subdirectory(lib/Transforms/Scalar)
250 add_subdirectory(lib/Transforms/IPO)
251 add_subdirectory(lib/Transforms/Hello)
252 add_subdirectory(lib/Linker)
253 add_subdirectory(lib/Analysis)
254 add_subdirectory(lib/Analysis/IPA)
255 add_subdirectory(lib/MC)
257 add_subdirectory(utils/FileCheck)
259  set(LLVM_ENUM_ASM_PRINTERS "")
260  set(LLVM_ENUM_ASM_PARSERS "")
261  foreach(t ${LLVM_TARGETS_TO_BUILD})
262   message(STATUS "Targeting ${t}")
263   add_subdirectory(lib/Target/${t})
264   add_subdirectory(lib/Target/${t}/TargetInfo)
265   if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmPrinter/CMakeLists.txt )
266    add_subdirectory(lib/Target/${t}/AsmPrinter)
267     set(LLVM_ENUM_ASM_PRINTERS 
268         "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
269  endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmPrinter/CMakeLists.txt )
270   if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmParser/CMakeLists.txt )
271    add_subdirectory(lib/Target/${t}/AsmParser)
272     set(LLVM_ENUM_ASM_PARSERS 
273         "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n")
274  endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmParser/CMakeLists.txt )
275 endforeach(t)
277 # Produce llvm/Config/AsmPrinters.def
278 configure_file(
279   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in
280   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmPrinters.def
281   )
283 # Produce llvm/Config/AsmParsers.def
284 configure_file(
285   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in
286   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmParsers.def
287   )
289 add_subdirectory(lib/ExecutionEngine)
290 add_subdirectory(lib/ExecutionEngine/Interpreter)
291 add_subdirectory(lib/ExecutionEngine/JIT)
292 add_subdirectory(lib/Target)
293 add_subdirectory(lib/AsmParser)
294 add_subdirectory(lib/Debugger)
295 add_subdirectory(lib/Archive)
297 add_subdirectory(projects)
298 add_subdirectory(tools)
300 option(LLVM_EXAMPLES "Build LLVM example programs." OFF)
301 if (LLVM_EXAMPLES)
302   add_subdirectory(examples)
303 endif ()
305 install(DIRECTORY include
306   DESTINATION .
307   PATTERN ".svn" EXCLUDE
308   PATTERN "*.cmake" EXCLUDE
309   PATTERN "*.in" EXCLUDE
310   PATTERN "*.tmp" EXCLUDE
311   )
313 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
314   DESTINATION .
315   )
317 # TODO: make and install documentation.