Stop treating -static as overriding -fPIC: they are distinct.
[lldb.git] / lld / CMakeLists.txt
1 set(LLD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
2 set(LLD_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
3
4 # Compute the LLD version from the LLVM version.
5 string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" LLD_VERSION
6   ${PACKAGE_VERSION})
7 message(STATUS "LLD version: ${LLD_VERSION}")
8
9 string(REGEX REPLACE "([0-9]+)\\.[0-9]+(\\.[0-9]+)?" "\\1" LLD_VERSION_MAJOR
10   ${LLD_VERSION})
11 string(REGEX REPLACE "[0-9]+\\.([0-9]+)(\\.[0-9]+)?" "\\1" LLD_VERSION_MINOR
12   ${LLD_VERSION})
13
14 # Determine LLD revision and repository.
15 # TODO: Figure out a way to get the revision and the repository on windows.
16 if ( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
17   execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetSourceVersion ${LLD_SOURCE_DIR}
18                   OUTPUT_VARIABLE LLD_REVISION)
19
20   execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetRepositoryPath ${LLD_SOURCE_DIR}
21                   OUTPUT_VARIABLE LLD_REPOSITORY)
22   if ( LLD_REPOSITORY )
23     # Replace newline characters with spaces
24     string(REGEX REPLACE "(\r?\n)+" " " LLD_REPOSITORY ${LLD_REPOSITORY})
25     # Remove leading spaces
26     STRING(REGEX REPLACE "^[ \t\r\n]+" "" LLD_REPOSITORY "${LLD_REPOSITORY}" )
27     # Remove trailing spaces
28     string(REGEX REPLACE "(\ )+$" "" LLD_REPOSITORY ${LLD_REPOSITORY})
29   endif()
30
31   if ( LLD_REVISION )
32     # Replace newline characters with spaces
33     string(REGEX REPLACE "(\r?\n)+" " " LLD_REVISION ${LLD_REVISION})
34     # Remove leading spaces
35     STRING(REGEX REPLACE "^[ \t\r\n]+" "" LLD_REVISION "${LLD_REVISION}" )
36     # Remove trailing spaces
37     string(REGEX REPLACE "(\ )+$" "" LLD_REVISION ${LLD_REVISION})
38   endif()
39 endif ()
40
41 # Configure the Version.inc file.
42 configure_file(
43   ${CMAKE_CURRENT_SOURCE_DIR}/include/lld/Config/Version.inc.in
44   ${CMAKE_CURRENT_BINARY_DIR}/include/lld/Config/Version.inc)
45
46
47 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
48   message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite "
49 "the makefiles distributed with LLVM. Please create a directory and run cmake "
50 "from there, passing the path to this source directory as the last argument. "
51 "This process created the file `CMakeCache.txt' and the directory "
52 "`CMakeFiles'. Please delete them.")
53 endif()
54
55 list (APPEND CMAKE_MODULE_PATH "${LLD_SOURCE_DIR}/cmake/modules")
56
57 option(LLD_USE_VTUNE
58        "Enable VTune user task tracking."
59        OFF)
60 if (LLD_USE_VTUNE)
61   find_package(VTune)
62   if (VTUNE_FOUND)
63     include_directories(${VTune_INCLUDE_DIRS})
64     list(APPEND LLVM_COMMON_LIBS ${VTune_LIBRARIES})
65     add_definitions(-DLLD_HAS_VTUNE)
66   endif()
67 endif()
68
69
70 if (MSVC)
71   add_definitions(-wd4530) # Suppress 'warning C4530: C++ exception handler used, but unwind semantics are not enabled.'
72   add_definitions(-wd4062) # Suppress 'warning C4062: enumerator X in switch of enum Y is not handled' from system header.
73 endif()
74
75 include_directories(BEFORE
76   ${CMAKE_CURRENT_BINARY_DIR}/include
77   ${CMAKE_CURRENT_SOURCE_DIR}/include
78   )
79
80 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
81   install(DIRECTORY include/
82     DESTINATION include
83     FILES_MATCHING
84     PATTERN "*.h"
85     PATTERN ".svn" EXCLUDE
86     )
87 endif()
88
89 add_subdirectory(lib)
90 add_subdirectory(tools)
91
92 add_subdirectory(test)
93
94 if (LLVM_INCLUDE_TESTS)
95   add_subdirectory(unittests)
96 endif()
97
98 add_subdirectory(docs)
99 add_subdirectory(COFF)
100 add_subdirectory(ELF)