Update to Linux build files for Chromium

Although SwiftShader was building properly on the build bots, it
wasn't exporting its symbols properly. I compared the flags used in
the BUILD.gn files and in the CMakeLists.txt file and attempted to
get both build systems to use the same flags and options.

Change-Id: Idc73d4ad5b45311881e88720bf611e25110dcc70
Reviewed-on: https://swiftshader-review.googlesource.com/8576
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index ae6087e..3665e71 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -31,10 +31,21 @@
       cflags += [ "/DANGLE_DISABLE_TRACE" ]
     }
   } else {
-    cflags = [ "-std=c++11" ]
+    cflags = [
+      "-std=c++11",
+      "-Wall",
+      "-fexceptions",
+      "-fvisibility=protected",
+      "-fno-operator-names",
+      "-D__STDC_CONSTANT_MACROS",
+      "-D__STDC_LIMIT_MACROS",
+    ]
 
     if (is_debug) {
-      cflags += [ "-g" ]
+      cflags += [
+        "-g",
+        "-g3",
+      ]
     } else {  # Release
       # All Release builds use function/data sections to make the shared libraries smaller
       cflags += [
@@ -42,24 +53,30 @@
         "-fdata-sections",
         "-fomit-frame-pointer",
         "-DANGLE_DISABLE_TRACE",
+        "-DNDEBUG",
+        "-O2",
+        "-Os",
       ]
-
-      # Choose the right Release architecture
-      if (target_cpu == "x64") {
-        cflags += [ "-march=core2" ]
-      } else {  # 32
-        cflags += [ "-march=i686" ]
-      }
     }
 
     if (target_cpu == "x64") {  # 64 bit version
       cflags += [
         "-m64",
         "-fPIC",
+        "-march=core2",
       ]
     } else {  # 32 bit version
-      cflags += [ "-m32" ]
+      cflags += [
+        "-m32",
+        "-msse2",
+        "-march=i686",
+      ]
     }
+
+    ldflags = [
+      "-Wl,--hash-style=both",
+      "-Wl,--gc-sections",
+    ]
   }
 }
 
diff --git a/src/OpenGL/libEGL/BUILD.gn b/src/OpenGL/libEGL/BUILD.gn
index 42c77f8..7d11775 100644
--- a/src/OpenGL/libEGL/BUILD.gn
+++ b/src/OpenGL/libEGL/BUILD.gn
@@ -25,7 +25,7 @@
   } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_libEGL\"",
-      "-DEGLAPI=",
+      "-DEGLAPI=__attribute__((visibility(\"protected\")))",
       "-DEGL_EGLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
@@ -70,6 +70,8 @@
     ldflags = [ "/DEF:" + rebase_path("libGLESv2.def", root_build_dir) ]
   } else if (is_linux) {
     sources += [ "../../Main/libX11.cpp" ]
+    ldflags =
+        [ "-Wl,--version-script=" + rebase_path("exports.map", root_build_dir) ]
   }
 
   configs -= [ "//build/config/compiler:chromium_code" ]
diff --git a/src/OpenGL/libGLESv2/BUILD.gn b/src/OpenGL/libGLESv2/BUILD.gn
index 1b798a3..80adf83 100644
--- a/src/OpenGL/libGLESv2/BUILD.gn
+++ b/src/OpenGL/libGLESv2/BUILD.gn
@@ -36,7 +36,7 @@
       "-D__STDC_CONSTANT_MACROS",
       "-D__STDC_LIMIT_MACROS",
       "-DGL_API=",
-      "-DGL_APICALL=",
+      "-DGL_APICALL=__attribute__((visibility(\"protected\")))",
       "-DGL_GLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
@@ -83,6 +83,9 @@
   if (is_win) {
     configs -= [ "//build/config/win:unicode" ]
     ldflags = [ "/DEF:" + rebase_path("libGLESv2.def", root_build_dir) ]
+  } else if (is_linux) {
+    ldflags =
+        [ "-Wl,--version-script=" + rebase_path("exports.map", root_build_dir) ]
   }
 
   configs -= [ "//build/config/compiler:chromium_code" ]