[tint][build] Make <thread> an external library

Removes bespoke target code in CMakeLists.txt

Change-Id: Iff1d06c1d583e264a46dab0a1547e9d19a815beb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/147942
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index b21fd52..51c6b92 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -109,6 +109,10 @@
   }
 }
 
+source_set("thread") {
+  # GN doesn't appear to need to depend on any thread libraries.
+}
+
 source_set("metal") {
   frameworks = [
     "Foundation.framework",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index b9221b2..8e14741 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -426,18 +426,16 @@
             -Wno-weak-vtables
           )
         endif()
+      elseif(${DEPENDENCY} STREQUAL "glslang-res-limits")
+        target_link_libraries(${TARGET} PRIVATE
+          glslang-default-resource-limits
+        )
       elseif(${DEPENDENCY} STREQUAL "gtest")
         target_include_directories(${TARGET} PRIVATE ${gmock_SOURCE_DIR}/include)
         target_link_libraries(${TARGET} PRIVATE gmock)
       elseif(${DEPENDENCY} STREQUAL "metal")
-        find_library(FoundationFramework Foundation)
-        if(NOT FoundationFramework)
-          message(FATAL_ERROR "Foundation framework not found")
-        endif()
-        find_library(MetalFramework Metal)
-        if(NOT MetalFramework)
-          message(FATAL_ERROR "Metal framework not found")
-        endif()
+        find_library(FoundationFramework Foundation REQUIRED)
+        find_library(MetalFramework Metal REQUIRED)
         target_link_libraries(${TARGET} PRIVATE ${FoundationFramework} ${MetalFramework})
       elseif(${DEPENDENCY} STREQUAL "spirv-headers")
         tint_spvheaders_compile_options(${TARGET})
@@ -453,10 +451,9 @@
           "${TINT_SPIRV_TOOLS_DIR}/source"
           "${spirv-tools_BINARY_DIR}"
         )
-      elseif(${DEPENDENCY} STREQUAL "glslang-res-limits")
-        target_link_libraries(${TARGET} PRIVATE
-          glslang-default-resource-limits
-        )
+      elseif(${DEPENDENCY} STREQUAL "thread")
+        find_package(Threads REQUIRED)
+        target_link_libraries(${TARGET} PRIVATE Threads::Threads)
       elseif(${DEPENDENCY} STREQUAL "winsock")
         target_link_libraries(${TARGET} PRIVATE ws2_32)
       else()
@@ -503,9 +500,6 @@
 ################################################################################
 include("BUILD.cmake")
 
-find_package(Threads REQUIRED)
-target_link_libraries(tint_cmd_remote_compile_cmd PRIVATE Threads::Threads)
-
 ################################################################################
 # Additional fuzzer tests
 ################################################################################
diff --git a/src/tint/cmd/remote_compile/BUILD.cmake b/src/tint/cmd/remote_compile/BUILD.cmake
index a92b5bd..7ab34a5 100644
--- a/src/tint/cmd/remote_compile/BUILD.cmake
+++ b/src/tint/cmd/remote_compile/BUILD.cmake
@@ -36,6 +36,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_remote_compile_cmd cmd
+  "thread"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_cmd_remote_compile_cmd cmd
     tint_lang_msl_validate
diff --git a/src/tint/cmd/remote_compile/BUILD.gn b/src/tint/cmd/remote_compile/BUILD.gn
index 033196a6..4890389 100644
--- a/src/tint/cmd/remote_compile/BUILD.gn
+++ b/src/tint/cmd/remote_compile/BUILD.gn
@@ -28,6 +28,7 @@
   output_name = "tint_remote_compile"
   sources = [ "main.cc" ]
   deps = [
+    "${tint_src_dir}:thread",
     "${tint_src_dir}/lang/wgsl/ast",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/socket",
diff --git a/src/tint/externals.json b/src/tint/externals.json
index 4eb861e..649a650 100644
--- a/src/tint/externals.json
+++ b/src/tint/externals.json
@@ -14,6 +14,11 @@
         ],
         "Condition": "is_mac",
     },
+    "thread": {
+        "IncludePatterns": [
+            "thread"
+        ],
+    },
     "spirv-tools": {
         "IncludePatterns": [
             "spirv-tools/**"
diff --git a/tools/src/cmd/gen/build/BUILD.gn.tmpl b/tools/src/cmd/gen/build/BUILD.gn.tmpl
index ef7d1bf..be1b666 100644
--- a/tools/src/cmd/gen/build/BUILD.gn.tmpl
+++ b/tools/src/cmd/gen/build/BUILD.gn.tmpl
@@ -144,13 +144,14 @@
 */ -}}
 {{- define "ExternalDependencyTargets"}}
 {{-        if eq $.Name "abseil"             -}}"${tint_src_dir}:abseil",
+{{-   else if eq $.Name "glslang-res-limits" -}}"${tint_glslang_dir}:glslang_default_resource_limits_sources",
+{{-   else if eq $.Name "glslang"            -}}"${tint_glslang_dir}:glslang_lib_sources",
 {{-   else if eq $.Name "gtest"              -}}"${tint_src_dir}:gmock_and_gtest",
 {{-   else if eq $.Name "metal"              -}}"${tint_src_dir}:metal",
-{{-   else if eq $.Name "spirv-tools"        -}}"${tint_spirv_tools_dir}:spvtools_headers", "${tint_spirv_tools_dir}:spvtools_val",
-{{-   else if eq $.Name "spirv-opt-internal" -}}"${tint_spirv_tools_dir}:spvtools", "${tint_spirv_tools_dir}:spvtools_opt",
 {{-   else if eq $.Name "spirv-headers"      -}}"${tint_spirv_headers_dir}:spv_headers",
-{{-   else if eq $.Name "glslang"            -}}"${tint_glslang_dir}:glslang_lib_sources",
-{{-   else if eq $.Name "glslang-res-limits" -}}"${tint_glslang_dir}:glslang_default_resource_limits_sources",
+{{-   else if eq $.Name "spirv-opt-internal" -}}"${tint_spirv_tools_dir}:spvtools", "${tint_spirv_tools_dir}:spvtools_opt",
+{{-   else if eq $.Name "spirv-tools"        -}}"${tint_spirv_tools_dir}:spvtools_headers", "${tint_spirv_tools_dir}:spvtools_val",
+{{-   else if eq $.Name "thread"             -}}"${tint_src_dir}:thread",
 {{-   else if eq $.Name "winsock"            -}}"${tint_src_dir}:winsock",
 {{-   else                                   -}}{{Error (printf "unhandled external dependency '%v'" $.Name)}}
 {{-   end}}