• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#    http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import("//build/config/c++/c++.gni")
16import("//build/config/compiler/compiler.gni")
17
18config("swiftshader_config") {
19  defines = []
20
21  if (is_win) {
22    cflags = [
23      "/GS",  # Detects some buffer overruns
24      "/Zc:wchar_t",
25      "/EHs-c-",  # Disable C++ exceptions
26      "/nologo",
27      "/Gd",  # Default calling convention
28    ]
29
30    if (!use_custom_libcxx) {
31      # Disable EH usage in STL headers.
32      # libc++ uses a predefined macro to control whether to use exceptions, so
33      # defining this macro is unnecessary. Defining _HAS_EXCEPTIONS to 0 also
34      # breaks libc++ because it depends on MSVC headers that only provide
35      # certain declarations if _HAS_EXCEPTIONS is 1.
36      defines += [
37        "_HAS_EXCEPTIONS=0",
38      ]
39    }
40
41    defines += [
42      "_CRT_SECURE_NO_DEPRECATE",
43      "NOMINMAX",
44      "_WINDLL",
45      "NO_SANITIZE_FUNCTION=",
46    ]
47
48    if (!is_debug) {
49      defines += [ "ANGLE_DISABLE_TRACE" ]
50    }
51  } else {
52    cflags = [
53      "-std=c++11",
54      "-fno-exceptions",
55      "-fno-operator-names",
56    ]
57
58    defines += [
59      "__STDC_CONSTANT_MACROS",
60      "__STDC_LIMIT_MACROS",
61      "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))",
62    ]
63
64    if (is_debug) {
65      cflags += [
66        "-g",
67        "-g3",
68      ]
69    } else {  # Release
70      # All Release builds use function/data sections to make the shared libraries smaller
71      cflags += [
72        "-ffunction-sections",
73        "-fdata-sections",
74        "-fomit-frame-pointer",
75        "-Os",
76      ]
77
78      defines += [
79        "ANGLE_DISABLE_TRACE",
80        "NDEBUG",
81      ]
82    }
83
84    if (target_cpu == "x64") {  # 64 bit version
85      cflags += [
86        "-m64",
87        "-fPIC",
88        "-march=x86-64",
89        "-mtune=generic",
90      ]
91    } else {  # 32 bit version
92      cflags += [
93        "-m32",
94        "-msse2",
95        "-mfpmath=sse",
96        "-march=pentium4",
97        "-mtune=generic",
98      ]
99    }
100
101    if (is_linux) {
102      ldflags = [
103        "-Wl,--hash-style=both",
104        "-Wl,--gc-sections",
105      ]
106
107      # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
108      if (use_gold && target_cpu == "x86") {
109        ldflags += [ "-Wl,--icf=none" ]
110      }
111    }
112  }
113}
114
115source_set("vertex_routine_fuzzer") {
116  sources = [
117    "tests/fuzzers/VertexRoutineFuzzer.cpp"
118  ]
119  if (is_win) {
120    cflags = [
121      "/wd4201",  # nameless struct/union
122      "/wd4065",  # switch statement contains 'default' but no 'case' labels
123      "/wd5030",  # attribute is not recognized
124    ]
125  }
126  include_dirs = [
127    "src/",
128  ]
129  deps = [
130    "src/OpenGL/libGLESv2:swiftshader_libGLESv2_static",
131  ]
132}
133
134group("swiftshader") {
135  data_deps = [
136    "src/OpenGL/libGLESv2:swiftshader_libGLESv2",
137    "src/OpenGL/libEGL:swiftshader_libEGL",
138  ]
139}
140
141group("swiftshader_tests") {
142  testonly = true
143
144  data_deps = [
145    "tests/unittests:swiftshader_unittests",
146  ]
147}
148