Various cleanups to CMake files.

 - Only request Python3 once.
 - Put conditionals around add_subdirectory instead of the file itself.
 - Cleanup dawn/glfw/CMakelists.txt a bit to make it simpler.

Bug: None
Change-Id: I5a8d869eaba30a9d75b8ca5d96459978ec22792e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/181462
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 082dca7..9e29093 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -369,8 +369,8 @@
   message(STATUS "Using provided LIB_FUZZING_ENGINE options: ${TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS}")
 endif()
 
-message(STATUS "Using python3")
 find_package(Python3 REQUIRED)
+message(STATUS "Dawn: using python at ${Python3_EXECUTABLE}")
 
 ################################################################################
 # common_compile_options - sets compiler and linker options common for dawn and
@@ -562,7 +562,6 @@
 set(BUILD_SHARED_LIBS 0)
 add_subdirectory(src/tint)
 set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_SAVED})
-
 add_subdirectory(generator)
 add_subdirectory(src/dawn)
 
diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt
index aca1d28..9e643ad 100644
--- a/generator/CMakeLists.txt
+++ b/generator/CMakeLists.txt
@@ -25,9 +25,6 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-find_package(Python3 REQUIRED)
-message(STATUS "Dawn: using python at ${Python3_EXECUTABLE}")
-
 # Check for Jinja2
 if (NOT DAWN_JINJA2_DIR)
     message(STATUS "Dawn: Using system jinja2")
diff --git a/src/dawn/CMakeLists.txt b/src/dawn/CMakeLists.txt
index 9b0ed37..4bb4986 100644
--- a/src/dawn/CMakeLists.txt
+++ b/src/dawn/CMakeLists.txt
@@ -34,36 +34,18 @@
 add_subdirectory(platform)
 add_subdirectory(native)
 add_subdirectory(wire)
-# TODO(dawn:269): Remove once the implementation-based swapchains are removed.
 add_subdirectory(utils)
-add_subdirectory(glfw)
-add_subdirectory(tests/benchmarks)
 
+if (DAWN_BUILD_BENCHMARKS)
+    add_subdirectory(tests/benchmarks)
+endif()
+if(DAWN_USE_GLFW)
+    add_subdirectory(glfw)
+endif()
 if (DAWN_BUILD_SAMPLES)
-    #TODO(dawn:269): Add this once implementation-based swapchains are removed.
-    #add_subdirectory(src/utils)
     add_subdirectory(samples)
 endif()
-
 if (DAWN_BUILD_NODE_BINDINGS)
-    set(NODE_BINDING_DEPS
-        ${NODE_ADDON_API_DIR}
-        ${NODE_API_HEADERS_DIR}
-        ${WEBGPU_IDL_PATH}
-    )
-    foreach(DEP ${NODE_BINDING_DEPS})
-        if (NOT EXISTS ${DEP})
-            message(FATAL_ERROR
-                "DAWN_BUILD_NODE_BINDINGS requires missing dependency '${DEP}'\n"
-                "Please follow the 'Fetch dependencies' instructions at:\n"
-                "./src/dawn/node/README.md"
-            )
-        endif()
-    endforeach()
-    if (NOT CMAKE_POSITION_INDEPENDENT_CODE)
-        message(FATAL_ERROR "DAWN_BUILD_NODE_BINDINGS requires building with DAWN_ENABLE_PIC")
-    endif()
-
     add_subdirectory(node)
 endif()
 
diff --git a/src/dawn/glfw/CMakeLists.txt b/src/dawn/glfw/CMakeLists.txt
index 1cefdb2..2e5d56c 100644
--- a/src/dawn/glfw/CMakeLists.txt
+++ b/src/dawn/glfw/CMakeLists.txt
@@ -25,9 +25,7 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-if(DAWN_USE_GLFW)
-
-add_library(dawn_glfw STATIC)
+add_library(dawn_glfw)
 common_compile_options(dawn_glfw)
 target_sources(dawn_glfw
   INTERFACE
@@ -37,25 +35,21 @@
 )
 target_link_libraries(dawn_glfw
   PUBLIC
-    glfw
     dawncpp_headers
-    dawn_common
   PRIVATE
+    glfw
+    dawn_common
     dawn_internal_config
 )
 
-target_compile_definitions(dawn_glfw PRIVATE "WGPU_IMPLEMENTATION")
+target_compile_definitions(dawn_glfw PRIVATE "WGPU_GLFW_IMPLEMENTATION")
 if(BUILD_SHARED_LIBS)
-    target_compile_definitions(dawn_glfw PRIVATE "WGPU_SHARED_LIBRARY")
+    target_compile_definitions(dawn_glfw PRIVATE "WGPU_GLFW_SHARED_LIBRARY")
 endif()
 
 if (DAWN_ENABLE_METAL)
     target_link_libraries(dawn_glfw PRIVATE "-framework Metal")
