build/lite/BUILD.gn 编译过程记录

# 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")

# gn version >= 1714 required.
assert(gn_version >= 1714, "GN version 1714 required, please upgrade!")

# write version info.
version_info = [
  "VERSION=\"$ohos_version\"",
  "BUILD_TIME=\"$ohos_build_datetime\"",
]
write_file("$root_build_dir/etc/version-info", version_info)

# this group will mark the dependent target as prebuilts
group("mark_as_prebuilts") {
}

group("prebuilts") {
  public_deps = [ "//prebuilts/lite/sysroot" ]
}

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

    # 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 == product_cfg.kernel_type &&
                  kernel_valid == false) {
                kernel_valid = true
              }
            }

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

            # Step 6.1.2: Add valid component for compiling.
            # Skip kernel target for userspace only scenario.
            if (!ohos_build_userspace_only ||
                (ohos_build_userspace_only && subsystem_name != "kernel" &&
                 subsystem_name != "vendor")) {
              foreach(component_target, component.targets) {
                deps += [ component_target ]
              }
            }
          }
        }
      }
    }

    # Skip device target for userspace only scenario.
    if (!ohos_build_userspace_only) {
      # Step 7: Add device and product target by default.
      deps += [ "${device_path}/../" ]
    }
  } else {
    deps += string_split(ohos_build_target, "&&")
  }
}

group("product") {
  deps = []

  # build product, skip build single component scenario.
  if (ohos_build_target == "") {
    deps += [ "${product_path}" ]
  }
}

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

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/"),
    ]
  }
}

https://bbs.csdn.net/topics/605121431icon-default.png?t=M7J4https://bbs.csdn.net/topics/605121431可以参考这个链接

编译过程

 # Step 1: Read product configuration profile.

# Step 2: Loop subsystems configured by product.

# Step 3: Read OS subsystems profile.

# Step 4: Loop components configured by product.

 # Step 5: Check whether the component configured by product is exist.

# Step 6: Loop OS components and check validity of product configuration.

# Step 6.1: Skip component which not configured by product.

# Step 6.1.1: Loop OS components adapted kernel type.

# Step 6.1.2: Add valid component for compiling.

# Skip kernel target for userspace only scenario.

# Skip device target for userspace only scenario.

 # Step 7: Add device and product target by default.

# build product, skip build single component scenario.

# Add native API targets.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值