blob: c69489c00e4fcde2b9d8889ea44d7a41cf266487 [file] [log] [blame]
Ben Clayton3c690342020-03-24 22:38:59 +00001# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
Antonio Maioranobccfe712020-04-20 17:48:53 -040015cmake_minimum_required(VERSION 3.13)
Corentin Wallez0866b292015-12-09 13:49:40 -050016
Ben Clayton30b6b592019-08-07 15:04:11 +010017project(SwiftShader C CXX ASM)
Corentin Wallez0866b292015-12-09 13:49:40 -050018
Nicolas Capensb3e5c442021-01-20 06:16:24 +000019set(CMAKE_CXX_STANDARD 17)
Antonio Maiorano10ff4332020-12-04 11:33:34 -050020set(CXX_STANDARD_REQUIRED ON)
21# MSVC doesn't define __cplusplus by default
22if(MSVC)
23 string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
24endif()
25
Corentin Wallez0866b292015-12-09 13:49:40 -050026###########################################################
27# Detect system
28###########################################################
29
Nicolas Capens6f422092015-12-23 15:12:45 -050030if(CMAKE_SYSTEM_NAME MATCHES "Linux")
Nicolas Capens1dfcdb02020-03-12 21:12:52 +000031 set(LINUX TRUE)
Stephen Whitee6ab01f2019-04-04 14:31:25 -040032elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
Nicolas Capens1dfcdb02020-03-12 21:12:52 +000033 set(ANDROID TRUE)
Stephen Whitee6ab01f2019-04-04 14:31:25 -040034 set(CMAKE_CXX_FLAGS "-DANDROID_NDK_BUILD")
Corentin Wallez0866b292015-12-09 13:49:40 -050035elseif(WIN32)
36elseif(APPLE)
David 'Digit' Turnerd3717932019-11-19 17:54:00 +010037elseif(FUCHSIA)
38 # NOTE: Building for Fuchsia requires a Fuchsia CMake-based SDK.
39 # See https://fuchsia-review.googlesource.com/c/fuchsia/+/379673
David 'Digit' Turner08090462020-04-17 15:53:21 +020040 find_package(FuchsiaLibraries)
Corentin Wallez0866b292015-12-09 13:49:40 -050041else()
42 message(FATAL_ERROR "Platform is not supported")
43endif()
44
Nicolas Capens30cd7d42017-04-25 15:17:25 -040045if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch")
46 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
47 set(ARCH "aarch64")
48 else()
49 set(ARCH "arm")
50 endif()
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +020051elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips*")
52 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
53 set(ARCH "mips64el")
54 else()
55 set(ARCH "mipsel")
56 endif()
Colin Samplesf63a3ab2019-06-13 12:53:09 -040057elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc*")
58 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
59 set(ARCH "ppc64le")
60 else()
61 message(FATAL_ERROR "Architecture is not supported")
62 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -050063else()
Nicolas Capens30cd7d42017-04-25 15:17:25 -040064 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
65 set(ARCH "x86_64")
66 else()
67 set(ARCH "x86")
68 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -050069endif()
70
Yilong Li14dcbed2021-01-19 16:31:21 -080071# Cross compiling on macOS. The cross compiling architecture should override
72# auto-detected system architecture settings.
73if(CMAKE_OSX_ARCHITECTURES)
74 if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
75 set(ARCH "aarch64")
76 elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
77 set(ARCH "x86_64")
78 elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386")
79 set(ARCH "x86")
80 else()
81 message(FATAL_ERROR "Architecture ${CMAKE_OSX_ARCHITECTURES} is not "
82 "supported. Only one architecture (arm64, x86_64 "
83 "or i386) could be specified at build time.")
84 endif()
85endif()
86
Nicolas Capens1dfcdb02020-03-12 21:12:52 +000087set(CMAKE_MACOSX_RPATH TRUE)
Nicolas Capens007c6c52017-06-09 11:21:48 -040088
Nicolas Capensd7a21cc2018-09-11 13:09:28 -040089if ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQUAL ""))
90 message(WARNING "Visual Studio generators use the x86 host compiler by "
91 "default, even for 64-bit targets. This can result in linker "
92 "instability and out of memory errors. To use the 64-bit "
93 "host compiler, pass -Thost=x64 on the CMake command line.")
94endif()
95
Ben Clayton4901ffd2019-06-27 10:39:07 +010096# Use CCache if available
97find_program(CCACHE_FOUND ccache)
98if(CCACHE_FOUND)
99 message(STATUS "Using ccache")
100 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
101 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
Ben Clayton1e8486b2020-01-22 17:01:52 +0000102endif()
Ben Clayton4901ffd2019-06-27 10:39:07 +0100103
Corentin Wallez0866b292015-12-09 13:49:40 -0500104###########################################################
Nicolas Capens3acaa532022-04-18 00:36:49 -0400105# Install Gerrit commit hook
106###########################################################
107
108if(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg)
109 message(WARNING "
110 .git/hooks/commit-msg was not found.
111 Downloading from https://gerrit-review.googlesource.com/tools/hooks/commit-msg...
112 ")
113
114 file(DOWNLOAD https://gerrit-review.googlesource.com/tools/hooks/commit-msg ${CMAKE_SOURCE_DIR}/commit-msg)
115
116 file(COPY ${CMAKE_SOURCE_DIR}/commit-msg
117 DESTINATION ${CMAKE_SOURCE_DIR}/.git/hooks/
118 FILE_PERMISSIONS
119 OWNER_READ OWNER_WRITE OWNER_EXECUTE
120 GROUP_READ GROUP_WRITE GROUP_EXECUTE
121 WORLD_READ WORLD_EXECUTE)
122 file(REMOVE ${CMAKE_SOURCE_DIR}/commit-msg)
123endif()
124
125###########################################################
Ben Claytona9af8832019-08-14 13:09:43 +0100126# Host libraries
127###########################################################
128
Adrian Ratiuc6747d92021-07-14 14:39:20 +0300129if(LINUX)
Nicolas Capens9c16e142022-04-05 00:27:05 -0400130 include(CheckSymbolExists)
Adrian Ratiuc6747d92021-07-14 14:39:20 +0300131 check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
132 check_symbol_exists(mallinfo2 malloc.h HAVE_MALLINFO2)
Nicolas Capens9c16e142022-04-05 00:27:05 -0400133
134 include(CheckIncludeFiles)
Nicolas Capens598c7cd2022-04-05 00:27:05 -0400135 CHECK_INCLUDE_FILES("xcb/xcb.h;xcb/shm.h" HAVE_XCB_H)
Nicolas Capens9c16e142022-04-05 00:27:05 -0400136 if(NOT HAVE_XCB_H)
Nicolas Capens598c7cd2022-04-05 00:27:05 -0400137 message(WARNING "xcb/xcb.h or xcb/shm.h was not found. Install the libx11-xcb-dev and "
138 "libxcb-shm0-dev packages to build with WSI support for XCB surfaces.")
Nicolas Capens9c16e142022-04-05 00:27:05 -0400139 endif()
Adrian Ratiuc6747d92021-07-14 14:39:20 +0300140endif()
141
Nicolas Caramellia681d122020-07-20 23:47:56 +0200142if(SWIFTSHADER_BUILD_WSI_WAYLAND)
143 find_library(WAYLAND wayland-client)
144endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200145if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
146 find_library(DIRECTFB directfb)
147 find_path(DIRECTFB_INCLUDE_DIR directfb/directfb.h)
148endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100149if(SWIFTSHADER_BUILD_WSI_D2D)
150 find_library(D2D drm)
151 find_path(D2D_INCLUDE_DIR libdrm/drm.h)
152endif(SWIFTSHADER_BUILD_WSI_D2D)
Ben Claytona9af8832019-08-14 13:09:43 +0100153
154###########################################################
Nicolas Capens18b8d682017-07-25 15:31:45 -0400155# Options
156###########################################################
157
158if(NOT CMAKE_BUILD_TYPE)
159 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
Antonio Maiorano31038ea2020-04-15 16:47:00 -0400160 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400161endif()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400162
Ben Clayton5837d872020-01-20 16:23:36 +0000163function (option_if_not_defined name description default)
164 if(NOT DEFINED ${name})
165 option(${name} ${description} ${default})
166 endif()
167endfunction()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400168
Ben Clayton9cc163c2020-01-20 16:26:36 +0000169function (set_if_not_defined name value)
170 if(NOT DEFINED ${name})
171 set(${name} ${value} PARENT_SCOPE)
172 endif()
173endfunction()
174
Nicolas Caramellia681d122020-07-20 23:47:56 +0200175option_if_not_defined(SWIFTSHADER_BUILD_WSI_WAYLAND "Build the Wayland WSI support" FALSE)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200176option_if_not_defined(SWIFTSHADER_BUILD_WSI_DIRECTFB "Build the DirectFB WSI support" FALSE)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100177option_if_not_defined(SWIFTSHADER_BUILD_WSI_D2D "Build the Direct-to-Display WSI support" FALSE)
Nicolas Capensf53de1a2022-02-11 10:28:19 -0500178option_if_not_defined(SWIFTSHADER_BUILD_PVR "Build the PowerVR examples" FALSE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400179
Nicolas Capens45755df2020-03-30 12:42:40 -0400180option_if_not_defined(SWIFTSHADER_BUILD_TESTS "Build unit tests" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000181option_if_not_defined(SWIFTSHADER_BUILD_BENCHMARKS "Build benchmarks" FALSE)
Ben Clayton5837d872020-01-20 16:23:36 +0000182
Nicolas Capensf53de1a2022-02-11 10:28:19 -0500183option_if_not_defined(SWIFTSHADER_USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" TRUE)
184
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000185option_if_not_defined(SWIFTSHADER_MSAN "Build with memory sanitizer" FALSE)
186option_if_not_defined(SWIFTSHADER_ASAN "Build with address sanitizer" FALSE)
187option_if_not_defined(SWIFTSHADER_TSAN "Build with thread sanitizer" FALSE)
188option_if_not_defined(SWIFTSHADER_UBSAN "Build with undefined behavior sanitizer" FALSE)
Ben Clayton063fc022020-03-23 13:18:09 +0000189option_if_not_defined(SWIFTSHADER_EMIT_COVERAGE "Emit code coverage information" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000190option_if_not_defined(SWIFTSHADER_WARNINGS_AS_ERRORS "Treat all warnings as errors" TRUE)
191option_if_not_defined(SWIFTSHADER_DCHECK_ALWAYS_ON "Check validation macros even in release builds" FALSE)
192option_if_not_defined(REACTOR_EMIT_DEBUG_INFO "Emit debug info for JIT functions" FALSE)
193option_if_not_defined(REACTOR_EMIT_PRINT_LOCATION "Emit printing of location info for JIT functions" FALSE)
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500194option_if_not_defined(REACTOR_EMIT_ASM_FILE "Emit asm files for JIT functions" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000195option_if_not_defined(REACTOR_ENABLE_PRINT "Enable RR_PRINT macros" FALSE)
196option_if_not_defined(REACTOR_VERIFY_LLVM_IR "Check reactor-generated LLVM IR is valid even in release builds" FALSE)
Adlai Holler0320eab2021-02-17 12:29:00 -0500197# TODO(b/155148722): Remove when unconditionally instrumenting for all build systems.
198option_if_not_defined(REACTOR_ENABLE_MEMORY_SANITIZER_INSTRUMENTATION "Include JIT in MSAN instrumentation (LLVM backend)" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000199option_if_not_defined(SWIFTSHADER_LESS_DEBUG_INFO "Generate less debug info to reduce file size" FALSE)
200option_if_not_defined(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER "Enable Vulkan debugger support" FALSE)
201option_if_not_defined(SWIFTSHADER_ENABLE_ASTC "Enable ASTC compressed textures support" TRUE) # TODO(b/150130101)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400202
Nicolas Capens4625f842021-12-08 14:23:59 -0500203set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP ${SWIFTSHADER_ENABLE_VULKAN_DEBUGGER})
Ben Claytone693b622019-09-05 12:48:37 +0100204
Nicolas Capens5f8a16a2019-08-15 10:36:13 -0400205set(DEFAULT_REACTOR_BACKEND "LLVM")
Nicolas Capens3957b7f2018-10-15 12:54:41 -0400206set(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor")
Martin Troiber5ff2f732022-02-25 00:17:06 +0100207set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM LLVM-Submodule Subzero)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400208
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400209set(DEFAULT_SWIFTSHADER_LLVM_VERSION "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000210set(SWIFTSHADER_LLVM_VERSION ${DEFAULT_SWIFTSHADER_LLVM_VERSION} CACHE STRING "LLVM version to use")
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400211set_property(CACHE SWIFTSHADER_LLVM_VERSION PROPERTY STRINGS "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000212
Antonio Maiorano062dc182019-12-09 11:52:31 -0500213# If defined, overrides the default optimization level of the current reactor backend.
214# Set to one of the rr::Optimization::Level enum values.
Antonio Maioranob17161a2020-11-23 11:17:22 -0500215set(REACTOR_DEFAULT_OPT_LEVEL "" CACHE STRING "Reactor default optimization level")
Antonio Maiorano062dc182019-12-09 11:52:31 -0500216set_property(CACHE REACTOR_DEFAULT_OPT_LEVEL PROPERTY STRINGS "None" "Less" "Default" "Aggressive")
217
Ben Claytoncbb5a102020-10-03 11:15:47 +0100218if(NOT DEFINED SWIFTSHADER_LOGGING_LEVEL)
219 set(SWIFTSHADER_LOGGING_LEVEL "Info" CACHE STRING "SwiftShader logging level")
220 set_property(CACHE SWIFTSHADER_LOGGING_LEVEL PROPERTY STRINGS "Verbose" "Debug" "Info" "Warn" "Error" "Fatal" "Disabled")
221endif()
222
Nicolas Capens18b8d682017-07-25 15:31:45 -0400223# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
224# it builds header files that could overwrite the orignal ones. Here we
225# want to include LLVM as a subdirectory and even though it wouldn't cause
226# the problem, if cmake . is called from the main dir, the condition that
Erwin Jansend46faeb2018-11-19 16:01:37 -0800227# LLVM checkes, "CMAKE_CURRENT_SOURCE_DIR == CMAKE_CURRENT_BINARY_DIR" will be true. So we
Nicolas Capens18b8d682017-07-25 15:31:45 -0400228# disallow it ourselves too to. In addition if there are remining CMakeFiles
229# and CMakeCache in the directory, cmake .. from a subdirectory will still
230# try to build from the main directory so we instruct users to delete these
231# files when they get the error.
Erwin Jansend46faeb2018-11-19 16:01:37 -0800232if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400233 message(FATAL_ERROR "In source builds are not allowed by LLVM, please create a build/ directory and build from there. You may have to delete the CMakeCache.txt file and CMakeFiles directory that are next to the CMakeLists.txt.")
234endif()
235
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000236set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400237
238###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400239# Directories
240###########################################################
241
Antonio Maiorano8772b422020-04-15 15:00:36 -0400242set(SWIFTSHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
243set(SOURCE_DIR ${SWIFTSHADER_DIR}/src)
244set(THIRD_PARTY_DIR ${SWIFTSHADER_DIR}/third_party)
245set(TESTS_DIR ${SWIFTSHADER_DIR}/tests)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400246
247###########################################################
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400248# Initialize submodules
249###########################################################
250
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400251function(InitSubmodule target submodule_dir)
252 if (NOT TARGET ${target})
253 if(NOT EXISTS ${submodule_dir}/.git)
Ben Clayton55890e12020-01-31 14:07:21 +0000254 message(WARNING "
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400255 Target ${target} from submodule ${submodule_dir} missing.
Ben Clayton55890e12020-01-31 14:07:21 +0000256 Running 'git submodule update --init' to download it:
257 ")
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400258
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400259 execute_process(COMMAND git -C ${SWIFTSHADER_DIR} submodule update --init ${submodule_dir})
Ben Clayton55890e12020-01-31 14:07:21 +0000260 endif()
Dan Sinclair6480d4e2019-03-11 10:48:19 -0400261 endif()
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400262endfunction()
263
Antonio Maiorano9d35d542021-02-01 16:35:07 -0500264if (SWIFTSHADER_BUILD_TESTS OR SWIFTSHADER_BUILD_BENCHMARKS)
265 set(BUILD_VULKAN_WRAPPER TRUE)
266endif()
267
268if (BUILD_VULKAN_WRAPPER)
269 InitSubmodule(glslang ${THIRD_PARTY_DIR}/glslang)
270endif()
271
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400272if (SWIFTSHADER_BUILD_TESTS)
273 InitSubmodule(gtest ${THIRD_PARTY_DIR}/googletest)
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400274endif()
275
Ben Clayton55890e12020-01-31 14:07:21 +0000276if(SWIFTSHADER_BUILD_BENCHMARKS)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400277 InitSubmodule(benchmark::benchmark ${THIRD_PARTY_DIR}/benchmark)
278endif()
Ben Clayton55890e12020-01-31 14:07:21 +0000279
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400280if(REACTOR_EMIT_DEBUG_INFO)
281 InitSubmodule(libbacktrace ${THIRD_PARTY_DIR}/libbacktrace/src)
Ben Clayton755467c2019-03-23 11:57:02 +0000282endif()
283
Nicolas Capensf53de1a2022-02-11 10:28:19 -0500284if(SWIFTSHADER_BUILD_PVR)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400285 InitSubmodule(PVRCore ${THIRD_PARTY_DIR}/PowerVR_Examples)
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500286endif()
287
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400288if(SWIFTSHADER_BUILD_CPPDAP)
289 InitSubmodule(json ${THIRD_PARTY_DIR}/json)
290 InitSubmodule(cppdap ${THIRD_PARTY_DIR}/cppdap)
291endif()
292
Martin Troiber5ff2f732022-02-25 00:17:06 +0100293if(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
294 InitSubmodule(llvm-submodule ${THIRD_PARTY_DIR}/llvm-project)
295endif()
296
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400297###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500298# Convenience macros
299###########################################################
300
301# Recursively calls source_group on the files of the directory
302# so that Visual Studio has the files in a folder tree
303macro(group_all_sources directory)
Antonio Maiorano8772b422020-04-15 15:00:36 -0400304 file(GLOB files RELATIVE ${SWIFTSHADER_DIR}/${directory} ${SWIFTSHADER_DIR}/${directory}/*)
Corentin Wallez0866b292015-12-09 13:49:40 -0500305 foreach(file ${files})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400306 if(IS_DIRECTORY ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500307 group_all_sources(${directory}/${file})
308 else()
309 string(REPLACE "/" "\\" groupname ${directory})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400310 source_group(${groupname} FILES ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500311 endif()
312 endforeach()
313endmacro()
314
315# Takes target library and a directory where the export map is
316# and add the linker options so that only the API symbols are
317# exported.
Nicolas Capens499bb762018-06-29 13:30:57 -0400318macro(set_shared_library_export_map TARGET DIR)
Corentin Wallez0866b292015-12-09 13:49:40 -0500319 if(MSVC)
Nicolas Capens499bb762018-06-29 13:30:57 -0400320 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " /DEF:\"${DIR}/${TARGET}.def\"")
Ben Clayton8565e772019-06-10 11:58:37 +0100321 elseif(APPLE)
322 # The exported symbols list only exports the API functions and
323 # hides all the others.
324 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-exported_symbols_list ${DIR}/${TARGET}.exports")
325 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${TARGET}.exports;")
326 # Don't allow undefined symbols, unless it's a Sanitizer build.
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500327 if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
Ben Clayton8565e772019-06-10 11:58:37 +0100328 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-undefined,error")
329 endif()
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100330 elseif(LINUX OR FUCHSIA)
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200331 # NOTE: The Fuchsia linker script is needed to export the vk_icdInitializeConnectToServiceCallback
332 # entry point (a private implementation detail betwen the Fuchsia Vulkan loader and the ICD).
333 if ((FUCHSIA) AND ("${TARGET}" STREQUAL "vk_swiftshader"))
334 set(LINKER_VERSION_SCRIPT "fuchsia_vk_swiftshader.lds")
335 else()
336 set(LINKER_VERSION_SCRIPT "${TARGET}.lds")
337 endif()
338
Corentin Wallez0866b292015-12-09 13:49:40 -0500339 # The version script only exports the API functions and
Nicolas Capens499bb762018-06-29 13:30:57 -0400340 # hides all the others.
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200341 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${DIR}/${LINKER_VERSION_SCRIPT}")
342 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${LINKER_VERSION_SCRIPT};")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400343
Nicolas Capense3621dc2020-02-25 22:45:42 -0500344 # -Bsymbolic binds symbol references to their global definitions within
345 # a shared object, thereby preventing symbol preemption.
James Price126720b2020-03-03 10:20:00 -0500346 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bsymbolic")
Nicolas Capens517a57f2018-06-29 13:30:57 -0400347
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100348 if(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200349 # MIPS supports sysv hash-style only.
350 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=sysv")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100351 elseif(LINUX)
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200352 # Both hash-style are needed, because we want both gold and
353 # GNU ld to be able to read our libraries.
354 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both")
355 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400356
Ben Clayton063fc022020-03-23 13:18:09 +0000357 if(NOT ${SWIFTSHADER_EMIT_COVERAGE})
358 # Gc sections is used in combination with each functions being
359 # in its own section, to reduce the binary size.
360 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--gc-sections")
361 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400362
363 # Don't allow undefined symbols, unless it's a Sanitizer build.
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500364 if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400365 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
366 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500367 endif()
368endmacro()
369
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500370if(SWIFTSHADER_USE_GROUP_SOURCES)
Corentin Wallez0866b292015-12-09 13:49:40 -0500371 group_all_sources(src)
372endif()
373
374###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500375# Compile flags
376###########################################################
377
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100378# Flags for project code (non 3rd party)
379set(SWIFTSHADER_COMPILE_OPTIONS "")
Ben Clayton063fc022020-03-23 13:18:09 +0000380set(SWIFTSHADER_LINK_FLAGS "")
381set(SWIFTSHADER_LIBS "")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100382
Nicolas Capens6f422092015-12-23 15:12:45 -0500383macro(set_cpp_flag FLAG)
384 if(${ARGC} GREATER 1)
385 set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500386 else()
Nicolas Capens6f422092015-12-23 15:12:45 -0500387 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500388 endif()
389endmacro()
390
Ben Clayton48c8a182019-05-21 20:00:20 +0100391macro(set_linker_flag FLAG)
392 if(${ARGC} GREATER 1)
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400393 set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400394 set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100395 else()
396 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400397 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100398 endif()
399endmacro()
400
Corentin Wallez0866b292015-12-09 13:49:40 -0500401if(MSVC)
402 set_cpp_flag("/MP")
403 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400404 add_definitions(-D_SCL_SECURE_NO_WARNINGS)
Nicolas Capens4c9f04b2019-01-31 22:09:03 -0500405 add_definitions(-D_SBCS) # Single Byte Character Set (ASCII)
Ben Clayton30b6b592019-08-07 15:04:11 +0100406 add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) # Disable MSVC warnings about std::aligned_storage being broken before VS 2017 15.8
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400407
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400408 set_linker_flag("/DEBUG:FASTLINK" DEBUG)
409 set_linker_flag("/DEBUG:FASTLINK" RELWITHDEBINFO)
Nicolas Capensf554c542020-01-09 17:19:35 +0000410
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400411 # Disable specific warnings
412 # TODO: Not all of these should be disabled, but for now, we want a warning-free msvc build. Remove these one by one
413 # and fix the actual warnings in code.
414 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
415 "/wd4005" # 'identifier' : macro redefinition
416 "/wd4018" # 'expression' : signed/unsigned mismatch
Ben Clayton4d4a1902019-05-15 11:15:42 +0100417 "/wd4065" # switch statement contains 'default' but no 'case' labels
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400418 "/wd4141" # 'modifier' : used more than once
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400419 "/wd4244" # 'conversion' conversion from 'type1' to 'type2', possible loss of data
420 "/wd4267" # 'var' : conversion from 'size_t' to 'type', possible loss of data
421 "/wd4291" # 'void X new(size_t,unsigned int,unsigned int)': no matching operator delete found; memory will not be freed if initialization throws an exception
422 "/wd4309" # 'conversion' : truncation of constant value
423 "/wd4624" # 'derived class' : destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted
424 "/wd4800" # 'type' : forcing value to bool 'true' or 'false' (performance warning)
425 "/wd4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
426 "/wd5030" # attribute 'attribute' is not recognized
427 "/wd5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
Nicolas Capensea5f37f2022-04-19 16:08:20 -0400428 "/wd4146" # unary minus operator applied to unsigned type, result still unsigned
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400429 )
430
431 # Treat specific warnings as errors
432 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
433 "/we4018" # 'expression' : signed/unsigned mismatch
Alexis Hetu6bd05092021-11-08 14:05:04 -0500434 "/we4062" # enumerator 'identifier' in switch of enum 'enumeration' is not handled
Antonio Maiorano23da0732019-05-14 22:32:16 -0400435 "/we4471" # 'enumeration': a forward declaration of an unscoped enumeration must have an underlying type (int assumed)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400436 "/we4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
437 "/we5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
Nicolas Capens43f1d972021-11-12 00:10:48 -0500438 "/we4101" # 'identifier' : unreferenced local variable
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400439 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500440else()
Ben Claytona5f07632020-02-04 11:43:25 +0000441 # Explicitly enable these warnings.
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100442 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100443 "-Wall"
Ben Clayton8a983f72019-06-18 17:56:36 +0100444 "-Wreorder"
445 "-Wsign-compare"
446 "-Wmissing-braces"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100447 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500448
James Rumble69deca62021-07-01 11:39:34 +0100449 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
450 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
451 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
452 "-Wdeprecated-copy" # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
Nicolas Capens02a91c92021-08-20 03:49:24 -0400453 )
James Rumble69deca62021-07-01 11:39:34 +0100454 endif()
455 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100456 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton54709882020-04-16 10:40:08 +0100457 "-Wextra"
458 "-Wunreachable-code-loop-increment"
Ben Clayton8a983f72019-06-18 17:56:36 +0100459 "-Wunused-lambda-capture"
460 "-Wstring-conversion"
461 "-Wextra-semi"
462 "-Wignored-qualifiers"
James Rumble69deca62021-07-01 11:39:34 +0100463 "-Wdeprecated-copy" # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
Nicolas Capensff91ac52021-11-29 18:29:01 +0000464 # TODO(b/208256248): Avoid exit-time destructor.
465 #"-Wexit-time-destructors" # declaration requires an exit-time destructor
Ben Claytona5f07632020-02-04 11:43:25 +0000466 )
467 endif()
468
Ben Clayton063fc022020-03-23 13:18:09 +0000469 if (SWIFTSHADER_EMIT_COVERAGE)
470 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
471 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "--coverage")
472 list(APPEND SWIFTSHADER_LIBS "gcov")
473 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
474 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fprofile-instr-generate" "-fcoverage-mapping")
475 list(APPEND SWIFTSHADER_LINK_FLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
476 else()
477 message(FATAL_ERROR "Coverage generation not supported for the ${CMAKE_CXX_COMPILER_ID} toolchain")
478 endif()
479 endif()
480
Nicolas Capensd2bdde22021-06-17 22:14:37 -0400481 # Disable pedantic warnings
Ben Claytona5f07632020-02-04 11:43:25 +0000482 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
483 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
484 "-Wno-ignored-attributes" # ignoring attributes on template argument 'X'
485 "-Wno-attributes" # 'X' attribute ignored
486 "-Wno-strict-aliasing" # dereferencing type-punned pointer will break strict-aliasing rules
487 "-Wno-comment" # multi-line comment
488 )
489 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
490 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
491 "-Wno-init-list-lifetime" # assignment from temporary initializer_list does not extend the lifetime of the underlying array
492 )
493 endif()
494 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
495 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
496 "-Wno-unneeded-internal-declaration" # function 'X' is not needed and will not be emitted
497 "-Wno-unused-private-field" # private field 'offset' is not used - TODO: Consider enabling this once Vulkan is further implemented.
498 "-Wno-comment" # multi-line comment
Ben Claytona7bc2b92020-03-26 11:24:49 +0000499 "-Wno-extra-semi" # extra ';' after member function definition
Ben Clayton54709882020-04-16 10:40:08 +0100500 "-Wno-unused-parameter" # unused parameter 'X'
Ben Claytona5f07632020-02-04 11:43:25 +0000501
Nicolas Capens67180a02019-06-17 15:27:03 -0400502 # Silence errors caused by unknown warnings when building with older
503 # versions of Clang. This demands checking that warnings added above
504 # are spelled correctly and work as intended!
505 "-Wno-unknown-warning-option"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100506 )
Nicolas Capens825d3442018-11-06 23:50:05 -0500507 endif()
508
Nicolas Capens499bb762018-06-29 13:30:57 -0400509 if(ARCH STREQUAL "x86")
Corentin Wallez0866b292015-12-09 13:49:40 -0500510 set_cpp_flag("-m32")
511 set_cpp_flag("-msse2")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500512 set_cpp_flag("-mfpmath=sse")
513 set_cpp_flag("-march=pentium4")
514 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500515 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400516 if(ARCH STREQUAL "x86_64")
Corentin Wallez0866b292015-12-09 13:49:40 -0500517 set_cpp_flag("-m64")
518 set_cpp_flag("-fPIC")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500519 set_cpp_flag("-march=x86-64")
520 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500521 endif()
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200522 if(ARCH STREQUAL "mipsel")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800523 set_cpp_flag("-EL")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200524 set_cpp_flag("-march=mips32r2")
525 set_cpp_flag("-fPIC")
526 set_cpp_flag("-mhard-float")
527 set_cpp_flag("-mfp32")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800528 set_cpp_flag("-mxgot")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200529 endif()
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100530 if(ARCH STREQUAL "mips64el")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800531 set_cpp_flag("-EL")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100532 set_cpp_flag("-march=mips64r2")
533 set_cpp_flag("-mabi=64")
534 set_cpp_flag("-fPIC")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800535 set_cpp_flag("-mxgot")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100536 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400537
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500538 if(SWIFTSHADER_LESS_DEBUG_INFO)
Paul Thomson09b50792019-10-17 12:55:56 +0100539 # Use -g1 to be able to get stack traces
540 set_cpp_flag("-g -g1" DEBUG)
541 set_cpp_flag("-g -g1" RELWITHDEBINFO)
542 else()
543 # Use -g3 to have even more debug info
544 set_cpp_flag("-g -g3" DEBUG)
545 set_cpp_flag("-g -g3" RELWITHDEBINFO)
546 endif()
547
Ben Clayton09a91e42019-02-05 17:58:38 +0000548 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
549 # Treated as an unused argument with clang
550 set_cpp_flag("-s" RELEASE)
551 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500552
553 # For distribution it is more important to be slim than super optimized
Alexis Hetu2c0546d2017-05-24 11:16:26 -0400554 set_cpp_flag("-Os" RELEASE)
555 set_cpp_flag("-Os" RELWITHDEBINFO)
Corentin Wallez0866b292015-12-09 13:49:40 -0500556
557 set_cpp_flag("-DNDEBUG" RELEASE)
558 set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
Corentin Wallez0866b292015-12-09 13:49:40 -0500559
560 # Put each variable and function in its own section so that when linking
561 # with -gc-sections unused functions and variables are removed.
562 set_cpp_flag("-ffunction-sections" RELEASE)
563 set_cpp_flag("-fdata-sections" RELEASE)
564 set_cpp_flag("-fomit-frame-pointer" RELEASE)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400565
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500566 if(SWIFTSHADER_MSAN)
Nicolas Capens7a0ca4e2020-11-30 10:08:59 -0500567 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
568 message(FATAL_ERROR " \n"
569 " MemorySanitizer usage requires compiling with Clang.")
570 endif()
571
Nicolas Capens268fd732020-10-08 16:46:48 -0400572 if(NOT DEFINED ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH})
Nicolas Capens268fd732020-10-08 16:46:48 -0400573 message(FATAL_ERROR " \n"
574 " MemorySanitizer usage requires an instrumented build of libc++.\n"
575 " Set the SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH environment variable to the\n"
576 " build output path. See\n"
577 " https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc\n"
578 " for details on how to build an MSan instrumented libc++.")
579 endif()
580
Ben Claytondae97922019-05-17 12:09:31 +0100581 set_cpp_flag("-fsanitize=memory")
Ben Clayton48c8a182019-05-21 20:00:20 +0100582 set_linker_flag("-fsanitize=memory")
Nicolas Capens268fd732020-10-08 16:46:48 -0400583 set_cpp_flag("-stdlib=libc++")
584 set_linker_flag("-L$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
585 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include")
586 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include/c++/v1")
587 set_linker_flag("-Wl,-rpath,$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500588 elseif(SWIFTSHADER_ASAN)
Ben Claytondae97922019-05-17 12:09:31 +0100589 set_cpp_flag("-fsanitize=address")
Ben Clayton48c8a182019-05-21 20:00:20 +0100590 set_linker_flag("-fsanitize=address")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500591 elseif(SWIFTSHADER_TSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100592 set_cpp_flag("-fsanitize=thread")
Ben Clayton48c8a182019-05-21 20:00:20 +0100593 set_linker_flag("-fsanitize=thread")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500594 elseif(SWIFTSHADER_UBSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100595 set_cpp_flag("-fsanitize=undefined")
Ben Clayton48c8a182019-05-21 20:00:20 +0100596 set_linker_flag("-fsanitize=undefined")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400597 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500598endif()
599
Antonio Maiorano4b8b0782020-03-23 14:11:01 -0400600if(SWIFTSHADER_DCHECK_ALWAYS_ON)
601 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DDCHECK_ALWAYS_ON")
602endif()
603
Nicolas Capens8c13b2f2020-03-06 01:12:01 -0500604if(SWIFTSHADER_WARNINGS_AS_ERRORS)
605 if(MSVC)
606 set(WARNINGS_AS_ERRORS "/WX") # Treat all warnings as errors
607 else()
608 set(WARNINGS_AS_ERRORS "-Werror") # Treat all warnings as errors
609 endif()
610endif()
611
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500612# Enable Reactor Print() functionality in Debug/RelWithDebInfo builds or when explicitly enabled.
613if(CMAKE_BUILD_TYPE MATCHES "Deb")
614 set(REACTOR_ENABLE_PRINT TRUE)
615endif()
616
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400617if(REACTOR_EMIT_PRINT_LOCATION)
Antonio Maiorano415d1812020-02-11 16:22:55 -0500618 # This feature depends on REACTOR_EMIT_DEBUG_INFO and REACTOR_ENABLE_PRINT
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500619 set(REACTOR_EMIT_DEBUG_INFO TRUE)
620 set(REACTOR_ENABLE_PRINT TRUE)
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400621 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_PRINT_LOCATION")
622endif()
623
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500624if(REACTOR_EMIT_ASM_FILE)
625 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_ASM_FILE")
626endif()
627
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400628if(REACTOR_EMIT_DEBUG_INFO)
629 message(WARNING "REACTOR_EMIT_DEBUG_INFO is enabled. This will likely affect performance.")
630 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_DEBUG_INFO")
631endif()
632
Antonio Maiorano415d1812020-02-11 16:22:55 -0500633if(REACTOR_ENABLE_PRINT)
634 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_PRINT")
635endif()
636
Ben Clayton5375f472019-06-24 13:33:11 +0100637if(REACTOR_VERIFY_LLVM_IR)
638 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_LLVM_IR_VERIFICATION")
639endif()
640
Antonio Maiorano062dc182019-12-09 11:52:31 -0500641if(REACTOR_DEFAULT_OPT_LEVEL)
642 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DREACTOR_DEFAULT_OPT_LEVEL=${REACTOR_DEFAULT_OPT_LEVEL}")
643endif()
644
Ben Claytoncbb5a102020-10-03 11:15:47 +0100645if(DEFINED SWIFTSHADER_LOGGING_LEVEL)
646 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DSWIFTSHADER_LOGGING_LEVEL=${SWIFTSHADER_LOGGING_LEVEL}")
647endif()
648
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400649if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500650 add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
Nicolas Capens6f422092015-12-23 15:12:45 -0500651 set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
Corentin Wallez0866b292015-12-09 13:49:40 -0500652endif()
653
Antonio Maiorano61022762020-03-30 11:11:16 -0400654set(USE_EXCEPTIONS
655 ${REACTOR_EMIT_DEBUG_INFO} # boost::stacktrace uses exceptions
656)
657if(NOT MSVC)
658 if (${USE_EXCEPTIONS})
659 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fexceptions")
660 else()
661 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fno-exceptions")
662 endif()
663endif()
Antonio Maiorano9418b512020-04-08 23:18:13 -0400664unset(USE_EXCEPTIONS)
Antonio Maiorano61022762020-03-30 11:11:16 -0400665
Corentin Wallez0866b292015-12-09 13:49:40 -0500666###########################################################
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400667# libbacktrace and boost
668###########################################################
669if(REACTOR_EMIT_DEBUG_INFO)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400670 add_subdirectory(${THIRD_PARTY_DIR}/libbacktrace EXCLUDE_FROM_ALL)
671 add_subdirectory(${THIRD_PARTY_DIR}/boost EXCLUDE_FROM_ALL)
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400672endif()
673
674###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500675# LLVM
676###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400677add_subdirectory(${THIRD_PARTY_DIR}/llvm-${SWIFTSHADER_LLVM_VERSION} EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400678set_target_properties(llvm PROPERTIES FOLDER "third_party")
Ben Clayton8f71f732019-02-01 09:38:45 +0000679
Antonio Maiorano4bde1c32020-03-27 15:01:53 -0400680###########################################################
Martin Troiber5ff2f732022-02-25 00:17:06 +0100681# LLVM-Submodule
682###########################################################
683if(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
684 set(LLVM_INCLUDE_TESTS FALSE)
685 set(LLVM_ENABLE_RTTI TRUE)
686 add_subdirectory(${THIRD_PARTY_DIR}/llvm-project/llvm EXCLUDE_FROM_ALL)
687 if(ARCH STREQUAL "aarch64")
688 llvm_map_components_to_libnames(llvm_libs orcjit aarch64asmparser aarch64codegen)
689 elseif(ARCH STREQUAL "arm")
690 llvm_map_components_to_libnames(llvm_libs orcjit armasmparser armcodegen)
691 elseif(ARCH MATCHES "mips*")
692 llvm_map_components_to_libnames(llvm_libs orcjit mipsasmparser mipscodegen)
693 elseif(ARCH STREQUAL "ppc64le")
694 llvm_map_components_to_libnames(llvm_libs orcjit powerpcasmparser powerpccodegen)
695 elseif(ARCH MATCHES "x86*")
696 llvm_map_components_to_libnames(llvm_libs orcjit x86asmparser x86codegen)
697 endif()
698 set_target_properties(${llvm_libs} PROPERTIES FOLDER "third_party")
699endif()
700
701###########################################################
Antonio Maiorano4bde1c32020-03-27 15:01:53 -0400702# Subzero
703###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400704add_subdirectory(${THIRD_PARTY_DIR}/llvm-subzero EXCLUDE_FROM_ALL)
705add_subdirectory(${THIRD_PARTY_DIR}/subzero EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400706set_target_properties(llvm-subzero PROPERTIES FOLDER "third_party")
707set_target_properties(subzero PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500708
709###########################################################
710# marl
711###########################################################
Nicolas Capens4625f842021-12-08 14:23:59 -0500712set(MARL_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
713add_subdirectory(${THIRD_PARTY_DIR}/marl)
714set_target_properties(marl PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500715
Ben Clayton377573c2020-04-03 20:36:40 +0100716if(MARL_THREAD_SAFETY_ANALYSIS_SUPPORTED)
717 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-Wthread-safety")
718endif()
719
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500720###########################################################
721# cppdap
722###########################################################
723if(SWIFTSHADER_BUILD_CPPDAP)
724 set(CPPDAP_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400725 add_subdirectory(${THIRD_PARTY_DIR}/cppdap)
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500726endif()
727
Antonio Maioranob02a7082020-03-30 21:55:20 -0400728###########################################################
729# astc-encoder
730###########################################################
731if(SWIFTSHADER_ENABLE_ASTC)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400732 add_subdirectory(${THIRD_PARTY_DIR}/astc-encoder)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400733 set_target_properties(astc-encoder PROPERTIES FOLDER "third_party")
Antonio Maioranob02a7082020-03-30 21:55:20 -0400734endif()
Nicolas Capens19291ef2017-01-09 13:35:14 -0500735
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500736###########################################################
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400737# gtest and gmock
738###########################################################
739if(SWIFTSHADER_BUILD_TESTS)
740 # For Win32, force gtest to match our CRT (shared)
741 set(gtest_force_shared_crt TRUE CACHE BOOL "" FORCE)
Nicolas Capens6d34a6c2021-12-10 12:55:44 -0500742 set(INSTALL_GTEST FALSE CACHE BOOL "" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400743 add_subdirectory(${THIRD_PARTY_DIR}/googletest EXCLUDE_FROM_ALL)
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400744 # gtest finds python, which picks python 2 first, if present.
745 # We need to undo this so that SPIR-V can later find python3.
746 unset(PYTHON_EXECUTABLE CACHE)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400747 set_target_properties(gmock PROPERTIES FOLDER "third_party")
748 set_target_properties(gmock_main PROPERTIES FOLDER "third_party")
749 set_target_properties(gtest PROPERTIES FOLDER "third_party")
750 set_target_properties(gtest_main PROPERTIES FOLDER "third_party")
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400751endif()
752
753###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500754# File Lists
755###########################################################
756
Corentin Wallez0866b292015-12-09 13:49:40 -0500757###########################################################
758# Append OS specific files to lists
759###########################################################
760
761if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500762 set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
763elseif(LINUX)
Nicolas Capens681d97b2016-05-17 16:02:32 -0400764 set(OS_LIBS dl pthread)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200765 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
766 list(APPEND OS_LIBS "${WAYLAND}")
767 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200768 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
769 list(APPEND OS_LIBS "${DIRECTFB}")
770 include_directories(${DIRECTFB_INCLUDE_DIR}/directfb)
771 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100772 if(SWIFTSHADER_BUILD_WSI_D2D)
773 list(APPEND OS_LIBS "${D2D}")
774 include_directories(${D2D_INCLUDE_DIR}/libdrm)
775 endif(SWIFTSHADER_BUILD_WSI_D2D)
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100776elseif(FUCHSIA)
777 set(OS_LIBS zircon)
Corentin Wallezcd0a4572015-12-10 15:59:28 -0500778elseif(APPLE)
779 find_library(COCOA_FRAMEWORK Cocoa)
780 find_library(QUARTZ_FRAMEWORK Quartz)
Alexis Hetud23cf632018-04-10 10:48:42 -0400781 find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
782 find_library(IOSURFACE_FRAMEWORK IOSurface)
Corentin Wallezcb586622020-03-27 17:38:29 +0100783 find_library(METAL_FRAMEWORK Metal)
784 set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}" "${METAL_FRAMEWORK}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500785endif()
786
787###########################################################
Nicolas Capens5a105bc2015-12-22 22:04:28 -0500788# SwiftShader Targets
Corentin Wallez0866b292015-12-09 13:49:40 -0500789###########################################################
790
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400791add_subdirectory(src/Reactor) # Add ReactorSubzero and ReactorLLVM targets
Nicolas Capense329f012020-03-13 14:54:21 +0000792
Ben Claytonb99bc1f2019-04-15 13:56:08 -0400793if(${REACTOR_BACKEND} STREQUAL "LLVM")
Nicolas Capens0adcf042022-02-06 08:17:42 -0500794 add_library(Reactor ALIAS ReactorLLVM)
Martin Troiber5ff2f732022-02-25 00:17:06 +0100795elseif(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
796 add_library(Reactor ALIAS ReactorLLVMSubmodule)
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500797elseif(${REACTOR_BACKEND} STREQUAL "Subzero")
Nicolas Capens0adcf042022-02-06 08:17:42 -0500798 add_library(Reactor ALIAS ReactorSubzero)
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500799else()
Martin Troiber5ff2f732022-02-25 00:17:06 +0100800 message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM', 'LLVM-Submodule' or 'Subzero'")
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500801endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500802
Nicolas Capens4625f842021-12-08 14:23:59 -0500803if (NOT TARGET SPIRV-Tools)
804 # This variable is also used by SPIRV-Tools to locate SPIRV-Headers
805 set(SPIRV-Headers_SOURCE_DIR "${THIRD_PARTY_DIR}/SPIRV-Headers")
806 set(SPIRV_SKIP_TESTS TRUE CACHE BOOL "" FORCE)
807 set(SPIRV_SKIP_EXECUTABLES TRUE CACHE BOOL "" FORCE)
808 add_subdirectory(${THIRD_PARTY_DIR}/SPIRV-Tools) # Add SPIRV-Tools target
Corentin Wallez0866b292015-12-09 13:49:40 -0500809endif()
810
Nicolas Capens4625f842021-12-08 14:23:59 -0500811# Add a vk_base interface library for shared vulkan build options.
812# TODO: Create src/Base and make this a lib target, and move stuff from
813# src/Vulkan into it that is needed by vk_pipeline, vk_device, and vk_wsi.
814add_library(vk_base INTERFACE)
815
816if(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER)
817 target_compile_definitions(vk_base INTERFACE "ENABLE_VK_DEBUGGER")
Corentin Wallez0866b292015-12-09 13:49:40 -0500818endif()
819
Nicolas Capens4625f842021-12-08 14:23:59 -0500820if(WIN32)
821 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
822elseif(LINUX)
Nicolas Capens9c16e142022-04-05 00:27:05 -0400823 if(HAVE_XCB_H)
Nicolas Capens4625f842021-12-08 14:23:59 -0500824 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100825 endif()
Nicolas Capens4625f842021-12-08 14:23:59 -0500826 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
827 if(WAYLAND)
828 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000829 endif()
Nicolas Capens4625f842021-12-08 14:23:59 -0500830 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
831 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
832 if(DIRECTFB AND DIRECTFB_INCLUDE_DIR)
833 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DIRECTFB_EXT")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000834 endif()
Nicolas Capens4625f842021-12-08 14:23:59 -0500835 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
836 if(SWIFTSHADER_BUILD_WSI_D2D)
837 if(D2D)
838 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DISPLAY_KHR")
839 endif()
840 endif(SWIFTSHADER_BUILD_WSI_D2D)
841elseif(APPLE)
842 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_MACOS_MVK")
843 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_METAL_EXT")
844elseif(FUCHSIA)
845 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_FUCHSIA")
846else()
847 message(FATAL_ERROR "Platform does not support Vulkan yet")
848endif()
Nicolas Capensd3545372019-08-09 13:59:18 -0400849
Nicolas Capens4625f842021-12-08 14:23:59 -0500850add_subdirectory(src/System) # Add vk_system target
851add_subdirectory(src/Pipeline) # Add vk_pipeline target
852add_subdirectory(src/WSI) # Add vk_wsi target
853add_subdirectory(src/Device) # Add vk_device target
854add_subdirectory(src/Vulkan) # Add vk_swiftshader target
Ben Claytonac736122020-03-24 17:48:31 +0000855
Nicolas Capens4625f842021-12-08 14:23:59 -0500856if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND # turbo-cov is only useful for clang coverage info
857 SWIFTSHADER_EMIT_COVERAGE)
858 add_subdirectory(${TESTS_DIR}/regres/cov/turbo-cov)
Nicolas Capens29a98092019-04-03 14:35:10 -0400859endif()
Chris Forbes3d27f2e2018-09-26 09:24:39 -0700860
Corentin Wallez0866b292015-12-09 13:49:40 -0500861###########################################################
Nicolas Capens29a98092019-04-03 14:35:10 -0400862# Sample programs and tests
Corentin Wallez0866b292015-12-09 13:49:40 -0500863###########################################################
864
Antonio Maiorano79248ab2020-07-23 11:24:33 -0400865# TODO(b/161976310): Add support for building PowerVR on MacOS
Nicolas Capensf53de1a2022-02-11 10:28:19 -0500866if(APPLE AND SWIFTSHADER_BUILD_PVR)
Antonio Maiorano79248ab2020-07-23 11:24:33 -0400867 message(WARNING "Building PowerVR examples for SwiftShader is not yet supported on Apple platforms.")
868 set(SWIFTSHADER_BUILD_PVR FALSE)
869endif()
870
Nicolas Capensf53de1a2022-02-11 10:28:19 -0500871if(SWIFTSHADER_BUILD_PVR)
Nicolas Capens51b28002020-01-30 16:41:00 -0500872 if(UNIX AND NOT APPLE)
873 set(PVR_WINDOW_SYSTEM XCB)
Nicolas Capens7e857092020-03-06 13:21:10 -0500874
875 # Set the RPATH of the next defined build targets to $ORIGIN,
876 # allowing them to load shared libraries from the execution directory.
877 set(CMAKE_BUILD_RPATH "$ORIGIN")
Nicolas Capens51b28002020-01-30 16:41:00 -0500878 endif()
879
Nicolas Capens13943ba2020-03-17 22:36:24 -0400880 set(PVR_BUILD_EXAMPLES TRUE CACHE BOOL "Build the PowerVR SDK Examples" FORCE)
Nicolas Capens4625f842021-12-08 14:23:59 -0500881 set(PVR_BUILD_VULKAN_EXAMPLES TRUE CACHE BOOL "Build the Vulkan PowerVR SDK Examples" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400882 add_subdirectory(${THIRD_PARTY_DIR}/PowerVR_Examples)
Nicolas Capens51b28002020-01-30 16:41:00 -0500883
Nicolas Capens51b28002020-01-30 16:41:00 -0500884 # Samples known to work well
885 set(PVR_VULKAN_TARGET_GOOD
886 VulkanBumpmap
Nicolas Capens3702e012020-03-30 09:08:47 -0400887 VulkanExampleUI
888 VulkanGaussianBlur
Nicolas Capens51b28002020-01-30 16:41:00 -0500889 VulkanGlass
890 VulkanGnomeHorde
891 VulkanHelloAPI
892 VulkanImageBasedLighting
Nicolas Capens3702e012020-03-30 09:08:47 -0400893 VulkanIntroducingPVRUtils
Nicolas Capens51b28002020-01-30 16:41:00 -0500894 VulkanMultiSampling
Nicolas Capens3702e012020-03-30 09:08:47 -0400895 VulkanNavigation2D
896 VulkanParticleSystem
Nicolas Capens51b28002020-01-30 16:41:00 -0500897 VulkanSkinning
898 )
899
900 set(PVR_VULKAN_TARGET_OTHER
901 VulkanDeferredShading
902 VulkanDeferredShadingPFX
Nicolas Capens51b28002020-01-30 16:41:00 -0500903 VulkanGameOfLife
Nicolas Capens51b28002020-01-30 16:41:00 -0500904 VulkanIBLMapsGenerator
905 VulkanIMGTextureFilterCubic
906 VulkanIntroducingPVRShell
Nicolas Capens51b28002020-01-30 16:41:00 -0500907 VulkanIntroducingPVRVk
908 VulkanIntroducingUIRenderer
909 VulkanMultithreading
Nicolas Capens51b28002020-01-30 16:41:00 -0500910 VulkanNavigation3D
Nicolas Capens51b28002020-01-30 16:41:00 -0500911 VulkanPostProcessing
912 VulkanPVRScopeExample
913 VulkanPVRScopeRemote
914 )
915
916 set(PVR_TARGET_OTHER
917 glslang
918 glslangValidator
919 glslang-default-resource-limits
Nicolas Capens51b28002020-01-30 16:41:00 -0500920 OSDependent
Nicolas Capens51b28002020-01-30 16:41:00 -0500921 pugixml
922 PVRAssets
923 PVRCamera
924 PVRCore
925 PVRPfx
926 PVRShell
Nicolas Capens51b28002020-01-30 16:41:00 -0500927 PVRUtilsVk
928 PVRVk
929 SPIRV
930 spirv-remap
931 SPVRemapper
932 uninstall
933 )
934
935 set(PVR_VULKAN_TARGET
936 ${PVR_VULKAN_TARGET_GOOD}
937 ${PVR_VULKAN_TARGET_OTHER}
938 )
939
940 foreach(pvr_target ${PVR_VULKAN_TARGET})
941 add_dependencies(${pvr_target} vk_swiftshader)
942 endforeach()
943
Nicolas Capens4625f842021-12-08 14:23:59 -0500944 foreach(pvr_target ${PVR_VULKAN_TARGET_GOOD})
Nicolas Capens51b28002020-01-30 16:41:00 -0500945 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples)
946 endforeach()
947
Nicolas Capens4625f842021-12-08 14:23:59 -0500948 foreach(pvr_target ${PVR_TARGET_OTHER} ${PVR_VULKAN_TARGET_OTHER})
Nicolas Capens51b28002020-01-30 16:41:00 -0500949 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples/PowerVR-Build)
950 endforeach()
Corentin Wallezcb586622020-03-27 17:38:29 +0100951endif()
Nicolas Capensf324fe52020-06-05 16:10:07 -0400952
Antonio Maiorano9d35d542021-02-01 16:35:07 -0500953if(BUILD_VULKAN_WRAPPER)
954 if (NOT TARGET glslang)
955 add_subdirectory(${THIRD_PARTY_DIR}/glslang)
956 endif()
957 add_subdirectory(${TESTS_DIR}/VulkanWrapper) # Add VulkanWrapper target
958endif()
959
Nicolas Capensf324fe52020-06-05 16:10:07 -0400960if(SWIFTSHADER_BUILD_TESTS)
961 add_subdirectory(${TESTS_DIR}/ReactorUnitTests) # Add ReactorUnitTests target
Nicolas Capensf324fe52020-06-05 16:10:07 -0400962 add_subdirectory(${TESTS_DIR}/MathUnitTests) # Add math-unittests target
963 add_subdirectory(${TESTS_DIR}/SystemUnitTests) # Add system-unittests target
964endif()
965
966if(SWIFTSHADER_BUILD_BENCHMARKS)
967 if (NOT TARGET benchmark::benchmark)
968 set(BENCHMARK_ENABLE_TESTING FALSE CACHE BOOL FALSE FORCE)
969 add_subdirectory(${THIRD_PARTY_DIR}/benchmark)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400970 set_target_properties(benchmark PROPERTIES FOLDER "third_party")
971 set_target_properties(benchmark_main PROPERTIES FOLDER "third_party")
Nicolas Capensf324fe52020-06-05 16:10:07 -0400972 endif()
973
Nicolas Capensf7e7cc52022-02-06 08:51:05 -0500974 add_subdirectory(${TESTS_DIR}/PipelineBenchmarks) # Add PipelineBenchmarks target
Nicolas Capensf324fe52020-06-05 16:10:07 -0400975 add_subdirectory(${TESTS_DIR}/ReactorBenchmarks) # Add ReactorBenchmarks target
976 add_subdirectory(${TESTS_DIR}/SystemBenchmarks) # Add system-benchmarks target
977 add_subdirectory(${TESTS_DIR}/VulkanBenchmarks) # Add VulkanBenchmarks target
978endif()
979
Nicolas Capens4625f842021-12-08 14:23:59 -0500980if(SWIFTSHADER_BUILD_TESTS)
Nicolas Capensf324fe52020-06-05 16:10:07 -0400981 add_subdirectory(${TESTS_DIR}/VulkanUnitTests) # Add VulkanUnitTests target
982endif()