-    target_sources(dawn_glfw PRIVATE
-        "utils_metal.mm"
-    )
+    target_sources(dawn_glfw PRIVATE "utils_metal.mm")
 endif()
 
 add_library(webgpu_glfw ALIAS dawn_glfw)
-
-endif()
diff --git a/src/dawn/node/CMakeLists.txt b/src/dawn/node/CMakeLists.txt
index e0fe9b7..d8860f6 100644
--- a/src/dawn/node/CMakeLists.txt
+++ b/src/dawn/node/CMakeLists.txt
@@ -25,6 +25,24 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+set(NODE_BINDING_DEPS
+    ${NODE_ADDON_API_DIR}
+    ${NODE_API_HEADERS_DIR}
+    ${WEBGPU_IDL_PATH}
+)
+foreach(DEP ${NODE_BINDING_DEPS})
+    if (NOT EXISTS ${DEP})
+        message(FATAL_ERROR
+            "DAWN_BUILD_NODE_BINDINGS requires missing dependency '${DEP}'\n"
+            "Please follow the 'Fetch dependencies' instructions at:\n"
+            "./src/dawn/node/README.md"
+        )
+    endif()
+endforeach()
+if (NOT CMAKE_POSITION_INDEPENDENT_CODE)
+    message(FATAL_ERROR "DAWN_BUILD_NODE_BINDINGS requires building with DAWN_ENABLE_PIC")
+endif()
+
 set(DAWN_NODE_GEN_DIR "${DAWN_BUILD_GEN_DIR}/node")
 set(IDLGEN_TOOL_DIR   "${PROJECT_SOURCE_DIR}/tools/src/cmd/idlgen")
 
diff --git a/src/dawn/tests/benchmarks/CMakeLists.txt b/src/dawn/tests/benchmarks/CMakeLists.txt
index c5af722..fcbd266 100644
--- a/src/dawn/tests/benchmarks/CMakeLists.txt
+++ b/src/dawn/tests/benchmarks/CMakeLists.txt
@@ -25,18 +25,19 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-if (${DAWN_BUILD_BENCHMARKS})
-  add_executable(dawn_benchmarks
+add_executable(dawn_benchmarks
     "NullDeviceSetup.cpp"
     "NullDeviceSetup.h"
     "ObjectCreation.cpp"
-  )
-  set_target_properties(dawn_benchmarks PROPERTIES FOLDER "Benchmarks")
+)
+set_target_properties(dawn_benchmarks PROPERTIES FOLDER "Benchmarks")
 
-  target_include_directories(dawn_benchmarks PUBLIC "${PROJECT_SOURCE_DIR}/include")
-  target_include_directories(dawn_benchmarks PUBLIC "${PROJECT_SOURCE_DIR}/src")
+target_include_directories(dawn_benchmarks PUBLIC
+    "${PROJECT_SOURCE_DIR}/include"
+    "${PROJECT_SOURCE_DIR}/src"
+)
 
-  target_link_libraries(dawn_benchmarks PRIVATE
+target_link_libraries(dawn_benchmarks PRIVATE
     benchmark::benchmark
     benchmark::benchmark_main
     dawn_common
@@ -44,5 +45,5 @@
     dawn_utils
     dawncpp_headers
     dawncpp
-    dawn_proc)
-endif()
+    dawn_proc
+)
diff --git a/src/dawn/utils/CMakeLists.txt b/src/dawn/utils/CMakeLists.txt
index 891f1de..b437164 100644
--- a/src/dawn/utils/CMakeLists.txt
+++ b/src/dawn/utils/CMakeLists.txt
@@ -78,7 +78,3 @@
 elseif(UNIX)
     target_sources(dawn_utils PRIVATE "PosixTimer.cpp")
 endif()
-
-if (DAWN_ENABLE_METAL)
-    target_link_libraries(dawn_utils PRIVATE "-framework Metal")
-endif()
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 17c4aab..8f3e3ae 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -32,8 +32,6 @@
 # It is particularly interesting when building dawn as a subdirectory in
 # a parent project that does not want to use depot_tools.
 if (${DAWN_FETCH_DEPENDENCIES})
-    find_package(Python3 REQUIRED)
-
     set(EXTRA_FETCH_ARGS)
     if (NOT TARGET gmock AND ${TINT_BUILD_TESTS})
         list(APPEND EXTRA_FETCH_ARGS --use-test-deps)
@@ -76,6 +74,7 @@
 
 if(NOT TARGET glslang AND (${TINT_BUILD_GLSL_WRITER} OR ${TINT_BUILD_GLSL_VALIDATOR}) AND ${TINT_BUILD_CMD_TOOLS})
     set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "" FORCE)
+    set(ENABLE_OPT OFF CACHE BOOL "" FORCE)
     add_subdirectory("${DAWN_THIRD_PARTY_DIR}/vulkan-deps/glslang/src" "${CMAKE_CURRENT_BINARY_DIR}/glslang" EXCLUDE_FROM_ALL)
 endif()