Fixed build files for Windows clang

Made Windows files work for Windows clang.
Verified on Linux and Windows Visual Studio
compiler to make sure nothing was broken.

Change-Id: I82815491579cdfca602660279f6831c8820249f6
Reviewed-on: https://swiftshader-review.googlesource.com/7052
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Corentin Wallez <cwallez@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Common/BUILD.gn b/src/Common/BUILD.gn
index c68e9da..96c73f8 100644
--- a/src/Common/BUILD.gn
+++ b/src/Common/BUILD.gn
@@ -14,17 +14,15 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_common_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4201", # nameless struct/union
+    ]
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_common\"",
       "-msse2",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-      ]
-    }
   }
 }
 
diff --git a/src/Main/BUILD.gn b/src/Main/BUILD.gn
index 361ae54..849f49e 100644
--- a/src/Main/BUILD.gn
+++ b/src/Main/BUILD.gn
@@ -14,17 +14,23 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_main_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4201", # nameless struct/union
+    ]
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-overloaded-virtual",
+        "-Wno-string-conversion",
+        "-Wno-sign-compare",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_main\"",
       "-msse2",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-      ]
-    }
   }
 }
 
diff --git a/src/OpenGL/common/BUILD.gn b/src/OpenGL/common/BUILD.gn
index 97e2f05..bf80c44 100644
--- a/src/OpenGL/common/BUILD.gn
+++ b/src/OpenGL/common/BUILD.gn
@@ -14,17 +14,21 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_opengl_common_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4201", # nameless struct/union
+      "/wd4324", # structure was padded due to alignment specifier
+    ]
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-delete-incomplete",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_opengl_common\"",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-        "/wd4324", # structure was padded due to alignment specifier
-      ]
-    }
   }
 }
 
diff --git a/src/OpenGL/compiler/BUILD.gn b/src/OpenGL/compiler/BUILD.gn
index 0f958d3..89e54e3 100644
--- a/src/OpenGL/compiler/BUILD.gn
+++ b/src/OpenGL/compiler/BUILD.gn
@@ -14,7 +14,27 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_opengl_compiler_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4005", # macro redefinition (in autogenerated code)
+      "/wd4201", # nameless struct/union
+      "/wd4267", # conversion from size_t to int/unsigned int
+      "/wd4702", # unreachable code (in autogenerated code)
+    ]
+
+    if (!is_debug) {
+      cflags += [
+        "/wd4189", # local variable is initialized but not referenced (variables only used in ASSERTS)
+      ]
+    }
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-unused-function",
+        "-Wno-unused-variable",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
       "-Wno-sign-compare",
@@ -25,21 +45,6 @@
         "-Wno-unused-variable", # local variable is initialized but not referenced (variables only used in ASSERTS)
       ]
     }
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4005", # macro redefinition (in autogenerated code)
-        "/wd4201", # nameless struct/union
-        "/wd4267", # conversion from size_t to int/unsigned int
-        "/wd4702", # unreachable code (in autogenerated code)
-      ]
-
-      if (!is_debug) {
-        cflags += [
-          "/wd4189", # local variable is initialized but not referenced (variables only used in ASSERTS)
-        ]
-      }
-    }
   }
 }
 
diff --git a/src/OpenGL/compiler/preprocessor/BUILD.gn b/src/OpenGL/compiler/preprocessor/BUILD.gn
index 71ba50d..c0fe53b 100644
--- a/src/OpenGL/compiler/preprocessor/BUILD.gn
+++ b/src/OpenGL/compiler/preprocessor/BUILD.gn
@@ -14,18 +14,16 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_opengl_preprocessor_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4005", # macro redefinition (in autogenerated code)
+      "/wd4267", # conversion from size_t to int/unsigned int (in autogenerated code)
+      "/wd4702", # unreachable code (in autogenerated code)
+    ]
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4005", # macro redefinition (in autogenerated code)
-        "/wd4267", # conversion from size_t to int/unsigned int (in autogenerated code)
-        "/wd4702", # unreachable code (in autogenerated code)
-      ]
-    }
   }
 }
 
diff --git a/src/OpenGL/libEGL/BUILD.gn b/src/OpenGL/libEGL/BUILD.gn
index 485cda9..35692bb 100644
--- a/src/OpenGL/libEGL/BUILD.gn
+++ b/src/OpenGL/libEGL/BUILD.gn
@@ -14,23 +14,27 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_libEGL_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/DEGLAPI=",
+      "/DEGL_EGLEXT_PROTOTYPES",
+      "/DLIBEGL_EXPORTS",
+      "/wd4201", # nameless struct/union
+      "/wd4065", # switch statement contains 'default' but no 'case' labels
+    ]
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-unused-function",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_libEGL\"",
       "-DEGLAPI=",
       "-DEGL_EGLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/DEGLAPI=",
