Skip to content

Commit b264787

Browse files
committed
libclc: Use cmake files instead of llvm-config
Reviewed By: mgorny Differential Revision: https://reviews.llvm.org/D137854
1 parent 5279e6a commit b264787

File tree

2 files changed

+28
-72
lines changed

2 files changed

+28
-72
lines changed

libclc/CMakeLists.txt

Lines changed: 27 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
cmake_minimum_required(VERSION 3.13.4)
22

3-
project( libclc VERSION 0.2.0 LANGUAGES CXX )
3+
project( libclc VERSION 0.2.0 LANGUAGES CXX C)
4+
45
include( GNUInstallDirs )
56
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
67
amdgcn-amdhsa/lib/SOURCES;
@@ -40,66 +41,29 @@ set( LIBCLC_TARGETS_TO_BUILD "all"
4041
option( ENABLE_RUNTIME_SUBNORMAL "Enable runtime linking of subnormal support."
4142
OFF )
4243

43-
if( NOT LLVM_CONFIG )
44-
find_program( LLVM_CONFIG llvm-config )
45-
endif()
46-
execute_process( COMMAND ${LLVM_CONFIG} "--version"
47-
OUTPUT_VARIABLE LLVM_VERSION
48-
OUTPUT_STRIP_TRAILING_WHITESPACE )
49-
message( "LLVM version: ${LLVM_VERSION}" )
44+
find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}")
45+
include(AddLLVM)
46+
47+
message( "LLVM version: ${LLVM_PACKAGE_VERSION}" )
5048

51-
if( ${LLVM_VERSION} VERSION_LESS ${LIBCLC_MIN_LLVM} )
49+
if( ${LLVM_PACKAGE_VERSION} VERSION_LESS ${LIBCLC_MIN_LLVM} )
5250
message( FATAL_ERROR "libclc needs at least LLVM ${LIBCLC_MIN_LLVM}" )
5351
endif()
5452

5553
# mesa3d environment is only available since LLVM 4.0
56-
if( ${LLVM_VERSION} VERSION_GREATER "3.9.0" )
54+
if( ${LLVM_PACKAGE_VERSION} VERSION_GREATER "3.9.0" )
5755
set( LIBCLC_TARGETS_ALL ${LIBCLC_TARGETS_ALL} amdgcn-mesa-mesa3d )
5856
endif()
5957

6058
if( LIBCLC_TARGETS_TO_BUILD STREQUAL "all" )
6159
set( LIBCLC_TARGETS_TO_BUILD ${LIBCLC_TARGETS_ALL} )
6260
endif()
6361

