forked from GPUOpen-Drivers/pal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
173 lines (140 loc) · 9.03 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
##
#######################################################################################################################
#
# Copyright (c) 2017-2019 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.5)
project(PAL LANGUAGES C CXX)
### CMake Includes #####################################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake/Modules)
include(CMakeDependentOption)
include(AmdCmakeHelper)
### Cached Project Options #############################################################################################
# CMAKE-TODO: To support multiple configurations for Visual Studio we can't use CMAKE_BUILD_TYPE
# We would have to override the options using cmake generator expressions and possibly include an
# option to disable overrides such as PAL_DISABLE_INTERNAL_OPTION_OVERRIDES
option(PAL_CLOSED_SOURCE "Build closed source PAL?" OFF)
option(PAL_BUILD_GPUOPEN "Build GPUOpen developer driver support?" OFF)
option(PAL_DBG_COMMAND_COMMENTS "Command with comments" OFF)
option(PAL_DEVELOPER_BUILD "Enable developer build" OFF)
option(PAL_ENABLE_PRINTS_ASSERTS "Enable print assertions?" ${CMAKE_BUILD_TYPE_DEBUG})
cmake_dependent_option(PAL_MEMTRACK "Enable PAL memory tracker?" ${CMAKE_BUILD_TYPE_DEBUG} "PAL_ENABLE_PRINTS_ASSERTS" OFF)
option(PAL_BUILD_CORE "Build PAL Core?" ON)
option(PAL_BUILD_GPUUTIL "Build PAL GPU Util?" ON)
cmake_dependent_option(PAL_BUILD_LAYERS "Build PAL Layers?" ON "PAL_BUILD_GPUUTIL" OFF)
option(PAL_BUILD_DBG_OVERLAY "Build PAL Debug Overlay?" ON)
option(PAL_BUILD_GPU_PROFILER "Build PAL GPU Profiler?" ON)
option(PAL_BUILD_CMD_BUFFER_LOGGER "Build PAL Command Buffer Logger?" ${CMAKE_BUILD_TYPE_DEBUG})
option(PAL_BUILD_INTERFACE_LOGGER "Build PAL Interface Logger?" ${CMAKE_BUILD_TYPE_DEBUG})
option(PAL_BUILD_GFX "Build PAL with Graphics support?" ON)
cmake_dependent_option(PAL_BUILD_GFX6 "Build PAL with GFX6 support?" ON "PAL_BUILD_GFX" OFF)
cmake_dependent_option(PAL_BUILD_GFX9 "Build PAL with GFX9 support?" ON "PAL_BUILD_GFX" OFF)
cmake_dependent_option(PAL_BUILD_VEGA20 "Build PAL with Vega20 support?" ON "PAL_BUILD_GFX" OFF)
cmake_dependent_option(CHIP_HDR_VEGA20 "Build PAL chip with Vega20 support?" ON "PAL_BUILD_GFX" OFF)
cmake_dependent_option(PAL_BUILD_RAVEN2 "Build PAL with Raven2 support?" ON "PAL_BUILD_GFX" OFF)
cmake_dependent_option(CHIP_HDR_RAVEN2 "Build PAL chip with Raven2 support?" ON "PAL_BUILD_GFX" OFF)
option(PAL_BUILD_GFX10 "Build PAL with GFX10 support?" OFF)
option(PAL_BUILD_OSS "Build PAL with Operating System support?" ON)
cmake_dependent_option(PAL_BUILD_OSS1 "Build PAL with OSS1?" ON "PAL_BUILD_OSS" OFF)
cmake_dependent_option(PAL_BUILD_OSS2 "Build PAL with OSS2?" ON "PAL_BUILD_OSS" OFF)
cmake_dependent_option(PAL_BUILD_OSS2_4 "Build PAL with OSS2_4?" ON "PAL_BUILD_OSS" OFF)
cmake_dependent_option(PAL_BUILD_OSS4 "Build PAL with OSS4?" ON "PAL_BUILD_OSS" OFF)
option(PAL_BUILD_WAYLAND "Build PAL with WAYLAND support?" OFF)
# PAL Client Options ###############################################################################
# Use Vulkan as the default client.
set(PAL_CLIENT "VULKAN" CACHE STRING "Client interfacing with PAL.")
# Read the latest version from palLib.h
if(DEFINED PAL_CLIENT_INTERFACE_MAJOR_VERSION)
message(STATUS "Client configured PAL_INTERFACE_MAJOR_VERSION as " ${PAL_CLIENT_INTERFACE_MAJOR_VERSION})
else()
file(STRINGS inc/core/palLib.h PAL_MAJOR_VERSION REGEX "^#define PAL_INTERFACE_MAJOR_VERSION [0-9]+")
if(PAL_MAJOR_VERSION STREQUAL "")
message(STATUS "Failed to find PAL_INTERFACE_MAJOR_VERSION")
else()
string(REGEX REPLACE "^#define PAL_INTERFACE_MAJOR_VERSION " "" PAL_MAJOR_VERSION ${PAL_MAJOR_VERSION})
message(STATUS "Detected PAL_INTERFACE_MAJOR_VERSION is " ${PAL_MAJOR_VERSION})
endif()
set(PAL_CLIENT_INTERFACE_MAJOR_VERSION ${PAL_MAJOR_VERSION})
endif()
# Option Overrides #################################################################################
# These are options that override PAL subproject options. As these overrides are managed and force
# set by PAL, mark_as_advanced is used to hide them from the CMake GUI.
# ADDRLIB
set(PAL_ADDR_PATH ${PROJECT_SOURCE_DIR}/src/core/imported/addrlib CACHE PATH "Specify the path to the ADDRLIB project.")
set(ADDR_OPTIONS_MARK_ADVANCED ON)
set(ADDR_SI_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with SI support." FORCE)
set(ADDR_CI_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with CI support." FORCE)
set(ADDR_VI_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with VI support." FORCE)
set(ADDR_SI_CHIP_DIR ${PROJECT_SOURCE_DIR}/src/core/hw/gfxip/gfx6/chip CACHE PATH "PAL override for ADDRLIB SI/CI/VI register chip headers." FORCE)
if(PAL_BUILD_GFX9)
set(ADDR_GFX9_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with GFX9 support." FORCE)
set(ADDR_GFX9_CHIP_DIR ${PROJECT_SOURCE_DIR}/src/core/hw/gfxip/gfx9/chip CACHE PATH "PAL override for ADDRLIB GFX9 register chip headers." FORCE)
set(ADDR_VEGA12_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with Vega12 support." FORCE)
if(PAL_BUILD_VEGA20)
set(ADDR_VEGA20_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with Vega20 support." FORCE)
set(CHIP_HDR_VEGA20 ON CACHE BOOL "PAL override to build chip register header with Vega20 support." FORCE)
else()
set(ADDR_VEGA20_BUILD OFF CACHE BOOL "PAL override to build ADDRLIB with Vega20 support." FORCE)
set(CHIP_HDR_VEGA20 OFF CACHE BOOL "PAL override to build chip register header with Vega20 support." FORCE)
endif()
if(PAL_BUILD_RAVEN2)
set(ADDR_RAVEN2_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with Raven2 support." FORCE)
set(CHIP_HDR_RAVEN2 ON CACHE BOOL "PAL override to build chip register header with Raven2 support." FORCE)
else()
set(ADDR_RAVEN2_BUILD OFF CACHE BOOL "PAL override to build ADDRLIB with Vega20 support." FORCE)
set(CHIP_HDR_RAVEN2 OFF CACHE BOOL "PAL override to build chip register header with Raven2 support." FORCE)
endif()
if(PAL_BUILD_GFX10)
set(ADDR_GFX10_BUILD ON CACHE BOOL "PAL override to build ADDRLIB with GFX10 support." FORCE)
endif()
endif()
# METROHASH
set(PAL_METROHASH_PATH ${PROJECT_SOURCE_DIR}/src/util/imported/metrohash CACHE PATH "Specify the path to the MetroHash project.")
# CWPACK
set(PAL_CWPACK_PATH ${PROJECT_SOURCE_DIR}/src/util/imported/cwpack CACHE PATH "Specify the path to the CWPack project.")
# VAM
set(PAL_VAM_PATH ${PROJECT_SOURCE_DIR}/src/core/imported/vam CACHE PATH "Specify the path to the VAM project.")
# GPUOPEN
if(PAL_BUILD_GPUOPEN)
set(PAL_GPUOPEN_PATH ${PROJECT_SOURCE_DIR}/shared/gpuopen CACHE PATH "Specify the path to the GPUOPEN_PATH project.")
set(GPUOPEN_BUILD_METROHASH OFF CACHE BOOL "PAL override to build GPUOpen without the Metrohash library since PAL has its own." FORCE)
set(GPUOPEN_BUILD_SERVER_HELPERS ON CACHE BOOL "PAL override to build GPUOpen with server helper classes." FORCE)
set(GPUOPEN_BUILD_STANDARD_DRIVER_PROTOCOLS ON CACHE BOOL "PAL override to build GPUOpen with support for the standard driver protocols." FORCE)
endif()
option(PAL_ENABLE_DEVDRIVER_USAGE "Enables developer driver suppport." ON)
### Generator Dependencies #############################################################################################
find_package(PythonInterp 3)
if(NOT PYTHONINTERP_FOUND)
if(UNIX)
message(FATAL_ERROR "Python 3 is needed to generate some source files.")
endif()
endif()
set(PYTHON_CMD ${PYTHON_EXECUTABLE})
find_package(Perl 5)
if(NOT PERL_FOUND)
if(UNIX)
message(FATAL_ERROR "Perl 5 is needed to generate some source files.")
endif()
endif()
set(PERL_CMD ${PERL_EXECUTABLE})
### Add Subdirectories #################################################################################################
add_subdirectory(src)