blob: ec8544ca8f07355b70e860d8108e4db1bdd0b8d0 [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
Nicolas Capens1dfcdb02020-03-12 21:12:52 +000071set(CMAKE_MACOSX_RPATH TRUE)
Nicolas Capens007c6c52017-06-09 11:21:48 -040072
Nicolas Capensd7a21cc2018-09-11 13:09:28 -040073if ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQUAL ""))
74 message(WARNING "Visual Studio generators use the x86 host compiler by "
75 "default, even for 64-bit targets. This can result in linker "
76 "instability and out of memory errors. To use the 64-bit "
77 "host compiler, pass -Thost=x64 on the CMake command line.")
78endif()
79
Ben Clayton4901ffd2019-06-27 10:39:07 +010080# Use CCache if available
81find_program(CCACHE_FOUND ccache)
82if(CCACHE_FOUND)
83 message(STATUS "Using ccache")
84 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
85 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
Ben Clayton1e8486b2020-01-22 17:01:52 +000086endif()
Ben Clayton4901ffd2019-06-27 10:39:07 +010087
Corentin Wallez0866b292015-12-09 13:49:40 -050088###########################################################
Ben Claytona9af8832019-08-14 13:09:43 +010089# Host libraries
90###########################################################
91
92find_library(X11 X11)
93find_library(XCB xcb)
Nicolas Caramellia681d122020-07-20 23:47:56 +020094if(SWIFTSHADER_BUILD_WSI_WAYLAND)
95 find_library(WAYLAND wayland-client)
96endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +020097if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
98 find_library(DIRECTFB directfb)
99 find_path(DIRECTFB_INCLUDE_DIR directfb/directfb.h)
100endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100101if(SWIFTSHADER_BUILD_WSI_D2D)
102 find_library(D2D drm)
103 find_path(D2D_INCLUDE_DIR libdrm/drm.h)
104endif(SWIFTSHADER_BUILD_WSI_D2D)
Ben Claytona9af8832019-08-14 13:09:43 +0100105
106###########################################################
Nicolas Capens18b8d682017-07-25 15:31:45 -0400107# Options
108###########################################################
109
110if(NOT CMAKE_BUILD_TYPE)
111 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
Antonio Maiorano31038ea2020-04-15 16:47:00 -0400112 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400113endif()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400114
Ben Clayton5837d872020-01-20 16:23:36 +0000115function (option_if_not_defined name description default)
116 if(NOT DEFINED ${name})
117 option(${name} ${description} ${default})
118 endif()
119endfunction()
Nicolas Capens18b8d682017-07-25 15:31:45 -0400120
Ben Clayton9cc163c2020-01-20 16:26:36 +0000121function (set_if_not_defined name value)
122 if(NOT DEFINED ${name})
123 set(${name} ${value} PARENT_SCOPE)
124 endif()
125endfunction()
126
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000127option_if_not_defined(SWIFTSHADER_BUILD_EGL "Build the EGL library" TRUE)
128option_if_not_defined(SWIFTSHADER_BUILD_GLESv2 "Build the OpenGL ES 2 library" TRUE)
129option_if_not_defined(SWIFTSHADER_BUILD_GLES_CM "Build the OpenGL ES 1.1 library" TRUE)
130option_if_not_defined(SWIFTSHADER_BUILD_VULKAN "Build the Vulkan library" TRUE)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200131option_if_not_defined(SWIFTSHADER_BUILD_WSI_WAYLAND "Build the Wayland WSI support" FALSE)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200132option_if_not_defined(SWIFTSHADER_BUILD_WSI_DIRECTFB "Build the DirectFB WSI support" FALSE)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100133option_if_not_defined(SWIFTSHADER_BUILD_WSI_D2D "Build the Direct-to-Display WSI support" FALSE)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400134option_if_not_defined(SWIFTSHADER_BUILD_PVR "Build the PowerVR examples" TRUE)
135option_if_not_defined(SWIFTSHADER_GET_PVR "Check out the PowerVR submodule" FALSE)
Antonio Maiorano4e397792020-07-27 15:14:52 -0400136option_if_not_defined(SWIFTSHADER_BUILD_ANGLE "Build angle" FALSE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400137
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000138option_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 -0400139
Nicolas Capens45755df2020-03-30 12:42:40 -0400140option_if_not_defined(SWIFTSHADER_BUILD_TESTS "Build unit tests" TRUE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000141option_if_not_defined(SWIFTSHADER_BUILD_BENCHMARKS "Build benchmarks" FALSE)
Ben Clayton5837d872020-01-20 16:23:36 +0000142
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000143option_if_not_defined(SWIFTSHADER_MSAN "Build with memory sanitizer" FALSE)
144option_if_not_defined(SWIFTSHADER_ASAN "Build with address sanitizer" FALSE)
145option_if_not_defined(SWIFTSHADER_TSAN "Build with thread sanitizer" FALSE)
146option_if_not_defined(SWIFTSHADER_UBSAN "Build with undefined behavior sanitizer" FALSE)
Ben Clayton063fc022020-03-23 13:18:09 +0000147option_if_not_defined(SWIFTSHADER_EMIT_COVERAGE "Emit code coverage information" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000148option_if_not_defined(SWIFTSHADER_WARNINGS_AS_ERRORS "Treat all warnings as errors" TRUE)
149option_if_not_defined(SWIFTSHADER_DCHECK_ALWAYS_ON "Check validation macros even in release builds" FALSE)
150option_if_not_defined(REACTOR_EMIT_DEBUG_INFO "Emit debug info for JIT functions" FALSE)
151option_if_not_defined(REACTOR_EMIT_PRINT_LOCATION "Emit printing of location info for JIT functions" FALSE)
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500152option_if_not_defined(REACTOR_EMIT_ASM_FILE "Emit asm files for JIT functions" FALSE)
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000153option_if_not_defined(REACTOR_ENABLE_PRINT "Enable RR_PRINT macros" FALSE)
154option_if_not_defined(REACTOR_VERIFY_LLVM_IR "Check reactor-generated LLVM IR is valid even in release builds" FALSE)
155option_if_not_defined(SWIFTSHADER_LESS_DEBUG_INFO "Generate less debug info to reduce file size" FALSE)
156option_if_not_defined(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER "Enable Vulkan debugger support" FALSE)
157option_if_not_defined(SWIFTSHADER_ENABLE_ASTC "Enable ASTC compressed textures support" TRUE) # TODO(b/150130101)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400158
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500159set(BUILD_MARL ${SWIFTSHADER_BUILD_VULKAN})
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000160
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500161if(${SWIFTSHADER_BUILD_VULKAN} AND ${SWIFTSHADER_ENABLE_VULKAN_DEBUGGER})
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000162 set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP TRUE)
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000163else()
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000164 set_if_not_defined(SWIFTSHADER_BUILD_CPPDAP FALSE)
Ben Clayton5e4d55f2019-12-10 19:40:58 +0000165endif()
Ben Claytone693b622019-09-05 12:48:37 +0100166
Nicolas Capens5f8a16a2019-08-15 10:36:13 -0400167set(DEFAULT_REACTOR_BACKEND "LLVM")
Nicolas Capens3957b7f2018-10-15 12:54:41 -0400168set(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor")
Nicolas Capens18b8d682017-07-25 15:31:45 -0400169set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
170
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400171set(DEFAULT_SWIFTSHADER_LLVM_VERSION "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000172set(SWIFTSHADER_LLVM_VERSION ${DEFAULT_SWIFTSHADER_LLVM_VERSION} CACHE STRING "LLVM version to use")
Antonio Maiorano6a6ae442020-07-20 14:11:48 -0400173set_property(CACHE SWIFTSHADER_LLVM_VERSION PROPERTY STRINGS "10.0")
Ben Claytoncafff782020-03-26 11:18:05 +0000174
Antonio Maiorano062dc182019-12-09 11:52:31 -0500175# If defined, overrides the default optimization level of the current reactor backend.
176# Set to one of the rr::Optimization::Level enum values.
Antonio Maioranob17161a2020-11-23 11:17:22 -0500177set(REACTOR_DEFAULT_OPT_LEVEL "" CACHE STRING "Reactor default optimization level")
Antonio Maiorano062dc182019-12-09 11:52:31 -0500178set_property(CACHE REACTOR_DEFAULT_OPT_LEVEL PROPERTY STRINGS "None" "Less" "Default" "Aggressive")
179
Nicolas Capens4804ac82020-11-02 22:06:55 -0500180# Enable instrumentation of Reactor routines for MemorySanitizer builds (LLVM backend).
181# TODO(b/155148722): Remove when unconditionally instrumenting for all build systems.
182set(REACTOR_ENABLE_MEMORY_SANITIZER_INSTRUMENTATION TRUE)
183
Ben Claytoncbb5a102020-10-03 11:15:47 +0100184if(NOT DEFINED SWIFTSHADER_LOGGING_LEVEL)
185 set(SWIFTSHADER_LOGGING_LEVEL "Info" CACHE STRING "SwiftShader logging level")
186 set_property(CACHE SWIFTSHADER_LOGGING_LEVEL PROPERTY STRINGS "Verbose" "Debug" "Info" "Warn" "Error" "Fatal" "Disabled")
187endif()
188
Nicolas Capens18b8d682017-07-25 15:31:45 -0400189# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
190# it builds header files that could overwrite the orignal ones. Here we
191# want to include LLVM as a subdirectory and even though it wouldn't cause
192# the problem, if cmake . is called from the main dir, the condition that
Erwin Jansend46faeb2018-11-19 16:01:37 -0800193# LLVM checkes, "CMAKE_CURRENT_SOURCE_DIR == CMAKE_CURRENT_BINARY_DIR" will be true. So we
Nicolas Capens18b8d682017-07-25 15:31:45 -0400194# disallow it ourselves too to. In addition if there are remining CMakeFiles
195# and CMakeCache in the directory, cmake .. from a subdirectory will still
196# try to build from the main directory so we instruct users to delete these
197# files when they get the error.
Erwin Jansend46faeb2018-11-19 16:01:37 -0800198if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400199 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.")
200endif()
201
Nicolas Capens1dfcdb02020-03-12 21:12:52 +0000202set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
Nicolas Capens18b8d682017-07-25 15:31:45 -0400203
204###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400205# Directories
206###########################################################
207
Antonio Maiorano8772b422020-04-15 15:00:36 -0400208set(SWIFTSHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
209set(SOURCE_DIR ${SWIFTSHADER_DIR}/src)
210set(THIRD_PARTY_DIR ${SWIFTSHADER_DIR}/third_party)
211set(TESTS_DIR ${SWIFTSHADER_DIR}/tests)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400212
213###########################################################
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400214# Initialize submodules
215###########################################################
216
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400217function(InitSubmodule target submodule_dir)
218 if (NOT TARGET ${target})
219 if(NOT EXISTS ${submodule_dir}/.git)
Ben Clayton55890e12020-01-31 14:07:21 +0000220 message(WARNING "
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400221 Target ${target} from submodule ${submodule_dir} missing.
Ben Clayton55890e12020-01-31 14:07:21 +0000222 Running 'git submodule update --init' to download it:
223 ")
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400224
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400225 execute_process(COMMAND git -C ${SWIFTSHADER_DIR} submodule update --init ${submodule_dir})
Ben Clayton55890e12020-01-31 14:07:21 +0000226 endif()
Dan Sinclair6480d4e2019-03-11 10:48:19 -0400227 endif()
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400228endfunction()
229
230if (SWIFTSHADER_BUILD_TESTS)
231 InitSubmodule(gtest ${THIRD_PARTY_DIR}/googletest)
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400232endif()
233
Ben Clayton55890e12020-01-31 14:07:21 +0000234if(SWIFTSHADER_BUILD_BENCHMARKS)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400235 InitSubmodule(benchmark::benchmark ${THIRD_PARTY_DIR}/benchmark)
Nicolas Capensaca9fb22020-06-10 12:53:31 -0400236 InitSubmodule(glslang ${THIRD_PARTY_DIR}/glslang)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400237endif()
Ben Clayton55890e12020-01-31 14:07:21 +0000238
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400239if(REACTOR_EMIT_DEBUG_INFO)
240 InitSubmodule(libbacktrace ${THIRD_PARTY_DIR}/libbacktrace/src)
Ben Clayton755467c2019-03-23 11:57:02 +0000241endif()
242
Nicolas Capens13943ba2020-03-17 22:36:24 -0400243if(SWIFTSHADER_GET_PVR)
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400244 InitSubmodule(PVRCore ${THIRD_PARTY_DIR}/PowerVR_Examples)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400245 set(SWIFTSHADER_GET_PVR FALSE CACHE BOOL "Check out the PowerVR submodule" FORCE)
246endif()
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400247if(EXISTS ${THIRD_PARTY_DIR}/PowerVR_Examples/.git)
Nicolas Capens13943ba2020-03-17 22:36:24 -0400248 set(HAVE_PVR_SUBMODULE TRUE)
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500249endif()
250
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400251if(SWIFTSHADER_BUILD_CPPDAP)
252 InitSubmodule(json ${THIRD_PARTY_DIR}/json)
253 InitSubmodule(cppdap ${THIRD_PARTY_DIR}/cppdap)
254endif()
255
Antonio Maiorano4e397792020-07-27 15:14:52 -0400256if(SWIFTSHADER_BUILD_ANGLE)
257 InitSubmodule(angle ${THIRD_PARTY_DIR}/angle/angle)
258endif()
Antonio Maiorano1e2fba32020-04-15 16:02:58 -0400259
Nicolas Capensfe5861b2018-08-03 16:01:48 -0400260###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500261# Convenience macros
262###########################################################
263
264# Recursively calls source_group on the files of the directory
265# so that Visual Studio has the files in a folder tree
266macro(group_all_sources directory)
Antonio Maiorano8772b422020-04-15 15:00:36 -0400267 file(GLOB files RELATIVE ${SWIFTSHADER_DIR}/${directory} ${SWIFTSHADER_DIR}/${directory}/*)
Corentin Wallez0866b292015-12-09 13:49:40 -0500268 foreach(file ${files})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400269 if(IS_DIRECTORY ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500270 group_all_sources(${directory}/${file})
271 else()
272 string(REPLACE "/" "\\" groupname ${directory})
Antonio Maiorano8772b422020-04-15 15:00:36 -0400273 source_group(${groupname} FILES ${SWIFTSHADER_DIR}/${directory}/${file})
Corentin Wallez0866b292015-12-09 13:49:40 -0500274 endif()
275 endforeach()
276endmacro()
277
278# Takes target library and a directory where the export map is
279# and add the linker options so that only the API symbols are
280# exported.
Nicolas Capens499bb762018-06-29 13:30:57 -0400281macro(set_shared_library_export_map TARGET DIR)
Corentin Wallez0866b292015-12-09 13:49:40 -0500282 if(MSVC)
Nicolas Capens499bb762018-06-29 13:30:57 -0400283 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " /DEF:\"${DIR}/${TARGET}.def\"")
Ben Clayton8565e772019-06-10 11:58:37 +0100284 elseif(APPLE)
285 # The exported symbols list only exports the API functions and
286 # hides all the others.
287 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-exported_symbols_list ${DIR}/${TARGET}.exports")
288 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${TARGET}.exports;")
289 # Don't allow undefined symbols, unless it's a Sanitizer build.
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500290 if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
Ben Clayton8565e772019-06-10 11:58:37 +0100291 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-undefined,error")
292 endif()
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100293 elseif(LINUX OR FUCHSIA)
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200294 # NOTE: The Fuchsia linker script is needed to export the vk_icdInitializeConnectToServiceCallback
295 # entry point (a private implementation detail betwen the Fuchsia Vulkan loader and the ICD).
296 if ((FUCHSIA) AND ("${TARGET}" STREQUAL "vk_swiftshader"))
297 set(LINKER_VERSION_SCRIPT "fuchsia_vk_swiftshader.lds")
298 else()
299 set(LINKER_VERSION_SCRIPT "${TARGET}.lds")
300 endif()
301
Corentin Wallez0866b292015-12-09 13:49:40 -0500302 # The version script only exports the API functions and
Nicolas Capens499bb762018-06-29 13:30:57 -0400303 # hides all the others.
David 'Digit' Turner6e445042020-04-17 16:27:56 +0200304 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${DIR}/${LINKER_VERSION_SCRIPT}")
305 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${LINKER_VERSION_SCRIPT};")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400306
Nicolas Capense3621dc2020-02-25 22:45:42 -0500307 # -Bsymbolic binds symbol references to their global definitions within
308 # a shared object, thereby preventing symbol preemption.
James Price126720b2020-03-03 10:20:00 -0500309 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-Bsymbolic")
Nicolas Capens517a57f2018-06-29 13:30:57 -0400310
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100311 if(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200312 # MIPS supports sysv hash-style only.
313 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=sysv")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100314 elseif(LINUX)
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200315 # Both hash-style are needed, because we want both gold and
316 # GNU ld to be able to read our libraries.
317 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both")
318 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400319
Ben Clayton063fc022020-03-23 13:18:09 +0000320 if(NOT ${SWIFTSHADER_EMIT_COVERAGE})
321 # Gc sections is used in combination with each functions being
322 # in its own section, to reduce the binary size.
323 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--gc-sections")
324 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400325
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)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400328 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
329 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500330 endif()
331endmacro()
332
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500333if(SWIFTSHADER_USE_GROUP_SOURCES)
Corentin Wallez0866b292015-12-09 13:49:40 -0500334 group_all_sources(src)
335endif()
336
337###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500338# Compile flags
339###########################################################
340
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100341# Flags for project code (non 3rd party)
342set(SWIFTSHADER_COMPILE_OPTIONS "")
Ben Clayton063fc022020-03-23 13:18:09 +0000343set(SWIFTSHADER_LINK_FLAGS "")
344set(SWIFTSHADER_LIBS "")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100345
Nicolas Capens6f422092015-12-23 15:12:45 -0500346macro(set_cpp_flag FLAG)
347 if(${ARGC} GREATER 1)
348 set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500349 else()
Nicolas Capens6f422092015-12-23 15:12:45 -0500350 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500351 endif()
352endmacro()
353
Ben Clayton48c8a182019-05-21 20:00:20 +0100354macro(set_linker_flag FLAG)
355 if(${ARGC} GREATER 1)
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400356 set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400357 set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100358 else()
359 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Nicolas Capens268fd732020-10-08 16:46:48 -0400360 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
Ben Clayton48c8a182019-05-21 20:00:20 +0100361 endif()
362endmacro()
363
Corentin Wallez0866b292015-12-09 13:49:40 -0500364if(MSVC)
365 set_cpp_flag("/MP")
366 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400367 add_definitions(-D_SCL_SECURE_NO_WARNINGS)
Nicolas Capens4c9f04b2019-01-31 22:09:03 -0500368 add_definitions(-D_SBCS) # Single Byte Character Set (ASCII)
Ben Clayton30b6b592019-08-07 15:04:11 +0100369 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 -0400370
Nicolas Capens5d4c9812020-07-02 10:06:25 -0400371 set_linker_flag("/DEBUG:FASTLINK" DEBUG)
372 set_linker_flag("/DEBUG:FASTLINK" RELWITHDEBINFO)
Nicolas Capensf554c542020-01-09 17:19:35 +0000373
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400374 # Disable specific warnings
375 # TODO: Not all of these should be disabled, but for now, we want a warning-free msvc build. Remove these one by one
376 # and fix the actual warnings in code.
377 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
378 "/wd4005" # 'identifier' : macro redefinition
379 "/wd4018" # 'expression' : signed/unsigned mismatch
Ben Clayton4d4a1902019-05-15 11:15:42 +0100380 "/wd4065" # switch statement contains 'default' but no 'case' labels
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400381 "/wd4141" # 'modifier' : used more than once
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400382 "/wd4244" # 'conversion' conversion from 'type1' to 'type2', possible loss of data
383 "/wd4267" # 'var' : conversion from 'size_t' to 'type', possible loss of data
384 "/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
385 "/wd4309" # 'conversion' : truncation of constant value
386 "/wd4624" # 'derived class' : destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted
387 "/wd4800" # 'type' : forcing value to bool 'true' or 'false' (performance warning)
388 "/wd4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
389 "/wd5030" # attribute 'attribute' is not recognized
390 "/wd5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
391 )
392
393 # Treat specific warnings as errors
394 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
395 "/we4018" # 'expression' : signed/unsigned mismatch
Antonio Maiorano23da0732019-05-14 22:32:16 -0400396 "/we4471" # 'enumeration': a forward declaration of an unscoped enumeration must have an underlying type (int assumed)
Antonio Maiorano5bce1f42019-05-10 16:03:49 -0400397 "/we4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
398 "/we5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
399 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500400else()
Ben Claytona5f07632020-02-04 11:43:25 +0000401 # Explicitly enable these warnings.
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100402 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100403 "-Wall"
Ben Clayton8a983f72019-06-18 17:56:36 +0100404 "-Wreorder"
405 "-Wsign-compare"
406 "-Wmissing-braces"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100407 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500408
Ben Clayton5e828762019-04-24 19:16:52 +0100409 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100410 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
Ben Clayton54709882020-04-16 10:40:08 +0100411 "-Wextra"
412 "-Wunreachable-code-loop-increment"
Ben Clayton8a983f72019-06-18 17:56:36 +0100413 "-Wunused-lambda-capture"
414 "-Wstring-conversion"
415 "-Wextra-semi"
416 "-Wignored-qualifiers"
Ben Claytona5f07632020-02-04 11:43:25 +0000417 )
418 endif()
419
Ben Clayton063fc022020-03-23 13:18:09 +0000420 if (SWIFTSHADER_EMIT_COVERAGE)
421 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
422 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "--coverage")
423 list(APPEND SWIFTSHADER_LIBS "gcov")
424 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
425 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fprofile-instr-generate" "-fcoverage-mapping")
426 list(APPEND SWIFTSHADER_LINK_FLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
427 else()
428 message(FATAL_ERROR "Coverage generation not supported for the ${CMAKE_CXX_COMPILER_ID} toolchain")
429 endif()
430 endif()
431
Ben Claytona5f07632020-02-04 11:43:25 +0000432 # Disable pedanitc warnings
433 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
434 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
435 "-Wno-ignored-attributes" # ignoring attributes on template argument 'X'
436 "-Wno-attributes" # 'X' attribute ignored
437 "-Wno-strict-aliasing" # dereferencing type-punned pointer will break strict-aliasing rules
438 "-Wno-comment" # multi-line comment
439 )
440 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
441 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
442 "-Wno-init-list-lifetime" # assignment from temporary initializer_list does not extend the lifetime of the underlying array
443 )
444 endif()
445 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
446 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
447 "-Wno-unneeded-internal-declaration" # function 'X' is not needed and will not be emitted
448 "-Wno-unused-private-field" # private field 'offset' is not used - TODO: Consider enabling this once Vulkan is further implemented.
449 "-Wno-comment" # multi-line comment
450 "-Wno-undefined-var-template" # instantiation of variable 'X' required here, but no definition is available
Ben Claytona7bc2b92020-03-26 11:24:49 +0000451 "-Wno-extra-semi" # extra ';' after member function definition
Ben Clayton54709882020-04-16 10:40:08 +0100452 "-Wno-unused-parameter" # unused parameter 'X'
David 'Digit' Turner08090462020-04-17 15:53:21 +0200453 "-Wno-deprecated-copy" # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
Ben Claytona5f07632020-02-04 11:43:25 +0000454
Nicolas Capens67180a02019-06-17 15:27:03 -0400455 # Silence errors caused by unknown warnings when building with older
456 # versions of Clang. This demands checking that warnings added above
457 # are spelled correctly and work as intended!
458 "-Wno-unknown-warning-option"
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100459 )
Nicolas Capens825d3442018-11-06 23:50:05 -0500460 endif()
461
Corentin Wallez0866b292015-12-09 13:49:40 -0500462 # Remove xor, and, or and friends from the list of keywords, they are used
463 # by Reactor
Ben Clayton4ceb77d2019-04-24 12:09:59 +0100464 list(APPEND SWIFTSHADER_COMPILE_OPTIONS
465 "-fno-operator-names"
466 )
Corentin Wallez0866b292015-12-09 13:49:40 -0500467
Nicolas Capens499bb762018-06-29 13:30:57 -0400468 if(ARCH STREQUAL "x86")
Corentin Wallez0866b292015-12-09 13:49:40 -0500469 set_cpp_flag("-m32")
470 set_cpp_flag("-msse2")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500471 set_cpp_flag("-mfpmath=sse")
472 set_cpp_flag("-march=pentium4")
473 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500474 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400475 if(ARCH STREQUAL "x86_64")
Corentin Wallez0866b292015-12-09 13:49:40 -0500476 set_cpp_flag("-m64")
477 set_cpp_flag("-fPIC")
Nicolas Capens0424edc2018-01-03 14:06:30 -0500478 set_cpp_flag("-march=x86-64")
479 set_cpp_flag("-mtune=generic")
Corentin Wallez0866b292015-12-09 13:49:40 -0500480 endif()
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200481 if(ARCH STREQUAL "mipsel")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800482 set_cpp_flag("-EL")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200483 set_cpp_flag("-march=mips32r2")
484 set_cpp_flag("-fPIC")
485 set_cpp_flag("-mhard-float")
486 set_cpp_flag("-mfp32")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800487 set_cpp_flag("-mxgot")
Gordana Cmiljanovic082dfec2018-10-19 11:36:15 +0200488 endif()
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100489 if(ARCH STREQUAL "mips64el")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800490 set_cpp_flag("-EL")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100491 set_cpp_flag("-march=mips64r2")
492 set_cpp_flag("-mabi=64")
493 set_cpp_flag("-fPIC")
Jiaxun Yang55275c32020-02-09 14:52:42 +0800494 set_cpp_flag("-mxgot")
Gordana Cmiljanovic20622c02018-11-05 15:00:11 +0100495 endif()
Nicolas Capens499bb762018-06-29 13:30:57 -0400496
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500497 if(SWIFTSHADER_LESS_DEBUG_INFO)
Paul Thomson09b50792019-10-17 12:55:56 +0100498 # Use -g1 to be able to get stack traces
499 set_cpp_flag("-g -g1" DEBUG)
500 set_cpp_flag("-g -g1" RELWITHDEBINFO)
501 else()
502 # Use -g3 to have even more debug info
503 set_cpp_flag("-g -g3" DEBUG)
504 set_cpp_flag("-g -g3" RELWITHDEBINFO)
505 endif()
506
Ben Clayton09a91e42019-02-05 17:58:38 +0000507 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
508 # Treated as an unused argument with clang
509 set_cpp_flag("-s" RELEASE)
510 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500511
512 # For distribution it is more important to be slim than super optimized
Alexis Hetu2c0546d2017-05-24 11:16:26 -0400513 set_cpp_flag("-Os" RELEASE)
514 set_cpp_flag("-Os" RELWITHDEBINFO)
Corentin Wallez0866b292015-12-09 13:49:40 -0500515
516 set_cpp_flag("-DNDEBUG" RELEASE)
517 set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
518 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELEASE)
519 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELWITHDEBINFO)
520
521 # Put each variable and function in its own section so that when linking
522 # with -gc-sections unused functions and variables are removed.
523 set_cpp_flag("-ffunction-sections" RELEASE)
524 set_cpp_flag("-fdata-sections" RELEASE)
525 set_cpp_flag("-fomit-frame-pointer" RELEASE)
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400526
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500527 if(SWIFTSHADER_MSAN)
Nicolas Capens7a0ca4e2020-11-30 10:08:59 -0500528 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
529 message(FATAL_ERROR " \n"
530 " MemorySanitizer usage requires compiling with Clang.")
531 endif()
532
Nicolas Capens268fd732020-10-08 16:46:48 -0400533 if(NOT DEFINED ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH})
Nicolas Capens268fd732020-10-08 16:46:48 -0400534 message(FATAL_ERROR " \n"
535 " MemorySanitizer usage requires an instrumented build of libc++.\n"
536 " Set the SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH environment variable to the\n"
537 " build output path. See\n"
538 " https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc\n"
539 " for details on how to build an MSan instrumented libc++.")
540 endif()
541
Ben Claytondae97922019-05-17 12:09:31 +0100542 set_cpp_flag("-fsanitize=memory")
Ben Clayton48c8a182019-05-21 20:00:20 +0100543 set_linker_flag("-fsanitize=memory")
Nicolas Capens268fd732020-10-08 16:46:48 -0400544 set_cpp_flag("-stdlib=libc++")
545 set_linker_flag("-L$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
546 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include")
547 set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include/c++/v1")
548 set_linker_flag("-Wl,-rpath,$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500549 elseif(SWIFTSHADER_ASAN)
Ben Claytondae97922019-05-17 12:09:31 +0100550 set_cpp_flag("-fsanitize=address")
Ben Clayton48c8a182019-05-21 20:00:20 +0100551 set_linker_flag("-fsanitize=address")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500552 elseif(SWIFTSHADER_TSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100553 set_cpp_flag("-fsanitize=thread")
Ben Clayton48c8a182019-05-21 20:00:20 +0100554 set_linker_flag("-fsanitize=thread")
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500555 elseif(SWIFTSHADER_UBSAN)
Ben Claytondae97922019-05-17 12:09:31 +0100556 set_cpp_flag("-fsanitize=undefined")
Ben Clayton48c8a182019-05-21 20:00:20 +0100557 set_linker_flag("-fsanitize=undefined")
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400558 endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500559endif()
560
Antonio Maiorano4b8b0782020-03-23 14:11:01 -0400561if(SWIFTSHADER_DCHECK_ALWAYS_ON)
562 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DDCHECK_ALWAYS_ON")
563endif()
564
Nicolas Capens8c13b2f2020-03-06 01:12:01 -0500565if(SWIFTSHADER_WARNINGS_AS_ERRORS)
566 if(MSVC)
567 set(WARNINGS_AS_ERRORS "/WX") # Treat all warnings as errors
568 else()
569 set(WARNINGS_AS_ERRORS "-Werror") # Treat all warnings as errors
570 endif()
571endif()
572
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500573# Enable Reactor Print() functionality in Debug/RelWithDebInfo builds or when explicitly enabled.
574if(CMAKE_BUILD_TYPE MATCHES "Deb")
575 set(REACTOR_ENABLE_PRINT TRUE)
576endif()
577
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400578if(REACTOR_EMIT_PRINT_LOCATION)
Antonio Maiorano415d1812020-02-11 16:22:55 -0500579 # This feature depends on REACTOR_EMIT_DEBUG_INFO and REACTOR_ENABLE_PRINT
Nicolas Capens8dceadd2020-11-06 14:36:13 -0500580 set(REACTOR_EMIT_DEBUG_INFO TRUE)
581 set(REACTOR_ENABLE_PRINT TRUE)
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400582 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_PRINT_LOCATION")
583endif()
584
Antonio Maiorano6f6ca292020-11-27 15:40:15 -0500585if(REACTOR_EMIT_ASM_FILE)
586 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_ASM_FILE")
587endif()
588
Antonio Maioranof448d8e2019-04-26 16:19:16 -0400589if(REACTOR_EMIT_DEBUG_INFO)
590 message(WARNING "REACTOR_EMIT_DEBUG_INFO is enabled. This will likely affect performance.")
591 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_DEBUG_INFO")
592endif()
593
Antonio Maiorano415d1812020-02-11 16:22:55 -0500594if(REACTOR_ENABLE_PRINT)
595 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_PRINT")
596endif()
597
Ben Clayton5375f472019-06-24 13:33:11 +0100598if(REACTOR_VERIFY_LLVM_IR)
599 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_LLVM_IR_VERIFICATION")
600endif()
601
Antonio Maiorano062dc182019-12-09 11:52:31 -0500602if(REACTOR_DEFAULT_OPT_LEVEL)
603 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DREACTOR_DEFAULT_OPT_LEVEL=${REACTOR_DEFAULT_OPT_LEVEL}")
604endif()
605
Ben Claytoncbb5a102020-10-03 11:15:47 +0100606if(DEFINED SWIFTSHADER_LOGGING_LEVEL)
607 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DSWIFTSHADER_LOGGING_LEVEL=${SWIFTSHADER_LOGGING_LEVEL}")
608endif()
609
Nicolas Capensbf8fd5b2018-06-21 00:42:00 -0400610if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500611 add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
Nicolas Capens6f422092015-12-23 15:12:45 -0500612 set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
Corentin Wallez0866b292015-12-09 13:49:40 -0500613endif()
614
Antonio Maiorano61022762020-03-30 11:11:16 -0400615set(USE_EXCEPTIONS
616 ${REACTOR_EMIT_DEBUG_INFO} # boost::stacktrace uses exceptions
617)
618if(NOT MSVC)
619 if (${USE_EXCEPTIONS})
620 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fexceptions")
621 else()
622 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fno-exceptions")
623 endif()
624endif()
Antonio Maiorano9418b512020-04-08 23:18:13 -0400625unset(USE_EXCEPTIONS)
Antonio Maiorano61022762020-03-30 11:11:16 -0400626
Corentin Wallez0866b292015-12-09 13:49:40 -0500627###########################################################
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400628# libbacktrace and boost
629###########################################################
630if(REACTOR_EMIT_DEBUG_INFO)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400631 add_subdirectory(${THIRD_PARTY_DIR}/libbacktrace EXCLUDE_FROM_ALL)
632 add_subdirectory(${THIRD_PARTY_DIR}/boost EXCLUDE_FROM_ALL)
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400633endif()
634
635###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500636# LLVM
637###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400638add_subdirectory(${THIRD_PARTY_DIR}/llvm-${SWIFTSHADER_LLVM_VERSION} EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400639set_target_properties(llvm PROPERTIES FOLDER "third_party")
Ben Clayton8f71f732019-02-01 09:38:45 +0000640
Antonio Maiorano4bde1c32020-03-27 15:01:53 -0400641###########################################################
642# Subzero
643###########################################################
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400644add_subdirectory(${THIRD_PARTY_DIR}/llvm-subzero EXCLUDE_FROM_ALL)
645add_subdirectory(${THIRD_PARTY_DIR}/subzero EXCLUDE_FROM_ALL)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400646set_target_properties(llvm-subzero PROPERTIES FOLDER "third_party")
647set_target_properties(subzero PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500648
649###########################################################
650# marl
651###########################################################
652if(BUILD_MARL)
653 set(MARL_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400654 add_subdirectory(${THIRD_PARTY_DIR}/marl)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400655 set_target_properties(marl PROPERTIES FOLDER "third_party")
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500656endif()
657
Ben Clayton377573c2020-04-03 20:36:40 +0100658if(MARL_THREAD_SAFETY_ANALYSIS_SUPPORTED)
659 list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-Wthread-safety")
660endif()
661
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500662###########################################################
663# cppdap
664###########################################################
665if(SWIFTSHADER_BUILD_CPPDAP)
666 set(CPPDAP_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400667 add_subdirectory(${THIRD_PARTY_DIR}/cppdap)
Antonio Maiorano8bce0672020-02-28 13:13:45 -0500668endif()
669
Antonio Maioranob02a7082020-03-30 21:55:20 -0400670###########################################################
671# astc-encoder
672###########################################################
673if(SWIFTSHADER_ENABLE_ASTC)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400674 add_subdirectory(${THIRD_PARTY_DIR}/astc-encoder)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400675 set_target_properties(astc-encoder PROPERTIES FOLDER "third_party")
Antonio Maioranob02a7082020-03-30 21:55:20 -0400676endif()
Nicolas Capens19291ef2017-01-09 13:35:14 -0500677
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500678###########################################################
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400679# gtest and gmock
680###########################################################
681if(SWIFTSHADER_BUILD_TESTS)
682 # For Win32, force gtest to match our CRT (shared)
683 set(gtest_force_shared_crt TRUE CACHE BOOL "" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400684 add_subdirectory(${THIRD_PARTY_DIR}/googletest EXCLUDE_FROM_ALL)
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400685 # gtest finds python, which picks python 2 first, if present.
686 # We need to undo this so that SPIR-V can later find python3.
687 unset(PYTHON_EXECUTABLE CACHE)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400688 set_target_properties(gmock PROPERTIES FOLDER "third_party")
689 set_target_properties(gmock_main PROPERTIES FOLDER "third_party")
690 set_target_properties(gtest PROPERTIES FOLDER "third_party")
691 set_target_properties(gtest_main PROPERTIES FOLDER "third_party")
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400692endif()
693
694###########################################################
Corentin Wallez0866b292015-12-09 13:49:40 -0500695# File Lists
696###########################################################
697
Corentin Wallez0866b292015-12-09 13:49:40 -0500698###########################################################
699# Append OS specific files to lists
700###########################################################
701
702if(WIN32)
Corentin Wallez0866b292015-12-09 13:49:40 -0500703 set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
704elseif(LINUX)
Nicolas Capens681d97b2016-05-17 16:02:32 -0400705 set(OS_LIBS dl pthread)
Nicolas Caramellia681d122020-07-20 23:47:56 +0200706 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
707 list(APPEND OS_LIBS "${WAYLAND}")
708 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200709 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
710 list(APPEND OS_LIBS "${DIRECTFB}")
711 include_directories(${DIRECTFB_INCLUDE_DIR}/directfb)
712 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100713 if(SWIFTSHADER_BUILD_WSI_D2D)
714 list(APPEND OS_LIBS "${D2D}")
715 include_directories(${D2D_INCLUDE_DIR}/libdrm)
716 endif(SWIFTSHADER_BUILD_WSI_D2D)
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100717elseif(FUCHSIA)
718 set(OS_LIBS zircon)
Corentin Wallezcd0a4572015-12-10 15:59:28 -0500719elseif(APPLE)
720 find_library(COCOA_FRAMEWORK Cocoa)
721 find_library(QUARTZ_FRAMEWORK Quartz)
Alexis Hetud23cf632018-04-10 10:48:42 -0400722 find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
723 find_library(IOSURFACE_FRAMEWORK IOSurface)
Corentin Wallezcb586622020-03-27 17:38:29 +0100724 find_library(METAL_FRAMEWORK Metal)
725 set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}" "${METAL_FRAMEWORK}")
Corentin Wallez0866b292015-12-09 13:49:40 -0500726endif()
727
728###########################################################
Nicolas Capens5a105bc2015-12-22 22:04:28 -0500729# SwiftShader Targets
Corentin Wallez0866b292015-12-09 13:49:40 -0500730###########################################################
731
Antonio Maioranofa8f48d2020-03-30 16:41:48 -0400732add_subdirectory(src/Reactor) # Add ReactorSubzero and ReactorLLVM targets
Nicolas Capense329f012020-03-13 14:54:21 +0000733
Ben Claytonb99bc1f2019-04-15 13:56:08 -0400734if(${REACTOR_BACKEND} STREQUAL "LLVM")
Nicolas Capensf53adbd2017-01-06 12:47:46 -0500735 set(Reactor ReactorLLVM)
736elseif(${REACTOR_BACKEND} STREQUAL "Subzero")
737 set(Reactor ReactorSubzero)
738else()
739 message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM' or 'Subzero'")
740endif()
Corentin Wallez0866b292015-12-09 13:49:40 -0500741
Antonio Maiorano4ce6a882020-04-06 16:16:21 -0400742add_subdirectory(src/Common) # Add gl_common target
743add_subdirectory(src/Main) # Add gl_main target
744add_subdirectory(src/Shader) # Add gl_shader target
745add_subdirectory(src/Renderer) # Add gl_renderer target
746
747# Combine all gl_* targets into an interface target
748# along with other dependencies
749add_library(gl_swiftshader_core INTERFACE)
750target_link_libraries(gl_swiftshader_core INTERFACE
751 # Transitively depends on shader, main, core, Reactor,
752 # OS_LIBS and SWIFTSHADER_LIBS
753 gl_renderer
754)
755
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400756add_subdirectory(src/OpenGL/common EXCLUDE_FROM_ALL) # Add libGLESCommon target
757add_subdirectory(src/OpenGL/compiler EXCLUDE_FROM_ALL) # Add GLCompiler target
Nicolas Capens6f422092015-12-23 15:12:45 -0500758
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500759if(SWIFTSHADER_BUILD_EGL)
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400760 add_subdirectory(src/OpenGL/libEGL) # Add libEGL target
Corentin Wallez0866b292015-12-09 13:49:40 -0500761endif()
762
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500763if(SWIFTSHADER_BUILD_GLESv2)
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400764 add_subdirectory(src/OpenGL/libGLESv2) # Add libGLESv2 target
Corentin Wallez0866b292015-12-09 13:49:40 -0500765endif()
766
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500767if(SWIFTSHADER_BUILD_GLES_CM)
Antonio Maioranoa71aff22020-04-07 10:09:41 -0400768 add_subdirectory(src/OpenGL/libGLES_CM) # Add libGLES_CM target
Ben Clayton1e8486b2020-01-22 17:01:52 +0000769endif(SWIFTSHADER_BUILD_GLES_CM)
Corentin Wallez0866b292015-12-09 13:49:40 -0500770
Sean Risserf6d3cbb2020-01-08 14:44:53 -0500771if(SWIFTSHADER_BUILD_VULKAN)
Dan Sinclair6480d4e2019-03-11 10:48:19 -0400772 if (NOT TARGET SPIRV-Tools)
773 # This variable is also used by SPIRV-Tools to locate SPIRV-Headers
Ben Claytonafb4ebd2019-12-02 19:33:17 +0000774 set(SPIRV-Headers_SOURCE_DIR "${THIRD_PARTY_DIR}/SPIRV-Headers")
Antonio Maiorano8f02f582020-03-31 11:01:43 -0400775 set(SPIRV_SKIP_TESTS TRUE CACHE BOOL "" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400776 add_subdirectory(${THIRD_PARTY_DIR}/SPIRV-Tools) # Add SPIRV-Tools target
Ben Clayton1e8486b2020-01-22 17:01:52 +0000777 endif()
Nicolas Capens4c9f04b2019-01-31 22:09:03 -0500778
Antonio Maiorano9418b512020-04-08 23:18:13 -0400779 # Add a vk_base interface library for shared vulkan build options.
780 # TODO: Create src/Base and make this a lib target, and move stuff from
781 # src/Vulkan into it that is needed by vk_pipeline, vk_device, and vk_wsi.
782 add_library(vk_base INTERFACE)
Ben Clayton4cdbb542020-04-14 22:51:50 +0100783
Antonio Maiorano9418b512020-04-08 23:18:13 -0400784 if(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER)
785 target_compile_definitions(vk_base INTERFACE "ENABLE_VK_DEBUGGER")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100786 endif()
Antonio Maiorano9418b512020-04-08 23:18:13 -0400787
Nicolas Capensd3545372019-08-09 13:59:18 -0400788 if(WIN32)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400789 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
Nicolas Capensd3545372019-08-09 13:59:18 -0400790 elseif(LINUX)
Ben Claytona9af8832019-08-14 13:09:43 +0100791 if(X11)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400792 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XLIB_KHR")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000793 endif()
Ben Claytona9af8832019-08-14 13:09:43 +0100794 if(XCB)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400795 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
Ben Clayton1e8486b2020-01-22 17:01:52 +0000796 endif()
Nicolas Caramellia681d122020-07-20 23:47:56 +0200797 if(SWIFTSHADER_BUILD_WSI_WAYLAND)
798 if(WAYLAND)
799 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
800 endif()
801 endif(SWIFTSHADER_BUILD_WSI_WAYLAND)
Nicolas Caramelli08596c42020-08-01 07:55:00 +0200802 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
803 if(DIRECTFB AND DIRECTFB_INCLUDE_DIR)
804 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DIRECTFB_EXT")
805 endif()
806 endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
Nicolas Caramelli937395c2021-01-06 21:00:18 +0100807 if(SWIFTSHADER_BUILD_WSI_D2D)
808 if(D2D)
809 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DISPLAY_KHR")
810 endif()
811 endif(SWIFTSHADER_BUILD_WSI_D2D)
Nicolas Capensd3545372019-08-09 13:59:18 -0400812 elseif(APPLE)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400813 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_MACOS_MVK")
David 'Digit' Turnerd3717932019-11-19 17:54:00 +0100814 elseif(FUCHSIA)
Antonio Maiorano9418b512020-04-08 23:18:13 -0400815 target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_FUCHSIA")
Nicolas Capens29a98092019-04-03 14:35:10 -0400816 else()
817 message(FATAL_ERROR "Platform does not support Vulkan yet")
Nicolas Capensd3545372019-08-09 13:59:18 -0400818 endif()
819
Antonio Maiorano9418b512020-04-08 23:18:13 -0400820 add_subdirectory(src/System) # Add vk_system target
821 add_subdirectory(src/Pipeline) # Add vk_pipeline target
822 add_subdirectory(src/WSI) # Add vk_wsi target
823 add_subdirectory(src/Device) # Add vk_device target
824 add_subdirectory(src/Vulkan) # Add vk_swiftshader target
Ben Claytonac736122020-03-24 17:48:31 +0000825
Ben Clayton6ce626b2020-05-05 12:39:23 +0100826 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND # turbo-cov is only useful for clang coverage info
Ben Clayton6ce626b2020-05-05 12:39:23 +0100827 SWIFTSHADER_EMIT_COVERAGE)
Antonio Maiorano2430d662020-04-14 17:04:36 -0400828 add_subdirectory(${TESTS_DIR}/regres/cov/turbo-cov)
Ben Claytonac736122020-03-24 17:48:31 +0000829 endif()
830
Nicolas Capens29a98092019-04-03 14:35:10 -0400831endif()
Chris Forbes3d27f2e2018-09-26 09:24:39 -0700832
Antonio Maiorano4e397792020-07-27 15:14:52 -0400833if(SWIFTSHADER_BUILD_ANGLE)
834 add_subdirectory(${THIRD_PARTY_DIR}/angle)
835
836 # Make angle depend on vk_swiftshader so we can test SWANGLE
837 if (TARGET vk_swiftshader)
838 add_dependencies(angle vk_swiftshader)
839 endif()
840endif()
841
842
Corentin Wallez0866b292015-12-09 13:49:40 -0500843###########################################################
Nicolas Capens29a98092019-04-03 14:35:10 -0400844# Sample programs and tests
Corentin Wallez0866b292015-12-09 13:49:40 -0500845###########################################################
846
Antonio Maiorano79248ab2020-07-23 11:24:33 -0400847# TODO(b/161976310): Add support for building PowerVR on MacOS
848if(APPLE AND HAVE_PVR_SUBMODULE AND SWIFTSHADER_BUILD_PVR)
849 message(WARNING "Building PowerVR examples for SwiftShader is not yet supported on Apple platforms.")
850 set(SWIFTSHADER_BUILD_PVR FALSE)
851endif()
852
Nicolas Capens13943ba2020-03-17 22:36:24 -0400853if(HAVE_PVR_SUBMODULE AND SWIFTSHADER_BUILD_PVR)
Nicolas Capens51b28002020-01-30 16:41:00 -0500854 if(UNIX AND NOT APPLE)
855 set(PVR_WINDOW_SYSTEM XCB)
Nicolas Capens7e857092020-03-06 13:21:10 -0500856
857 # Set the RPATH of the next defined build targets to $ORIGIN,
858 # allowing them to load shared libraries from the execution directory.
859 set(CMAKE_BUILD_RPATH "$ORIGIN")
Nicolas Capens51b28002020-01-30 16:41:00 -0500860 endif()
861
Nicolas Capens13943ba2020-03-17 22:36:24 -0400862 set(PVR_BUILD_EXAMPLES TRUE CACHE BOOL "Build the PowerVR SDK Examples" FORCE)
Antonio Maioranoda4315d2020-04-15 13:49:56 -0400863 add_subdirectory(${THIRD_PARTY_DIR}/PowerVR_Examples)
Nicolas Capens51b28002020-01-30 16:41:00 -0500864
Nicolas Capens51b28002020-01-30 16:41:00 -0500865 # Samples known to work well
866 set(PVR_VULKAN_TARGET_GOOD
867 VulkanBumpmap
Nicolas Capens3702e012020-03-30 09:08:47 -0400868 VulkanExampleUI
869 VulkanGaussianBlur
Nicolas Capens51b28002020-01-30 16:41:00 -0500870 VulkanGlass
871 VulkanGnomeHorde
872 VulkanHelloAPI
873 VulkanImageBasedLighting
Nicolas Capens3702e012020-03-30 09:08:47 -0400874 VulkanIntroducingPVRUtils
Nicolas Capens51b28002020-01-30 16:41:00 -0500875 VulkanMultiSampling
Nicolas Capens3702e012020-03-30 09:08:47 -0400876 VulkanNavigation2D
877 VulkanParticleSystem
Nicolas Capens51b28002020-01-30 16:41:00 -0500878 VulkanSkinning
879 )
880
Nicolas Capens3702e012020-03-30 09:08:47 -0400881 set(PVR_GLES_TARGET_GOOD
882 OpenGLESHelloAPI
883 OpenGLESIntroducingPVRUtils
884 OpenGLESNavigation2D
885 )
886
Nicolas Capens51b28002020-01-30 16:41:00 -0500887 set(PVR_VULKAN_TARGET_OTHER
888 VulkanDeferredShading
889 VulkanDeferredShadingPFX
Nicolas Capens51b28002020-01-30 16:41:00 -0500890 VulkanGameOfLife
Nicolas Capens51b28002020-01-30 16:41:00 -0500891 VulkanIBLMapsGenerator
892 VulkanIMGTextureFilterCubic
893 VulkanIntroducingPVRShell
Nicolas Capens51b28002020-01-30 16:41:00 -0500894 VulkanIntroducingPVRVk
895 VulkanIntroducingUIRenderer
896 VulkanMultithreading
Nicolas Capens51b28002020-01-30 16:41:00 -0500897 VulkanNavigation3D
Nicolas Capens51b28002020-01-30 16:41:00 -0500898 VulkanPostProcessing
899 VulkanPVRScopeExample
900 VulkanPVRScopeRemote
901 )
902
Nicolas Capens3702e012020-03-30 09:08:47 -0400903 set(PVR_GLES_TARGET_OTHER
904 OpenGLESDeferredShading
905 OpenGLESGaussianBlur
906 OpenGLESImageBasedLighting
907 OpenGLESIMGFramebufferDownsample
908 OpenGLESIMGTextureFilterCubic
909 OpenGLESIntroducingPVRCamera
910 OpenGLESIntroducingPVRShell
911 OpenGLESIntroducingUIRenderer
912 OpenGLESMultiviewVR
913 OpenGLESNavigation3D
914 OpenGLESOpenCLExample
915 OpenGLESParticleSystem
916 OpenGLESPostProcessing
917 OpenGLESPVRScopeExample
918 OpenGLESPVRScopeRemote
919 OpenGLESSkinning
920 )
921
Nicolas Capens51b28002020-01-30 16:41:00 -0500922 set(PVR_TARGET_OTHER
923 glslang
924 glslangValidator
925 glslang-default-resource-limits
926 OGLCompiler
927 OSDependent
928 OpenCLMatrixMultiplication
Nicolas Capens51b28002020-01-30 16:41:00 -0500929 pugixml
930 PVRAssets
931 PVRCamera
932 PVRCore
933 PVRPfx
934 PVRShell
935 PVRUtilsGles
936 PVRUtilsVk
937 PVRVk
938 SPIRV
939 spirv-remap
940 SPVRemapper
941 uninstall
942 )
943
944 set(PVR_VULKAN_TARGET
945 ${PVR_VULKAN_TARGET_GOOD}
946 ${PVR_VULKAN_TARGET_OTHER}
947 )
948
Nicolas Capens3702e012020-03-30 09:08:47 -0400949 set(PVR_GLES_TARGET
950 ${PVR_GLES_TARGET_GOOD}
951 ${PVR_GLES_TARGET_OTHER}
952 )
953
Nicolas Capens51b28002020-01-30 16:41:00 -0500954 foreach(pvr_target ${PVR_VULKAN_TARGET})
955 add_dependencies(${pvr_target} vk_swiftshader)
956 endforeach()
957
Nicolas Capens3702e012020-03-30 09:08:47 -0400958 foreach(pvr_target ${PVR_GLES_TARGET})
959 add_dependencies(${pvr_target} libGLESv2)
960 add_dependencies(${pvr_target} libEGL)
961 endforeach()
962
963 foreach(pvr_target ${PVR_VULKAN_TARGET_GOOD} ${PVR_GLES_TARGET_GOOD})
Nicolas Capens51b28002020-01-30 16:41:00 -0500964 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples)
965 endforeach()
966
Nicolas Capens3702e012020-03-30 09:08:47 -0400967 foreach(pvr_target ${PVR_TARGET_OTHER} ${PVR_VULKAN_TARGET_OTHER} ${PVR_GLES_TARGET_OTHER})
Nicolas Capens51b28002020-01-30 16:41:00 -0500968 set_target_properties(${pvr_target} PROPERTIES FOLDER Samples/PowerVR-Build)
969 endforeach()
Antonio Maiorano4e397792020-07-27 15:14:52 -0400970
971 # Make angle target depend on PowerVR GL examples
972 if (TARGET angle)
973 foreach(pvr_target ${PVR_GLES_TARGET})
974 add_dependencies(angle ${pvr_target})
975 endforeach()
976 endif()
Corentin Wallezcb586622020-03-27 17:38:29 +0100977endif()
Nicolas Capensf324fe52020-06-05 16:10:07 -0400978
979if(SWIFTSHADER_BUILD_TESTS)
980 add_subdirectory(${TESTS_DIR}/ReactorUnitTests) # Add ReactorUnitTests target
981 add_subdirectory(${TESTS_DIR}/GLESUnitTests) # Add gles-unittests target
982 add_subdirectory(${TESTS_DIR}/MathUnitTests) # Add math-unittests target
983 add_subdirectory(${TESTS_DIR}/SystemUnitTests) # Add system-unittests target
984endif()
985
986if(SWIFTSHADER_BUILD_BENCHMARKS)
Antonio Maiorano86424672021-01-18 16:39:49 -0500987 if (NOT TARGET glslang)
988 add_subdirectory(${THIRD_PARTY_DIR}/glslang)
989 endif()
990 add_subdirectory(${TESTS_DIR}/VulkanWrapper) # Add VulkanWrapper target
991
Nicolas Capensf324fe52020-06-05 16:10:07 -0400992 if (NOT TARGET benchmark::benchmark)
993 set(BENCHMARK_ENABLE_TESTING FALSE CACHE BOOL FALSE FORCE)
994 add_subdirectory(${THIRD_PARTY_DIR}/benchmark)
Antonio Maiorano0f14b7a2020-09-11 10:02:16 -0400995 set_target_properties(benchmark PROPERTIES FOLDER "third_party")
996 set_target_properties(benchmark_main PROPERTIES FOLDER "third_party")
Nicolas Capensf324fe52020-06-05 16:10:07 -0400997 endif()
998
999 add_subdirectory(${TESTS_DIR}/ReactorBenchmarks) # Add ReactorBenchmarks target
1000 add_subdirectory(${TESTS_DIR}/SystemBenchmarks) # Add system-benchmarks target
1001 add_subdirectory(${TESTS_DIR}/VulkanBenchmarks) # Add VulkanBenchmarks target
1002endif()
1003
1004if(SWIFTSHADER_BUILD_TESTS AND SWIFTSHADER_BUILD_VULKAN)
1005 add_subdirectory(${TESTS_DIR}/VulkanUnitTests) # Add VulkanUnitTests target
1006endif()