diff --git a/CMakeLists.txt b/CMakeLists.txt index 8073871a..cd4e26b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -359,7 +359,11 @@ endif() include(ProcessorCount) ProcessorCount(num_cpus) -# Compiler flags +# Compiler stuff + +if(CMAKE_C_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + include(LLVMToolchain) +endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang) set(LTO_FLAGS "") diff --git a/cmake/LLVMToolchain.cmake b/cmake/LLVMToolchain.cmake new file mode 100644 index 00000000..0953f968 --- /dev/null +++ b/cmake/LLVMToolchain.cmake @@ -0,0 +1,32 @@ +function(use_llvm_toolchain) + if(CMAKE_C_COMPILER_ID STREQUAL Clang) + set(compiler "${CMAKE_C_COMPILER}") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(compiler "${CMAKE_CXX_COMPILER}") + else() + return() + endif() + + foreach(tool ar ranlib ld nm objdump as) + execute_process( + COMMAND "${compiler}" -print-prog-name=llvm-${tool} + OUTPUT_VARIABLE prog_path + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(prog_path MATCHES "^/") + if(tool STREQUAL ld) + set(tool linker) + elseif(tool STREQUAL as) + set(tool asm_compiler) + endif() + + string(TOUPPER ${tool} utool) + + set(CMAKE_${utool} "${prog_path}" PARENT_SCOPE) + set(CMAKE_${utool} "${prog_path}" CACHE FILEPATH "${tool}" FORCE) + endif() + endforeach() +endfunction() + +use_llvm_toolchain()