Skip to content
Permalink
Browse files

detect llvm toolchain utilities #392

Use `clang -print-prog-path=<tool>` to find the locations of llvm
toolchain utilities such as `llvm-ranlib` and set the appropriate cmake
variables to the resultant paths.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
  • Loading branch information
rkitover committed Mar 20, 2019
1 parent c714ff8 commit 3da07f40833f0946cd2de77ebe4fb2e18fa208de
Showing with 37 additions and 1 deletion.
  1. +5 −1 CMakeLists.txt
  2. +32 −0 cmake/LLVMToolchain.cmake
@@ -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 "")
@@ -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()

0 comments on commit 3da07f4

Please sign in to comment.
You can’t perform that action at this time.