-        "/DEGL_EGLEXT_PROTOTYPES",
-        "/DLIBEGL_EXPORTS",
-        "/wd4201", # nameless struct/union
-        "/wd4065", # switch statement contains 'default' but no 'case' labels
-      ]
-    }
   }
 }
 
diff --git a/src/OpenGL/libGLESv2/BUILD.gn b/src/OpenGL/libGLESv2/BUILD.gn
index 5d3455d..a7c9a3b 100644
--- a/src/OpenGL/libGLESv2/BUILD.gn
+++ b/src/OpenGL/libGLESv2/BUILD.gn
@@ -14,10 +14,27 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_libGLESv2_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/DGL_API=",
+      "/DGL_APICALL=",
+      "/DGL_GLEXT_PROTOTYPES",
+      "/DLIBGLESV2_EXPORTS",
+      "/wd4201", # nameless struct/union
+      "/wd4324", # structure was padded due to alignment specifier
+    ]
+
+    if (is_clang)
+    {
+      cflags += [
+        "-Wno-delete-incomplete",
+        "-D__STDC_CONSTANT_MACROS",
+        "-D__STDC_LIMIT_MACROS",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_libGLESv2\"",
-      "-fno-operator-names",
       "-D__STDC_CONSTANT_MACROS",
       "-D__STDC_LIMIT_MACROS",
       "-DGL_API=",
@@ -25,17 +42,6 @@
       "-DGL_GLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/DGL_API=",
-        "/DGL_APICALL=",
-        "/DGL_GLEXT_PROTOTYPES",
-        "/DLIBGLESV2_EXPORTS",
-        "/wd4201", # nameless struct/union
-        "/wd4324", # structure was padded due to alignment specifier
-      ]
-    }
   }
 }
 
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index 86132fe..d6cb5c9 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -14,7 +14,18 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_reactor_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4201", # nameless struct/union
+      "/wd4245", # conversion from int to unsigned int (llvm)
+    ]
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-delete-incomplete",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_reactor\"",
       "-Wno-unused-local-typedef",
@@ -22,13 +33,6 @@
       "-D__STDC_CONSTANT_MACROS",
       "-D__STDC_LIMIT_MACROS",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-        "/wd4245", # conversion from int to unsigned int (llvm)
-      ]
-    }
   }
 }
 
diff --git a/src/Renderer/BUILD.gn b/src/Renderer/BUILD.gn
index 86e581a..cec4b3b 100644
--- a/src/Renderer/BUILD.gn
+++ b/src/Renderer/BUILD.gn
@@ -14,20 +14,24 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_renderer_private_config") {
-  if (is_clang) {
+  if (is_win) {
+    cflags = [
+      "/wd4201", # nameless struct/union
+      "/wd4324", # structure was padded due to alignment specifier
+    ]
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-delete-incomplete",
+        "-Wno-microsoft-template",
+      ]
+    }
+  } else {
     cflags = [
       "-DLOG_TAG=\"swiftshader_renderer\"",
-      "-fno-operator-names",
       "-msse2",
       "-Wno-sign-compare",
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-        "/wd4324", # structure was padded due to alignment specifier
-      ]
-    }
   }
 }
 
diff --git a/src/Shader/BUILD.gn b/src/Shader/BUILD.gn
index 7d15f85..288fe9c 100644
--- a/src/Shader/BUILD.gn
+++ b/src/Shader/BUILD.gn
@@ -14,18 +14,22 @@
 
 # Need a separate config to ensure the warnings are added to the end.
 config("swiftshader_shader_private_config") {
-  if (is_clang) {
+  if (is_win) {
     cflags = [
-      "-DLOG_TAG=\"swiftshader_shader\"",
-      "-fno-operator-names",
+      "/wd4201", # nameless struct/union
+      "/wd4324", # structure was padded due to alignment specifier
     ]
-  } else {
-    if (host_os == "win") {
-      cflags = [
-        "/wd4201", # nameless struct/union
-        "/wd4324", # structure was padded due to alignment specifier
+
+    if (is_clang) {
+      cflags += [
+        "-Wno-sign-compare",
+        "-Wno-delete-incomplete",
       ]
     }
+  } else {
+    cflags = [
+      "-DLOG_TAG=\"swiftshader_shader\"",
+    ]
   }
 }