Rename this test.
[llvm/stm8.git] / CMakeLists.txt
blob7df188560b75ede4b94996f732073b699da2c9d3
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 include(VersionFromVCS)
17 option(LLVM_APPEND_VC_REV
18   "Append the version control system revision id to LLVM version" OFF)
20 if( LLVM_APPEND_VC_REV )
21   add_version_info_from_vcs(PACKAGE_VERSION)
22 endif()
24 set(PACKAGE_NAME llvm)
25 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
26 set(PACKAGE_BUGREPORT "llvmbugs@cs.uiuc.edu")
28 if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
29   message(FATAL_ERROR "In-source builds are not allowed.
30 CMake would overwrite the makefiles distributed with LLVM.
31 Please create a directory and run cmake from there, passing the path
32 to this source directory as the last argument.
33 This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
34 Please delete them.")
35 endif()
37 # Run-time build mode; It is used for unittests.
38 if(MSVC_IDE)
39   # Expect "$(Configuration)", "$(OutDir)", etc.
40   # It is expanded by msbuild or similar.
41   set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
42 elseif(NOT CMAKE_BUILD_TYPE STREQUAL "")
43   # Expect "Release" "Debug", etc.
44   # Or unittests could not run.
45   set(RUNTIME_BUILD_MODE ${CMAKE_BUILD_TYPE})
46 else()
47   # It might be "."
48   set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
49 endif()
51 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
53 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
54 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include)
55 set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
56 set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin)
57 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
58 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
60 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
61   file(GLOB_RECURSE
62     tablegenned_files_on_include_dir
63     "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen")
64   file(GLOB_RECURSE
65     tablegenned_files_on_lib_dir
66     "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc")
67   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
68     message(FATAL_ERROR "Apparently there is a previous in-source build,
69 probably as the result of running `configure' and `make' on
70 ${LLVM_MAIN_SRC_DIR}.
71 This may cause problems. The suspicious files are:
72 ${tablegenned_files_on_lib_dir}
73 ${tablegenned_files_on_include_dir}
74 Please clean the source directory.")
75   endif()
76 endif()
78 set(LLVM_ALL_TARGETS
79   Alpha
80   ARM
81   Blackfin
82   CBackend
83   CellSPU
84   CppBackend
85   Mips
86   MBlaze
87   MSP430
88   PowerPC
89   PTX
90   Sparc
91   SystemZ
92   X86
93   XCore
94   )
96 if( MSVC )
97   set(LLVM_TARGETS_TO_BUILD X86
98     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
99 else( MSVC )
100   set(LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS}
101     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
102 endif( MSVC )
104 set(CLANG_RESOURCE_DIR "" CACHE STRING
105   "Relative directory from the Clang binary to its resource files.")
107 option(LLVM_ENABLE_CBE_PRINTF_A "Set to ON if CBE is enabled for printf %a output" ON)
108 if(LLVM_ENABLE_CBE_PRINTF_A)
109   set(ENABLE_CBE_PRINTF_A 1)
110 endif()
112 option(LLVM_ENABLE_TIMESTAMPS "Enable embedding timestamp information in build" ON)
113 if(LLVM_ENABLE_TIMESTAMPS)
114   set(ENABLE_TIMESTAMPS 1)
115 endif()
117 set(C_INCLUDE_DIRS "" CACHE STRING
118   "Colon separated list of directories clang will search for headers.")
120 set(LLVM_TARGET_ARCH "host"
121   CACHE STRING "Set target to use for LLVM JIT or use \"host\" for automatic detection.")
123 set(LIT_ARGS_DEFAULT "-sv")
124 if (MSVC OR XCODE)
125   set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
126 endif()
127 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}"
128     CACHE STRING "Default options for lit")
130 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
132 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
133   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
134 else()
135   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
136 endif()
138 if( LLVM_ENABLE_ASSERTIONS )
139   # MSVC doesn't like _DEBUG on release builds. See PR 4379.
140   if( NOT MSVC )
141     add_definitions( -D_DEBUG )
142   endif()
143   # On Release builds cmake automatically defines NDEBUG, so we
144   # explicitly undefine it:
145   if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
146     add_definitions( -UNDEBUG )
147   endif()
148 else()
149   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
150     add_definitions( -DNDEBUG )
151   endif()
152 endif()
154 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
155   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
156 endif()
158 set(LLVM_ENUM_TARGETS "")
159 foreach(c ${LLVM_TARGETS_TO_BUILD})
160   list(FIND LLVM_ALL_TARGETS ${c} idx)
161   if( idx LESS 0 )
162     message(FATAL_ERROR "The target `${c}' does not exist.
163     It should be one of\n${LLVM_ALL_TARGETS}")
164   else()
165     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n")
166   endif()
167 endforeach(c)
169 # Produce llvm/Config/Targets.def
170 configure_file(
171   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
172   ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def
173   )
175 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
177 include(AddLLVMDefinitions)
179 if(WIN32)
180   if(CYGWIN)
181     set(LLVM_ON_WIN32 0)
182     set(LLVM_ON_UNIX 1)
183   else(CYGWIN)
184     set(LLVM_ON_WIN32 1)
185     set(LLVM_ON_UNIX 0)
186   endif(CYGWIN)
187   set(LTDL_SHLIB_EXT ".dll")
188   set(EXEEXT ".exe")
189   # Maximum path length is 160 for non-unicode paths
190   set(MAXPATHLEN 160)
191 else(WIN32)
192   if(UNIX)
193     set(LLVM_ON_WIN32 0)
194     set(LLVM_ON_UNIX 1)
195     if(APPLE)
196       set(LTDL_SHLIB_EXT ".dylib")
197     else(APPLE)
198       set(LTDL_SHLIB_EXT ".so")
199     endif(APPLE)
200     set(EXEEXT "")
201     # FIXME: Maximum path length is currently set to 'safe' fixed value
202     set(MAXPATHLEN 2024)
203   else(UNIX)
204     MESSAGE(SEND_ERROR "Unable to determine platform")
205   endif(UNIX)
206 endif(WIN32)
208 option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON)
210 if( LLVM_ENABLE_PIC )
211   if( XCODE )
212     # Xcode has -mdynamic-no-pic on by default, which overrides -fPIC. I don't
213     # know how to disable this, so just force ENABLE_PIC off for now.
214     message(WARNING "-fPIC not supported with Xcode.")
215   elseif( WIN32 )
216     # On Windows all code is PIC. MinGW warns if -fPIC is used.
217   else()
218     include(CheckCXXCompilerFlag)
219     check_cxx_compiler_flag("-fPIC" SUPPORTS_FPIC_FLAG)
220     if( SUPPORTS_FPIC_FLAG )
221       message(STATUS "Building with -fPIC")
222       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
223       set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
224     else( SUPPORTS_FPIC_FLAG )
225       message(WARNING "-fPIC not supported.")
226     endif()
227   endif()
228 endif()
230 include(config-ix)
232 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} )
233 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
234 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
236 # set(CMAKE_VERBOSE_MAKEFILE true)
238 add_llvm_definitions( -D__STDC_LIMIT_MACROS )
239 add_llvm_definitions( -D__STDC_CONSTANT_MACROS )
241 # MSVC has a gazillion warnings with this.
242 if( MSVC )
243   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." OFF)
244 else( MSVC )
245   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON)
246 endif()
248 option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
249 option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
251 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
252   # TODO: support other platforms and toolchains.
253   option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF)
254   if( LLVM_BUILD_32_BITS )
255     message(STATUS "Building 32 bits executables and libraries.")
256     add_llvm_definitions( -m32 )
257     list(APPEND CMAKE_EXE_LINKER_FLAGS -m32)
258     list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32)
259   endif( LLVM_BUILD_32_BITS )
260 endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
262 if( MSVC )
263   include(ChooseMSVCCRT)
265   # Add definitions that make MSVC much less annoying.
266   add_llvm_definitions(
267     # For some reason MS wants to deprecate a bunch of standard functions...
268     -D_CRT_SECURE_NO_DEPRECATE
269     -D_CRT_SECURE_NO_WARNINGS
270     -D_CRT_NONSTDC_NO_DEPRECATE
271     -D_CRT_NONSTDC_NO_WARNINGS
272     -D_SCL_SECURE_NO_DEPRECATE
273     -D_SCL_SECURE_NO_WARNINGS
275     -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned'
276     -wd4180 # Suppress 'qualifier applied to function type has no meaning; ignored'
277     -wd4224 # Suppress 'nonstandard extension used : formal parameter 'identifier' was previously defined as a type'
278     -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data'
279     -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data'
280     -wd4275 # Suppress 'An exported class was derived from a class that was not exported.'
281     -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception'
282     -wd4345 # Suppress 'behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized'
283     -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized'
284     -wd4355 # Suppress ''this' : used in base member initializer list'
285     -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated'
286     -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible'
287     -wd4715 # Suppress ''function' : not all control paths return a value'
288     -wd4800 # Suppress ''type' : forcing value to bool 'true' or 'false' (performance warning)'
290     -w14062 # Promote "enumerator in switch of enum is not handled" to level 1 warning.
291     )
293   # Enable warnings
294   if (LLVM_ENABLE_WARNINGS)
295     add_llvm_definitions( /W4 /Wall )
296     if (LLVM_ENABLE_PEDANTIC)
297       # No MSVC equivalent available
298     endif (LLVM_ENABLE_PEDANTIC)
299   endif (LLVM_ENABLE_WARNINGS)
300   if (LLVM_ENABLE_WERROR)
301     add_llvm_definitions( /WX )
302   endif (LLVM_ENABLE_WERROR)
303 elseif( CMAKE_COMPILER_IS_GNUCXX )
304   if (LLVM_ENABLE_WARNINGS)
305     add_llvm_definitions( -Wall -W -Wno-unused-parameter -Wwrite-strings )
306     if (LLVM_ENABLE_PEDANTIC)
307       add_llvm_definitions( -pedantic -Wno-long-long )
308     endif (LLVM_ENABLE_PEDANTIC)
309   endif (LLVM_ENABLE_WARNINGS)
310   if (LLVM_ENABLE_WERROR)
311     add_llvm_definitions( -Werror )
312   endif (LLVM_ENABLE_WERROR)
313 endif( MSVC )
315 include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR})
317 if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
318    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include llvm/Support/Solaris.h")
319 endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
321 include(AddLLVM)
322 include(TableGen)
324 if( MINGW )
325   get_system_libs(LLVM_SYSTEM_LIBS_LIST)
326   foreach(l ${LLVM_SYSTEM_LIBS_LIST})
327     set(LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS} -l${l}")
328   endforeach()
329   set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
330   set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
331 endif()
333 if( MINGW )
334   # People report that -O3 is unreliable on MinGW. The traditional
335   # build also uses -O2 for that reason:
336   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
337 endif()
339 add_subdirectory(lib/Support)
341 # Everything else depends on Support:
342 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} )
344 set(LLVM_TABLEGEN "tblgen" CACHE
345   STRING "Native TableGen executable. Saves building one when cross-compiling.")
346 # Effective tblgen executable to be used:
347 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})
349 add_subdirectory(utils/TableGen)
351 if( CMAKE_CROSSCOMPILING )
352   # This adds a dependency on target `tblgen', so must go after utils/TableGen
353   include( CrossCompileLLVM )
354 endif( CMAKE_CROSSCOMPILING )
356 add_subdirectory(include/llvm)
358 add_subdirectory(lib/VMCore)
359 add_subdirectory(lib/CodeGen)
360 add_subdirectory(lib/CodeGen/SelectionDAG)
361 add_subdirectory(lib/CodeGen/AsmPrinter)
362 add_subdirectory(lib/Bitcode/Reader)
363 add_subdirectory(lib/Bitcode/Writer)
364 add_subdirectory(lib/Transforms/Utils)
365 add_subdirectory(lib/Transforms/Instrumentation)
366 add_subdirectory(lib/Transforms/InstCombine)
367 add_subdirectory(lib/Transforms/Scalar)
368 add_subdirectory(lib/Transforms/IPO)
369 add_subdirectory(lib/Transforms/Hello)
370 add_subdirectory(lib/Linker)
371 add_subdirectory(lib/Analysis)
372 add_subdirectory(lib/Analysis/IPA)
373 add_subdirectory(lib/MC)
374 add_subdirectory(lib/MC/MCParser)
375 add_subdirectory(lib/MC/MCDisassembler)
376 add_subdirectory(lib/Object)
378 add_subdirectory(utils/FileCheck)
379 add_subdirectory(utils/FileUpdate)
380 add_subdirectory(utils/count)
381 add_subdirectory(utils/not)
382 add_subdirectory(utils/llvm-lit)
384 set(LLVM_ENUM_ASM_PRINTERS "")
385 set(LLVM_ENUM_ASM_PARSERS "")
386 set(LLVM_ENUM_DISASSEMBLERS "")
387 foreach(t ${LLVM_TARGETS_TO_BUILD})
388   message(STATUS "Targeting ${t}")
389   add_subdirectory(lib/Target/${t})
390   add_subdirectory(lib/Target/${t}/TargetInfo)
391   set( td ${LLVM_MAIN_SRC_DIR}/lib/Target/${t} )
392   file(GLOB asmp_file "${td}/*AsmPrinter.cpp")
393   if( asmp_file )
394     set(LLVM_ENUM_ASM_PRINTERS
395       "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
396   endif()
397   if( EXISTS ${td}/InstPrinter/CMakeLists.txt )
398     add_subdirectory(lib/Target/${t}/InstPrinter)
399   endif()
400   if( EXISTS ${td}/AsmParser/CMakeLists.txt )
401     add_subdirectory(lib/Target/${t}/AsmParser)
402     set(LLVM_ENUM_ASM_PARSERS
403       "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n")
404   endif()
405   if( EXISTS ${td}/Disassembler/CMakeLists.txt )
406     add_subdirectory(lib/Target/${t}/Disassembler)
407     set(LLVM_ENUM_DISASSEMBLERS
408       "${LLVM_ENUM_DISASSEMBLERS}LLVM_DISASSEMBLER(${t})\n")
409   endif()
410   set(CURRENT_LLVM_TARGET)
411 endforeach(t)
413 # Produce llvm/Config/AsmPrinters.def
414 configure_file(
415   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in
416   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmPrinters.def
417   )
419 # Produce llvm/Config/AsmParsers.def
420 configure_file(
421   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in
422   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmParsers.def
423   )
425 # Produce llvm/Config/Disassemblers.def
426 configure_file(
427   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Disassemblers.def.in
428   ${LLVM_BINARY_DIR}/include/llvm/Config/Disassemblers.def
429   )
431 add_subdirectory(lib/ExecutionEngine)
432 add_subdirectory(lib/ExecutionEngine/Interpreter)
433 add_subdirectory(lib/ExecutionEngine/JIT)
434 add_subdirectory(lib/ExecutionEngine/MCJIT)
435 add_subdirectory(lib/Target)
436 add_subdirectory(lib/AsmParser)
437 add_subdirectory(lib/Archive)
439 add_subdirectory(projects)
441 option(LLVM_BUILD_TOOLS
442   "Build the LLVM tools. If OFF, just generate build targets." ON)
443 option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON)
444 if( LLVM_INCLUDE_TOOLS )
445   add_subdirectory(tools)
446 endif()
448 option(LLVM_BUILD_EXAMPLES
449   "Build the LLVM example programs. If OFF, just generate build targets." OFF)
450 option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON)
451 if( LLVM_INCLUDE_EXAMPLES )
452   add_subdirectory(examples)
453 endif()
455 option(LLVM_BUILD_TESTS
456   "Build LLVM unit tests. If OFF, just generate build targes." OFF)
457 option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
458 if( LLVM_INCLUDE_TESTS )
459   add_subdirectory(test)
460   add_subdirectory(utils/unittest)
461   add_subdirectory(unittests)
462   if (MSVC)
463     # This utility is used to prevent chrashing tests from calling Dr. Watson on
464     # Windows.
465     add_subdirectory(utils/KillTheDoctor)
466   endif()
467 endif()
469 add_subdirectory(cmake/modules)
471 install(DIRECTORY include/
472   DESTINATION include
473   FILES_MATCHING
474   PATTERN "*.def"
475   PATTERN "*.h"
476   PATTERN "*.td"
477   PATTERN "*.inc"
478   PATTERN ".svn" EXCLUDE
479   )
481 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/
482   DESTINATION include
483   FILES_MATCHING
484   PATTERN "*.def"
485   PATTERN "*.h"
486   PATTERN "*.gen"
487   PATTERN "*.inc"
488   # Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def"
489   PATTERN "CMakeFiles" EXCLUDE
490   PATTERN ".svn" EXCLUDE
491   )
493 # TODO: make and install documentation.
495 set(CPACK_PACKAGE_VENDOR "LLVM")
496 set(CPACK_PACKAGE_VERSION_MAJOR 2)
497 set(CPACK_PACKAGE_VERSION_MINOR 9)
498 add_version_info_from_vcs(CPACK_PACKAGE_VERSION_PATCH)
499 include(CPack)
501 # Workaround for MSVS10 to avoid the Dialog Hell
502 # FIXME: This could be removed with future version of CMake.
503 if(MSVC_VERSION EQUAL 1600)
504   set(LLVM_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/LLVM.sln")
505   if( EXISTS "${LLVM_SLN_FILENAME}" )
506     file(APPEND "${LLVM_SLN_FILENAME}" "\n# This should be regenerated!\n")
507   endif()
508 endif()