CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # TODO: Set the install directory.
  2. include(ExternalProject)
  3. set(known_subdirs
  4. "libcxx"
  5. )
  6. foreach (dir ${known_subdirs})
  7. if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/CMakeLists.txt)
  8. add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${dir})
  9. endif()
  10. endforeach()
  11. function(get_ext_project_build_command out_var target)
  12. if (CMAKE_GENERATOR MATCHES "Make")
  13. # Use special command for Makefiles to support parallelism.
  14. set(${out_var} "$(MAKE)" "${target}" PARENT_SCOPE)
  15. else()
  16. set(${out_var} ${CMAKE_COMMAND} --build . --target ${target}
  17. --config $<CONFIGURATION> PARENT_SCOPE)
  18. endif()
  19. endfunction()
  20. set(COMPILER_RT_SRC_ROOT ${LLVM_MAIN_SRC_DIR}/projects/compiler-rt)
  21. if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/)
  22. if(CMAKE_GENERATOR MATCHES "Ninja")
  23. message(FATAL_ERROR
  24. "Ninja generator can't build compiler-rt as ExternalProject."
  25. "Unset LLVM_BUILD_EXTERNAL_COMPILER_RT, or don't use Ninja."
  26. "See http://www.cmake.org/Bug/view.php?id=14771")
  27. endif()
  28. # Add compiler-rt as an external project.
  29. set(COMPILER_RT_PREFIX ${CMAKE_BINARY_DIR}/projects/compiler-rt)
  30. ExternalProject_Add(compiler-rt
  31. PREFIX ${COMPILER_RT_PREFIX}
  32. SOURCE_DIR ${COMPILER_RT_SRC_ROOT}
  33. CMAKE_ARGS -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
  34. -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++
  35. -DCMAKE_BUILD_TYPE=Release
  36. -DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config
  37. -DCOMPILER_RT_OUTPUT_DIR=${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION}
  38. -DCOMPILER_RT_EXEC_OUTPUT_DIR=${LLVM_RUNTIME_OUTPUT_INTDIR}
  39. -DCOMPILER_RT_INSTALL_PATH=lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}
  40. -DCOMPILER_RT_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
  41. -DCOMPILER_RT_ENABLE_WERROR=ON
  42. INSTALL_COMMAND ""
  43. STEP_TARGETS configure build
  44. )
  45. # Due to a bug, DEPENDS in ExternalProject_Add doesn't work
  46. # in CMake 2.8.9 and 2.8.10.
  47. add_dependencies(compiler-rt llvm-config clang)
  48. # Add a custom step to always re-configure compiler-rt (in case some of its
  49. # sources have changed).
  50. ExternalProject_Add_Step(compiler-rt force-reconfigure
  51. DEPENDERS configure
  52. ALWAYS 1
  53. )
  54. ExternalProject_Add_Step(compiler-rt clobber
  55. COMMAND ${CMAKE_COMMAND} -E remove_directory <BINARY_DIR>
  56. COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>
  57. COMMENT "Clobberring compiler-rt build directory..."
  58. DEPENDERS configure
  59. DEPENDS ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
  60. )
  61. ExternalProject_Get_Property(compiler-rt BINARY_DIR)
  62. set(COMPILER_RT_BINARY_DIR ${BINARY_DIR})
  63. # Add top-level targets that build specific compiler-rt runtimes.
  64. set(COMPILER_RT_RUNTIMES asan builtins dfsan lsan msan profile tsan ubsan)
  65. foreach(runtime ${COMPILER_RT_RUNTIMES})
  66. get_ext_project_build_command(build_runtime_cmd ${runtime})
  67. add_custom_target(${runtime}
  68. COMMAND ${build_runtime_cmd}
  69. DEPENDS compiler-rt-configure
  70. WORKING_DIRECTORY ${COMPILER_RT_BINARY_DIR}
  71. VERBATIM)
  72. endforeach()
  73. # Add binaries that compiler-rt tests depend on.
  74. set(COMPILER_RT_TEST_DEPENDENCIES
  75. FileCheck count not llvm-nm llvm-symbolizer)
  76. # Add top-level targets for various compiler-rt test suites.
  77. set(COMPILER_RT_TEST_SUITES check-asan check-asan-dynamic check-dfsan
  78. check-lsan check-msan check-sanitizer check-tsan check-ubsan)
  79. foreach(test_suite ${COMPILER_RT_TEST_SUITES})
  80. get_ext_project_build_command(run_test_suite ${test_suite})
  81. add_custom_target(${test_suite}
  82. COMMAND ${run_test_suite}
  83. DEPENDS compiler-rt-build ${COMPILER_RT_TEST_DEPENDENCIES}
  84. WORKING_DIRECTORY ${COMPILER_RT_BINARY_DIR}
  85. VERBATIM)
  86. endforeach()
  87. # Add special target to run all compiler-rt test suites.
  88. get_ext_project_build_command(run_check_compiler_rt check-all)
  89. add_custom_target(check-compiler-rt
  90. COMMAND ${run_check_compiler_rt}
  91. DEPENDS compiler-rt-build ${COMPILER_RT_TEST_DEPENDENCIES}
  92. WORKING_DIRECTORY ${COMPILER_RT_BINARY_DIR}
  93. VERBATIM)
  94. endif()