1
1
cmake_minimum_required (VERSION 3.13.4 )
2
2
3
- project ( libclc VERSION 0.2.0 LANGUAGES CXX )
3
+ project ( libclc VERSION 0.2.0 LANGUAGES CXX C )
4
+
4
5
include ( GNUInstallDirs )
5
6
set_property (DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
6
7
amdgcn-amdhsa/lib/SOURCES;
@@ -40,66 +41,29 @@ set( LIBCLC_TARGETS_TO_BUILD "all"
40
41
option ( ENABLE_RUNTIME_SUBNORMAL "Enable runtime linking of subnormal support."
41
42
OFF )
42
43
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} " )
50
48
51
- if ( ${LLVM_VERSION } VERSION_LESS ${LIBCLC_MIN_LLVM} )
49
+ if ( ${LLVM_PACKAGE_VERSION } VERSION_LESS ${LIBCLC_MIN_LLVM} )
52
50
message ( FATAL_ERROR "libclc needs at least LLVM ${LIBCLC_MIN_LLVM} " )
53
51
endif ()
54
52
55
53
# 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" )
57
55
set ( LIBCLC_TARGETS_ALL ${LIBCLC_TARGETS_ALL} amdgcn-mesa-mesa3d )
58
56
endif ()
59
57
60
58
if ( LIBCLC_TARGETS_TO_BUILD STREQUAL "all" )
61
59
set ( LIBCLC_TARGETS_TO_BUILD ${LIBCLC_TARGETS_ALL} )
62
60
endif ()
63
61
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 )
103
67
104
68
# Print toolchain
105
69
message ( "clang: ${LLVM_CLANG} " )
@@ -128,29 +92,29 @@ set( CMAKE_LLAsm_COMPILER ${LLVM_AS} )
128
92
set ( CMAKE_LLAsm_ARCHIVE ${LLVM_LINK} )
129
93
130
94
# 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} " )
135
96
136
97
137
98
# 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" )
139
100
set ( CMAKE_LLAsm_FLAGS "${CMAKE_LLAsm_FLAGS} -cl-no-stdinc" )
140
101
set ( CMAKE_CLC_FLAGS "${CMAKE_CLC_FLAGS} -cl-no-stdinc" )
141
102
endif ()
142
103
143
104
enable_language ( CLC LLAsm )
144
-
145
105
# This needs to be set before any target that needs it
146
- link_directories ( ${LLVM_LIBDIR } )
106
+ include_directories ( ${LLVM_INCLUDE_DIR } )
147
107
148
108
# 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 )
151
115
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 )
154
118
155
119
# Setup arch devices
156
120
set ( r600--_devices cedar cypress barts cayman )
@@ -175,12 +139,12 @@ set( tahiti_aliases pitcairn verde oland hainan bonaire kabini kaveri hawaii
175
139
mullins tonga iceland carrizo fiji stoney polaris10 polaris11 )
176
140
177
141
# 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" )
179
143
set ( tahiti_aliases ${tahiti_aliases} gfx900 gfx902 )
180
144
endif ()
181
145
182
146
# 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" )
184
148
set ( tahiti_aliases ${tahiti_aliases} gfx904 gfx906 )
185
149
endif ()
186
150
@@ -369,10 +333,8 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
369
333
# nvptx-- targets don't include workitem builtins
370
334
if ( NOT ${t} MATCHES ".*ptx.*--$" )
371
335
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 }
373
337
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
374
- set_tests_properties ( external-calls-${obj_suffix}
375
- PROPERTIES ENVIRONMENT "LLVM_CONFIG=${LLVM_CONFIG} " )
376
338
endif ()
377
339
378
340
install ( FILES ${CMAKE_CURRENT_BINARY_DIR} /${obj_suffix} DESTINATION "${CMAKE_INSTALL_DATADIR} /clc" )
0 commit comments