Update to gn files for Windows

This cl allows SwiftShader to be built on Windows within Chromium

Change-Id: I0fc9ec1dfc5012cc310695e13edc64c639b23fda
Reviewed-on: https://swiftshader-review.googlesource.com/5680
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 318d422..37e34b0 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 config("swiftshader_config") {
-if (is_clang) {
+  if (is_clang) {
     cflags = [
       "-std=c++11",
     ]
diff --git a/src/Common/BUILD.gn b/src/Common/BUILD.gn
index 71ccbb9..5d1fc65 100644
--- a/src/Common/BUILD.gn
+++ b/src/Common/BUILD.gn
@@ -22,10 +22,15 @@
 
     if (!is_debug) {
       cflags += [
-        "-DNDEBUG",
         "-DANGLE_DISABLE_TRACE",
       ]
     }
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
+      ]
+    }
   }
 }
 
diff --git a/src/Main/BUILD.gn b/src/Main/BUILD.gn
index 254256f..ac84b5b 100644
--- a/src/Main/BUILD.gn
+++ b/src/Main/BUILD.gn
@@ -19,14 +19,19 @@
       "-DLOG_TAG=\"swiftshader_main\"",
       "-msse2",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_main") {
@@ -57,6 +62,14 @@
     ]
   }
 
+  if (host_os == "win") {
+    configs -= [
+      "//build/config/win:unicode"
+    ]
+    libs = [
+      "dxguid.lib" # For FrameBufferDD
+    ]
+  }
   configs += [
     ":swiftshader_main_private_config",
   ]
diff --git a/src/OpenGL/common/BUILD.gn b/src/OpenGL/common/BUILD.gn
index 0a23385..653db78 100644
--- a/src/OpenGL/common/BUILD.gn
+++ b/src/OpenGL/common/BUILD.gn
@@ -18,14 +18,20 @@
     cflags = [
       "-DLOG_TAG=\"swiftshader_opengl_common\"",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
+        "/wd4324", # structure was padded due to alignment specifier
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_opengl_common") {
diff --git a/src/OpenGL/compiler/BUILD.gn b/src/OpenGL/compiler/BUILD.gn
index a7b4c2b..e0c7171 100644
--- a/src/OpenGL/compiler/BUILD.gn
+++ b/src/OpenGL/compiler/BUILD.gn
@@ -19,14 +19,22 @@
       "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
       "-Wno-sign-compare",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } 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 += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_opengl_compiler") {
