blob: 4fe1e0117d7656dd7f054387ff9c1c12d21ae92d [file] [log] [blame]
Michael J. Spencer773a8fb2011-12-18 08:27:59 +00001# If we are not building as a part of LLVM, build lld as a standalone project,
2# using LLVM as an external library.
3
4if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
5 project(lld)
6 cmake_minimum_required(VERSION 2.8)
7
8 set(LLD_PATH_TO_LLVM_SOURCE "" CACHE PATH
9 "Path to LLVM source code. Not necessary if using an installed LLVM.")
10 set(LLD_PATH_TO_LLVM_BUILD "" CACHE PATH
11 "Path to the directory where LLVM was built or installed.")
12
13 if (LLD_PATH_TO_LLVM_SOURCE)
14 if (NOT EXISTS "${LLD_PATH_TO_LLVM_SOURCE}/cmake/config-ix.cmake")
15 message(FATAL_ERROR "Please set LLD_PATH_TO_LLVM_SOURCE to the root "
16 "directory of LLVM source code.")
17 else()
18 get_filename_component(LLVM_MAIN_SRC_DIR ${LLD_PATH_TO_LLVM_SOURCE}
19 ABSOLUTE)
20 list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
21 endif()
22 endif()
23
24 list(APPEND CMAKE_MODULE_PATH "${LLD_PATH_TO_LLVM_BUILD}/share/llvm/cmake")
25
26 get_filename_component(PATH_TO_LLVM_BUILD ${LLD_PATH_TO_LLVM_BUILD}
27 ABSOLUTE)
28
29 include(AddLLVM)
30 include("${LLD_PATH_TO_LLVM_BUILD}/share/llvm/cmake/LLVMConfig.cmake")
31 include(HandleLLVMOptions)
32
33 set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
34
35 set(LLVM_MAIN_INCLUDE_DIR "${LLVM_MAIN_SRC_DIR}/include")
36 set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR})
37
38 set(CMAKE_INCLUDE_CURRENT_DIR ON)
39 include_directories("${PATH_TO_LLVM_BUILD}/include"
40 "${LLVM_MAIN_INCLUDE_DIR}")
41 link_directories("${PATH_TO_LLVM_BUILD}/lib")
42
43 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
44 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
45 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
46
47 set(LLD_BUILT_STANDALONE 1)
48endif()
49
50set(LLD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
51set(LLD_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
52
53if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
54 message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite "
55"the makefiles distributed with LLVM. Please create a directory and run cmake "
56"from there, passing the path to this source directory as the last argument. "
57"This process created the file `CMakeCache.txt' and the directory "
58"`CMakeFiles'. Please delete them.")
59endif()
60
61macro(add_lld_library name)
62 llvm_process_sources(srcs ${ARGN})
63 if (MSVC_IDE OR XCODE)
64 string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
65 list(GET split_path -1 dir)
66 file(GLOB_RECURSE headers
67 ../../include/lld${dir}/*.h)
68 set(srcs ${srcs} ${headers})
69 endif()
70 if (MODULE)
71 set(libkind MODULE)
72 elseif (SHARED_LIBRARY)
73 set(libkind SHARED)
74 else()
75 set(libkind)
76 endif()
77 add_library(${name} ${libkind} ${srcs})
78 if (LLVM_COMMON_DEPENDS)
79 add_dependencies(${name} ${LLVM_COMMON_DEPENDS})
80 endif()
81
82 target_link_libraries(${name} ${LLVM_USED_LIBS})
83 llvm_config(${name} ${LLVM_LINK_COMPONENTS})
84 target_link_libraries(${name} ${LLVM_COMMON_LIBS})
85 link_system_libs(${name})
86
87 if(MSVC)
88 get_target_property(cflag ${name} COMPILE_FLAGS)
89 if(NOT cflag)
90 set(cflag "")
91 endif(NOT cflag)
92 set(cflag "${cflag} /Za")
93 set_target_properties(${name} PROPERTIES COMPILE_FLAGS ${cflag})
94 endif(MSVC)
95 install(TARGETS ${name}
96 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
97 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
98 set_target_properties(${name} PROPERTIES FOLDER "lld libraries")
99endmacro(add_lld_library)
100
101macro(add_lld_executable name)
102 add_llvm_executable(${name} ${ARGN})
103 set_target_properties(${name} PROPERTIES FOLDER "lld executables")
104endmacro(add_lld_executable)
105
106include_directories(BEFORE
107 ${CMAKE_CURRENT_BINARY_DIR}/include
108 ${CMAKE_CURRENT_SOURCE_DIR}/include
109 )
110
111install(DIRECTORY include/
112 DESTINATION include
113 FILES_MATCHING
114 PATTERN "*.h"
115 PATTERN ".svn" EXCLUDE
116 )
117
118add_subdirectory(lib)
119add_subdirectory(tools)
120
121add_subdirectory(test)