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