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