15f9996aaSopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd.
25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
45f9996aaSopenharmony_ci# You may obtain a copy of the License at
55f9996aaSopenharmony_ci#
65f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
125f9996aaSopenharmony_ci# limitations under the License.
135f9996aaSopenharmony_ci
145f9996aaSopenharmony_cilite_target_list = []
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ci# Step 1: Read product configuration profile.
175f9996aaSopenharmony_ciproduct_cfg = read_file("${product_config_path}/config.json", "json")
185f9996aaSopenharmony_ci
195f9996aaSopenharmony_ciparts_targets_info =
205f9996aaSopenharmony_ci    read_file(
215f9996aaSopenharmony_ci        "${root_build_dir}/build_configs/parts_info/parts_modules_info.json",
225f9996aaSopenharmony_ci        "json")
235f9996aaSopenharmony_ci
245f9996aaSopenharmony_ci# Step 2: Loop subsystems configured by product.
255f9996aaSopenharmony_ciforeach(product_configed_subsystem, product_cfg.subsystems) {
265f9996aaSopenharmony_ci  subsystem_name = product_configed_subsystem.subsystem
275f9996aaSopenharmony_ci
285f9996aaSopenharmony_ci  if (build_xts || (!build_xts && subsystem_name != "xts")) {
295f9996aaSopenharmony_ci    # Step 3: Read OS subsystems profile.
305f9996aaSopenharmony_ci    subsystem_parts_info = {
315f9996aaSopenharmony_ci    }
325f9996aaSopenharmony_ci    subsystem_parts_info = read_file(
335f9996aaSopenharmony_ci            "${root_build_dir}/build_configs/mini_adapter/${subsystem_name}.json",
345f9996aaSopenharmony_ci            "json")
355f9996aaSopenharmony_ci
365f9996aaSopenharmony_ci    # Step 4: Loop components configured by product.
375f9996aaSopenharmony_ci    foreach(product_configed_component, product_configed_subsystem.components) {
385f9996aaSopenharmony_ci      # Step 5: Check whether the component configured by product is exist.
395f9996aaSopenharmony_ci      component_found = false
405f9996aaSopenharmony_ci
415f9996aaSopenharmony_ci      foreach(part_name, subsystem_parts_info.parts) {
425f9996aaSopenharmony_ci        if (product_configed_component.component == part_name) {
435f9996aaSopenharmony_ci          component_found = true
445f9996aaSopenharmony_ci        }
455f9996aaSopenharmony_ci      }
465f9996aaSopenharmony_ci
475f9996aaSopenharmony_ci      assert(component_found,
485f9996aaSopenharmony_ci             "Component \"${product_configed_component.component}\" not found" +
495f9996aaSopenharmony_ci                 ", please check your product configuration.")
505f9996aaSopenharmony_ci
515f9996aaSopenharmony_ci      # Step 6: Loop OS components and check validity of product configuration.
525f9996aaSopenharmony_ci      foreach(part_name, subsystem_parts_info.parts) {
535f9996aaSopenharmony_ci        kernel_valid = true
545f9996aaSopenharmony_ci
555f9996aaSopenharmony_ci        # Step 6.1: Skip component which not configured by product.
565f9996aaSopenharmony_ci        if (part_name == product_configed_component.component) {
575f9996aaSopenharmony_ci          # Step 6.1.1: Loop OS components adapted kernel type.
585f9996aaSopenharmony_ci
595f9996aaSopenharmony_ci          assert(
605f9996aaSopenharmony_ci              kernel_valid,
615f9996aaSopenharmony_ci              "Invalid component configed, ${subsystem_name}:${product_configed_component.component} " + "not available for kernel: ${product_cfg.kernel_type}!")
625f9996aaSopenharmony_ci
635f9996aaSopenharmony_ci          # Step 6.1.2: Add valid component for compiling.
645f9996aaSopenharmony_ci          # Skip kernel target for userspace only scenario.
655f9996aaSopenharmony_ci          if (!ohos_build_userspace_only ||
665f9996aaSopenharmony_ci              (ohos_build_userspace_only && subsystem_name != "kernel" &&
675f9996aaSopenharmony_ci               subsystem_name != "vendor")) {
685f9996aaSopenharmony_ci            foreach(_p_info, parts_targets_info.parts) {
695f9996aaSopenharmony_ci              if (_p_info.part_name == product_configed_component.component) {
705f9996aaSopenharmony_ci                lite_target_list += _p_info.module_list
715f9996aaSopenharmony_ci              }
725f9996aaSopenharmony_ci            }
735f9996aaSopenharmony_ci          }
745f9996aaSopenharmony_ci        }
755f9996aaSopenharmony_ci      }
765f9996aaSopenharmony_ci    }
775f9996aaSopenharmony_ci  }
785f9996aaSopenharmony_ci}
795f9996aaSopenharmony_ci
805f9996aaSopenharmony_ci# Skip device target for userspace only scenario.
815f9996aaSopenharmony_ciif (!ohos_build_userspace_only) {
825f9996aaSopenharmony_ci  # Step 7: Add device and product target by default.
835f9996aaSopenharmony_ci  # liteos_m kernel organise device build targets, but not by default.
845f9996aaSopenharmony_ci  if (product_cfg.kernel_type != "liteos_m") {
855f9996aaSopenharmony_ci    lite_target_list += [ "${device_path}/../" ]
865f9996aaSopenharmony_ci  }
875f9996aaSopenharmony_ci}
88