diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt --- a/libc/CMakeLists.txt +++ b/libc/CMakeLists.txt @@ -12,12 +12,21 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") -# The top-level sourse and binary directories. +# The top-level source directory. set(LIBC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(LIBC_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) # The top-level directory in which libc is being built. set(LIBC_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) +if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR) + set(LIBC_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}) +else() + if(LLVM_LIBRARY_OUTPUT_INTDIR) + set(LIBC_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) + else() + set(LIBC_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) + endif() +endif() + if(LLVM_LIBC_FULL_BUILD OR LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES) if(NOT LIBC_HDRGEN_EXE) # We need to set up hdrgen first since other targets depend on it. diff --git a/libc/cmake/modules/LLVMLibCLibraryRules.cmake b/libc/cmake/modules/LLVMLibCLibraryRules.cmake --- a/libc/cmake/modules/LLVMLibCLibraryRules.cmake +++ b/libc/cmake/modules/LLVMLibCLibraryRules.cmake @@ -108,7 +108,7 @@ STATIC ${objects} ) - set_target_properties(${target_name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${target_name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${LIBC_LIBRARY_DIR}) endfunction(add_entrypoint_library) # Rule to build a shared library of redirector objects. @@ -135,7 +135,7 @@ SHARED ${obj_files} ) - set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIBC_LIBRARY_DIR}) target_link_libraries(${target_name} -nostdlib -lc -lm) set_target_properties(${target_name} PROPERTIES LINKER_LANGUAGE "C") endfunction(add_redirector_library)