Add missing files to LLVM's Build.gn

MCWasmObjectTargetWriter and TargetIntrinsicInfo never appear in the
file. ARMTargetStreamer is declared on all platforms so move it from
the ARM-only target to the shared target.

Bug: chromium:971333
Change-Id: I04229323af68e5b4d24a1d5ad6524c96460108eb
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/32428
Tested-by: Saman Sami <samans@chromium.org>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/swiftshader.gni b/src/swiftshader.gni
index 01efa20..f4b67fa 100644
--- a/src/swiftshader.gni
+++ b/src/swiftshader.gni
@@ -5,6 +5,16 @@
 # This file contains configs that need to be added or removed to all
 # SwiftShader libraries
 
+import("//build_overrides/build.gni")
+
+if (build_with_chromium) {
+  import("//build/config/sanitizers/sanitizers.gni")
+} else {
+  declare_args() {
+    is_ubsan_vptr = false
+  }
+}
+
 configs_to_add = []
 configs_to_delete = []
 
diff --git a/third_party/llvm-7.0/BUILD.gn b/third_party/llvm-7.0/BUILD.gn
index cc0c8f7..6fc8607 100644
--- a/third_party/llvm-7.0/BUILD.gn
+++ b/third_party/llvm-7.0/BUILD.gn
@@ -269,6 +269,7 @@
     "llvm/lib/MC/MCSymbolELF.cpp",
     "llvm/lib/MC/MCTargetOptions.cpp",
     "llvm/lib/MC/MCValue.cpp",
+    "llvm/lib/MC/MCWasmObjectTargetWriter.cpp",
     "llvm/lib/MC/MCWasmStreamer.cpp",
     "llvm/lib/MC/MCWin64EH.cpp",
     "llvm/lib/MC/MCWinCOFFStreamer.cpp",
@@ -295,11 +296,19 @@
     "llvm/lib/Object/WasmObjectFile.cpp",
     "llvm/lib/Object/WindowsResource.cpp",
     "llvm/lib/ProfileData/InstrProf.cpp",
+    "llvm/lib/Target/TargetIntrinsicInfo.cpp",
     "llvm/lib/Target/TargetLoweringObjectFile.cpp",
     "llvm/lib/Target/TargetMachine.cpp",
     "stubs/Stubs.cpp",
   ]
 
+  # This class is declared on all platforms but only used on ARM. UBSanVPtr
+  # builds require that all declared classes have a definition even if they're
+  # not used.
+  if (is_ubsan_vptr) {
+    sources += [ "llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp" ]
+  }
+
   configs = [ ":swiftshader_llvm_private_config" ]
 
   include_dirs = llvm_include_dirs
@@ -409,7 +418,6 @@
     "llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp",
     "llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp",
     "llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp",
-    "llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp",
     "llvm/lib/Target/ARM/MCTargetDesc/ARMMachORelocationInfo.cpp",
     "llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp",
     "llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp",
@@ -462,6 +470,11 @@
     "llvm/lib/Target/ARM/ARMOptimizeBarriersPass.cpp",
   ]
 
+  # When is_ubsan_vptr is true, this file is added to swiftshader_llvm instead.
+  if (!is_ubsan_vptr) {
+    sources += [ "llvm/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp" ]
+  }
+
   configs = [ ":swiftshader_llvm_private_config" ]
 
   include_dirs = llvm_include_dirs