-
Notifications
You must be signed in to change notification settings - Fork 116
/
Copy pathCMakeLists.txt
187 lines (164 loc) · 7.33 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
##
#######################################################################################################################
#
# Copyright (c) 2017-2024 Advanced Micro Devices, Inc. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
#######################################################################################################################
cmake_minimum_required(VERSION 3.21)
project(LLPCrepo LANGUAGES C CXX)
### Standalone LLPC build handling
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
include(cmake/CompilerStandalone.cmake)
set(LLPC_IS_STANDALONE ON)
endif()
### Find LLVM (needed by llpc_version.cmake).
include("cmake/findllvm.cmake")
### Version info ###
include(cmake/llpc_version.cmake)
add_llpc_version_projects()
### Cached Project Options #############################################################################################
option(LLPC_BUILD_TOOLS "LLPC build all tools" OFF)
#if LLPC_RAY_TRACING
option(LLPC_RAY_TRACING "Enable raytracing" OFF)
#endif
#if LLPC_AMD_YUV_IMAGE
option(LLPC_AMD_YUV_IMAGE "Build with AMD_YUV_IMAGE" OFF)
#endif
#if LLPC_AMD_LVR_INTEROP
option(LLPC_AMD_LVR_INTEROP "Build with AMD_LVR_INTEROP" OFF)
#endif
### VKGC aspects ###################################################################
# For drivers that use VKGC, as the interface to the LLPC front-end
if (FALSE
OR ICD_BUILD_LLPC
)
include("cmake/vkgc.cmake")
endif()
### LGC for LLPC ###################################################################
if (ICD_BUILD_LLPC)
# Add LGC and its dependencies as LLVM external projects for LLPC to use.
include("cmake/lgc.cmake")
add_lgc_projects()
endif()
### LLVM ###########################################################################
if (LLVM_EXTERNAL_PROJECTS)
if (ICD_BUILD_LLPC AND LLPC_BUILD_TESTS)
set(LLVM_INCLUDE_TESTS ON CACHE BOOL "Force enable LLVM_INCLUDE_TESTS to include gmock" FORCE)
endif()
# Build LLVM.
include("cmake/llvm.cmake")
endif()
### Build LLPC #####################################################################
if(ICD_BUILD_LLPC)
include("cmake/compilerutils.cmake")
add_compilerutils_projects()
target_include_directories(vkgc
INTERFACE
${PROJECT_SOURCE_DIR}/llpc/include
${PROJECT_SOURCE_DIR}/lgc/include
)
add_subdirectory(llpc ${PROJECT_BINARY_DIR}/llpc)
if(LLPC_BUILD_TESTS)
add_subdirectory(test)
endif()
# Export the LLVM and spvgen build paths so that they are available in XGL,
# when this is not an LLPC standalone build.
if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
set(XGL_LLVM_BUILD_PATH ${XGL_LLVM_BUILD_PATH} PARENT_SCOPE)
if(DEFINED XGL_SPVGEN_BUILD_PATH)
set(XGL_SPVGEN_BUILD_PATH ${XGL_SPVGEN_BUILD_PATH} PARENT_SCOPE)
endif()
endif()
target_link_libraries(vkgc INTERFACE llpc)
endif()
# Set sub library properties
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
if (TARGET dumper)
set_property(TARGET dumper_base PROPERTY FOLDER Compiler)
set_property(TARGET dumper PROPERTY FOLDER Compiler)
endif()
if (TARGET vfx)
set_property(TARGET vfx PROPERTY FOLDER Compiler)
endif()
if (TARGET gfxruntime)
set_property(TARGET gfxruntime PROPERTY FOLDER Compiler)
endif()
if(ICD_BUILD_LLPC)
set_property(TARGET llpc PROPERTY FOLDER Compiler)
set_property(TARGET llpcinternal PROPERTY FOLDER Compiler)
#if LLPC_RAY_TRACING
if(LLPC_RAY_TRACING AND NOT LLPC_IS_STANDALONE)
set_property(TARGET vkgc_gpurtshim PROPERTY FOLDER Compiler)
endif()
#endif
set_property(TARGET vkgc_util PROPERTY FOLDER Compiler)
if (LLPC_BUILD_TOOLS)
set_property(TARGET amdllpc PROPERTY FOLDER Compiler)
endif()
set_property(TARGET all-targets PROPERTY FOLDER Misc)
set_property(TARGET AMDGPU PROPERTY FOLDER Misc)
if (TARGET benchmark)
set_property(TARGET benchmark PROPERTY FOLDER Misc)
endif()
if (TARGET benchmark_main)
set_property(TARGET benchmark_main PROPERTY FOLDER Misc)
endif()
set_property(TARGET distribution PROPERTY FOLDER Misc)
set_property(TARGET Engine PROPERTY FOLDER Misc)
set_property(TARGET install-distribution PROPERTY FOLDER Misc)
set_property(TARGET install-distribution-stripped PROPERTY FOLDER Misc)
set_property(TARGET LLVMSupportBlake3 PROPERTY FOLDER Misc)
set_property(TARGET Native PROPERTY FOLDER Misc)
set_property(TARGET NativeCodeGen PROPERTY FOLDER Misc)
set_property(TARGET opt-viewer PROPERTY FOLDER Misc)
if (TARGET llvm-dialects-example)
set_property(TARGET llvm-dialects-example PROPERTY FOLDER Misc)
endif()
if (NOT WIN32 AND LLVM_OPTIMIZED_TABLEGEN)
#if _WIN32
# These targets don't exist on Windows when CMake is first invoked.
# They are created later at build time, when the cross-compilation takes place.
#endif
set_property(TARGET llvm_nm_target PROPERTY FOLDER Misc)
set_property(TARGET llvm_readobj_target PROPERTY FOLDER Misc)
set_property(TARGET llvm-min-tblgen-host PROPERTY FOLDER Misc)
set_property(TARGET llvm-tblgen-host PROPERTY FOLDER Misc)
set_property(TARGET CONFIGURE_LLVM_NATIVE PROPERTY FOLDER Misc)
set_property(TARGET CREATE_LLVM_NATIVE PROPERTY FOLDER Misc)
endif()
#if _WIN32
if(MSVC)
# The 32-bit llvm-tblgen can easily run out of memory. Tell the linker to allow addresses larger than 2GB.
set_property(TARGET llvm-tblgen PROPERTY LINK_FLAGS "/LARGEADDRESSAWARE")
endif()
#endif
if (LLPC_BUILD_TESTS)
if(NOT LLPC_IS_STANDALONE)
set_property(TARGET check-amber PROPERTY FOLDER "LLPC Tests")
endif()
set_property(TARGET check-amdllpc PROPERTY FOLDER "LLPC Tests")
set_property(TARGET check-amdllpc-units PROPERTY FOLDER "LLPC Tests")
set_property(TARGET check-llvmraytracing PROPERTY FOLDER "LLVMRaytracing Tests")
set_property(TARGET check-llvmraytracing-units PROPERTY FOLDER "LLVMRaytracing Tests")
set_property(TARGET check-lgc-units PROPERTY FOLDER "LGC Tests")
endif()
endif()
endif()