Edit

kc3-lang/angle/third_party/vulkan-tools/BUILD.gn

Branch :

  • Show log

    Commit

  • Author : Tobin Ehlis
    Date : 2018-07-03 11:29:11
    Hash : c56adf60
    Message : Roll Vulkan repos fwd as of 7/3 Update Vulkan Layers/Loader/Tools/Header to latest versions as of 7/3. This updates the ICD build to use inputs from the Header repo instead of copies of the file from its own repo. Those copies have been deleted and some of the generation scripts in Tools repo have been renamed. Also put script dependencies from Vulkan-Headers repo into a shared var that's imported by the other repos to minimize repeat code. Bug: angleproject:2704 Change-Id: I98a18be055482dccdad8468115b4045d09342bfb Reviewed-on: https://chromium-review.googlesource.com/1124966 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>

  • third_party/vulkan-tools/BUILD.gn
  • # Copyright 2018 The ANGLE Project Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.
    
    # BUILD settings for Vulkan Tools where Mock ICD is located
    # Tools repo is at
    # https://github.com/KhronosGroup/Vulkan-Tools
    
    import("../../gni/angle.gni")
    import("$angle_root/third_party/vulkan-headers/vulkan_headers_script_deps.gni")
    
    vulkan_undefine_configs = []
    if (is_win) {
      vulkan_undefine_configs += [
        "//build/config/win:nominmax",
        "//build/config/win:unicode",
      ]
    }
    
    raw_vulkan_icd_dir = rebase_path("src", root_build_dir)
    raw_vulkan_headers_dir =
        rebase_path("$angle_root/third_party/vulkan-headers/src", root_build_dir)
    
    vulkan_gen_dir = "$target_gen_dir/angle/vulkan"
    raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)
    
    # Vulkan helper scripts
    # ---------------------
    
    helper_script_and_deps = [
      [
        "vulkan_gen_typemap_helper",
        "vk_typemap_helper.h",
        "vulkan_tools_helper_file_generator.py",
      ],
      [
        "vulkan_mock_icd_cpp",
        "mock_icd.cpp",
        "mock_icd_generator.py",
      ],
      [
        "vulkan_mock_icd_h",
        "mock_icd.h",
        "mock_icd_generator.py",
      ],
    ]
    
    # Python scripts needed for codegen, copy them to a temp dir
    # so that all dependencies are together
    copy("python_gen_deps") {
      sources = vulkan_registry_script_files + [
                  "src/scripts/common_codegen.py",
                  "src/scripts/kvt_genvk.py",
                  "src/scripts/mock_icd_generator.py",
                  "src/scripts/vulkan_tools_helper_file_generator.py",
                ]
      outputs = [
        "$vulkan_gen_dir/{{source_file_part}}",
      ]
    }
    
    foreach(script_and_dep, helper_script_and_deps) {
      target_name = script_and_dep[0]
      file = script_and_dep[1]
      dep = script_and_dep[2]
      target("action", target_name) {
        public_deps = [
          ":python_gen_deps",
        ]
        script = "$vulkan_gen_dir/kvt_genvk.py"
        inputs = [
          "$vulkan_gen_dir/$dep",
          "$vulkan_gen_dir/common_codegen.py",
        ]
        outputs = [
          "$vulkan_gen_dir/$file",
        ]
        args = [
          "-o",
          raw_vulkan_gen_dir,
          "-registry",
          "$raw_vulkan_headers_dir/registry/vk.xml",
          "-scripts",
          "$raw_vulkan_headers_dir/registry",
          "$file",
          "-quiet",
        ]
      }
    }
    
    config("vulkan_generated_files_config") {
      include_dirs = [ vulkan_gen_dir ]
    }
    
    group("vulkan_generate_helper_files") {
      public_deps = [
        "$angle_root/third_party/vulkan-headers:vulkan_headers",
      ]
      public_configs = [ ":vulkan_generated_files_config" ]
      foreach(script_and_dep, helper_script_and_deps) {
        target_name = script_and_dep[0]
        public_deps += [ ":$target_name" ]
      }
    }
    
    config("vulkan_config") {
      if (is_win) {
        defines = [
          "VK_USE_PLATFORM_WIN32_KHR",
          "VK_USE_PLATFORM_WIN32_KHX",
        ]
      }
      if (is_linux) {
        defines = [
          "VK_USE_PLATFORM_XCB_KHR",
          "VK_USE_PLATFORM_XCB_KHX",
        ]
      }
      if (is_android) {
        defines = [
          "VK_USE_PLATFORM_ANDROID_KHR",
          "VK_USE_PLATFORM_ANDROID_KHX",
        ]
        libs = [ "vulkan" ]
      }
    }
    
    config("vulkan_internal_config") {
      defines = [ "VULKAN_NON_CMAKE_BUILD" ]
      if (is_clang || !is_win) {
        cflags = [ "-Wno-unused-function" ]
      }
      if (is_linux) {
        defines += [
          "SYSCONFDIR=\"/etc\"",
          "FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
          "FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
        ]
      }
    }
    
    # Copy icd header to gen dir
    copy("icd_header_dep") {
      sources = [
        "$angle_root/third_party/vulkan-headers/src/include/vulkan/vk_icd.h",
      ]
      outputs = [
        "$vulkan_gen_dir/vk_icd.h",
      ]
    }
    
    if (!is_android) {
      # Vulkan Mock ICD
      # ---------------
      group("vulkan_generate_mock_icd_files") {
        public_deps = [
          ":icd_header_dep",
          ":vulkan_generate_helper_files",
          ":vulkan_mock_icd_cpp",
          ":vulkan_mock_icd_h",
        ]
      }
    
      mock_icd_sources = [
        "$vulkan_gen_dir/mock_icd.cpp",
        "$vulkan_gen_dir/mock_icd.h",
      ]
    
      shared_library("VkICD_mock_icd") {
        configs -= vulkan_undefine_configs
        public_configs = [ ":vulkan_config" ]
        deps = [
          ":vulkan_generate_mock_icd_files",
        ]
        data_deps = [
          ":vulkan_gen_icd_json_file",
        ]
        sources = mock_icd_sources
        if (is_win) {
          sources += [ "src/icd/VkICD_mock_icd.def" ]
        }
        configs -= [ "//build/config/compiler:chromium_code" ]
        configs += [ "//build/config/compiler:no_chromium_code" ]
      }
    
      action("vulkan_gen_icd_json_file") {
        script = "$angle_root/scripts/generate_vulkan_layers_json.py"
        if (is_win) {
          sources = [
            "src/icd/windows/VkICD_mock_icd.json",
          ]
          args = [ "$raw_vulkan_icd_dir/icd/windows" ]
        }
        if (is_linux) {
          sources = [
            "src/icd/linux/VkICD_mock_icd.json",
          ]
          args = [ "$raw_vulkan_icd_dir/icd/linux" ]
        }
    
        # The layer JSON files are part of the necessary data deps.
        outputs = [
          "$root_out_dir/$data_dir/VkICD_mock_icd.json",
        ]
        data = [
          "$root_out_dir/$data_dir/VkICD_mock_icd.json",
        ]
        args += [ rebase_path("$root_out_dir/$data_dir", root_build_dir) ]
      }
    }