# Copyright 2016 The SwiftShader Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/config/c++/c++.gni") import("//build/config/compiler/compiler.gni") import("//build/config/mips.gni") import("//build/config/sysroot.gni") import("src/Reactor/reactor.gni") config("swiftshader_config") { defines = [] if (is_win) { cflags = [ "/GS", # Detects some buffer overruns "/Zc:wchar_t", "/EHs-c-", # Disable C++ exceptions "/nologo", "/Gd", # Default calling convention # Disable MSVC warnings about std::aligned_storage being broken before VS 2017 15.8 "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", ] if (!use_custom_libcxx) { # Disable EH usage in STL headers. # libc++ uses a predefined macro to control whether to use exceptions, so # defining this macro is unnecessary. Defining _HAS_EXCEPTIONS to 0 also # breaks libc++ because it depends on MSVC headers that only provide # certain declarations if _HAS_EXCEPTIONS is 1. defines += [ "_HAS_EXCEPTIONS=0", ] } defines += [ "_CRT_SECURE_NO_DEPRECATE", "NOMINMAX", "_WINDLL", "NO_SANITIZE_FUNCTION=", ] if (!is_debug) { defines += [ "ANGLE_DISABLE_TRACE" ] } # Diable some MSVC warnings. if (!is_clang) { cflags += [ "/wd4065", # switch statement contains 'default' but no 'case' labels "/wd4309", # Truncation of constant value. See PixelRoutine.cpp casts of signed shorts. ] } cflags_cc = [ "/std:c++17" ] } else { cflags = [ "-fno-exceptions", "-fno-operator-names", ] cflags_cc = [ "-std=c++17" ] # On macOS for the ARM architecture, some C++17 features require version 10.14, # while Chrome must support 10.11 (El Capitan). However, the first 'Apple Silicon' # devices launched with macOS 11.0 (Big Sur). # TODO(b/174843857): Remove once Chrome demands macOS 10.14. if (is_mac && current_cpu == "arm64") { cflags += [ "-isysroot", rebase_path(sysroot, root_build_dir), "-mmacosx-version-min=10.14.0", ] } defines += [ "__STDC_CONSTANT_MACROS", "__STDC_LIMIT_MACROS", "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))", ] if (is_debug) { cflags += [ "-g", "-g3", ] } else { # Release # All Release builds use function/data sections to make the shared libraries smaller cflags += [ "-ffunction-sections", "-fdata-sections", "-fomit-frame-pointer", "-Os", ] defines += [ "ANGLE_DISABLE_TRACE", "NDEBUG", ] } if (current_cpu == "x64") { # 64 bit version cflags += [ "-m64", "-fPIC", "-march=x86-64", "-mtune=generic", ] } else if (current_cpu == "x86") { # 32 bit version cflags += [ "-m32", "-msse2", "-mfpmath=sse", "-march=pentium4", "-mtune=generic", ] } else if (target_cpu == "mipsel" && current_cpu == target_cpu) { cflags += [ "-EL", "-fPIC", "-mhard-float", "-mfp32", "-mxgot", ] if (mips_arch_variant == "r1") { cflags += [ "-march=mips32", ] } else { cflags += [ "-march=mips32r2", ] } } else if (target_cpu == "mips64el" && current_cpu == target_cpu) { cflags += [ "-EL", "-arch=mips64r2", "-mabi=64", "-fPIC", "-mxgot", ] } if (is_linux || is_chromeos) { ldflags = [ "-Wl,--gc-sections" ] if (current_cpu == "mipsel") { ldflags += [ "-Wl,--hash-style=sysv", ] if (mips_arch_variant == "r1") { ldflags += [ "-mips32", ] } else { ldflags += [ "-mips32r2", ] } } else if (current_cpu == "mips64el") { ldflags += [ "-Wl,--hash-style=sysv", "-mips64r2", ] } else { ldflags += [ "-Wl,--hash-style=both" ] } # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532) if (use_gold && (current_cpu == "x86" || current_cpu == "mipsel")) { ldflags += [ "-Wl,--icf=none" ] } } } } source_set("vertex_routine_fuzzer") { sources = [ "tests/fuzzers/VertexRoutineFuzzer.cpp" ] if (is_win) { cflags = [ "/wd4201", # nameless struct/union "/wd4065", # switch statement contains 'default' but no 'case' labels "/wd5030", # attribute is not recognized ] } include_dirs = [ "src/", ] deps = [ "src/OpenGL/libGLESv2:swiftshader_libGLESv2_static", ] } group("swiftshader") { data_deps = [ "src/OpenGL/libGLESv2:swiftshader_libGLESv2", "src/OpenGL/libEGL:swiftshader_libEGL", ] } if (build_with_chromium) { group("swiftshader_tests") { testonly = true data_deps = [ "tests/GLESUnitTests:swiftshader_unittests", "tests/SystemUnitTests:swiftshader_system_unittests", ] if (supports_llvm) { data_deps += [ "tests/ReactorUnitTests:swiftshader_reactor_llvm_unittests" ] } if (supports_subzero) { data_deps += [ "tests/ReactorUnitTests:swiftshader_reactor_subzero_unittests" ] } } }