xref: /aosp_15_r20/external/swiftshader/CMakeLists.txt (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker#
3*03ce13f7SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker#
7*03ce13f7SAndroid Build Coastguard Worker#    http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker#
9*03ce13f7SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker# limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker
15*03ce13f7SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.13)
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Workerproject(SwiftShader C CXX ASM)
18*03ce13f7SAndroid Build Coastguard Worker
19*03ce13f7SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 17)
20*03ce13f7SAndroid Build Coastguard Workerset(CXX_STANDARD_REQUIRED ON)
21*03ce13f7SAndroid Build Coastguard Worker# MSVC doesn't define __cplusplus by default
22*03ce13f7SAndroid Build Coastguard Workerif(MSVC)
23*03ce13f7SAndroid Build Coastguard Worker    string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
24*03ce13f7SAndroid Build Coastguard Workerendif()
25*03ce13f7SAndroid Build Coastguard Worker
26*03ce13f7SAndroid Build Coastguard Worker###########################################################
27*03ce13f7SAndroid Build Coastguard Worker# Detect system
28*03ce13f7SAndroid Build Coastguard Worker###########################################################
29*03ce13f7SAndroid Build Coastguard Worker
30*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_NAME MATCHES "Linux")
31*03ce13f7SAndroid Build Coastguard Worker    set(LINUX TRUE)
32*03ce13f7SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_NAME MATCHES "Android")
33*03ce13f7SAndroid Build Coastguard Worker    set(ANDROID TRUE)
34*03ce13f7SAndroid Build Coastguard Worker    set(CMAKE_CXX_FLAGS "-DANDROID_NDK_BUILD")
35*03ce13f7SAndroid Build Coastguard Workerelseif(WIN32)
36*03ce13f7SAndroid Build Coastguard Workerelseif(APPLE)
37*03ce13f7SAndroid Build Coastguard Workerelseif(FUCHSIA)
38*03ce13f7SAndroid Build Coastguard Worker    # NOTE: Building for Fuchsia requires a Fuchsia CMake-based SDK.
39*03ce13f7SAndroid Build Coastguard Worker    # See https://fuchsia-review.googlesource.com/c/fuchsia/+/379673
40*03ce13f7SAndroid Build Coastguard Worker    find_package(FuchsiaLibraries)
41*03ce13f7SAndroid Build Coastguard Workerelse()
42*03ce13f7SAndroid Build Coastguard Worker    message(FATAL_ERROR "Platform is not supported")
43*03ce13f7SAndroid Build Coastguard Workerendif()
44*03ce13f7SAndroid Build Coastguard Worker
45*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch")
46*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
47*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "aarch64")
48*03ce13f7SAndroid Build Coastguard Worker    else()
49*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "arm")
50*03ce13f7SAndroid Build Coastguard Worker    endif()
51*03ce13f7SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips.*")
52*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
53*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "mips64el")
54*03ce13f7SAndroid Build Coastguard Worker    else()
55*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "mipsel")
56*03ce13f7SAndroid Build Coastguard Worker    endif()
57*03ce13f7SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc.*")
58*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
59*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "ppc64le")
60*03ce13f7SAndroid Build Coastguard Worker    else()
61*03ce13f7SAndroid Build Coastguard Worker        message(FATAL_ERROR "Architecture is not supported")
62*03ce13f7SAndroid Build Coastguard Worker    endif()
63*03ce13f7SAndroid Build Coastguard Workerelse()
64*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
65*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86_64")
66*03ce13f7SAndroid Build Coastguard Worker    else()
67*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86")
68*03ce13f7SAndroid Build Coastguard Worker    endif()
69*03ce13f7SAndroid Build Coastguard Workerendif()
70*03ce13f7SAndroid Build Coastguard Worker
71*03ce13f7SAndroid Build Coastguard Worker# Cross compiling on macOS. The cross compiling architecture should override
72*03ce13f7SAndroid Build Coastguard Worker# auto-detected system architecture settings.
73*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_OSX_ARCHITECTURES)
74*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
75*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "aarch64")
76*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
77*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86_64")
78*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386")
79*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86")
80*03ce13f7SAndroid Build Coastguard Worker    else()
81*03ce13f7SAndroid Build Coastguard Worker        message(FATAL_ERROR "Architecture ${CMAKE_OSX_ARCHITECTURES} is not "
82*03ce13f7SAndroid Build Coastguard Worker                            "supported. Only one architecture (arm64, x86_64 "
83*03ce13f7SAndroid Build Coastguard Worker                            "or i386) could be specified at build time.")
84*03ce13f7SAndroid Build Coastguard Worker    endif()
85*03ce13f7SAndroid Build Coastguard Workerendif()
86*03ce13f7SAndroid Build Coastguard Worker
87*03ce13f7SAndroid Build Coastguard Worker# Cross compiling with `cmake -A <arch>`.
88*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_GENERATOR_PLATFORM)
89*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_GENERATOR_PLATFORM MATCHES "^(Win32|win32|X86|x86)$")
90*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86")
91*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^(Win64|win64|X64|x64)$")
92*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "x86_64")
93*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^(ARM64|Arm64|arm64)$")
94*03ce13f7SAndroid Build Coastguard Worker        set(ARCH "aarch64")
95*03ce13f7SAndroid Build Coastguard Worker    endif()
96*03ce13f7SAndroid Build Coastguard Workerendif()
97*03ce13f7SAndroid Build Coastguard Worker
98*03ce13f7SAndroid Build Coastguard Workerset(CMAKE_MACOSX_RPATH TRUE)
99*03ce13f7SAndroid Build Coastguard Worker
100*03ce13f7SAndroid Build Coastguard Workerif ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQUAL ""))
101*03ce13f7SAndroid Build Coastguard Worker  message(WARNING "Visual Studio generators use the x86 host compiler by "
102*03ce13f7SAndroid Build Coastguard Worker                  "default, even for 64-bit targets. This can result in linker "
103*03ce13f7SAndroid Build Coastguard Worker                  "instability and out of memory errors. To use the 64-bit "
104*03ce13f7SAndroid Build Coastguard Worker                  "host compiler, pass -Thost=x64 on the CMake command line.")
105*03ce13f7SAndroid Build Coastguard Workerendif()
106*03ce13f7SAndroid Build Coastguard Worker
107*03ce13f7SAndroid Build Coastguard Worker# Use CCache if available
108*03ce13f7SAndroid Build Coastguard Workerfind_program(CCACHE_FOUND ccache)
109*03ce13f7SAndroid Build Coastguard Workerif(CCACHE_FOUND)
110*03ce13f7SAndroid Build Coastguard Worker    message(STATUS "Using ccache")
111*03ce13f7SAndroid Build Coastguard Worker    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
112*03ce13f7SAndroid Build Coastguard Worker    set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
113*03ce13f7SAndroid Build Coastguard Workerendif()
114*03ce13f7SAndroid Build Coastguard Worker
115*03ce13f7SAndroid Build Coastguard Worker###########################################################
116*03ce13f7SAndroid Build Coastguard Worker# Install Gerrit commit hook
117*03ce13f7SAndroid Build Coastguard Worker###########################################################
118*03ce13f7SAndroid Build Coastguard Worker
119*03ce13f7SAndroid Build Coastguard Workerif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git AND NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg)
120*03ce13f7SAndroid Build Coastguard Worker    message(WARNING "
121*03ce13f7SAndroid Build Coastguard Worker        .git/hooks/commit-msg was not found.
122*03ce13f7SAndroid Build Coastguard Worker        Downloading from https://gerrit-review.googlesource.com/tools/hooks/commit-msg...
123*03ce13f7SAndroid Build Coastguard Worker    ")
124*03ce13f7SAndroid Build Coastguard Worker
125*03ce13f7SAndroid Build Coastguard Worker    file(DOWNLOAD https://gerrit-review.googlesource.com/tools/hooks/commit-msg ${CMAKE_SOURCE_DIR}/commit-msg)
126*03ce13f7SAndroid Build Coastguard Worker
127*03ce13f7SAndroid Build Coastguard Worker    file(COPY ${CMAKE_SOURCE_DIR}/commit-msg
128*03ce13f7SAndroid Build Coastguard Worker         DESTINATION ${CMAKE_SOURCE_DIR}/.git/hooks/
129*03ce13f7SAndroid Build Coastguard Worker         FILE_PERMISSIONS
130*03ce13f7SAndroid Build Coastguard Worker           OWNER_READ OWNER_WRITE OWNER_EXECUTE
131*03ce13f7SAndroid Build Coastguard Worker           GROUP_READ GROUP_WRITE GROUP_EXECUTE
132*03ce13f7SAndroid Build Coastguard Worker           WORLD_READ WORLD_EXECUTE)
133*03ce13f7SAndroid Build Coastguard Worker    file(REMOVE ${CMAKE_SOURCE_DIR}/commit-msg)
134*03ce13f7SAndroid Build Coastguard Workerendif()
135*03ce13f7SAndroid Build Coastguard Worker
136*03ce13f7SAndroid Build Coastguard Worker###########################################################
137*03ce13f7SAndroid Build Coastguard Worker# Host libraries
138*03ce13f7SAndroid Build Coastguard Worker###########################################################
139*03ce13f7SAndroid Build Coastguard Worker
140*03ce13f7SAndroid Build Coastguard Workerif(LINUX)
141*03ce13f7SAndroid Build Coastguard Worker    include(CheckSymbolExists)
142*03ce13f7SAndroid Build Coastguard Worker    check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
143*03ce13f7SAndroid Build Coastguard Worker    check_symbol_exists(mallinfo2 malloc.h HAVE_MALLINFO2)
144*03ce13f7SAndroid Build Coastguard Workerendif()
145*03ce13f7SAndroid Build Coastguard Worker
146*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
147*03ce13f7SAndroid Build Coastguard Worker    find_library(DIRECTFB directfb)
148*03ce13f7SAndroid Build Coastguard Worker    find_path(DIRECTFB_INCLUDE_DIR directfb/directfb.h)
149*03ce13f7SAndroid Build Coastguard Workerendif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
150*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_WSI_D2D)
151*03ce13f7SAndroid Build Coastguard Worker    find_library(D2D drm)
152*03ce13f7SAndroid Build Coastguard Worker    find_path(D2D_INCLUDE_DIR libdrm/drm.h)
153*03ce13f7SAndroid Build Coastguard Workerendif(SWIFTSHADER_BUILD_WSI_D2D)
154*03ce13f7SAndroid Build Coastguard Worker
155*03ce13f7SAndroid Build Coastguard Worker###########################################################
156*03ce13f7SAndroid Build Coastguard Worker# Options
157*03ce13f7SAndroid Build Coastguard Worker###########################################################
158*03ce13f7SAndroid Build Coastguard Worker
159*03ce13f7SAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE)
160*03ce13f7SAndroid Build Coastguard Worker    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
161*03ce13f7SAndroid Build Coastguard Worker    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
162*03ce13f7SAndroid Build Coastguard Workerendif()
163*03ce13f7SAndroid Build Coastguard Worker
164*03ce13f7SAndroid Build Coastguard Workerfunction(option_if_not_defined name description default)
165*03ce13f7SAndroid Build Coastguard Worker    if(NOT DEFINED ${name})
166*03ce13f7SAndroid Build Coastguard Worker        option(${name} ${description} ${default})
167*03ce13f7SAndroid Build Coastguard Worker    endif()
168*03ce13f7SAndroid Build Coastguard Workerendfunction()
169*03ce13f7SAndroid Build Coastguard Worker
170*03ce13f7SAndroid Build Coastguard Workerif(LINUX)
171*03ce13f7SAndroid Build Coastguard Worker    option_if_not_defined(SWIFTSHADER_BUILD_WSI_XCB "Build the XCB WSI support" TRUE)
172*03ce13f7SAndroid Build Coastguard Worker    option_if_not_defined(SWIFTSHADER_BUILD_WSI_WAYLAND "Build the Wayland WSI support" TRUE)
173*03ce13f7SAndroid Build Coastguard Worker    option_if_not_defined(SWIFTSHADER_BUILD_WSI_DIRECTFB "Build the DirectFB WSI support" FALSE)
174*03ce13f7SAndroid Build Coastguard Worker    option_if_not_defined(SWIFTSHADER_BUILD_WSI_D2D "Build the Direct-to-Display WSI support" FALSE)
175*03ce13f7SAndroid Build Coastguard Workerendif()
176*03ce13f7SAndroid Build Coastguard Worker
177*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_BUILD_PVR "Build the PowerVR examples" FALSE)
178*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_BUILD_TESTS "Build unit tests" TRUE)
179*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_BUILD_BENCHMARKS "Build benchmarks" FALSE)
180*03ce13f7SAndroid Build Coastguard Worker
181*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" TRUE)
182*03ce13f7SAndroid Build Coastguard Worker
183*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_MSAN "Build with memory sanitizer" FALSE)
184*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_ASAN "Build with address sanitizer" FALSE)
185*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_TSAN "Build with thread sanitizer" FALSE)
186*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_UBSAN "Build with undefined behavior sanitizer" FALSE)
187*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_EMIT_COVERAGE "Emit code coverage information" FALSE)
188*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_WARNINGS_AS_ERRORS "Treat all warnings as errors" TRUE)
189*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_DCHECK_ALWAYS_ON "Check validation macros even in release builds" FALSE)
190*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(REACTOR_EMIT_DEBUG_INFO "Emit debug info for JIT functions" FALSE)
191*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(REACTOR_EMIT_PRINT_LOCATION "Emit printing of location info for JIT functions" FALSE)
192*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(REACTOR_EMIT_ASM_FILE "Emit asm files for JIT functions" FALSE)
193*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(REACTOR_ENABLE_PRINT "Enable RR_PRINT macros" FALSE)
194*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(REACTOR_VERIFY_LLVM_IR "Check reactor-generated LLVM IR is valid even in release builds" FALSE)
195*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_LESS_DEBUG_INFO "Generate less debug info to reduce file size" FALSE)
196*03ce13f7SAndroid Build Coastguard Worker# option_if_not_defined(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER "Enable Vulkan debugger support" FALSE)  # TODO(b/251802301)
197*03ce13f7SAndroid Build Coastguard Workeroption_if_not_defined(SWIFTSHADER_ENABLE_ASTC "Enable ASTC compressed textures support" TRUE)  # TODO(b/150130101)
198*03ce13f7SAndroid Build Coastguard Worker
199*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER)
200*03ce13f7SAndroid Build Coastguard Worker    set(SWIFTSHADER_BUILD_CPPDAP TRUE)
201*03ce13f7SAndroid Build Coastguard Workerendif()
202*03ce13f7SAndroid Build Coastguard Worker
203*03ce13f7SAndroid Build Coastguard Workerset(DEFAULT_REACTOR_BACKEND "LLVM")
204*03ce13f7SAndroid Build Coastguard Workerset(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor")
205*03ce13f7SAndroid Build Coastguard Workerset_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM LLVM-Submodule Subzero)
206*03ce13f7SAndroid Build Coastguard Worker
207*03ce13f7SAndroid Build Coastguard Workerset(DEFAULT_SWIFTSHADER_LLVM_VERSION "10.0")
208*03ce13f7SAndroid Build Coastguard Workerset(SWIFTSHADER_LLVM_VERSION ${DEFAULT_SWIFTSHADER_LLVM_VERSION} CACHE STRING "LLVM version to use")
209*03ce13f7SAndroid Build Coastguard Workerset_property(CACHE SWIFTSHADER_LLVM_VERSION PROPERTY STRINGS "10.0")
210*03ce13f7SAndroid Build Coastguard Worker
211*03ce13f7SAndroid Build Coastguard Worker# If defined, overrides the default optimization level of the current reactor backend.
212*03ce13f7SAndroid Build Coastguard Worker# Set to one of the rr::Optimization::Level enum values.
213*03ce13f7SAndroid Build Coastguard Workerset(REACTOR_DEFAULT_OPT_LEVEL "" CACHE STRING "Reactor default optimization level")
214*03ce13f7SAndroid Build Coastguard Workerset_property(CACHE REACTOR_DEFAULT_OPT_LEVEL PROPERTY STRINGS "None" "Less" "Default" "Aggressive")
215*03ce13f7SAndroid Build Coastguard Worker
216*03ce13f7SAndroid Build Coastguard Workerif(NOT DEFINED SWIFTSHADER_LOGGING_LEVEL)
217*03ce13f7SAndroid Build Coastguard Worker    set(SWIFTSHADER_LOGGING_LEVEL "Info" CACHE STRING "SwiftShader logging level")
218*03ce13f7SAndroid Build Coastguard Worker    set_property(CACHE SWIFTSHADER_LOGGING_LEVEL PROPERTY STRINGS "Verbose" "Debug" "Info" "Warn" "Error" "Fatal" "Disabled")
219*03ce13f7SAndroid Build Coastguard Workerendif()
220*03ce13f7SAndroid Build Coastguard Worker
221*03ce13f7SAndroid Build Coastguard Worker# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
222*03ce13f7SAndroid Build Coastguard Worker# it builds header files that could overwrite the orignal ones. Here we
223*03ce13f7SAndroid Build Coastguard Worker# want to include LLVM as a subdirectory and even though it wouldn't cause
224*03ce13f7SAndroid Build Coastguard Worker# the problem, if cmake . is called from the main dir, the condition that
225*03ce13f7SAndroid Build Coastguard Worker# LLVM checkes, "CMAKE_CURRENT_SOURCE_DIR == CMAKE_CURRENT_BINARY_DIR" will be true. So we
226*03ce13f7SAndroid Build Coastguard Worker# disallow it ourselves too to. In addition if there are remining CMakeFiles
227*03ce13f7SAndroid Build Coastguard Worker# and CMakeCache in the directory, cmake .. from a subdirectory will still
228*03ce13f7SAndroid Build Coastguard Worker# try to build from the main directory so we instruct users to delete these
229*03ce13f7SAndroid Build Coastguard Worker# files when they get the error.
230*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
231*03ce13f7SAndroid Build Coastguard Worker    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.")
232*03ce13f7SAndroid Build Coastguard Workerendif()
233*03ce13f7SAndroid Build Coastguard Worker
234*03ce13f7SAndroid Build Coastguard Workerset_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
235*03ce13f7SAndroid Build Coastguard Worker
236*03ce13f7SAndroid Build Coastguard Worker###########################################################
237*03ce13f7SAndroid Build Coastguard Worker# Directories
238*03ce13f7SAndroid Build Coastguard Worker###########################################################
239*03ce13f7SAndroid Build Coastguard Worker
240*03ce13f7SAndroid Build Coastguard Workerset(SWIFTSHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
241*03ce13f7SAndroid Build Coastguard Workerset(SOURCE_DIR ${SWIFTSHADER_DIR}/src)
242*03ce13f7SAndroid Build Coastguard Workerset(THIRD_PARTY_DIR ${SWIFTSHADER_DIR}/third_party)
243*03ce13f7SAndroid Build Coastguard Workerset(TESTS_DIR ${SWIFTSHADER_DIR}/tests)
244*03ce13f7SAndroid Build Coastguard Worker
245*03ce13f7SAndroid Build Coastguard Worker###########################################################
246*03ce13f7SAndroid Build Coastguard Worker# Initialize submodules
247*03ce13f7SAndroid Build Coastguard Worker###########################################################
248*03ce13f7SAndroid Build Coastguard Worker
249*03ce13f7SAndroid Build Coastguard Workerfunction(InitSubmodule target submodule_dir)
250*03ce13f7SAndroid Build Coastguard Worker    if (NOT TARGET ${target})
251*03ce13f7SAndroid Build Coastguard Worker        if(NOT EXISTS ${submodule_dir}/.git)
252*03ce13f7SAndroid Build Coastguard Worker            message(WARNING "
253*03ce13f7SAndroid Build Coastguard Worker        Target ${target} from submodule ${submodule_dir} missing.
254*03ce13f7SAndroid Build Coastguard Worker        Running 'git submodule update --init' to download it:
255*03ce13f7SAndroid Build Coastguard Worker            ")
256*03ce13f7SAndroid Build Coastguard Worker
257*03ce13f7SAndroid Build Coastguard Worker            execute_process(COMMAND git -C ${SWIFTSHADER_DIR} submodule update --init ${submodule_dir})
258*03ce13f7SAndroid Build Coastguard Worker        endif()
259*03ce13f7SAndroid Build Coastguard Worker    endif()
260*03ce13f7SAndroid Build Coastguard Workerendfunction()
261*03ce13f7SAndroid Build Coastguard Worker
262*03ce13f7SAndroid Build Coastguard Workerif (SWIFTSHADER_BUILD_TESTS OR SWIFTSHADER_BUILD_BENCHMARKS)
263*03ce13f7SAndroid Build Coastguard Worker    set(BUILD_VULKAN_WRAPPER TRUE)
264*03ce13f7SAndroid Build Coastguard Workerendif()
265*03ce13f7SAndroid Build Coastguard Worker
266*03ce13f7SAndroid Build Coastguard Workerif (BUILD_VULKAN_WRAPPER)
267*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(glslang ${THIRD_PARTY_DIR}/glslang)
268*03ce13f7SAndroid Build Coastguard Workerendif()
269*03ce13f7SAndroid Build Coastguard Worker
270*03ce13f7SAndroid Build Coastguard Workerif (SWIFTSHADER_BUILD_TESTS)
271*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(gtest ${THIRD_PARTY_DIR}/googletest)
272*03ce13f7SAndroid Build Coastguard Workerendif()
273*03ce13f7SAndroid Build Coastguard Worker
274*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_BENCHMARKS)
275*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(benchmark::benchmark ${THIRD_PARTY_DIR}/benchmark)
276*03ce13f7SAndroid Build Coastguard Workerendif()
277*03ce13f7SAndroid Build Coastguard Worker
278*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_EMIT_DEBUG_INFO)
279*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(libbacktrace ${THIRD_PARTY_DIR}/libbacktrace/src)
280*03ce13f7SAndroid Build Coastguard Workerendif()
281*03ce13f7SAndroid Build Coastguard Worker
282*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_PVR)
283*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(PVRCore ${THIRD_PARTY_DIR}/PowerVR_Examples)
284*03ce13f7SAndroid Build Coastguard Workerendif()
285*03ce13f7SAndroid Build Coastguard Worker
286*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_CPPDAP)
287*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(json ${THIRD_PARTY_DIR}/json)
288*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(cppdap ${THIRD_PARTY_DIR}/cppdap)
289*03ce13f7SAndroid Build Coastguard Workerendif()
290*03ce13f7SAndroid Build Coastguard Worker
291*03ce13f7SAndroid Build Coastguard Workerif(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
292*03ce13f7SAndroid Build Coastguard Worker    InitSubmodule(llvm-submodule ${THIRD_PARTY_DIR}/llvm-project)
293*03ce13f7SAndroid Build Coastguard Workerendif()
294*03ce13f7SAndroid Build Coastguard Worker
295*03ce13f7SAndroid Build Coastguard Worker###########################################################
296*03ce13f7SAndroid Build Coastguard Worker# Convenience macros
297*03ce13f7SAndroid Build Coastguard Worker###########################################################
298*03ce13f7SAndroid Build Coastguard Worker
299*03ce13f7SAndroid Build Coastguard Worker# Recursively calls source_group on the files of the directory
300*03ce13f7SAndroid Build Coastguard Worker# so that Visual Studio has the files in a folder tree
301*03ce13f7SAndroid Build Coastguard Workermacro(group_all_sources directory)
302*03ce13f7SAndroid Build Coastguard Worker    file(GLOB files RELATIVE ${SWIFTSHADER_DIR}/${directory} ${SWIFTSHADER_DIR}/${directory}/*)
303*03ce13f7SAndroid Build Coastguard Worker    foreach(file ${files})
304*03ce13f7SAndroid Build Coastguard Worker        if(IS_DIRECTORY ${SWIFTSHADER_DIR}/${directory}/${file})
305*03ce13f7SAndroid Build Coastguard Worker            group_all_sources(${directory}/${file})
306*03ce13f7SAndroid Build Coastguard Worker        else()
307*03ce13f7SAndroid Build Coastguard Worker            string(REPLACE "/" "\\" groupname ${directory})
308*03ce13f7SAndroid Build Coastguard Worker            source_group(${groupname} FILES ${SWIFTSHADER_DIR}/${directory}/${file})
309*03ce13f7SAndroid Build Coastguard Worker        endif()
310*03ce13f7SAndroid Build Coastguard Worker    endforeach()
311*03ce13f7SAndroid Build Coastguard Workerendmacro()
312*03ce13f7SAndroid Build Coastguard Worker
313*03ce13f7SAndroid Build Coastguard Worker# Takes target library and a directory where the export map is
314*03ce13f7SAndroid Build Coastguard Worker# and add the linker options so that only the API symbols are
315*03ce13f7SAndroid Build Coastguard Worker# exported.
316*03ce13f7SAndroid Build Coastguard Workermacro(set_shared_library_export_map TARGET DIR)
317*03ce13f7SAndroid Build Coastguard Worker    if(MSVC)
318*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " /DEF:\"${DIR}/${TARGET}.def\"")
319*03ce13f7SAndroid Build Coastguard Worker    elseif(APPLE)
320*03ce13f7SAndroid Build Coastguard Worker        # The exported symbols list only exports the API functions and
321*03ce13f7SAndroid Build Coastguard Worker        # hides all the others.
322*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-exported_symbols_list ${DIR}/${TARGET}.exports")
323*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${TARGET}.exports;")
324*03ce13f7SAndroid Build Coastguard Worker        # Don't allow undefined symbols, unless it's a Sanitizer build.
325*03ce13f7SAndroid Build Coastguard Worker        if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
326*03ce13f7SAndroid Build Coastguard Worker            set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-undefined,error")
327*03ce13f7SAndroid Build Coastguard Worker        endif()
328*03ce13f7SAndroid Build Coastguard Worker    elseif(LINUX OR FUCHSIA)
329*03ce13f7SAndroid Build Coastguard Worker        # NOTE: The Fuchsia linker script is needed to export the vk_icdInitializeConnectToServiceCallback
330*03ce13f7SAndroid Build Coastguard Worker        # entry point (a private implementation detail betwen the Fuchsia Vulkan loader and the ICD).
331*03ce13f7SAndroid Build Coastguard Worker        if ((FUCHSIA) AND ("${TARGET}" STREQUAL "vk_swiftshader"))
332*03ce13f7SAndroid Build Coastguard Worker          set(LINKER_VERSION_SCRIPT "fuchsia_vk_swiftshader.lds")
333*03ce13f7SAndroid Build Coastguard Worker        else()
334*03ce13f7SAndroid Build Coastguard Worker          set(LINKER_VERSION_SCRIPT "${TARGET}.lds")
335*03ce13f7SAndroid Build Coastguard Worker        endif()
336*03ce13f7SAndroid Build Coastguard Worker
337*03ce13f7SAndroid Build Coastguard Worker        # The version script only exports the API functions and
338*03ce13f7SAndroid Build Coastguard Worker        # hides all the others.
339*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${DIR}/${LINKER_VERSION_SCRIPT}")
340*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_DEPENDS "${DIR}/${LINKER_VERSION_SCRIPT};")
341*03ce13f7SAndroid Build Coastguard Worker
342*03ce13f7SAndroid Build Coastguard Worker        # -Bsymbolic binds symbol references to their global definitions within
343*03ce13f7SAndroid Build Coastguard Worker        # a shared object, thereby preventing symbol preemption.
344*03ce13f7SAndroid Build Coastguard Worker        set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS "  -Wl,-Bsymbolic")
345*03ce13f7SAndroid Build Coastguard Worker
346*03ce13f7SAndroid Build Coastguard Worker        if(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el")
347*03ce13f7SAndroid Build Coastguard Worker          # MIPS supports sysv hash-style only.
348*03ce13f7SAndroid Build Coastguard Worker          set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=sysv")
349*03ce13f7SAndroid Build Coastguard Worker        elseif(LINUX)
350*03ce13f7SAndroid Build Coastguard Worker          # Both hash-style are needed, because we want both gold and
351*03ce13f7SAndroid Build Coastguard Worker          # GNU ld to be able to read our libraries.
352*03ce13f7SAndroid Build Coastguard Worker          set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both")
353*03ce13f7SAndroid Build Coastguard Worker        endif()
354*03ce13f7SAndroid Build Coastguard Worker
355*03ce13f7SAndroid Build Coastguard Worker        if(NOT ${SWIFTSHADER_EMIT_COVERAGE})
356*03ce13f7SAndroid Build Coastguard Worker            # Gc sections is used in combination with each functions being
357*03ce13f7SAndroid Build Coastguard Worker            # in its own section, to reduce the binary size.
358*03ce13f7SAndroid Build Coastguard Worker            set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--gc-sections")
359*03ce13f7SAndroid Build Coastguard Worker        endif()
360*03ce13f7SAndroid Build Coastguard Worker
361*03ce13f7SAndroid Build Coastguard Worker        # Don't allow undefined symbols, unless it's a Sanitizer build.
362*03ce13f7SAndroid Build Coastguard Worker        if(NOT SWIFTSHADER_MSAN AND NOT SWIFTSHADER_ASAN AND NOT SWIFTSHADER_TSAN AND NOT SWIFTSHADER_UBSAN)
363*03ce13f7SAndroid Build Coastguard Worker            set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
364*03ce13f7SAndroid Build Coastguard Worker        endif()
365*03ce13f7SAndroid Build Coastguard Worker    endif()
366*03ce13f7SAndroid Build Coastguard Workerendmacro()
367*03ce13f7SAndroid Build Coastguard Worker
368*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_USE_GROUP_SOURCES)
369*03ce13f7SAndroid Build Coastguard Worker    group_all_sources(src)
370*03ce13f7SAndroid Build Coastguard Workerendif()
371*03ce13f7SAndroid Build Coastguard Worker
372*03ce13f7SAndroid Build Coastguard Worker###########################################################
373*03ce13f7SAndroid Build Coastguard Worker# Compile flags
374*03ce13f7SAndroid Build Coastguard Worker###########################################################
375*03ce13f7SAndroid Build Coastguard Worker
376*03ce13f7SAndroid Build Coastguard Worker# Flags for project code (non 3rd party)
377*03ce13f7SAndroid Build Coastguard Workerset(SWIFTSHADER_COMPILE_OPTIONS "")
378*03ce13f7SAndroid Build Coastguard Workerset(SWIFTSHADER_LINK_FLAGS "")
379*03ce13f7SAndroid Build Coastguard Workerset(SWIFTSHADER_LIBS "")
380*03ce13f7SAndroid Build Coastguard Worker
381*03ce13f7SAndroid Build Coastguard Workermacro(set_cpp_flag FLAG)
382*03ce13f7SAndroid Build Coastguard Worker    if(${ARGC} GREATER 1)
383*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}")
384*03ce13f7SAndroid Build Coastguard Worker    else()
385*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
386*03ce13f7SAndroid Build Coastguard Worker    endif()
387*03ce13f7SAndroid Build Coastguard Workerendmacro()
388*03ce13f7SAndroid Build Coastguard Worker
389*03ce13f7SAndroid Build Coastguard Workermacro(set_linker_flag FLAG)
390*03ce13f7SAndroid Build Coastguard Worker    if(${ARGC} GREATER 1)
391*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
392*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
393*03ce13f7SAndroid Build Coastguard Worker    else()
394*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
395*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
396*03ce13f7SAndroid Build Coastguard Worker    endif()
397*03ce13f7SAndroid Build Coastguard Workerendmacro()
398*03ce13f7SAndroid Build Coastguard Worker
399*03ce13f7SAndroid Build Coastguard Workerif(MSVC)
400*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("/MP")
401*03ce13f7SAndroid Build Coastguard Worker    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
402*03ce13f7SAndroid Build Coastguard Worker    add_definitions(-D_SCL_SECURE_NO_WARNINGS)
403*03ce13f7SAndroid Build Coastguard Worker    add_definitions(-D_SBCS)  # Single Byte Character Set (ASCII)
404*03ce13f7SAndroid Build Coastguard Worker    add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)  # Disable MSVC warnings about std::aligned_storage being broken before VS 2017 15.8
405*03ce13f7SAndroid Build Coastguard Worker
406*03ce13f7SAndroid Build Coastguard Worker    set_linker_flag("/DEBUG:FASTLINK" DEBUG)
407*03ce13f7SAndroid Build Coastguard Worker    set_linker_flag("/DEBUG:FASTLINK" RELWITHDEBINFO)
408*03ce13f7SAndroid Build Coastguard Worker
409*03ce13f7SAndroid Build Coastguard Worker    # Disable specific warnings
410*03ce13f7SAndroid Build Coastguard Worker    # TODO: Not all of these should be disabled, but for now, we want a warning-free msvc build. Remove these one by one
411*03ce13f7SAndroid Build Coastguard Worker    #       and fix the actual warnings in code.
412*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS
413*03ce13f7SAndroid Build Coastguard Worker        "/wd4005" # 'identifier' : macro redefinition
414*03ce13f7SAndroid Build Coastguard Worker        "/wd4018" # 'expression' : signed/unsigned mismatch
415*03ce13f7SAndroid Build Coastguard Worker        "/wd4065" # switch statement contains 'default' but no 'case' labels
416*03ce13f7SAndroid Build Coastguard Worker        "/wd4141" # 'modifier' : used more than once
417*03ce13f7SAndroid Build Coastguard Worker        "/wd4244" # 'conversion' conversion from 'type1' to 'type2', possible loss of data
418*03ce13f7SAndroid Build Coastguard Worker        "/wd4267" # 'var' : conversion from 'size_t' to 'type', possible loss of data
419*03ce13f7SAndroid Build Coastguard Worker        "/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
420*03ce13f7SAndroid Build Coastguard Worker        "/wd4309" # 'conversion' : truncation of constant value
421*03ce13f7SAndroid Build Coastguard Worker        "/wd4624" # 'derived class' : destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted
422*03ce13f7SAndroid Build Coastguard Worker        "/wd4800" # 'type' : forcing value to bool 'true' or 'false' (performance warning)
423*03ce13f7SAndroid Build Coastguard Worker        "/wd4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
424*03ce13f7SAndroid Build Coastguard Worker        "/wd5030" # attribute 'attribute' is not recognized
425*03ce13f7SAndroid Build Coastguard Worker        "/wd5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
426*03ce13f7SAndroid Build Coastguard Worker        "/wd4146" # unary minus operator applied to unsigned type, result still unsigned
427*03ce13f7SAndroid Build Coastguard Worker    )
428*03ce13f7SAndroid Build Coastguard Worker
429*03ce13f7SAndroid Build Coastguard Worker    # Treat specific warnings as errors
430*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS
431*03ce13f7SAndroid Build Coastguard Worker        "/we4018" # 'expression' : signed/unsigned mismatch
432*03ce13f7SAndroid Build Coastguard Worker        "/we4062" # enumerator 'identifier' in switch of enum 'enumeration' is not handled
433*03ce13f7SAndroid Build Coastguard Worker        "/we4471" # 'enumeration': a forward declaration of an unscoped enumeration must have an underlying type (int assumed)
434*03ce13f7SAndroid Build Coastguard Worker        "/we4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion
435*03ce13f7SAndroid Build Coastguard Worker        "/we5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class'
436*03ce13f7SAndroid Build Coastguard Worker        "/we4101" # 'identifier' : unreferenced local variable
437*03ce13f7SAndroid Build Coastguard Worker    )
438*03ce13f7SAndroid Build Coastguard Workerelse()
439*03ce13f7SAndroid Build Coastguard Worker    # Explicitly enable these warnings.
440*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS
441*03ce13f7SAndroid Build Coastguard Worker        "-Wall"
442*03ce13f7SAndroid Build Coastguard Worker        "-Wreorder"
443*03ce13f7SAndroid Build Coastguard Worker        "-Wsign-compare"
444*03ce13f7SAndroid Build Coastguard Worker        "-Wmissing-braces"
445*03ce13f7SAndroid Build Coastguard Worker    )
446*03ce13f7SAndroid Build Coastguard Worker
447*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
448*03ce13f7SAndroid Build Coastguard Worker        if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
449*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_COMPILE_OPTIONS
450*03ce13f7SAndroid Build Coastguard Worker                "-Wdeprecated-copy"  # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
451*03ce13f7SAndroid Build Coastguard Worker            )
452*03ce13f7SAndroid Build Coastguard Worker        endif()
453*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
454*03ce13f7SAndroid Build Coastguard Worker        list(APPEND SWIFTSHADER_COMPILE_OPTIONS
455*03ce13f7SAndroid Build Coastguard Worker            "-Wextra"
456*03ce13f7SAndroid Build Coastguard Worker            "-Wunreachable-code-loop-increment"
457*03ce13f7SAndroid Build Coastguard Worker            "-Wunused-lambda-capture"
458*03ce13f7SAndroid Build Coastguard Worker            "-Wstring-conversion"
459*03ce13f7SAndroid Build Coastguard Worker            "-Wextra-semi"
460*03ce13f7SAndroid Build Coastguard Worker            "-Wignored-qualifiers"
461*03ce13f7SAndroid Build Coastguard Worker            "-Wdeprecated-copy"  # implicit copy constructor for 'X' is deprecated because of user-declared copy assignment operator.
462*03ce13f7SAndroid Build Coastguard Worker            # TODO(b/208256248): Avoid exit-time destructor.
463*03ce13f7SAndroid Build Coastguard Worker            #"-Wexit-time-destructors"  # declaration requires an exit-time destructor
464*03ce13f7SAndroid Build Coastguard Worker        )
465*03ce13f7SAndroid Build Coastguard Worker    endif()
466*03ce13f7SAndroid Build Coastguard Worker
467*03ce13f7SAndroid Build Coastguard Worker    if (SWIFTSHADER_EMIT_COVERAGE)
468*03ce13f7SAndroid Build Coastguard Worker        if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
469*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_COMPILE_OPTIONS "--coverage")
470*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_LIBS "gcov")
471*03ce13f7SAndroid Build Coastguard Worker        elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
472*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fprofile-instr-generate" "-fcoverage-mapping")
473*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_LINK_FLAGS "-fprofile-instr-generate" "-fcoverage-mapping")
474*03ce13f7SAndroid Build Coastguard Worker        else()
475*03ce13f7SAndroid Build Coastguard Worker            message(FATAL_ERROR "Coverage generation not supported for the ${CMAKE_CXX_COMPILER_ID} toolchain")
476*03ce13f7SAndroid Build Coastguard Worker        endif()
477*03ce13f7SAndroid Build Coastguard Worker    endif()
478*03ce13f7SAndroid Build Coastguard Worker
479*03ce13f7SAndroid Build Coastguard Worker    # Disable pedantic warnings
480*03ce13f7SAndroid Build Coastguard Worker    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
481*03ce13f7SAndroid Build Coastguard Worker        list(APPEND SWIFTSHADER_COMPILE_OPTIONS
482*03ce13f7SAndroid Build Coastguard Worker            "-Wno-ignored-attributes"   # ignoring attributes on template argument 'X'
483*03ce13f7SAndroid Build Coastguard Worker            "-Wno-attributes"           # 'X' attribute ignored
484*03ce13f7SAndroid Build Coastguard Worker            "-Wno-strict-aliasing"      # dereferencing type-punned pointer will break strict-aliasing rules
485*03ce13f7SAndroid Build Coastguard Worker            "-Wno-comment"              # multi-line comment
486*03ce13f7SAndroid Build Coastguard Worker        )
487*03ce13f7SAndroid Build Coastguard Worker        if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
488*03ce13f7SAndroid Build Coastguard Worker            list(APPEND SWIFTSHADER_COMPILE_OPTIONS
489*03ce13f7SAndroid Build Coastguard Worker                "-Wno-init-list-lifetime"  # assignment from temporary initializer_list does not extend the lifetime of the underlying array
490*03ce13f7SAndroid Build Coastguard Worker            )
491*03ce13f7SAndroid Build Coastguard Worker        endif()
492*03ce13f7SAndroid Build Coastguard Worker    elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
493*03ce13f7SAndroid Build Coastguard Worker        list(APPEND SWIFTSHADER_COMPILE_OPTIONS
494*03ce13f7SAndroid Build Coastguard Worker            "-Wno-unneeded-internal-declaration"  # function 'X' is not needed and will not be emitted
495*03ce13f7SAndroid Build Coastguard Worker            "-Wno-unused-private-field"           # private field 'offset' is not used - TODO: Consider enabling this once Vulkan is further implemented.
496*03ce13f7SAndroid Build Coastguard Worker            "-Wno-comment"                        # multi-line comment
497*03ce13f7SAndroid Build Coastguard Worker            "-Wno-extra-semi"                     # extra ';' after member function definition
498*03ce13f7SAndroid Build Coastguard Worker            "-Wno-unused-parameter"               # unused parameter 'X'
499*03ce13f7SAndroid Build Coastguard Worker
500*03ce13f7SAndroid Build Coastguard Worker            # Silence errors caused by unknown warnings when building with older
501*03ce13f7SAndroid Build Coastguard Worker            # versions of Clang. This demands checking that warnings added above
502*03ce13f7SAndroid Build Coastguard Worker            # are spelled correctly and work as intended!
503*03ce13f7SAndroid Build Coastguard Worker            "-Wno-unknown-warning-option"
504*03ce13f7SAndroid Build Coastguard Worker        )
505*03ce13f7SAndroid Build Coastguard Worker    endif()
506*03ce13f7SAndroid Build Coastguard Worker
507*03ce13f7SAndroid Build Coastguard Worker    if(ARCH STREQUAL "x86")
508*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-m32")
509*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-msse2")
510*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mfpmath=sse")
511*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-march=pentium4")
512*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mtune=generic")
513*03ce13f7SAndroid Build Coastguard Worker    endif()
514*03ce13f7SAndroid Build Coastguard Worker    if(ARCH STREQUAL "x86_64")
515*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-m64")
516*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fPIC")
517*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-march=x86-64")
518*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mtune=generic")
519*03ce13f7SAndroid Build Coastguard Worker    endif()
520*03ce13f7SAndroid Build Coastguard Worker    if(ARCH STREQUAL "mipsel")
521*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-EL")
522*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-march=mips32r2")
523*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fPIC")
524*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mhard-float")
525*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mfp32")
526*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mxgot")
527*03ce13f7SAndroid Build Coastguard Worker    endif()
528*03ce13f7SAndroid Build Coastguard Worker    if(ARCH STREQUAL "mips64el")
529*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-EL")
530*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-march=mips64r2")
531*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mabi=64")
532*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fPIC")
533*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-mxgot")
534*03ce13f7SAndroid Build Coastguard Worker    endif()
535*03ce13f7SAndroid Build Coastguard Worker
536*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_LESS_DEBUG_INFO)
537*03ce13f7SAndroid Build Coastguard Worker        # Use -g1 to be able to get stack traces
538*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-g -g1" DEBUG)
539*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-g -g1" RELWITHDEBINFO)
540*03ce13f7SAndroid Build Coastguard Worker    else()
541*03ce13f7SAndroid Build Coastguard Worker        # Use -g3 to have even more debug info
542*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-g -g3" DEBUG)
543*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-g -g3" RELWITHDEBINFO)
544*03ce13f7SAndroid Build Coastguard Worker    endif()
545*03ce13f7SAndroid Build Coastguard Worker
546*03ce13f7SAndroid Build Coastguard Worker    if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
547*03ce13f7SAndroid Build Coastguard Worker        # Treated as an unused argument with clang
548*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-s" RELEASE)
549*03ce13f7SAndroid Build Coastguard Worker    endif()
550*03ce13f7SAndroid Build Coastguard Worker
551*03ce13f7SAndroid Build Coastguard Worker    # For distribution it is more important to be slim than super optimized
552*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-Os" RELEASE)
553*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-Os" RELWITHDEBINFO)
554*03ce13f7SAndroid Build Coastguard Worker
555*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-DNDEBUG" RELEASE)
556*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
557*03ce13f7SAndroid Build Coastguard Worker
558*03ce13f7SAndroid Build Coastguard Worker    # Put each variable and function in its own section so that when linking
559*03ce13f7SAndroid Build Coastguard Worker    # with -gc-sections unused functions and variables are removed.
560*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-ffunction-sections" RELEASE)
561*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-fdata-sections" RELEASE)
562*03ce13f7SAndroid Build Coastguard Worker    set_cpp_flag("-fomit-frame-pointer" RELEASE)
563*03ce13f7SAndroid Build Coastguard Worker
564*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_MSAN)
565*03ce13f7SAndroid Build Coastguard Worker        if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
566*03ce13f7SAndroid Build Coastguard Worker            message(FATAL_ERROR " \n"
567*03ce13f7SAndroid Build Coastguard Worker                    " MemorySanitizer usage requires compiling with Clang.")
568*03ce13f7SAndroid Build Coastguard Worker        endif()
569*03ce13f7SAndroid Build Coastguard Worker
570*03ce13f7SAndroid Build Coastguard Worker        if(NOT DEFINED ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH})
571*03ce13f7SAndroid Build Coastguard Worker            message(FATAL_ERROR " \n"
572*03ce13f7SAndroid Build Coastguard Worker                    " MemorySanitizer usage requires an instrumented build of libc++.\n"
573*03ce13f7SAndroid Build Coastguard Worker                    " Set the SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH environment variable to the\n"
574*03ce13f7SAndroid Build Coastguard Worker                    " build output path. See\n"
575*03ce13f7SAndroid Build Coastguard Worker                    " https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc\n"
576*03ce13f7SAndroid Build Coastguard Worker                    " for details on how to build an MSan instrumented libc++.")
577*03ce13f7SAndroid Build Coastguard Worker        endif()
578*03ce13f7SAndroid Build Coastguard Worker
579*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fsanitize=memory")
580*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-fsanitize=memory")
581*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-stdlib=libc++")
582*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-L$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
583*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include")
584*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include/c++/v1")
585*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-Wl,-rpath,$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
586*03ce13f7SAndroid Build Coastguard Worker    elseif(SWIFTSHADER_ASAN)
587*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fsanitize=address")
588*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-fsanitize=address")
589*03ce13f7SAndroid Build Coastguard Worker    elseif(SWIFTSHADER_TSAN)
590*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fsanitize=thread")
591*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-fsanitize=thread")
592*03ce13f7SAndroid Build Coastguard Worker    elseif(SWIFTSHADER_UBSAN)
593*03ce13f7SAndroid Build Coastguard Worker        set_cpp_flag("-fsanitize=undefined")
594*03ce13f7SAndroid Build Coastguard Worker        set_linker_flag("-fsanitize=undefined")
595*03ce13f7SAndroid Build Coastguard Worker    endif()
596*03ce13f7SAndroid Build Coastguard Workerendif()
597*03ce13f7SAndroid Build Coastguard Worker
598*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_DCHECK_ALWAYS_ON)
599*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DDCHECK_ALWAYS_ON")
600*03ce13f7SAndroid Build Coastguard Workerendif()
601*03ce13f7SAndroid Build Coastguard Worker
602*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_WARNINGS_AS_ERRORS)
603*03ce13f7SAndroid Build Coastguard Worker    if(MSVC)
604*03ce13f7SAndroid Build Coastguard Worker        set(WARNINGS_AS_ERRORS "/WX")  # Treat all warnings as errors
605*03ce13f7SAndroid Build Coastguard Worker    else()
606*03ce13f7SAndroid Build Coastguard Worker        set(WARNINGS_AS_ERRORS "-Werror")  # Treat all warnings as errors
607*03ce13f7SAndroid Build Coastguard Worker    endif()
608*03ce13f7SAndroid Build Coastguard Workerendif()
609*03ce13f7SAndroid Build Coastguard Worker
610*03ce13f7SAndroid Build Coastguard Worker# Enable Reactor Print() functionality in Debug/RelWithDebInfo builds or when explicitly enabled.
611*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_BUILD_TYPE MATCHES "Deb")
612*03ce13f7SAndroid Build Coastguard Worker    set(REACTOR_ENABLE_PRINT TRUE)
613*03ce13f7SAndroid Build Coastguard Workerendif()
614*03ce13f7SAndroid Build Coastguard Worker
615*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_EMIT_PRINT_LOCATION)
616*03ce13f7SAndroid Build Coastguard Worker    # This feature depends on REACTOR_EMIT_DEBUG_INFO and REACTOR_ENABLE_PRINT
617*03ce13f7SAndroid Build Coastguard Worker    set(REACTOR_EMIT_DEBUG_INFO TRUE)
618*03ce13f7SAndroid Build Coastguard Worker    set(REACTOR_ENABLE_PRINT TRUE)
619*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_PRINT_LOCATION")
620*03ce13f7SAndroid Build Coastguard Workerendif()
621*03ce13f7SAndroid Build Coastguard Worker
622*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_EMIT_ASM_FILE)
623*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_EMIT_ASM_FILE")
624*03ce13f7SAndroid Build Coastguard Workerendif()
625*03ce13f7SAndroid Build Coastguard Worker
626*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_EMIT_DEBUG_INFO)
627*03ce13f7SAndroid Build Coastguard Worker    message(WARNING "REACTOR_EMIT_DEBUG_INFO is enabled. This will likely affect performance.")
628*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_DEBUG_INFO")
629*03ce13f7SAndroid Build Coastguard Workerendif()
630*03ce13f7SAndroid Build Coastguard Worker
631*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_ENABLE_PRINT)
632*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_PRINT")
633*03ce13f7SAndroid Build Coastguard Workerendif()
634*03ce13f7SAndroid Build Coastguard Worker
635*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_VERIFY_LLVM_IR)
636*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_LLVM_IR_VERIFICATION")
637*03ce13f7SAndroid Build Coastguard Workerendif()
638*03ce13f7SAndroid Build Coastguard Worker
639*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_DEFAULT_OPT_LEVEL)
640*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DREACTOR_DEFAULT_OPT_LEVEL=${REACTOR_DEFAULT_OPT_LEVEL}")
641*03ce13f7SAndroid Build Coastguard Workerendif()
642*03ce13f7SAndroid Build Coastguard Worker
643*03ce13f7SAndroid Build Coastguard Workerif(DEFINED SWIFTSHADER_LOGGING_LEVEL)
644*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DSWIFTSHADER_LOGGING_LEVEL=${SWIFTSHADER_LOGGING_LEVEL}")
645*03ce13f7SAndroid Build Coastguard Workerendif()
646*03ce13f7SAndroid Build Coastguard Worker
647*03ce13f7SAndroid Build Coastguard Workerif(WIN32)
648*03ce13f7SAndroid Build Coastguard Worker    add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
649*03ce13f7SAndroid Build Coastguard Worker    set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
650*03ce13f7SAndroid Build Coastguard Workerendif()
651*03ce13f7SAndroid Build Coastguard Worker
652*03ce13f7SAndroid Build Coastguard Workerset(USE_EXCEPTIONS
653*03ce13f7SAndroid Build Coastguard Worker    ${REACTOR_EMIT_DEBUG_INFO} # boost::stacktrace uses exceptions
654*03ce13f7SAndroid Build Coastguard Worker)
655*03ce13f7SAndroid Build Coastguard Workerif(NOT MSVC)
656*03ce13f7SAndroid Build Coastguard Worker    if (${USE_EXCEPTIONS})
657*03ce13f7SAndroid Build Coastguard Worker        list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fexceptions")
658*03ce13f7SAndroid Build Coastguard Worker    else()
659*03ce13f7SAndroid Build Coastguard Worker        list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-fno-exceptions")
660*03ce13f7SAndroid Build Coastguard Worker    endif()
661*03ce13f7SAndroid Build Coastguard Workerendif()
662*03ce13f7SAndroid Build Coastguard Workerunset(USE_EXCEPTIONS)
663*03ce13f7SAndroid Build Coastguard Worker
664*03ce13f7SAndroid Build Coastguard Worker###########################################################
665*03ce13f7SAndroid Build Coastguard Worker# libbacktrace and boost
666*03ce13f7SAndroid Build Coastguard Worker###########################################################
667*03ce13f7SAndroid Build Coastguard Workerif(REACTOR_EMIT_DEBUG_INFO)
668*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/libbacktrace EXCLUDE_FROM_ALL)
669*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/boost EXCLUDE_FROM_ALL)
670*03ce13f7SAndroid Build Coastguard Workerendif()
671*03ce13f7SAndroid Build Coastguard Worker
672*03ce13f7SAndroid Build Coastguard Worker###########################################################
673*03ce13f7SAndroid Build Coastguard Worker# LLVM
674*03ce13f7SAndroid Build Coastguard Worker###########################################################
675*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(${THIRD_PARTY_DIR}/llvm-${SWIFTSHADER_LLVM_VERSION} EXCLUDE_FROM_ALL)
676*03ce13f7SAndroid Build Coastguard Workerset_target_properties(llvm PROPERTIES FOLDER "third_party")
677*03ce13f7SAndroid Build Coastguard Worker
678*03ce13f7SAndroid Build Coastguard Worker###########################################################
679*03ce13f7SAndroid Build Coastguard Worker# LLVM-Submodule
680*03ce13f7SAndroid Build Coastguard Worker###########################################################
681*03ce13f7SAndroid Build Coastguard Workerif(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
682*03ce13f7SAndroid Build Coastguard Worker    set(LLVM_INCLUDE_TESTS FALSE)
683*03ce13f7SAndroid Build Coastguard Worker    set(LLVM_ENABLE_RTTI TRUE)
684*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/llvm-project/llvm EXCLUDE_FROM_ALL)
685*03ce13f7SAndroid Build Coastguard Worker    if(ARCH STREQUAL "aarch64")
686*03ce13f7SAndroid Build Coastguard Worker        llvm_map_components_to_libnames(llvm_libs orcjit aarch64asmparser aarch64codegen)
687*03ce13f7SAndroid Build Coastguard Worker    elseif(ARCH STREQUAL "arm")
688*03ce13f7SAndroid Build Coastguard Worker        llvm_map_components_to_libnames(llvm_libs orcjit armasmparser armcodegen)
689*03ce13f7SAndroid Build Coastguard Worker    elseif(ARCH MATCHES "^mips.*")
690*03ce13f7SAndroid Build Coastguard Worker        llvm_map_components_to_libnames(llvm_libs orcjit mipsasmparser mipscodegen)
691*03ce13f7SAndroid Build Coastguard Worker    elseif(ARCH STREQUAL "ppc64le")
692*03ce13f7SAndroid Build Coastguard Worker        llvm_map_components_to_libnames(llvm_libs orcjit powerpcasmparser powerpccodegen)
693*03ce13f7SAndroid Build Coastguard Worker    elseif(ARCH MATCHES "^x86.*")
694*03ce13f7SAndroid Build Coastguard Worker        llvm_map_components_to_libnames(llvm_libs orcjit x86asmparser x86codegen)
695*03ce13f7SAndroid Build Coastguard Worker    endif()
696*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(${llvm_libs} PROPERTIES FOLDER "third_party")
697*03ce13f7SAndroid Build Coastguard Workerendif()
698*03ce13f7SAndroid Build Coastguard Worker
699*03ce13f7SAndroid Build Coastguard Worker###########################################################
700*03ce13f7SAndroid Build Coastguard Worker# Subzero
701*03ce13f7SAndroid Build Coastguard Worker###########################################################
702*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(${THIRD_PARTY_DIR}/llvm-subzero EXCLUDE_FROM_ALL)
703*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(${THIRD_PARTY_DIR}/subzero EXCLUDE_FROM_ALL)
704*03ce13f7SAndroid Build Coastguard Workerset_target_properties(llvm-subzero PROPERTIES FOLDER "third_party")
705*03ce13f7SAndroid Build Coastguard Workerset_target_properties(subzero PROPERTIES FOLDER "third_party")
706*03ce13f7SAndroid Build Coastguard Worker
707*03ce13f7SAndroid Build Coastguard Worker###########################################################
708*03ce13f7SAndroid Build Coastguard Worker# marl
709*03ce13f7SAndroid Build Coastguard Worker###########################################################
710*03ce13f7SAndroid Build Coastguard Workerset(MARL_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
711*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(${THIRD_PARTY_DIR}/marl)
712*03ce13f7SAndroid Build Coastguard Workerset_target_properties(marl PROPERTIES FOLDER "third_party")
713*03ce13f7SAndroid Build Coastguard Worker
714*03ce13f7SAndroid Build Coastguard Workerif(MARL_THREAD_SAFETY_ANALYSIS_SUPPORTED)
715*03ce13f7SAndroid Build Coastguard Worker    list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-Wthread-safety")
716*03ce13f7SAndroid Build Coastguard Workerendif()
717*03ce13f7SAndroid Build Coastguard Worker
718*03ce13f7SAndroid Build Coastguard Worker###########################################################
719*03ce13f7SAndroid Build Coastguard Worker# cppdap
720*03ce13f7SAndroid Build Coastguard Worker###########################################################
721*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_CPPDAP)
722*03ce13f7SAndroid Build Coastguard Worker    set(CPPDAP_THIRD_PARTY_DIR ${THIRD_PARTY_DIR})
723*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/cppdap)
724*03ce13f7SAndroid Build Coastguard Workerendif()
725*03ce13f7SAndroid Build Coastguard Worker
726*03ce13f7SAndroid Build Coastguard Worker###########################################################
727*03ce13f7SAndroid Build Coastguard Worker# astc-encoder
728*03ce13f7SAndroid Build Coastguard Worker###########################################################
729*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_ENABLE_ASTC)
730*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/astc-encoder)
731*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(astc-encoder PROPERTIES FOLDER "third_party")
732*03ce13f7SAndroid Build Coastguard Workerendif()
733*03ce13f7SAndroid Build Coastguard Worker
734*03ce13f7SAndroid Build Coastguard Worker###########################################################
735*03ce13f7SAndroid Build Coastguard Worker# gtest and gmock
736*03ce13f7SAndroid Build Coastguard Worker###########################################################
737*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_TESTS)
738*03ce13f7SAndroid Build Coastguard Worker    # For Win32, force gtest to match our CRT (shared)
739*03ce13f7SAndroid Build Coastguard Worker    set(gtest_force_shared_crt TRUE CACHE BOOL "" FORCE)
740*03ce13f7SAndroid Build Coastguard Worker    set(INSTALL_GTEST FALSE CACHE BOOL "" FORCE)
741*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/googletest EXCLUDE_FROM_ALL)
742*03ce13f7SAndroid Build Coastguard Worker    # gtest finds python, which picks python 2 first, if present.
743*03ce13f7SAndroid Build Coastguard Worker    # We need to undo this so that SPIR-V can later find python3.
744*03ce13f7SAndroid Build Coastguard Worker    unset(PYTHON_EXECUTABLE CACHE)
745*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(gmock PROPERTIES FOLDER "third_party")
746*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(gmock_main PROPERTIES FOLDER "third_party")
747*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(gtest PROPERTIES FOLDER "third_party")
748*03ce13f7SAndroid Build Coastguard Worker    set_target_properties(gtest_main PROPERTIES FOLDER "third_party")
749*03ce13f7SAndroid Build Coastguard Workerendif()
750*03ce13f7SAndroid Build Coastguard Worker
751*03ce13f7SAndroid Build Coastguard Worker###########################################################
752*03ce13f7SAndroid Build Coastguard Worker# File Lists
753*03ce13f7SAndroid Build Coastguard Worker###########################################################
754*03ce13f7SAndroid Build Coastguard Worker
755*03ce13f7SAndroid Build Coastguard Worker###########################################################
756*03ce13f7SAndroid Build Coastguard Worker# Append OS specific files to lists
757*03ce13f7SAndroid Build Coastguard Worker###########################################################
758*03ce13f7SAndroid Build Coastguard Worker
759*03ce13f7SAndroid Build Coastguard Workerif(WIN32)
760*03ce13f7SAndroid Build Coastguard Worker    set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
761*03ce13f7SAndroid Build Coastguard Workerelseif(LINUX)
762*03ce13f7SAndroid Build Coastguard Worker    set(OS_LIBS dl pthread)
763*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_WAYLAND)
764*03ce13f7SAndroid Build Coastguard Worker        include_directories("${SWIFTSHADER_DIR}/include/Wayland")
765*03ce13f7SAndroid Build Coastguard Worker    endif()
766*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
767*03ce13f7SAndroid Build Coastguard Worker        list(APPEND OS_LIBS "${DIRECTFB}")
768*03ce13f7SAndroid Build Coastguard Worker        include_directories(${DIRECTFB_INCLUDE_DIR}/directfb)
769*03ce13f7SAndroid Build Coastguard Worker    endif()
770*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_D2D)
771*03ce13f7SAndroid Build Coastguard Worker        list(APPEND OS_LIBS "${D2D}")
772*03ce13f7SAndroid Build Coastguard Worker        include_directories(${D2D_INCLUDE_DIR}/libdrm)
773*03ce13f7SAndroid Build Coastguard Worker    endif()
774*03ce13f7SAndroid Build Coastguard Workerelseif(FUCHSIA)
775*03ce13f7SAndroid Build Coastguard Worker    set(OS_LIBS zircon)
776*03ce13f7SAndroid Build Coastguard Workerelseif(APPLE)
777*03ce13f7SAndroid Build Coastguard Worker    find_library(COCOA_FRAMEWORK Cocoa)
778*03ce13f7SAndroid Build Coastguard Worker    find_library(QUARTZ_FRAMEWORK Quartz)
779*03ce13f7SAndroid Build Coastguard Worker    find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
780*03ce13f7SAndroid Build Coastguard Worker    find_library(IOSURFACE_FRAMEWORK IOSurface)
781*03ce13f7SAndroid Build Coastguard Worker    find_library(METAL_FRAMEWORK Metal)
782*03ce13f7SAndroid Build Coastguard Worker    set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}" "${METAL_FRAMEWORK}")
783*03ce13f7SAndroid Build Coastguard Workerendif()
784*03ce13f7SAndroid Build Coastguard Worker
785*03ce13f7SAndroid Build Coastguard Worker###########################################################
786*03ce13f7SAndroid Build Coastguard Worker# SwiftShader Targets
787*03ce13f7SAndroid Build Coastguard Worker###########################################################
788*03ce13f7SAndroid Build Coastguard Worker
789*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/Reactor) # Add ReactorSubzero and ReactorLLVM targets
790*03ce13f7SAndroid Build Coastguard Worker
791*03ce13f7SAndroid Build Coastguard Workerif(${REACTOR_BACKEND} STREQUAL "LLVM")
792*03ce13f7SAndroid Build Coastguard Worker    add_library(Reactor ALIAS ReactorLLVM)
793*03ce13f7SAndroid Build Coastguard Workerelseif(${REACTOR_BACKEND} STREQUAL "LLVM-Submodule")
794*03ce13f7SAndroid Build Coastguard Worker    add_library(Reactor ALIAS ReactorLLVMSubmodule)
795*03ce13f7SAndroid Build Coastguard Workerelseif(${REACTOR_BACKEND} STREQUAL "Subzero")
796*03ce13f7SAndroid Build Coastguard Worker    add_library(Reactor ALIAS ReactorSubzero)
797*03ce13f7SAndroid Build Coastguard Workerelse()
798*03ce13f7SAndroid Build Coastguard Worker    message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM', 'LLVM-Submodule' or 'Subzero'")
799*03ce13f7SAndroid Build Coastguard Workerendif()
800*03ce13f7SAndroid Build Coastguard Worker
801*03ce13f7SAndroid Build Coastguard Workerif (NOT TARGET SPIRV-Tools)
802*03ce13f7SAndroid Build Coastguard Worker    # This variable is also used by SPIRV-Tools to locate SPIRV-Headers
803*03ce13f7SAndroid Build Coastguard Worker    set(SPIRV-Headers_SOURCE_DIR "${THIRD_PARTY_DIR}/SPIRV-Headers")
804*03ce13f7SAndroid Build Coastguard Worker    set(SPIRV_SKIP_TESTS TRUE CACHE BOOL "" FORCE)
805*03ce13f7SAndroid Build Coastguard Worker    set(SPIRV_SKIP_EXECUTABLES TRUE CACHE BOOL "" FORCE)
806*03ce13f7SAndroid Build Coastguard Worker    set(SPIRV_WERROR FALSE CACHE BOOL "" FORCE)
807*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/SPIRV-Tools) # Add SPIRV-Tools target
808*03ce13f7SAndroid Build Coastguard Workerendif()
809*03ce13f7SAndroid Build Coastguard Worker
810*03ce13f7SAndroid Build Coastguard Worker# Add a vk_base interface library for shared vulkan build options.
811*03ce13f7SAndroid Build Coastguard Worker# TODO: Create src/Base and make this a lib target, and move stuff from
812*03ce13f7SAndroid Build Coastguard Worker# src/Vulkan into it that is needed by vk_pipeline, vk_device, and vk_wsi.
813*03ce13f7SAndroid Build Coastguard Workeradd_library(vk_base INTERFACE)
814*03ce13f7SAndroid Build Coastguard Worker
815*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_ENABLE_VULKAN_DEBUGGER)
816*03ce13f7SAndroid Build Coastguard Worker    target_compile_definitions(vk_base INTERFACE "ENABLE_VK_DEBUGGER")
817*03ce13f7SAndroid Build Coastguard Workerendif()
818*03ce13f7SAndroid Build Coastguard Worker
819*03ce13f7SAndroid Build Coastguard Workerif(WIN32)
820*03ce13f7SAndroid Build Coastguard Worker    target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
821*03ce13f7SAndroid Build Coastguard Workerelseif(LINUX)
822*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_XCB)
823*03ce13f7SAndroid Build Coastguard Worker        target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
824*03ce13f7SAndroid Build Coastguard Worker    endif()
825*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_WAYLAND)
826*03ce13f7SAndroid Build Coastguard Worker        target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WAYLAND_KHR")
827*03ce13f7SAndroid Build Coastguard Worker    endif()
828*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
829*03ce13f7SAndroid Build Coastguard Worker        if(DIRECTFB AND DIRECTFB_INCLUDE_DIR)
830*03ce13f7SAndroid Build Coastguard Worker            target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DIRECTFB_EXT")
831*03ce13f7SAndroid Build Coastguard Worker        endif()
832*03ce13f7SAndroid Build Coastguard Worker    endif(SWIFTSHADER_BUILD_WSI_DIRECTFB)
833*03ce13f7SAndroid Build Coastguard Worker    if(SWIFTSHADER_BUILD_WSI_D2D)
834*03ce13f7SAndroid Build Coastguard Worker        if(D2D)
835*03ce13f7SAndroid Build Coastguard Worker            target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_DISPLAY_KHR")
836*03ce13f7SAndroid Build Coastguard Worker        endif()
837*03ce13f7SAndroid Build Coastguard Worker    endif(SWIFTSHADER_BUILD_WSI_D2D)
838*03ce13f7SAndroid Build Coastguard Workerelseif(APPLE)
839*03ce13f7SAndroid Build Coastguard Worker    target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_MACOS_MVK")
840*03ce13f7SAndroid Build Coastguard Worker    target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_METAL_EXT")
841*03ce13f7SAndroid Build Coastguard Workerelseif(FUCHSIA)
842*03ce13f7SAndroid Build Coastguard Worker    target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_FUCHSIA")
843*03ce13f7SAndroid Build Coastguard Workerelse()
844*03ce13f7SAndroid Build Coastguard Worker    message(FATAL_ERROR "Platform does not support Vulkan yet")
845*03ce13f7SAndroid Build Coastguard Workerendif()
846*03ce13f7SAndroid Build Coastguard Worker
847*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/System) # Add vk_system target
848*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/Pipeline) # Add vk_pipeline target
849*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/WSI) # Add vk_wsi target
850*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/Device) # Add vk_device target
851*03ce13f7SAndroid Build Coastguard Workeradd_subdirectory(src/Vulkan) # Add vk_swiftshader target
852*03ce13f7SAndroid Build Coastguard Worker
853*03ce13f7SAndroid Build Coastguard Workerif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND # turbo-cov is only useful for clang coverage info
854*03ce13f7SAndroid Build Coastguard Worker    SWIFTSHADER_EMIT_COVERAGE)
855*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/regres/cov/turbo-cov)
856*03ce13f7SAndroid Build Coastguard Workerendif()
857*03ce13f7SAndroid Build Coastguard Worker
858*03ce13f7SAndroid Build Coastguard Worker###########################################################
859*03ce13f7SAndroid Build Coastguard Worker# Sample programs and tests
860*03ce13f7SAndroid Build Coastguard Worker###########################################################
861*03ce13f7SAndroid Build Coastguard Worker
862*03ce13f7SAndroid Build Coastguard Worker# TODO(b/161976310): Add support for building PowerVR on MacOS
863*03ce13f7SAndroid Build Coastguard Workerif(APPLE AND SWIFTSHADER_BUILD_PVR)
864*03ce13f7SAndroid Build Coastguard Worker    message(WARNING "Building PowerVR examples for SwiftShader is not yet supported on Apple platforms.")
865*03ce13f7SAndroid Build Coastguard Worker    set(SWIFTSHADER_BUILD_PVR FALSE)
866*03ce13f7SAndroid Build Coastguard Workerendif()
867*03ce13f7SAndroid Build Coastguard Worker
868*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_PVR)
869*03ce13f7SAndroid Build Coastguard Worker    if(UNIX AND NOT APPLE)
870*03ce13f7SAndroid Build Coastguard Worker        set(PVR_WINDOW_SYSTEM XCB)
871*03ce13f7SAndroid Build Coastguard Worker
872*03ce13f7SAndroid Build Coastguard Worker        # Set the RPATH of the next defined build targets to $ORIGIN,
873*03ce13f7SAndroid Build Coastguard Worker        # allowing them to load shared libraries from the execution directory.
874*03ce13f7SAndroid Build Coastguard Worker        set(CMAKE_BUILD_RPATH "$ORIGIN")
875*03ce13f7SAndroid Build Coastguard Worker    endif()
876*03ce13f7SAndroid Build Coastguard Worker
877*03ce13f7SAndroid Build Coastguard Worker    set(PVR_BUILD_EXAMPLES TRUE CACHE BOOL "Build the PowerVR SDK Examples" FORCE)
878*03ce13f7SAndroid Build Coastguard Worker    set(PVR_BUILD_VULKAN_EXAMPLES TRUE CACHE BOOL "Build the Vulkan PowerVR SDK Examples" FORCE)
879*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${THIRD_PARTY_DIR}/PowerVR_Examples)
880*03ce13f7SAndroid Build Coastguard Worker
881*03ce13f7SAndroid Build Coastguard Worker    # Samples known to work well
882*03ce13f7SAndroid Build Coastguard Worker    set(PVR_VULKAN_TARGET_GOOD
883*03ce13f7SAndroid Build Coastguard Worker        VulkanBumpmap
884*03ce13f7SAndroid Build Coastguard Worker        VulkanExampleUI
885*03ce13f7SAndroid Build Coastguard Worker        VulkanGaussianBlur
886*03ce13f7SAndroid Build Coastguard Worker        VulkanGlass
887*03ce13f7SAndroid Build Coastguard Worker        VulkanGnomeHorde
888*03ce13f7SAndroid Build Coastguard Worker        VulkanHelloAPI
889*03ce13f7SAndroid Build Coastguard Worker        VulkanImageBasedLighting
890*03ce13f7SAndroid Build Coastguard Worker        VulkanIntroducingPVRUtils
891*03ce13f7SAndroid Build Coastguard Worker        VulkanMultiSampling
892*03ce13f7SAndroid Build Coastguard Worker        VulkanNavigation2D
893*03ce13f7SAndroid Build Coastguard Worker        VulkanParticleSystem
894*03ce13f7SAndroid Build Coastguard Worker        VulkanSkinning
895*03ce13f7SAndroid Build Coastguard Worker    )
896*03ce13f7SAndroid Build Coastguard Worker
897*03ce13f7SAndroid Build Coastguard Worker    set(PVR_VULKAN_TARGET_OTHER
898*03ce13f7SAndroid Build Coastguard Worker        VulkanDeferredShading
899*03ce13f7SAndroid Build Coastguard Worker        VulkanDeferredShadingPFX
900*03ce13f7SAndroid Build Coastguard Worker        VulkanGameOfLife
901*03ce13f7SAndroid Build Coastguard Worker        VulkanIBLMapsGenerator
902*03ce13f7SAndroid Build Coastguard Worker        VulkanIMGTextureFilterCubic
903*03ce13f7SAndroid Build Coastguard Worker        VulkanIntroducingPVRShell
904*03ce13f7SAndroid Build Coastguard Worker        VulkanIntroducingPVRVk
905*03ce13f7SAndroid Build Coastguard Worker        VulkanIntroducingUIRenderer
906*03ce13f7SAndroid Build Coastguard Worker        VulkanMultithreading
907*03ce13f7SAndroid Build Coastguard Worker        VulkanNavigation3D
908*03ce13f7SAndroid Build Coastguard Worker        VulkanPostProcessing
909*03ce13f7SAndroid Build Coastguard Worker        VulkanPVRScopeExample
910*03ce13f7SAndroid Build Coastguard Worker        VulkanPVRScopeRemote
911*03ce13f7SAndroid Build Coastguard Worker    )
912*03ce13f7SAndroid Build Coastguard Worker
913*03ce13f7SAndroid Build Coastguard Worker    set(PVR_TARGET_OTHER
914*03ce13f7SAndroid Build Coastguard Worker        glslang
915*03ce13f7SAndroid Build Coastguard Worker        glslangValidator
916*03ce13f7SAndroid Build Coastguard Worker        glslang-default-resource-limits
917*03ce13f7SAndroid Build Coastguard Worker        OSDependent
918*03ce13f7SAndroid Build Coastguard Worker        pugixml
919*03ce13f7SAndroid Build Coastguard Worker        PVRAssets
920*03ce13f7SAndroid Build Coastguard Worker        PVRCamera
921*03ce13f7SAndroid Build Coastguard Worker        PVRCore
922*03ce13f7SAndroid Build Coastguard Worker        PVRPfx
923*03ce13f7SAndroid Build Coastguard Worker        PVRShell
924*03ce13f7SAndroid Build Coastguard Worker        PVRUtilsVk
925*03ce13f7SAndroid Build Coastguard Worker        PVRVk
926*03ce13f7SAndroid Build Coastguard Worker        SPIRV
927*03ce13f7SAndroid Build Coastguard Worker        spirv-remap
928*03ce13f7SAndroid Build Coastguard Worker        SPVRemapper
929*03ce13f7SAndroid Build Coastguard Worker        uninstall
930*03ce13f7SAndroid Build Coastguard Worker    )
931*03ce13f7SAndroid Build Coastguard Worker
932*03ce13f7SAndroid Build Coastguard Worker    set(PVR_VULKAN_TARGET
933*03ce13f7SAndroid Build Coastguard Worker        ${PVR_VULKAN_TARGET_GOOD}
934*03ce13f7SAndroid Build Coastguard Worker        ${PVR_VULKAN_TARGET_OTHER}
935*03ce13f7SAndroid Build Coastguard Worker    )
936*03ce13f7SAndroid Build Coastguard Worker
937*03ce13f7SAndroid Build Coastguard Worker    foreach(pvr_target ${PVR_VULKAN_TARGET})
938*03ce13f7SAndroid Build Coastguard Worker        add_dependencies(${pvr_target} vk_swiftshader)
939*03ce13f7SAndroid Build Coastguard Worker    endforeach()
940*03ce13f7SAndroid Build Coastguard Worker
941*03ce13f7SAndroid Build Coastguard Worker    foreach(pvr_target ${PVR_VULKAN_TARGET_GOOD})
942*03ce13f7SAndroid Build Coastguard Worker        set_target_properties(${pvr_target} PROPERTIES FOLDER Samples)
943*03ce13f7SAndroid Build Coastguard Worker    endforeach()
944*03ce13f7SAndroid Build Coastguard Worker
945*03ce13f7SAndroid Build Coastguard Worker    foreach(pvr_target ${PVR_TARGET_OTHER} ${PVR_VULKAN_TARGET_OTHER})
946*03ce13f7SAndroid Build Coastguard Worker        set_target_properties(${pvr_target} PROPERTIES FOLDER Samples/PowerVR-Build)
947*03ce13f7SAndroid Build Coastguard Worker    endforeach()
948*03ce13f7SAndroid Build Coastguard Workerendif()
949*03ce13f7SAndroid Build Coastguard Worker
950*03ce13f7SAndroid Build Coastguard Workerif(BUILD_VULKAN_WRAPPER)
951*03ce13f7SAndroid Build Coastguard Worker    if (NOT TARGET glslang)
952*03ce13f7SAndroid Build Coastguard Worker        add_subdirectory(${THIRD_PARTY_DIR}/glslang)
953*03ce13f7SAndroid Build Coastguard Worker    endif()
954*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/VulkanWrapper) # Add VulkanWrapper target
955*03ce13f7SAndroid Build Coastguard Workerendif()
956*03ce13f7SAndroid Build Coastguard Worker
957*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_TESTS)
958*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/ReactorUnitTests) # Add ReactorUnitTests target
959*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/MathUnitTests) # Add math-unittests target
960*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/SystemUnitTests) # Add system-unittests target
961*03ce13f7SAndroid Build Coastguard Workerendif()
962*03ce13f7SAndroid Build Coastguard Worker
963*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_BENCHMARKS)
964*03ce13f7SAndroid Build Coastguard Worker    if (NOT TARGET benchmark::benchmark)
965*03ce13f7SAndroid Build Coastguard Worker        set(BENCHMARK_ENABLE_TESTING FALSE CACHE BOOL FALSE FORCE)
966*03ce13f7SAndroid Build Coastguard Worker        add_subdirectory(${THIRD_PARTY_DIR}/benchmark)
967*03ce13f7SAndroid Build Coastguard Worker        set_target_properties(benchmark PROPERTIES FOLDER "third_party")
968*03ce13f7SAndroid Build Coastguard Worker        set_target_properties(benchmark_main PROPERTIES FOLDER "third_party")
969*03ce13f7SAndroid Build Coastguard Worker    endif()
970*03ce13f7SAndroid Build Coastguard Worker
971*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/PipelineBenchmarks) # Add PipelineBenchmarks target
972*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/ReactorBenchmarks) # Add ReactorBenchmarks target
973*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/SystemBenchmarks) # Add system-benchmarks target
974*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/VulkanBenchmarks) # Add VulkanBenchmarks target
975*03ce13f7SAndroid Build Coastguard Workerendif()
976*03ce13f7SAndroid Build Coastguard Worker
977*03ce13f7SAndroid Build Coastguard Workerif(SWIFTSHADER_BUILD_TESTS)
978*03ce13f7SAndroid Build Coastguard Worker    add_subdirectory(${TESTS_DIR}/VulkanUnitTests) # Add VulkanUnitTests target
979*03ce13f7SAndroid Build Coastguard Workerendif()
980