blob: 4811b7b5effa3d0c08fec2236c9d707ad4819573 [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###########################################################
Ben Claytona9af8832019-08-14 13:09:43 +0100105# Host libraries
106###########################################################
107
108find_library(X11 X11)
109find_library(XCB xcb)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200110if(SWIFTSHADER_BUILD_WSI_WAYLAND)
111 find_library(WAYLAND wayland-client)
112endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200113if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
114 find_library(DIRECTFB directfb)
115 find_path(DIRECTFB_INCLUDE_DIR directfb/directfb.h)
116endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100117if(SWIFTSHADER_BUILD_WSI_D2D)
118 find_library(D2D drm)
119 find_path(D2D_INCLUDE_DIR libdrm/drm.h)
120endif(SWIFTSHADER_BUILD_WSI_D2D)
Ben Claytona9af8832019-08-14 13:09:43 +0100121
122###########################################################
Nicolas Capens18b8d682017-07-25 15:31:45 -0400123# Options
124###########################################################
125
126if(NOT CMAKE_BUILD_TYPE)
127 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
Antonio Maiorano31038ea2020-04-15 16:47:00 -0400128 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400129endif()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400130
Ben Clayton5837d872020-01-20 16:23:36 +0000131function (option_if_not_defined name description default)
132 if(NOT DEFINED ${name})
133 option(${name} ${description} ${default})
134 endif()
135endfunction()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400136
Ben Clayton9cc163c2020-01-20 16:26:36 +0000137function (set_if_not_defined name value)
138 if(NOT DEFINED ${name})
139 set(${name} ${value} PARENT_SCOPE)
140 endif()
141endfunction()
142
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000143option_if_not_defined(SWIFTSHADER_BUILD_EGL "Build the EGL library" TRUE)
144option_if_not_defined(SWIFTSHADER_BUILD_GLESv2 "Build the OpenGL ES 2 library" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000145option_if_not_defined(SWIFTSHADER_BUILD_VULKAN "Build the Vulkan library" TRUE)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200146option_if_not_defined(SWIFTSHADER_BUILD_WSI_WAYLAND "Build the Wayland WSI support" FALSE)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200147option_if_not_defined(SWIFTSHADER_BUILD_WSI_DIRECTFB "Build the DirectFB WSI support" FALSE)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100148option_if_not_defined(SWIFTSHADER_BUILD_WSI_D2D "Build the Direct-to-Display WSI support" FALSE)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400149option_if_not_defined(SWIFTSHADER_BUILD_PVR "Build the PowerVR examples" TRUE)
150option_if_not_defined(SWIFTSHADER_GET_PVR "Check out the PowerVR submodule" FALSE)
Antonio Maiorano4e397792020-07-27 15:14:52 -0400151option_if_not_defined(SWIFTSHADER_BUILD_ANGLE "Build angle" FALSE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400152
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000153option_if_not_defined(SWIFTSHADER_USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" TRUE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400154
Nicolas Capens45755df2020-03-30 12:42:40 -0400155option_if_not_defined(SWIFTSHADER_BUILD_TESTS "Build unit tests" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000156option_if_not_defined(SWIFTSHADER_BUILD_BENCHMARKS "Build benchmarks" FALSE)
Ben Clayton5837d872020-01-20 16:23:36 +0000157
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000158option_if_not_defined(SWIFTSHADER_MSAN "Build with memory sanitizer" FALSE)
159option_if_not_defined(SWIFTSHADER_ASAN "Build with address sanitizer" FALSE)
160option_if_not_defined(SWIFTSHADER_TSAN "Build with thread sanitizer" FALSE)
161option_if_not_defined(SWIFTSHADER_UBSAN "Build with undefined behavior sanitizer" FALSE)
Ben Clayton063fc022020-03-23 13:18:09 +0000162option_if_not_defined(SWIFTSHADER_EMIT_COVERAGE "Emit code coverage information" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000163option_if_not_defined(SWIFTSHADER_WARNINGS_AS_ERRORS "Treat all warnings as errors" TRUE)
164option_if_not_defined(SWIFTSHADER_DCHECK_ALWAYS_ON "Check validation macros even in release builds" FALSE)
165option_if_not_defined(REACTOR_EMIT_DEBUG_INFO "Emit debug info for JIT functions" FALSE)
166option_if_not_defined(REACTOR_EMIT_PRINT_LOCATION "Emit printing of location info for JIT functions" FALSE)
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500167option_if_not_defined(REACTOR_EMIT_ASM_FILE "Emit asm files for JIT functions" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000168option_if_not_defined(REACTOR_ENABLE_PRINT "Enable RR_PRINT macros" FALSE)
169option_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 -0500170# TODO(b/155148722): Remove when unconditionally instrumenting for all build systems.
171option_if_not_defined(REACTOR_ENABLE_MEMORY_SANITIZER_INSTRUMENTATION "Include JIT in MSAN instrumentation (LLVM backend)" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000172option_if_not_defined(SWIFTSHADER_LESS_DEBUG_INFO "Generate less debug info to reduce file size" FALSE)
173option_if_not_defined(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER "Enable Vulkan debugger support" FALSE)
174option_if_not_defined(SWIFTSHADER_ENABLE_ASTC "Enable ASTC compressed textures support" TRUE) # TODO(b/150130101)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400175
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500176set(BUILD_MARL ${SWIFTSHADER_BUILD_VULKAN})
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000177
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500178if(${SWIFTSHADER_BUILD_VULKAN} AND ${SWIFTSHADER_ENABLE_VULKAN_DEBUGGER})
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000179 set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP TRUE)
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000180else()
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000181 set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP FALSE)
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000182endif()
Ben Claytone693b622019-09-05 12:48:37 +0100183
Nicolas Capens5f8a16a2019-08-15 10:36:13 -0400184set(DEFAULT_REACTOR_BACKEND "LLVM")
Nicolas Capens3957b7f2018-10-15 12:54:41 -0400185set(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor")
Nicolas Capens18b8d682017-07-25 15:31:45 -0400186set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
187
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400188set(DEFAULT_SWIFTSHADER_LLVM_VERSION "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000189set(SWIFTSHADER_LLVM_VERSION ${DEFAULT_SWIFTSHADER_LLVM_VERSION} CACHE STRING "LLVM version to use")
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400190set_property(CACHE SWIFTSHADER_LLVM_VERSION PROPERTY STRINGS "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000191
Antonio Maiorano062dc182019-12-09 11:52:31 -0500192# If defined, overrides the default optimization level of the current reactor backend.
193# Set to one of the rr::Optimization::Level enum values.
Antonio Maioranob17161a2020-11-23 11:17:22 -0500194set(REACTOR_DEFAULT_OPT_LEVEL "" CACHE STRING "Reactor default optimization level")
Antonio Maiorano062dc182019-12-09 11:52:31 -0500195set_property(CACHE REACTOR_DEFAULT_OPT_LEVEL PROPERTY STRINGS "None" "Less" "Default" "Aggressive")
196
Ben Claytoncbb5a102020-10-03 11:15:47 +0100197if(NOT DEFINED SWIFTSHADER_LOGGING_LEVEL)
198 set(SWIFTSHADER_LOGGING_LEVEL "Info" CACHE STRING "SwiftShader logging level")
199 set_property(CACHE SWIFTSHADER_LOGGING_LEVEL PROPERTY STRINGS "Verbose" "Debug" "Info" "Warn" "Error" "Fatal" "Disabled")
200endif()
201
Nicolas Capens18b8d682017-07-25 15:31:45 -0400202# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
203# it builds header files that could overwrite the orignal ones. Here we
204# want to include LLVM as a subdirectory and even though it wouldn't cause
205# the problem, if cmake . is called from the main dir, the condition that
Erwin Jansend46faeb2018-11-19 16:01:37 -0800206# LLVM checkes, "CMAKE_CURRENT_SOURCE_DIR == CMAKE_CURRENT_BINARY_DIR" will be true. So we
Nicolas Capens18b8d682017-07-25 15:31:45 -0400207# disallow it ourselves too to. In addition if there are remining CMakeFiles
208# and CMakeCache in the directory, cmake .. from a subdirectory will still
209# try to build from the main directory so we instruct users to delete these
210# files when they get the error.
Erwin Jansend46faeb2018-11-19 16:01:37 -0800211if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400212 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.")
213endif()
214
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000215set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400216
217###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400218# Directories
219###########################################################
220
Antonio Maiorano8772b422020-04-15 15:00:36 -0400221set(SWIFTSHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
222set(SOURCE_DIR ${SWIFTSHADER_DIR}/src)
223set(THIRD_PARTY_DIR ${SWIFTSHADER_DIR}/third_party)
224set(TESTS_DIR ${SWIFTSHADER_DIR}/tests)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400225
226###########################################################
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400227# Initialize submodules
228###########################################################
229
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400230function(InitSubmodule target submodule_dir)
231 if (NOT TARGET ${target})
232 if(NOT EXISTS ${submodule_dir}/.git)
Ben Clayton55890e12020-01-31 14:07:21 +0000233 message(WARNING "
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400234 Target ${target} from submodule ${submodule_dir} missing.
Ben Clayton55890e12020-01-31 14:07:21 +0000235 Running 'git submodule update --init' to download it:
236 ")
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400237
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400238 execute_process(COMMAND git -C ${SWIFTSHADER_DIR} submodule update --init ${submodule_dir})
Ben Clayton55890e12020-01-31 14:07:21 +0000239 endif()
Dan Sinclair6480d4e2019-03-11 10:48:19 -0400240 endif()
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400241endfunction()
242
Antonio Maiorano9d35d542021-02-01 16:35:07 -0500243if (SWIFTSHADER_BUILD_TESTS OR SWIFTSHADER_BUILD_BENCHMARKS)
244 set(BUILD_VULKAN_WRAPPER TRUE)
245endif()
246
247if (BUILD_VULKAN_WRAPPER)
248 InitSubmodule(glslang ${THIRD_PARTY_DIR}/glslang)
249endif()
250
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400251if (SWIFTSHADER_BUILD_TESTS)
252 InitSubmodule(gtest ${THIRD_PARTY_DIR}/googletest)
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400253endif()
254
Ben Clayton55890e12020-01-31 14:07:21 +0000255if(SWIFTSHADER_BUILD_BENCHMARKS)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400256 InitSubmodule(benchmark::benchmark ${THIRD_PARTY_DIR}/benchmark)
257endif()
Ben Clayton55890e12020-01-31 14:07:21 +0000258
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400259if(REACTOR_EMIT_DEBUG_INFO)
260 InitSubmodule(libbacktrace ${THIRD_PARTY_DIR}/libbacktrace/src)
Ben Clayton755467c2019-03-23 11:57:02 +0000261endif()
262
Nicolas Capens13943ba2020-03-17 22:36:24 -0400263if(SWIFTSHADER_GET_PVR)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400264 InitSubmodule(PVRCore ${THIRD_PARTY_DIR}/PowerVR_Examples)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400265 set(SWIFTSHADER_GET_PVR FALSE CACHE BOOL "Check out the PowerVR submodule" FORCE)
266endif()
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400267if(EXISTS ${THIRD_PARTY_DIR}/PowerVR_Examples/.git)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400268 set(HAVE_PVR_SUBMODULE TRUE)
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500269endif()
270
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400271if(SWIFTSHADER_BUILD_CPPDAP)
272 InitSubmodule(json ${THIRD_PARTY_DIR}/json)
273 InitSubmodule(cppdap ${THIRD_PARTY_DIR}/cppdap)
274endif()
275
Antonio Maiorano4e397792020-07-27 15:14:52 -0400276if(SWIFTSHADER_BUILD_ANGLE)
277 InitSubmodule(angle ${THIRD_PARTY_DIR}/angle/angle)
278endif()
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400279
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400280###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500281# Convenience macros
282###########################################################
283
284# Recursively calls source_group on the files of the directory
285# so that Visual Studio has the files in a folder tree
286macro(group_all_sources directory)
Antonio Maiorano8772b422020-04-15 15:00:36 -0400287 file(GLOB files RELATIVE ${SWIFTSHADER_DIR}/${directory} ${SWIFTSHADER_DIR}/${directory}/*)
Corentin Wallez0866b292015-12-09 13:49:40 -0500288 foreach(file ${files})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400289 if(IS_DIRECTORY ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500290 group_all_sources(${directory}/${file})
291 else()
292 string(REPLACE "/" "\\" groupname ${directory})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400293 source_group(${groupname} FILES ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500294 endif()
295 endforeach()
296endmacro()
297
298# Takes target library and a directory where the export map is
299# and add the linker options so that only the API symbols are
300# exported.
Nicolas Capens499bb762018-06-29 13:30:57 -0400301macro(set_shared_library_export_map TARGET DIR)
Corentin Wallez0866b292015-12-09 13:49:40 -0500302 if(MSVC)
Nicolas Capens499bb762018-06-29 13:30:57 -0400303 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " /DEF:\"${DIR}/${TARGET}.def\"")
Ben Clayton8565e772019-06-10 11:58:37 +0100304 elseif(APPLE)
305 # The exported symbols list only exports the API functions and
306 # hides all the others.
307 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-exported_symbols_list ${DIR}/${TARGET}.exports")
308 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${TARGET}.exports;")
309 # Don't allow undefined symbols, unless it's a Sanitizer build.
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500310 if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
Ben Clayton8565e772019-06-10 11:58:37 +0100311 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-undefined,error")
312 endif()
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100313 elseif(LINUX OR FUCHSIA)
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200314 # NOTE: The Fuchsia linker script is needed to export the vk_icdInitializeConnectToServiceCallback
315 # entry point (a private implementation detail betwen the Fuchsia Vulkan loader and the ICD).
316 if ((FUCHSIA) AND ("${TARGET}" STREQUAL "vk_swiftshader"))
317 set(LINKER_VERSION_SCRIPT "fuchsia_vk_swiftshader.lds")
318 else()
319 set(LINKER_VERSION_SCRIPT "${TARGET}.lds")
320 endif()
321
Corentin Wallez0866b292015-12-09 13:49:40 -0500322 # The version script only exports the API functions and
Nicolas Capens499bb762018-06-29 13:30:57 -0400323 # hides all the others.
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200324 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${DIR}/${LINKER_VERSION_SCRIPT}")
325 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${LINKER_VERSION_SCRIPT};")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400326
Nicolas Capense3621dc2020-02-25 22:45:42 -0500327 # -Bsymbolic binds symbol references to their global definitions within
328 # a shared object, thereby preventing symbol preemption.
James Price126720b2020-03-03 10:20:00 -0500329 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bsymbolic")
Nicolas Capens517a57f2018-06-29 13:30:57 -0400330
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100331 if(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200332 # MIPS supports sysv hash-style only.
333 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=sysv")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100334 elseif(LINUX)
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200335 # Both hash-style are needed, because we want both gold and
336 # GNU ld to be able to read our libraries.
337 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both")
338 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400339
Ben Clayton063fc022020-03-23 13:18:09 +0000340 if(NOT ${SWIFTSHADER_EMIT_COVERAGE})
341 # Gc sections is used in combination with each functions being
342 # in its own section, to reduce the binary size.
343 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--gc-sections")
344 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400345
346 # Don't allow undefined symbols, unless it's a Sanitizer build.
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500347 if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400348 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
349 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500350 endif()
351endmacro()
352
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500353if(SWIFTSHADER_USE_GROUP_SOURCES)
Corentin Wallez0866b292015-12-09 13:49:40 -0500354 group_all_sources(src)
355endif()
356
357###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500358# Compile flags
359###########################################################
360
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100361# Flags for project code (non 3rd party)
362set(SWIFTSHADER_COMPILE_OPTIONS "")
Ben Clayton063fc022020-03-23 13:18:09 +0000363set(SWIFTSHADER_LINK_FLAGS "")
364set(SWIFTSHADER_LIBS "")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100365
Nicolas Capens6f422092015-12-23 15:12:45 -0500366macro(set_cpp_flag FLAG)
367 if(${ARGC} GREATER 1)
368 set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500369 else()
Nicolas Capens6f422092015-12-23 15:12:45 -0500370 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500371 endif()
372endmacro()
373
Ben Clayton48c8a182019-05-21 20:00:20 +0100374macro(set_linker_flag FLAG)
375 if(${ARGC} GREATER 1)
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400376 set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400377 set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100378 else()
379 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400380 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100381 endif()
382endmacro()
383
Corentin Wallez0866b292015-12-09 13:49:40 -0500384if(MSVC)
385 set_cpp_flag("/MP")
386 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400387 add_definitions(-D_SCL_SECURE_NO_WARNINGS)
Nicolas Capens4c9f04b2019-01-31 22:09:03 -0500388 add_definitions(-D_SBCS) # Single Byte Character Set (ASCII)
Ben Clayton30b6b592019-08-07 15:04:11 +0100389 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 -0400390
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400391 set_linker_flag("/DEBUG:FASTLINK" DEBUG)
392 set_linker_flag("/DEBUG:FASTLINK" RELWITHDEBINFO)
Nicolas Capensf554c542020-01-09 17:19:35 +0000393
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400394 # Disable specific warnings
395 # TODO: Not all of these should be disabled, but for now, we want a warning-free msvc build. Remove these one by one
396 # and fix the actual warnings in code.
397 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
398 "/wd4005" # 'identifier' : macro redefinition
399 "/wd4018" # 'expression' : signed/unsigned mismatch
Ben Clayton4d4a1902019-05-15 11:15:42 +0100400 "/wd4065" # switch statement contains 'default' but no 'case' labels
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400401 "/wd4141" # 'modifier' : used more than once
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400402 "/wd4244" # 'conversion' conversion from 'type1' to 'type2', possible loss of data
403 "/wd4267" # 'var' : conversion from 'size_t' to 'type', possible loss of data
404 "/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
405 "/wd4309" # 'conversion' : truncation of constant value
406 "/wd4624" # 'derived class' : destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted
407 "/wd4800" # 'type' : forcing value to bool 'true' or 'false' (performance warning)
408 "/wd4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
409 "/wd5030" # attribute 'attribute' is not recognized
410 "/wd5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
411 )
412
413 # Treat specific warnings as errors
414 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
415 "/we4018" # 'expression' : signed/unsigned mismatch
Antonio Maiorano23da0732019-05-14 22:32:16 -0400416 "/we4471" # 'enumeration': a forward declaration of an unscoped enumeration must have an underlying type (int assumed)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400417 "/we4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
418 "/we5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
419 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500420else()
Ben Claytona5f07632020-02-04 11:43:25 +0000421 # Explicitly enable these warnings.
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100422 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100423 "-Wall"
Ben Clayton8a983f72019-06-18 17:56:36 +0100424 "-Wreorder"
425 "-Wsign-compare"
426 "-Wmissing-braces"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100427 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500428
James Rumble69deca62021-07-01 11:39:34 +0100429 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
430 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
431 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
432 "-Wdeprecated-copy" # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
433 )
434 endif()
435 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100436 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton54709882020-04-16 10:40:08 +0100437 "-Wextra"
438 "-Wunreachable-code-loop-increment"
Ben Clayton8a983f72019-06-18 17:56:36 +0100439 "-Wunused-lambda-capture"
440 "-Wstring-conversion"
441 "-Wextra-semi"
442 "-Wignored-qualifiers"
James Rumble69deca62021-07-01 11:39:34 +0100443 "-Wdeprecated-copy" # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
Ben Claytona5f07632020-02-04 11:43:25 +0000444 )
445 endif()
446
Ben Clayton063fc022020-03-23 13:18:09 +0000447 if (SWIFTSHADER_EMIT_COVERAGE)
448 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
449 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "--coverage")
450 list(APPEND SWIFTSHADER_LIBS "gcov")
451 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
452 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fprofile-instr-generate" "-fcoverage-mapping")
453 list(APPEND SWIFTSHADER_LINK_FLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
454 else()
455 message(FATAL_ERROR "Coverage generation not supported for the ${CMAKE_CXX_COMPILER_ID} toolchain")
456 endif()
457 endif()
458
Nicolas Capensd2bdde22021-06-17 22:14:37 -0400459 # Disable pedantic warnings
Ben Claytona5f07632020-02-04 11:43:25 +0000460 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
461 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
462 "-Wno-ignored-attributes" # ignoring attributes on template argument 'X'
463 "-Wno-attributes" # 'X' attribute ignored
464 "-Wno-strict-aliasing" # dereferencing type-punned pointer will break strict-aliasing rules
465 "-Wno-comment" # multi-line comment
466 )
467 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
468 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
469 "-Wno-init-list-lifetime" # assignment from temporary initializer_list does not extend the lifetime of the underlying array
470 )
471 endif()
472 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
473 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
474 "-Wno-unneeded-internal-declaration" # function 'X' is not needed and will not be emitted
475 "-Wno-unused-private-field" # private field 'offset' is not used - TODO: Consider enabling this once Vulkan is further implemented.
476 "-Wno-comment" # multi-line comment
477 "-Wno-undefined-var-template" # instantiation of variable 'X' required here, but no definition is available
Ben Claytona7bc2b92020-03-26 11:24:49 +0000478 "-Wno-extra-semi" # extra ';' after member function definition
Ben Clayton54709882020-04-16 10:40:08 +0100479 "-Wno-unused-parameter" # unused parameter 'X'
Ben Claytona5f07632020-02-04 11:43:25 +0000480
Nicolas Capens67180a02019-06-17 15:27:03 -0400481 # Silence errors caused by unknown warnings when building with older
482 # versions of Clang. This demands checking that warnings added above
483 # are spelled correctly and work as intended!
484 "-Wno-unknown-warning-option"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100485 )
Nicolas Capens825d3442018-11-06 23:50:05 -0500486 endif()
487
Corentin Wallez0866b292015-12-09 13:49:40 -0500488 # Remove xor, and, or and friends from the list of keywords, they are used
489 # by Reactor
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100490 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
491 "-fno-operator-names"
492 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500493
Nicolas Capens499bb762018-06-29 13:30:57 -0400494 if(ARCH STREQUAL "x86")
Corentin Wallez0866b292015-12-09 13:49:40 -0500495 set_cpp_flag("-m32")
496 set_cpp_flag("-msse2")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500497 set_cpp_flag("-mfpmath=sse")
498 set_cpp_flag("-march=pentium4")
499 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500500 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400501 if(ARCH STREQUAL "x86_64")
Corentin Wallez0866b292015-12-09 13:49:40 -0500502 set_cpp_flag("-m64")
503 set_cpp_flag("-fPIC")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500504 set_cpp_flag("-march=x86-64")
505 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500506 endif()
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200507 if(ARCH STREQUAL "mipsel")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800508 set_cpp_flag("-EL")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200509 set_cpp_flag("-march=mips32r2")
510 set_cpp_flag("-fPIC")
511 set_cpp_flag("-mhard-float")
512 set_cpp_flag("-mfp32")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800513 set_cpp_flag("-mxgot")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200514 endif()
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100515 if(ARCH STREQUAL "mips64el")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800516 set_cpp_flag("-EL")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100517 set_cpp_flag("-march=mips64r2")
518 set_cpp_flag("-mabi=64")
519 set_cpp_flag("-fPIC")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800520 set_cpp_flag("-mxgot")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100521 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400522
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500523 if(SWIFTSHADER_LESS_DEBUG_INFO)
Paul Thomson09b50792019-10-17 12:55:56 +0100524 # Use -g1 to be able to get stack traces
525 set_cpp_flag("-g -g1" DEBUG)
526 set_cpp_flag("-g -g1" RELWITHDEBINFO)
527 else()
528 # Use -g3 to have even more debug info
529 set_cpp_flag("-g -g3" DEBUG)
530 set_cpp_flag("-g -g3" RELWITHDEBINFO)
531 endif()
532
Ben Clayton09a91e42019-02-05 17:58:38 +0000533 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
534 # Treated as an unused argument with clang
535 set_cpp_flag("-s" RELEASE)
536 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500537
538 # For distribution it is more important to be slim than super optimized
Alexis Hetu2c0546d2017-05-24 11:16:26 -0400539 set_cpp_flag("-Os" RELEASE)
540 set_cpp_flag("-Os" RELWITHDEBINFO)
Corentin Wallez0866b292015-12-09 13:49:40 -0500541
542 set_cpp_flag("-DNDEBUG" RELEASE)
543 set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
544 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELEASE)
545 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELWITHDEBINFO)
546
547 # Put each variable and function in its own section so that when linking
548 # with -gc-sections unused functions and variables are removed.
549 set_cpp_flag("-ffunction-sections" RELEASE)
550 set_cpp_flag("-fdata-sections" RELEASE)
551 set_cpp_flag("-fomit-frame-pointer" RELEASE)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400552
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500553 if(SWIFTSHADER_MSAN)
Nicolas Capens7a0ca4e2020-11-30 10:08:59 -0500554 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
555 message(FATAL_ERROR " \n"
556 " MemorySanitizer usage requires compiling with Clang.")
557 endif()
558
Nicolas Capens268fd732020-10-08 16:46:48 -0400559 if(NOT DEFINED ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH})
Nicolas Capens268fd732020-10-08 16:46:48 -0400560 message(FATAL_ERROR " \n"
561 " MemorySanitizer usage requires an instrumented build of libc++.\n"
562 " Set the SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH environment variable to the\n"
563 " build output path. See\n"
564 " https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc\n"
565 " for details on how to build an MSan instrumented libc++.")
566 endif()
567
Ben Claytondae97922019-05-17 12:09:31 +0100568 set_cpp_flag("-fsanitize=memory")
Ben Clayton48c8a182019-05-21 20:00:20 +0100569 set_linker_flag("-fsanitize=memory")
Nicolas Capens268fd732020-10-08 16:46:48 -0400570 set_cpp_flag("-stdlib=libc++")
571 set_linker_flag("-L$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
572 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include")
573 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include/c++/v1")
574 set_linker_flag("-Wl,-rpath,$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500575 elseif(SWIFTSHADER_ASAN)
Ben Claytondae97922019-05-17 12:09:31 +0100576 set_cpp_flag("-fsanitize=address")
Ben Clayton48c8a182019-05-21 20:00:20 +0100577 set_linker_flag("-fsanitize=address")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500578 elseif(SWIFTSHADER_TSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100579 set_cpp_flag("-fsanitize=thread")
Ben Clayton48c8a182019-05-21 20:00:20 +0100580 set_linker_flag("-fsanitize=thread")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500581 elseif(SWIFTSHADER_UBSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100582 set_cpp_flag("-fsanitize=undefined")
Ben Clayton48c8a182019-05-21 20:00:20 +0100583 set_linker_flag("-fsanitize=undefined")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400584 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500585endif()
586
Antonio Maiorano4b8b0782020-03-23 14:11:01 -0400587if(SWIFTSHADER_DCHECK_ALWAYS_ON)
588 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DDCHECK_ALWAYS_ON")
589endif()
590
Nicolas Capens8c13b2f2020-03-06 01:12:01 -0500591if(SWIFTSHADER_WARNINGS_AS_ERRORS)
592 if(MSVC)
593 set(WARNINGS_AS_ERRORS "/WX") # Treat all warnings as errors
594 else()
595 set(WARNINGS_AS_ERRORS "-Werror") # Treat all warnings as errors
596 endif()
597endif()
598
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500599# Enable Reactor Print() functionality in Debug/RelWithDebInfo builds or when explicitly enabled.
600if(CMAKE_BUILD_TYPE MATCHES "Deb")
601 set(REACTOR_ENABLE_PRINT TRUE)
602endif()
603
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400604if(REACTOR_EMIT_PRINT_LOCATION)
Antonio Maiorano415d1812020-02-11 16:22:55 -0500605 # This feature depends on REACTOR_EMIT_DEBUG_INFO and REACTOR_ENABLE_PRINT
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500606 set(REACTOR_EMIT_DEBUG_INFO TRUE)
607 set(REACTOR_ENABLE_PRINT TRUE)
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400608 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_PRINT_LOCATION")
609endif()
610
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500611if(REACTOR_EMIT_ASM_FILE)
612 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_ASM_FILE")
613endif()
614
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400615if(REACTOR_EMIT_DEBUG_INFO)
616 message(WARNING "REACTOR_EMIT_DEBUG_INFO is enabled. This will likely affect performance.")
617 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_DEBUG_INFO")
618endif()
619
Antonio Maiorano415d1812020-02-11 16:22:55 -0500620if(REACTOR_ENABLE_PRINT)
621 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_PRINT")
622endif()
623
Ben Clayton5375f472019-06-24 13:33:11 +0100624if(REACTOR_VERIFY_LLVM_IR)
625 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_LLVM_IR_VERIFICATION")
626endif()
627
Antonio Maiorano062dc182019-12-09 11:52:31 -0500628if(REACTOR_DEFAULT_OPT_LEVEL)
629 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DREACTOR_DEFAULT_OPT_LEVEL=${REACTOR_DEFAULT_OPT_LEVEL}")
630endif()
631
Ben Claytoncbb5a102020-10-03 11:15:47 +0100632if(DEFINED SWIFTSHADER_LOGGING_LEVEL)
633 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DSWIFTSHADER_LOGGING_LEVEL=${SWIFTSHADER_LOGGING_LEVEL}")
634endif()
635
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400636if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500637 add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
Nicolas Capens6f422092015-12-23 15:12:45 -0500638 set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
Corentin Wallez0866b292015-12-09 13:49:40 -0500639endif()
640
Antonio Maiorano61022762020-03-30 11:11:16 -0400641set(USE_EXCEPTIONS
642 ${REACTOR_EMIT_DEBUG_INFO} # boost::stacktrace uses exceptions
643)
644if(NOT MSVC)
645 if (${USE_EXCEPTIONS})
646 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fexceptions")
647 else()
648 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fno-exceptions")
649 endif()
650endif()
Antonio Maiorano9418b512020-04-08 23:18:13 -0400651unset(USE_EXCEPTIONS)
Antonio Maiorano61022762020-03-30 11:11:16 -0400652
Corentin Wallez0866b292015-12-09 13:49:40 -0500653###########################################################
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400654# libbacktrace and boost
655###########################################################
656if(REACTOR_EMIT_DEBUG_INFO)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400657 add_subdirectory(${THIRD_PARTY_DIR}/libbacktrace EXCLUDE_FROM_ALL)
658 add_subdirectory(${THIRD_PARTY_DIR}/boost EXCLUDE_FROM_ALL)
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400659endif()
660
661###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500662# LLVM
663###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400664add_subdirectory(${THIRD_PARTY_DIR}/llvm-${SWIFTSHADER_LLVM_VERSION} EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400665set_target_properties(llvm PROPERTIES FOLDER "third_party")
Ben Clayton8f71f732019-02-01 09:38:45 +0000666
Antonio Maiorano4bde1c32020-03-27 15:01:53 -0400667###########################################################
668# Subzero
669###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400670add_subdirectory(${THIRD_PARTY_DIR}/llvm-subzero EXCLUDE_FROM_ALL)
671add_subdirectory(${THIRD_PARTY_DIR}/subzero EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400672set_target_properties(llvm-subzero PROPERTIES FOLDER "third_party")
673set_target_properties(subzero PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500674
675###########################################################
676# marl
677###########################################################
678if(BUILD_MARL)
679 set(MARL_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400680 add_subdirectory(${THIRD_PARTY_DIR}/marl)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400681 set_target_properties(marl PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500682endif()
683
Ben Clayton377573c2020-04-03 20:36:40 +0100684if(MARL_THREAD_SAFETY_ANALYSIS_SUPPORTED)
685 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-Wthread-safety")
686endif()
687
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500688###########################################################
689# cppdap
690###########################################################
691if(SWIFTSHADER_BUILD_CPPDAP)
692 set(CPPDAP_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400693 add_subdirectory(${THIRD_PARTY_DIR}/cppdap)
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500694endif()
695
Antonio Maioranob02a7082020-03-30 21:55:20 -0400696###########################################################
697# astc-encoder
698###########################################################
699if(SWIFTSHADER_ENABLE_ASTC)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400700 add_subdirectory(${THIRD_PARTY_DIR}/astc-encoder)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400701 set_target_properties(astc-encoder PROPERTIES FOLDER "third_party")
Antonio Maioranob02a7082020-03-30 21:55:20 -0400702endif()
Nicolas Capens19291ef2017-01-09 13:35:14 -0500703
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500704###########################################################
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400705# gtest and gmock
706###########################################################
707if(SWIFTSHADER_BUILD_TESTS)
708 # For Win32, force gtest to match our CRT (shared)
709 set(gtest_force_shared_crt TRUE CACHE BOOL "" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400710 add_subdirectory(${THIRD_PARTY_DIR}/googletest EXCLUDE_FROM_ALL)
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400711 # gtest finds python, which picks python 2 first, if present.
712 # We need to undo this so that SPIR-V can later find python3.
713 unset(PYTHON_EXECUTABLE CACHE)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400714 set_target_properties(gmock PROPERTIES FOLDER "third_party")
715 set_target_properties(gmock_main PROPERTIES FOLDER "third_party")
716 set_target_properties(gtest PROPERTIES FOLDER "third_party")
717 set_target_properties(gtest_main PROPERTIES FOLDER "third_party")
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400718endif()
719
720###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500721# File Lists
722###########################################################
723
Corentin Wallez0866b292015-12-09 13:49:40 -0500724###########################################################
725# Append OS specific files to lists
726###########################################################
727
728if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500729 set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
730elseif(LINUX)
Nicolas Capens681d97b2016-05-17 16:02:32 -0400731 set(OS_LIBS dl pthread)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200732 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
733 list(APPEND OS_LIBS "${WAYLAND}")
734 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200735 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
736 list(APPEND OS_LIBS "${DIRECTFB}")
737 include_directories(${DIRECTFB_INCLUDE_DIR}/directfb)
738 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100739 if(SWIFTSHADER_BUILD_WSI_D2D)
740 list(APPEND OS_LIBS "${D2D}")
741 include_directories(${D2D_INCLUDE_DIR}/libdrm)
742 endif(SWIFTSHADER_BUILD_WSI_D2D)
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100743elseif(FUCHSIA)
744 set(OS_LIBS zircon)
Corentin Wallezcd0a4572015-12-10 15:59:28 -0500745elseif(APPLE)
746 find_library(COCOA_FRAMEWORK Cocoa)
747 find_library(QUARTZ_FRAMEWORK Quartz)
Alexis Hetud23cf632018-04-10 10:48:42 -0400748 find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
749 find_library(IOSURFACE_FRAMEWORK IOSurface)
Corentin Wallezcb586622020-03-27 17:38:29 +0100750 find_library(METAL_FRAMEWORK Metal)
751 set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}" "${METAL_FRAMEWORK}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500752endif()
753
754###########################################################
Nicolas Capens5a105bc2015-12-22 22:04:28 -0500755# SwiftShader Targets
Corentin Wallez0866b292015-12-09 13:49:40 -0500756###########################################################
757
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400758add_subdirectory(src/Reactor) # Add ReactorSubzero and ReactorLLVM targets
Nicolas Capense329f012020-03-13 14:54:21 +0000759
Ben Claytonb99bc1f2019-04-15 13:56:08 -0400760if(${REACTOR_BACKEND} STREQUAL "LLVM")
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500761 set(Reactor ReactorLLVM)
762elseif(${REACTOR_BACKEND} STREQUAL "Subzero")
763 set(Reactor ReactorSubzero)
764else()
765 message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM' or 'Subzero'")
766endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500767
Antonio Maiorano4ce6a882020-04-06 16:16:21 -0400768add_subdirectory(src/Common) # Add gl_common target
769add_subdirectory(src/Main) # Add gl_main target
770add_subdirectory(src/Shader) # Add gl_shader target
771add_subdirectory(src/Renderer) # Add gl_renderer target
772
773# Combine all gl_* targets into an interface target
774# along with other dependencies
775add_library(gl_swiftshader_core INTERFACE)
776target_link_libraries(gl_swiftshader_core INTERFACE
777 # Transitively depends on shader, main, core, Reactor,
778 # OS_LIBS and SWIFTSHADER_LIBS
779 gl_renderer
780)
781
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400782add_subdirectory(src/OpenGL/common EXCLUDE_FROM_ALL) # Add libGLESCommon target
783add_subdirectory(src/OpenGL/compiler EXCLUDE_FROM_ALL) # Add GLCompiler target
Nicolas Capens6f422092015-12-23 15:12:45 -0500784
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500785if(SWIFTSHADER_BUILD_EGL)
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400786 add_subdirectory(src/OpenGL/libEGL) # Add libEGL target
Corentin Wallez0866b292015-12-09 13:49:40 -0500787endif()
788
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500789if(SWIFTSHADER_BUILD_GLESv2)
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400790 add_subdirectory(src/OpenGL/libGLESv2) # Add libGLESv2 target
Corentin Wallez0866b292015-12-09 13:49:40 -0500791endif()
792
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500793if(SWIFTSHADER_BUILD_VULKAN)
Dan Sinclair6480d4e2019-03-11 10:48:19 -0400794 if (NOT TARGET SPIRV-Tools)
795 # This variable is also used by SPIRV-Tools to locate SPIRV-Headers
Ben Claytonafb4ebd2019-12-02 19:33:17 +0000796 set(SPIRV-Headers_SOURCE_DIR "${THIRD_PARTY_DIR}/SPIRV-Headers")
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400797 set(SPIRV_SKIP_TESTS TRUE CACHE BOOL "" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400798 add_subdirectory(${THIRD_PARTY_DIR}/SPIRV-Tools) # Add SPIRV-Tools target
Ben Clayton1e8486b2020-01-22 17:01:52 +0000799 endif()
Nicolas Capens4c9f04b2019-01-31 22:09:03 -0500800
Antonio Maiorano9418b512020-04-08 23:18:13 -0400801 # Add a vk_base interface library for shared vulkan build options.
802 # TODO: Create src/Base and make this a lib target, and move stuff from
803 # src/Vulkan into it that is needed by vk_pipeline, vk_device, and vk_wsi.
804 add_library(vk_base INTERFACE)
Ben Clayton4cdbb542020-04-14 22:51:50 +0100805
Antonio Maiorano9418b512020-04-08 23:18:13 -0400806 if(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER)
807 target_compile_definitions(vk_base INTERFACE "ENABLE_VK_DEBUGGER")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100808 endif()
Antonio Maiorano9418b512020-04-08 23:18:13 -0400809
Nicolas Capensd3545372019-08-09 13:59:18 -0400810 if(WIN32)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400811 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
Nicolas Capensd3545372019-08-09 13:59:18 -0400812 elseif(LINUX)
Ben Claytona9af8832019-08-14 13:09:43 +0100813 if(X11)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400814 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XLIB_KHR")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000815 endif()
Ben Claytona9af8832019-08-14 13:09:43 +0100816 if(XCB)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400817 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000818 endif()
Nicolas Caramellia681d122020-07-20 23:47:56 +0200819 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
820 if(WAYLAND)
821 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
822 endif()
823 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200824 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
825 if(DIRECTFB AND DIRECTFB_INCLUDE_DIR)
826 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DIRECTFB_EXT")
827 endif()
828 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100829 if(SWIFTSHADER_BUILD_WSI_D2D)
830 if(D2D)
831 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DISPLAY_KHR")
832 endif()
833 endif(SWIFTSHADER_BUILD_WSI_D2D)
Nicolas Capensd3545372019-08-09 13:59:18 -0400834 elseif(APPLE)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400835 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_MACOS_MVK")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100836 elseif(FUCHSIA)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400837 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_FUCHSIA")
Nicolas Capens29a98092019-04-03 14:35:10 -0400838 else()
839 message(FATAL_ERROR "Platform does not support Vulkan yet")
Nicolas Capensd3545372019-08-09 13:59:18 -0400840 endif()
841
Antonio Maiorano9418b512020-04-08 23:18:13 -0400842 add_subdirectory(src/System) # Add vk_system target
843 add_subdirectory(src/Pipeline) # Add vk_pipeline target
844 add_subdirectory(src/WSI) # Add vk_wsi target
845 add_subdirectory(src/Device) # Add vk_device target
846 add_subdirectory(src/Vulkan) # Add vk_swiftshader target
Ben Claytonac736122020-03-24 17:48:31 +0000847
Ben Clayton6ce626b2020-05-05 12:39:23 +0100848 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND # turbo-cov is only useful for clang coverage info
Ben Clayton6ce626b2020-05-05 12:39:23 +0100849 SWIFTSHADER_EMIT_COVERAGE)
Antonio Maiorano2430d662020-04-14 17:04:36 -0400850 add_subdirectory(${TESTS_DIR}/regres/cov/turbo-cov)
Ben Claytonac736122020-03-24 17:48:31 +0000851 endif()
852
Nicolas Capens29a98092019-04-03 14:35:10 -0400853endif()
Chris Forbes3d27f2e2018-09-26 09:24:39 -0700854
Antonio Maiorano4e397792020-07-27 15:14:52 -0400855if(SWIFTSHADER_BUILD_ANGLE)
856 add_subdirectory(${THIRD_PARTY_DIR}/angle)
857
858 # Make angle depend on vk_swiftshader so we can test SWANGLE
859 if (TARGET vk_swiftshader)
860 add_dependencies(angle vk_swiftshader)
861 endif()
862endif()
863
864
Corentin Wallez0866b292015-12-09 13:49:40 -0500865###########################################################
Nicolas Capens29a98092019-04-03 14:35:10 -0400866# Sample programs and tests
Corentin Wallez0866b292015-12-09 13:49:40 -0500867###########################################################
868
Antonio Maiorano79248ab2020-07-23 11:24:33 -0400869# TODO(b/161976310): Add support for building PowerVR on MacOS
870if(APPLE AND HAVE_PVR_SUBMODULE AND SWIFTSHADER_BUILD_PVR)
871 message(WARNING "Building PowerVR examples for SwiftShader is not yet supported on Apple platforms.")
872 set(SWIFTSHADER_BUILD_PVR FALSE)
873endif()
874
Nicolas Capens13943ba2020-03-17 22:36:24 -0400875if(HAVE_PVR_SUBMODULE AND SWIFTSHADER_BUILD_PVR)
Nicolas Capens51b28002020-01-30 16:41:00 -0500876 if(UNIX AND NOT APPLE)
877 set(PVR_WINDOW_SYSTEM XCB)
Nicolas Capens7e857092020-03-06 13:21:10 -0500878
879 # Set the RPATH of the next defined build targets to $ORIGIN,
880 # allowing them to load shared libraries from the execution directory.
881 set(CMAKE_BUILD_RPATH "$ORIGIN")
Nicolas Capens51b28002020-01-30 16:41:00 -0500882 endif()
883
Nicolas Capens13943ba2020-03-17 22:36:24 -0400884 set(PVR_BUILD_EXAMPLES TRUE CACHE BOOL "Build the PowerVR SDK Examples" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400885 add_subdirectory(${THIRD_PARTY_DIR}/PowerVR_Examples)
Nicolas Capens51b28002020-01-30 16:41:00 -0500886
Nicolas Capens51b28002020-01-30 16:41:00 -0500887 # Samples known to work well
888 set(PVR_VULKAN_TARGET_GOOD
889 VulkanBumpmap
Nicolas Capens3702e012020-03-30 09:08:47 -0400890 VulkanExampleUI
891 VulkanGaussianBlur
Nicolas Capens51b28002020-01-30 16:41:00 -0500892 VulkanGlass
893 VulkanGnomeHorde
894 VulkanHelloAPI
895 VulkanImageBasedLighting
Nicolas Capens3702e012020-03-30 09:08:47 -0400896 VulkanIntroducingPVRUtils
Nicolas Capens51b28002020-01-30 16:41:00 -0500897 VulkanMultiSampling
Nicolas Capens3702e012020-03-30 09:08:47 -0400898 VulkanNavigation2D
899 VulkanParticleSystem
Nicolas Capens51b28002020-01-30 16:41:00 -0500900 VulkanSkinning
901 )
902
Nicolas Capens3702e012020-03-30 09:08:47 -0400903 set(PVR_GLES_TARGET_GOOD
904 OpenGLESHelloAPI
905 OpenGLESIntroducingPVRUtils
906 OpenGLESNavigation2D
907 )
908
Nicolas Capens51b28002020-01-30 16:41:00 -0500909 set(PVR_VULKAN_TARGET_OTHER
910 VulkanDeferredShading
911 VulkanDeferredShadingPFX
Nicolas Capens51b28002020-01-30 16:41:00 -0500912 VulkanGameOfLife
Nicolas Capens51b28002020-01-30 16:41:00 -0500913 VulkanIBLMapsGenerator
914 VulkanIMGTextureFilterCubic
915 VulkanIntroducingPVRShell
Nicolas Capens51b28002020-01-30 16:41:00 -0500916 VulkanIntroducingPVRVk
917 VulkanIntroducingUIRenderer
918 VulkanMultithreading
Nicolas Capens51b28002020-01-30 16:41:00 -0500919 VulkanNavigation3D
Nicolas Capens51b28002020-01-30 16:41:00 -0500920 VulkanPostProcessing
921 VulkanPVRScopeExample
922 VulkanPVRScopeRemote
923 )
924
Nicolas Capens3702e012020-03-30 09:08:47 -0400925 set(PVR_GLES_TARGET_OTHER
926 OpenGLESDeferredShading
927 OpenGLESGaussianBlur
928 OpenGLESImageBasedLighting
929 OpenGLESIMGFramebufferDownsample
930 OpenGLESIMGTextureFilterCubic
931 OpenGLESIntroducingPVRCamera
932 OpenGLESIntroducingPVRShell
933 OpenGLESIntroducingUIRenderer
934 OpenGLESMultiviewVR
935 OpenGLESNavigation3D
936 OpenGLESOpenCLExample
937 OpenGLESParticleSystem
938 OpenGLESPostProcessing
939 OpenGLESPVRScopeExample
940 OpenGLESPVRScopeRemote
941 OpenGLESSkinning
942 )
943
Nicolas Capens51b28002020-01-30 16:41:00 -0500944 set(PVR_TARGET_OTHER
945 glslang
946 glslangValidator
947 glslang-default-resource-limits
948 OGLCompiler
949 OSDependent
950 OpenCLMatrixMultiplication
Nicolas Capens51b28002020-01-30 16:41:00 -0500951 pugixml
952 PVRAssets
953 PVRCamera
954 PVRCore
955 PVRPfx
956 PVRShell
957 PVRUtilsGles
958 PVRUtilsVk
959 PVRVk
960 SPIRV
961 spirv-remap
962 SPVRemapper
963 uninstall
964 )
965
966 set(PVR_VULKAN_TARGET
967 ${PVR_VULKAN_TARGET_GOOD}
968 ${PVR_VULKAN_TARGET_OTHER}
969 )
970
Nicolas Capens3702e012020-03-30 09:08:47 -0400971 set(PVR_GLES_TARGET
972 ${PVR_GLES_TARGET_GOOD}
973 ${PVR_GLES_TARGET_OTHER}
974 )
975
Nicolas Capens51b28002020-01-30 16:41:00 -0500976 foreach(pvr_target ${PVR_VULKAN_TARGET})
977 add_dependencies(${pvr_target} vk_swiftshader)
978 endforeach()
979
Nicolas Capens3702e012020-03-30 09:08:47 -0400980 foreach(pvr_target ${PVR_GLES_TARGET})
981 add_dependencies(${pvr_target} libGLESv2)
982 add_dependencies(${pvr_target} libEGL)
983 endforeach()
984
985 foreach(pvr_target ${PVR_VULKAN_TARGET_GOOD} ${PVR_GLES_TARGET_GOOD})
Nicolas Capens51b28002020-01-30 16:41:00 -0500986 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples)
987 endforeach()
988
Nicolas Capens3702e012020-03-30 09:08:47 -0400989 foreach(pvr_target ${PVR_TARGET_OTHER} ${PVR_VULKAN_TARGET_OTHER} ${PVR_GLES_TARGET_OTHER})
Nicolas Capens51b28002020-01-30 16:41:00 -0500990 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples/PowerVR-Build)
991 endforeach()
Antonio Maiorano4e397792020-07-27 15:14:52 -0400992
993 # Make angle target depend on PowerVR GL examples
994 if (TARGET angle)
995 foreach(pvr_target ${PVR_GLES_TARGET})
996 add_dependencies(angle ${pvr_target})
997 endforeach()
998 endif()
Corentin Wallezcb586622020-03-27 17:38:29 +0100999endif()
Nicolas Capensf324fe52020-06-05 16:10:07 -04001000
Antonio Maiorano9d35d542021-02-01 16:35:07 -05001001if(BUILD_VULKAN_WRAPPER)
1002 if (NOT TARGET glslang)
1003 add_subdirectory(${THIRD_PARTY_DIR}/glslang)
1004 endif()
1005 add_subdirectory(${TESTS_DIR}/VulkanWrapper) # Add VulkanWrapper target
1006endif()
1007
Nicolas Capensf324fe52020-06-05 16:10:07 -04001008if(SWIFTSHADER_BUILD_TESTS)
1009 add_subdirectory(${TESTS_DIR}/ReactorUnitTests) # Add ReactorUnitTests target
1010 add_subdirectory(${TESTS_DIR}/GLESUnitTests) # Add gles-unittests target
1011 add_subdirectory(${TESTS_DIR}/MathUnitTests) # Add math-unittests target
1012 add_subdirectory(${TESTS_DIR}/SystemUnitTests) # Add system-unittests target
1013endif()
1014
1015if(SWIFTSHADER_BUILD_BENCHMARKS)
1016 if (NOT TARGET benchmark::benchmark)
1017 set(BENCHMARK_ENABLE_TESTING FALSE CACHE BOOL FALSE FORCE)
1018 add_subdirectory(${THIRD_PARTY_DIR}/benchmark)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -04001019 set_target_properties(benchmark PROPERTIES FOLDER "third_party")
1020 set_target_properties(benchmark_main PROPERTIES FOLDER "third_party")
Nicolas Capensf324fe52020-06-05 16:10:07 -04001021 endif()
1022
1023 add_subdirectory(${TESTS_DIR}/ReactorBenchmarks) # Add ReactorBenchmarks target
1024 add_subdirectory(${TESTS_DIR}/SystemBenchmarks) # Add system-benchmarks target
1025 add_subdirectory(${TESTS_DIR}/VulkanBenchmarks) # Add VulkanBenchmarks target
1026endif()
1027
1028if(SWIFTSHADER_BUILD_TESTS AND SWIFTSHADER_BUILD_VULKAN)
1029 add_subdirectory(${TESTS_DIR}/VulkanUnitTests) # Add VulkanUnitTests target
1030endif()