64-
execute_process( COMMAND ${LLVM_CONFIG} "--system-libs"
65-
OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
66-
OUTPUT_STRIP_TRAILING_WHITESPACE )
67-
separate_arguments( LLVM_SYSTEM_LIBS )
68-
execute_process( COMMAND ${LLVM_CONFIG} "--libs" "core" "bitreader" "bitwriter"
69-
OUTPUT_VARIABLE LLVM_LIBS
70-
OUTPUT_STRIP_TRAILING_WHITESPACE )
71-
separate_arguments( LLVM_LIBS )
72-
execute_process( COMMAND ${LLVM_CONFIG} "--libdir"
73-
OUTPUT_VARIABLE LLVM_LIBDIR
74-
OUTPUT_STRIP_TRAILING_WHITESPACE )
75-
execute_process( COMMAND ${LLVM_CONFIG} "--ldflags"
76-
OUTPUT_VARIABLE LLVM_LD_FLAGS
77-
OUTPUT_STRIP_TRAILING_WHITESPACE )
78-
execute_process( COMMAND ${LLVM_CONFIG} "--cxxflags"
79-
OUTPUT_VARIABLE LLVM_CXX_FLAGS
80-
OUTPUT_STRIP_TRAILING_WHITESPACE )
81-
separate_arguments( LLVM_CXX_FLAGS )
82-
execute_process( COMMAND ${LLVM_CONFIG} "--bindir"
83-
OUTPUT_VARIABLE LLVM_BINDIR
84-
OUTPUT_STRIP_TRAILING_WHITESPACE )
85-
86-
# These were not properly reported in early LLVM and we don't need them
87-
list( APPEND LLVM_CXX_FLAGS -fno-rtti -fno-exceptions )
88-
89-
# Print LLVM variables
90-
message( "LLVM system libs: ${LLVM_SYSTEM_LIBS}" )
91-
message( "LLVM libs: ${LLVM_LIBS}" )
92-
message( "LLVM libdir: ${LLVM_LIBDIR}" )
93-
message( "LLVM bindir: ${LLVM_BINDIR}" )
94-
message( "LLVM ld flags: ${LLVM_LD_FLAGS}" )
95-
message( "LLVM cxx flags: ${LLVM_CXX_FLAGS}" )
96-
message( "" )
97-
98-
find_program( LLVM_CLANG clang PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
99-
find_program( LLVM_AS llvm-as PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
100-
find_program( LLVM_LINK llvm-link PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
101-
find_program( LLVM_OPT opt PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
102-
find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
62+
find_program( LLVM_CLANG clang PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
63+
find_program( LLVM_AS llvm-as PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
64+
find_program( LLVM_LINK llvm-link PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
65+
find_program( LLVM_OPT opt PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
66+
find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
10367

10468
# Print toolchain
10569
message( "clang: ${LLVM_CLANG}" )
@@ -128,29 +92,29 @@ set( CMAKE_LLAsm_COMPILER ${LLVM_AS} )
12892
set( CMAKE_LLAsm_ARCHIVE ${LLVM_LINK} )
12993

13094
# Construct LLVM version define
131-
string( REPLACE "." ";" LLVM_VERSION_LIST ${LLVM_VERSION} )
132-
list( GET LLVM_VERSION_LIST 0 LLVM_MAJOR )
133-
list( GET LLVM_VERSION_LIST 1 LLVM_MINOR )
134-
set( LLVM_VERSION_DEFINE "-DHAVE_LLVM=0x${LLVM_MAJOR}0${LLVM_MINOR}" )
95+
set( LLVM_VERSION_DEFINE "-DHAVE_LLVM=0x${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}" )
13596

13697

13798
# LLVM 13 enables standard includes by default
138-
if( ${LLVM_VERSION} VERSION_GREATER "12.99.99" )
99+
if( ${LLVM_PACKAGE_VERSION} VERSION_GREATER "12.99.99" )
139100
set( CMAKE_LLAsm_FLAGS "${CMAKE_LLAsm_FLAGS} -cl-no-stdinc")
140101
set( CMAKE_CLC_FLAGS "${CMAKE_CLC_FLAGS} -cl-no-stdinc")
141102
endif()
142103

143104
enable_language( CLC LLAsm )
144-
145105
# This needs to be set before any target that needs it
146-
link_directories( ${LLVM_LIBDIR} )
106+
include_directories( ${LLVM_INCLUDE_DIR} )
147107

148108
# Setup prepare_builtins tools
149-
add_executable( prepare_builtins utils/prepare-builtins.cpp )
150-
target_compile_options( prepare_builtins PRIVATE ${LLVM_CXX_FLAGS} )
109+
set(LLVM_LINK_COMPONENTS
110+
BitReader
111+
BitWriter
112+
Core
113+
)
114+
add_llvm_executable( prepare_builtins utils/prepare-builtins.cpp )
151115
target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
152-
target_link_libraries( prepare_builtins PRIVATE ${LLVM_LIBS} )
153-
target_link_libraries( prepare_builtins PRIVATE ${LLVM_SYSTEM_LIBS} )
116+
# These were not properly reported in early LLVM and we don't need them
117+
target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions )
154118

155119
# Setup arch devices
156120
set( r600--_devices cedar cypress barts cayman )
@@ -175,12 +139,12 @@ set( tahiti_aliases pitcairn verde oland hainan bonaire kabini kaveri hawaii
175139
mullins tonga iceland carrizo fiji stoney polaris10 polaris11 )
176140

177141
# Support for gfx9 was added in LLVM 5.0 (r295554)
178-
if( ${LLVM_VERSION} VERSION_GREATER "4.99.99" )
142+
if( ${LLVM_PACKAGE_VERSION} VERSION_GREATER "4.99.99" )
179143
set( tahiti_aliases ${tahiti_aliases} gfx900 gfx902 )
180144
endif()
181145

182146
# Support for Vega12 and Vega20 was added in LLVM 7 (r331215)
183-
if( ${LLVM_VERSION} VERSION_GREATER "6.99.99" )
147+
if( ${LLVM_PACKAGE_VERSION} VERSION_GREATER "6.99.99" )
184148
set( tahiti_aliases ${tahiti_aliases} gfx904 gfx906 )
185149
endif()
186150

@@ -369,10 +333,8 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
369333
# nvptx-- targets don't include workitem builtins
370334
if( NOT ${t} MATCHES ".*ptx.*--$" )
371335
add_test( NAME external-calls-${obj_suffix}
372-
COMMAND ./check_external_calls.sh ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix}
336+
COMMAND ./check_external_calls.sh ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix} ${LLVM_TOOLS_BINARY_DIR}
373337
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
374-
set_tests_properties( external-calls-${obj_suffix}
375-
PROPERTIES ENVIRONMENT "LLVM_CONFIG=${LLVM_CONFIG}" )
376338
endif()
377339

378340
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix} DESTINATION "${CMAKE_INSTALL_DATADIR}/clc" )

libclc/check_external_calls.sh

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
#!/bin/sh
22

33
FILE=$1
4+
BIN_DIR=$2
45
if [ ! -f $FILE ]; then
56
echo "ERROR: Not a file: $FILE"
67
exit 3
78
fi
89
ret=0
9-
if [ "x$LLVM_CONFIG" = "x" ]; then
10-
LLVM_CONFIG=llvm-config
11-
echo 'WARNING: $LLVM_CONFIG not set, falling back to $PATH llvm-config'
12-
ret=2
13-
fi
14-
1510

16-
BIN_DIR=$($LLVM_CONFIG --bindir)
1711
DIS="$BIN_DIR/llvm-dis"
1812
if [ ! -x $DIS ]; then
1913
echo "ERROR: Disassembler '$DIS' is not executable"

0 commit comments

Comments
 (0)