OSDN Git Service

Memory leak fix
[android-x86/external-swiftshader.git] / BUILD.gn
index bfd68e2..7af9f6a 100644 (file)
--- a/BUILD.gn
+++ b/BUILD.gn
 # 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")
+
 config("swiftshader_config") {
-  defines = [ "STRICT_CONFORMANCE" ]  # Disables OpenGL ES 3.0
+  defines = []
 
   if (is_win) {
     cflags = [
       "/GS",  # Detects some buffer overruns
       "/Zc:wchar_t",
-      "/EHsc",
+      "/EHs-c-",  # Disable C++ exceptions
       "/nologo",
       "/Gd",  # Default calling convention
     ]
 
+    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) {
-      cflags += [ "/RTC1" ]  # Run-Time Error Checks
-    } else {
+    if (!is_debug) {
       defines += [ "ANGLE_DISABLE_TRACE" ]
     }
   } else {
     cflags = [
       "-std=c++11",
-      "-Wall",
-      "-fexceptions",
+      "-fno-exceptions",
       "-fno-operator-names",
     ]
 
     defines += [
       "__STDC_CONSTANT_MACROS",
       "__STDC_LIMIT_MACROS",
+      "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))",
     ]
 
     if (is_debug) {
@@ -59,7 +72,6 @@ config("swiftshader_config") {
         "-ffunction-sections",
         "-fdata-sections",
         "-fomit-frame-pointer",
-        "-O2",
         "-Os",
       ]
 
@@ -73,13 +85,16 @@ config("swiftshader_config") {
       cflags += [
         "-m64",
         "-fPIC",
-        "-march=core2",
+        "-march=x86-64",
+        "-mtune=generic",
       ]
     } else {  # 32 bit version
       cflags += [
         "-m32",
         "-msse2",
-        "-march=i686",
+        "-mfpmath=sse",
+        "-march=pentium4",
+        "-mtune=generic",
       ]
     }
 
@@ -88,10 +103,34 @@ config("swiftshader_config") {
         "-Wl,--hash-style=both",
         "-Wl,--gc-sections",
       ]
+
+      # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
+      if (use_gold && target_cpu == "x86") {
+        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",