| Michael J. Spencer | 773a8fb | 2011-12-18 08:27:59 +0000 | [diff] [blame^] | 1 | # If we are not building as a part of LLVM, build lld as a standalone project, | 
|  | 2 | # using LLVM as an external library. | 
|  | 3 |  | 
|  | 4 | if (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) | 
|  | 48 | endif() | 
|  | 49 |  | 
|  | 50 | set(LLD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 
|  | 51 | set(LLD_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) | 
|  | 52 |  | 
|  | 53 | if (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.") | 
|  | 59 | endif() | 
|  | 60 |  | 
|  | 61 | macro(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") | 
|  | 99 | endmacro(add_lld_library) | 
|  | 100 |  | 
|  | 101 | macro(add_lld_executable name) | 
|  | 102 | add_llvm_executable(${name} ${ARGN}) | 
|  | 103 | set_target_properties(${name} PROPERTIES FOLDER "lld executables") | 
|  | 104 | endmacro(add_lld_executable) | 
|  | 105 |  | 
|  | 106 | include_directories(BEFORE | 
|  | 107 | ${CMAKE_CURRENT_BINARY_DIR}/include | 
|  | 108 | ${CMAKE_CURRENT_SOURCE_DIR}/include | 
|  | 109 | ) | 
|  | 110 |  | 
|  | 111 | install(DIRECTORY include/ | 
|  | 112 | DESTINATION include | 
|  | 113 | FILES_MATCHING | 
|  | 114 | PATTERN "*.h" | 
|  | 115 | PATTERN ".svn" EXCLUDE | 
|  | 116 | ) | 
|  | 117 |  | 
|  | 118 | add_subdirectory(lib) | 
|  | 119 | add_subdirectory(tools) | 
|  | 120 |  | 
|  | 121 | add_subdirectory(test) |