11cmake_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+
45include ( GNUInstallDirs )
56set_property (DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
67 amdgcn-amdhsa/lib/SOURCES ;
@@ -40,66 +41,29 @@ set( LIBCLC_TARGETS_TO_BUILD "all"
4041option ( ENABLE_RUNTIME_SUBNORMAL "Enable runtime linking of subnormal support."
4142OFF )
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} " )
5351endif ()
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 )
5856endif ()
5957
6058if ( LIBCLC_TARGETS_TO_BUILD STREQUAL "all" )
6159 set ( LIBCLC_TARGETS_TO_BUILD ${LIBCLC_TARGETS_ALL} )
6260endif ()
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
10569message ( "clang: ${LLVM_CLANG} " )
@@ -128,29 +92,29 @@ set( CMAKE_LLAsm_COMPILER ${LLVM_AS} )
12892set ( 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" )
141102endif ()
142103
143104enable_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 )
151115target_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
156120set ( 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 )
180144endif ()
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 )
185149endif ()
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" )
0 commit comments