diff options
| author | NAKAMURA Takumi <geek4civic@gmail.com> | 2013-12-30 06:48:30 +0000 |
|---|---|---|
| committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2013-12-30 06:48:30 +0000 |
| commit | baa9f533fe242c657b8ce2949882e23813d7148b (patch) | |
| tree | 11f61d6f17f781d9f3b49618b889645d1540a79a | |
| parent | 4c141c3ef8b6ee99ce33542124afa23e6d9efb3c (diff) | |
| download | bcm5719-llvm-baa9f533fe242c657b8ce2949882e23813d7148b.tar.gz bcm5719-llvm-baa9f533fe242c657b8ce2949882e23813d7148b.zip | |
[CMake][VS][XCode] Restruct the output directory layout more comfortable, ${BINARY_DIR}/${BUILD_MODE}/(bin|lib)
We have been seeing nasty directory layout with CMake multiconfig, such as,
bin/Release/clang.exe
lib/clang/3.x/...
lib/Release/clang/3.x/.. (duplicated)
Move the layout similar to autoconf's;
Release/bin/clang.exe
Release/lib/clang/3.x/...
Checked on Visual Studio 10. Could you guys please confirm my change on XCode(and other multiconfig builders)?
Note: Don't set variables CMAKE_*_OUTPUT_DIRECTORY any more, or a certain builder, for eaxample, msbuild.exe, would be confused.
llvm-svn: 198205
| -rw-r--r-- | clang/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | clang/lib/Headers/CMakeLists.txt | 35 | ||||
| -rw-r--r-- | llvm/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | llvm/cmake/modules/AddLLVM.cmake | 25 |
4 files changed, 30 insertions, 39 deletions
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index c8f71029c9e..41982d04cd1 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -174,8 +174,8 @@ set(CLANG_VENDOR_UTI "org.llvm.clang" CACHE STRING set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(CLANG_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}) -set(CLANG_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib/${CMAKE_CFG_INTDIR}) +set(CLANG_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) +set(CLANG_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib) if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE ) message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite " @@ -306,6 +306,7 @@ macro(add_clang_library name) endif() add_library( ${name} ${libkind} ${srcs} ) add_dead_strip( ${name} ) + set_output_directory(${name} ${CLANG_RUNTIME_OUTPUT_INTDIR} ${CLANG_LIBRARY_OUTPUT_INTDIR}) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) endif( LLVM_COMMON_DEPENDS ) diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt index 95804c098c1..0bc1cd937f9 100644 --- a/clang/lib/Headers/CMakeLists.txt +++ b/clang/lib/Headers/CMakeLists.txt @@ -47,14 +47,7 @@ set(files module.map ) -set(output_dir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/clang/${CLANG_VERSION}/include) - -# If we are in an IDE that has a configuration directory, we need to -# create a second copy of the headers so that 'clang' can find them if -# it's run from the build directory. -if(MSVC_IDE OR XCODE) - set(other_output_dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib/clang/${CLANG_VERSION}/include) -endif() +set(output_dir ${CLANG_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION}/include) # Generate arm_neon.h clang_tablegen(arm_neon.h -gen-arm-neon @@ -69,15 +62,6 @@ foreach( f ${files} ) COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst} COMMENT "Copying clang's ${f}...") list(APPEND out_files ${dst}) - - if(other_output_dir) - set(other_dst ${other_output_dir}/${f}) - add_custom_command(OUTPUT ${other_dst} - DEPENDS ${src} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${other_dst} - COMMENT "Copying clang's ${f}...") - list(APPEND out_files ${other_dst}) - endif() endforeach( f ) add_custom_command(OUTPUT ${output_dir}/arm_neon.h @@ -86,26 +70,9 @@ add_custom_command(OUTPUT ${output_dir}/arm_neon.h COMMENT "Copying clang's arm_neon.h...") list(APPEND out_files ${output_dir}/arm_neon.h) -if (other_output_dir) - set(other_dst ${other_output_dir}/arm_neon.h) - add_custom_command(OUTPUT ${other_dst} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h ${other_dst} - COMMENT "Copying clang's arm_neon.h...") - list(APPEND out_files ${other_dst}) -endif () - add_custom_target(clang-headers ALL DEPENDS ${out_files}) set_target_properties(clang-headers PROPERTIES FOLDER "Misc") -if (other_output_dir) - if(UNIX) - add_custom_command(TARGET clang-headers POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" - COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib/clang" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/clang") - endif() -endif () - install( FILES ${files} ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index 6200de1e37f..56e83289a45 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -97,8 +97,8 @@ set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples) set(LLVM_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include) set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" ) -set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}) -set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/lib/${CMAKE_CFG_INTDIR}) +set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) +set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib) set(LLVM_ALL_TARGETS AArch64 diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index b31aeeeae1f..bbfb9b17ffc 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -95,9 +95,30 @@ function(add_dead_strip target_name) endif() endfunction(add_dead_strip) +# Set each output directory according to ${CMAKE_CONFIGURATION_TYPES}. +# Note: Don't set variables CMAKE_*_OUTPUT_DIRECTORY any more, +# or a certain builder, for eaxample, msbuild.exe, would be confused. +function(set_output_directory target bindir libdir) + if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") + foreach(build_mode ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER "${build_mode}" CONFIG_SUFFIX) + string(REPLACE ${CMAKE_CFG_INTDIR} ${build_mode} bi ${bindir}) + string(REPLACE ${CMAKE_CFG_INTDIR} ${build_mode} li ${libdir}) + set_target_properties(${target} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${bi}) + set_target_properties(${target} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${li}) + set_target_properties(${target} PROPERTIES "LIBDIR__OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${li}) + endforeach() + else() + set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${bindir}) + set_target_properties(${target} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libdir}) + set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libdir}) + endif() +endfunction() + macro(add_llvm_library name) llvm_process_sources( ALL_FILES ${ARGN} ) add_library( ${name} ${ALL_FILES} ) + set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR}) set_property( GLOBAL APPEND PROPERTY LLVM_LIBS ${name} ) add_dead_strip( ${name} ) if( LLVM_COMMON_DEPENDS ) @@ -201,6 +222,7 @@ macro(add_llvm_executable name) endif(LLVM_EXPORTED_SYMBOL_FILE) set(EXCLUDE_FROM_ALL OFF) + set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR}) llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) @@ -313,12 +335,13 @@ endfunction(add_llvm_implicit_external_projects) # Generic support for adding a unittest. function(add_unittest test_suite test_name) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) if( NOT LLVM_BUILD_TESTS ) set(EXCLUDE_FROM_ALL ON) endif() add_llvm_executable(${test_name} ${ARGN}) + set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) + set_output_directory(${test_name} ${outdir} ${outdir}) target_link_libraries(${test_name} gtest gtest_main |

