BUILD.gn 4.2 KB
Newer Older
M
mamingshuai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/ndk/ndk.gni")

group("ohos") {
  deps = []
  if (ohos_build_target == "") {
    # Step 1: Read product configuration profile.
    product_cfg = read_file("${product_path}/config.json", "json")
    kernel = product_cfg.kernel_type

    # Step 2: Loop subsystems configured by product.
    foreach(product_configed_subsystem, product_cfg.subsystems) {
      subsystem_name = product_configed_subsystem.subsystem
      subsystem_info = {
      }

      # Step 3: Read OS subsystems profile.
      subsystem_info =
          read_file("//build/lite/components/${subsystem_name}.json", "json")

      # Step 4: Loop components configured by product.
      foreach(product_configed_component,
              product_configed_subsystem.components) {
        # Step 5: Check whether the component configured by product is exist.
        component_found = false
        foreach(system_component, subsystem_info.components) {
          if (product_configed_component.component ==
              system_component.component) {
            component_found = true
          }
        }
        assert(
            component_found,
            "Component \"${product_configed_component.component}\" not found" +
                ", please check your product configuration.")

        # Step 6: Loop OS components and check validity of product configuration.
        foreach(component, subsystem_info.components) {
          kernel_valid = false
          board_valid = false

          # Step 6.1: Skip component which not configured by product.
          if (component.component == product_configed_component.component) {
            # Step 6.1.1: Loop OS components adapted kernel type.
            foreach(component_adapted_kernel, component.adapted_kernel) {
              if (component_adapted_kernel == kernel && kernel_valid == false) {
                kernel_valid = true
              }
            }

            assert(
                kernel_valid,
                "Invalid component configed, ${subsystem_name}:${product_configed_component.component} " + "not available for kernel: $kernel!")

            # Step 6.1.2: Add valid component for compiling.
            foreach(component_target, component.targets) {
              deps += [ component_target ]
            }
          }
        }
      }
    }
    # Step 7: Add device and product target by default.
    deps += [ 
      "${device_path}/../",
      "${product_path}" ]
  } else {
    deps += string_split(ohos_build_target, "&&")
  }
}

group("ndk") {
  # Add native API targets.
  deps = []
  if (ohos_build_ndk) {
    deps += [ "//build/lite/ndk:ndk" ]
  }
}

if (ohos_build_target == "") {
  action("gen_rootfs") {
    deps = [ ":ohos" ]

    script = "//build/lite/gen_rootfs.py"
    outputs = [ "$target_gen_dir/gen_rootfs.log" ]
    out_dir = rebase_path("$root_out_dir")

    args = [
      "--path=$out_dir",
      "--kernel=$ohos_kernel_type",
      "--storage=$storage_type",
      "--strip_command=$ohos_current_strip_command",
      "--dmverity=$enable_ohos_security_dmverity",
    ]
  }
}

if (ohos_build_type == "debug" && product != "") {
  action("gen_testfwk_info") {
    outputs = [ "$root_out_dir/gen_testfwk_info.log" ]
    script = "//build/lite/testfwk/gen_testfwk_info.py"
    archive_dir_name = "test_info"
    args = [
      "--component-info-file",
      rebase_path("${product_path}/config.json"),
      "--output-json-fold",
      rebase_path("${root_out_dir}/${archive_dir_name}/build_configs/"),
      "--output-json-file-name",
      "infos_for_testfwk.json",
      "--output-module-list-files-fold",
      rebase_path("${root_out_dir}/${archive_dir_name}/module_list_files/"),
    ]
  }
}