diff --git a/src/OpenGL/compiler/preprocessor/BUILD.gn b/src/OpenGL/compiler/preprocessor/BUILD.gn
index 6c6ff25..f5feb01 100644
--- a/src/OpenGL/compiler/preprocessor/BUILD.gn
+++ b/src/OpenGL/compiler/preprocessor/BUILD.gn
@@ -18,14 +18,21 @@
     cflags = [
       "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } 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)
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_opengl_preprocessor") {
diff --git a/src/OpenGL/libEGL/BUILD.gn b/src/OpenGL/libEGL/BUILD.gn
index ddd4b94..bed0df0 100644
--- a/src/OpenGL/libEGL/BUILD.gn
+++ b/src/OpenGL/libEGL/BUILD.gn
@@ -21,14 +21,22 @@
       "-DEGL_EGLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/DEGLAPI=",
+        "/DEGL_EGLEXT_PROTOTYPES",
+        "/wd4201", # nameless struct/union
+        "/wd4065", # switch statement contains 'default' but no 'case' labels
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 shared_library("swiftshader_libEGL") {
@@ -55,6 +63,10 @@
     sources += [
       "OSXUtils.mm",
     ]
+  } else if (host_os == "win") {
+    configs -= [
+      "//build/config/win:unicode"
+    ]
   }
 
   configs += [
diff --git a/src/OpenGL/libGLESv2/BUILD.gn b/src/OpenGL/libGLESv2/BUILD.gn
index 90a811f..2f8f935 100644
--- a/src/OpenGL/libGLESv2/BUILD.gn
+++ b/src/OpenGL/libGLESv2/BUILD.gn
@@ -25,14 +25,24 @@
       "-DGL_GLEXT_PROTOTYPES",
       "-Wno-sign-compare",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } 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
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 shared_library("swiftshader_libGLESv2") {
@@ -69,6 +79,12 @@
     "VertexDataManager.cpp",
   ]
 
+  if (host_os == "win") {
+    configs -= [
+      "//build/config/win:unicode"
+    ]
+  }
+
   configs += [
     ":swiftshader_libGLESv2_private_config",
   ]
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index aa65be2..98b33fc 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -22,14 +22,20 @@
       "-D__STDC_CONSTANT_MACROS",
       "-D__STDC_LIMIT_MACROS",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
+        "/wd4245", # conversion from int to unsigned int (llvm)
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_reactor") {
@@ -48,6 +54,9 @@
     sources += [
       "DLL.cpp",
     ]
+    configs -= [
+      "//build/config/win:unicode"
+    ]
   }
 
   configs += [
diff --git a/src/Renderer/BUILD.gn b/src/Renderer/BUILD.gn
index ee5213d..2cdcf78 100644
--- a/src/Renderer/BUILD.gn
+++ b/src/Renderer/BUILD.gn
@@ -21,14 +21,20 @@
       "-msse2",
       "-Wno-sign-compare",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
+        "/wd4324", # structure was padded due to alignment specifier
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_renderer") {
@@ -58,6 +64,12 @@
     "VertexProcessor.cpp",
   ]
 
+  if (host_os == "win") {
+    configs -= [
+      "//build/config/win:unicode"
+    ]
+  }
+
   configs += [
     ":swiftshader_renderer_private_config",
   ]
diff --git a/src/Shader/BUILD.gn b/src/Shader/BUILD.gn
index 3e9a96c..a5e9262 100644
--- a/src/Shader/BUILD.gn
+++ b/src/Shader/BUILD.gn
@@ -19,14 +19,20 @@
       "-DLOG_TAG=\"swiftshader_shader\"",
       "-fno-operator-names",
     ]
-
-    if (!is_debug) {
-      cflags += [
-        "-DNDEBUG",
-        "-DANGLE_DISABLE_TRACE",
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4201", # nameless struct/union
+        "/wd4324", # structure was padded due to alignment specifier
       ]
     }
   }
+
+  if (!is_debug) {
+    cflags += [
+      "-DANGLE_DISABLE_TRACE",
+    ]
+  }
 }
 
 source_set("swiftshader_shader") {
diff --git a/third_party/LLVM/BUILD.gn b/third_party/LLVM/BUILD.gn
index ba7ab69..d886ad5 100644
--- a/third_party/LLVM/BUILD.gn
+++ b/third_party/LLVM/BUILD.gn
@@ -28,6 +28,26 @@
       "-Wno-deprecated-declarations",
       "-Wno-unused-variable",
     ]
+  } else {
+    if (host_os == "win") {
+      cflags = [
+        "/wd4005",
+        "/wd4065",
+        "/wd4146",
+        "/wd4245",
+        "/wd4267",
+        "/wd4310",
+        "/wd4319",
+        "/wd4334",
+        "/wd4389",
+        "/wd4624",
+        "/wd4701",
+        "/wd4702",
+        "/wd4703",
+        "/wd4706",
+        "/wd4800",
+      ]
+    }
   }
 }
 
@@ -407,13 +427,23 @@
     "lib/VMCore/Verifier.cpp",
   ]
 
+  if (host_os == "win") {
+    configs -= [
+      "//build/config/win:unicode"
+    ]
+  }
   configs += [
     ":swiftshader_llvm_private_config",
   ]
 
   include_dirs = [
-    "include-linux",
     "include",
     "lib/Target/X86",
   ]
+
+  if (host_os == "linux") {
+    include_dirs += [
+      "include-linux",
+    ]
+  }
 }
\ No newline at end of file