15f9996aaSopenharmony_ci# Copyright (c) 2020 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_ci# Description: Native Development Kit Template 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_cideclare_args() { 175f9996aaSopenharmony_ci ohos_build_ndk = false 185f9996aaSopenharmony_ci ohos_build_ndk_target_host = "linux-x86_64" 195f9996aaSopenharmony_ci ohos_build_ndk_version = "1.0.0" 205f9996aaSopenharmony_ci} 215f9996aaSopenharmony_ci 225f9996aaSopenharmony_cindk_out_dir = "$root_out_dir/ndk" 235f9996aaSopenharmony_ci 245f9996aaSopenharmony_cindk_headers_out_dir = "$ndk_out_dir/sysroot/usr/include" 255f9996aaSopenharmony_cindk_libraries_out_dir = "$ndk_out_dir/sysroot/usr/lib" 265f9996aaSopenharmony_cindk_docs_out_dir = "$ndk_out_dir/docs" 275f9996aaSopenharmony_ci 285f9996aaSopenharmony_ciwindows_system = "windows-x86_64" 295f9996aaSopenharmony_cilinux_system = "linux-x86_64" 305f9996aaSopenharmony_ci 315f9996aaSopenharmony_cindk_toolchain = "gcc" 325f9996aaSopenharmony_ciif (ohos_build_compiler == "clang") { 335f9996aaSopenharmony_ci ndk_toolchain = "llvm" 345f9996aaSopenharmony_ci} 355f9996aaSopenharmony_cindk_windows_specific_out_dir = "${ndk_out_dir}/$ndk_toolchain" 365f9996aaSopenharmony_cindk_linux_specific_out_dir = "${ndk_out_dir}/$ndk_toolchain" 375f9996aaSopenharmony_ci 385f9996aaSopenharmony_cindk_windows_toolchains_out_dir = "${ndk_windows_specific_out_dir}" 395f9996aaSopenharmony_cindk_windows_tools_out_dir = "${ndk_out_dir}/$windows_system/tools" 405f9996aaSopenharmony_ci 415f9996aaSopenharmony_cindk_linux_toolchains_out_dir = "${ndk_linux_specific_out_dir}" 425f9996aaSopenharmony_cindk_linux_tools_out_dir = "${ndk_out_dir}/$linux_system/tools" 435f9996aaSopenharmony_ci 445f9996aaSopenharmony_citemplate("copy_files") { 455f9996aaSopenharmony_ci assert(defined(invoker.src) && defined(invoker.dest_dir), 465f9996aaSopenharmony_ci "sources and dest_dir are necessary") 475f9996aaSopenharmony_ci if (defined(invoker.src_type)) { 485f9996aaSopenharmony_ci src_type = invoker.src_type 495f9996aaSopenharmony_ci } else { 505f9996aaSopenharmony_ci src_type = "dir" 515f9996aaSopenharmony_ci } 525f9996aaSopenharmony_ci _deps = [] 535f9996aaSopenharmony_ci if (defined(invoker.deps)) { 545f9996aaSopenharmony_ci _deps += invoker.deps 555f9996aaSopenharmony_ci } 565f9996aaSopenharmony_ci src = invoker.src 575f9996aaSopenharmony_ci dst = invoker.dest_dir 585f9996aaSopenharmony_ci action("$target_name$src") { 595f9996aaSopenharmony_ci deps = _deps 605f9996aaSopenharmony_ci script = "//build/lite/copy_files.py" 615f9996aaSopenharmony_ci args = [ 625f9996aaSopenharmony_ci "--src_type", 635f9996aaSopenharmony_ci src_type, 645f9996aaSopenharmony_ci "--src", 655f9996aaSopenharmony_ci rebase_path("$src"), 665f9996aaSopenharmony_ci "--dest_dir", 675f9996aaSopenharmony_ci rebase_path("$dst"), 685f9996aaSopenharmony_ci ] 695f9996aaSopenharmony_ci outputs = [ "$target_gen_dir/${target_name}_copy_files.log" ] 705f9996aaSopenharmony_ci } 715f9996aaSopenharmony_ci} 725f9996aaSopenharmony_ci 735f9996aaSopenharmony_ci# Generate NDK library. 745f9996aaSopenharmony_citemplate("ndk_lib") { 755f9996aaSopenharmony_ci _deps = [] 765f9996aaSopenharmony_ci if (defined(invoker.deps)) { 775f9996aaSopenharmony_ci _deps += invoker.deps 785f9996aaSopenharmony_ci } 795f9996aaSopenharmony_ci 805f9996aaSopenharmony_ci _head_files = [] 815f9996aaSopenharmony_ci if (defined(invoker.head_files)) { 825f9996aaSopenharmony_ci _head_files = invoker.head_files 835f9996aaSopenharmony_ci } 845f9996aaSopenharmony_ci if (defined(invoker.lib_extension)) { 855f9996aaSopenharmony_ci _extension = invoker.lib_extension 865f9996aaSopenharmony_ci } else { 875f9996aaSopenharmony_ci _extension = ".a" 885f9996aaSopenharmony_ci } 895f9996aaSopenharmony_ci assert(_extension != "") 905f9996aaSopenharmony_ci 915f9996aaSopenharmony_ci group(target_name) { 925f9996aaSopenharmony_ci deps = _deps 935f9996aaSopenharmony_ci } 945f9996aaSopenharmony_ci 955f9996aaSopenharmony_ci if (ohos_build_ndk) { 965f9996aaSopenharmony_ci foreach(src_deps, _deps) { 975f9996aaSopenharmony_ci lib_name = get_label_info(src_deps, "name") 985f9996aaSopenharmony_ci copy_files("$target_name" + "_copy") { 995f9996aaSopenharmony_ci deps = _deps 1005f9996aaSopenharmony_ci src_type = "file" 1015f9996aaSopenharmony_ci if (_extension == ".a") { 1025f9996aaSopenharmony_ci src = "$root_out_dir/libs/lib$lib_name$_extension" 1035f9996aaSopenharmony_ci } else { 1045f9996aaSopenharmony_ci src = "$root_out_dir/lib$lib_name$_extension" 1055f9996aaSopenharmony_ci } 1065f9996aaSopenharmony_ci dest_dir = "$ndk_libraries_out_dir" 1075f9996aaSopenharmony_ci } 1085f9996aaSopenharmony_ci } 1095f9996aaSopenharmony_ci foreach(src_dir, _head_files) { 1105f9996aaSopenharmony_ci copy_files(target_name) { 1115f9996aaSopenharmony_ci src = src_dir 1125f9996aaSopenharmony_ci dest_dir = "$ndk_headers_out_dir" 1135f9996aaSopenharmony_ci } 1145f9996aaSopenharmony_ci } 1155f9996aaSopenharmony_ci } 1165f9996aaSopenharmony_ci} 1175f9996aaSopenharmony_ci 1185f9996aaSopenharmony_ci# Specify ndk toolchains 1195f9996aaSopenharmony_ci# 1205f9996aaSopenharmony_ci# Input variables: 1215f9996aaSopenharmony_ci# dest_dir: Copy destination where sources are copied to. 1225f9996aaSopenharmony_ci# src_dir: Copy Source directories. 1235f9996aaSopenharmony_ci# src_type: file or path 1245f9996aaSopenharmony_ci# 1255f9996aaSopenharmony_citemplate("ndk_toolchains") { 1265f9996aaSopenharmony_ci assert(defined(invoker.src_dir) && defined(invoker.dest_dir), 1275f9996aaSopenharmony_ci "sources and dest_dir are necessary") 1285f9996aaSopenharmony_ci 1295f9996aaSopenharmony_ci if (ohos_build_ndk) { 1305f9996aaSopenharmony_ci group(target_name) { 1315f9996aaSopenharmony_ci } 1325f9996aaSopenharmony_ci indexSrc = 0 1335f9996aaSopenharmony_ci indexDst = 0 1345f9996aaSopenharmony_ci foreach(src_dir, invoker.src_dir) { 1355f9996aaSopenharmony_ci indexDst = 0 1365f9996aaSopenharmony_ci foreach(dst, invoker.dest_dir) { 1375f9996aaSopenharmony_ci if (indexDst == indexSrc) { 1385f9996aaSopenharmony_ci copy_files("$src_dir") { 1395f9996aaSopenharmony_ci if (defined(invoker.src_type)) { 1405f9996aaSopenharmony_ci src_type = invoker.src_type 1415f9996aaSopenharmony_ci } else { 1425f9996aaSopenharmony_ci src_type = "dir" 1435f9996aaSopenharmony_ci } 1445f9996aaSopenharmony_ci src = src_dir 1455f9996aaSopenharmony_ci dest_dir = dst 1465f9996aaSopenharmony_ci } 1475f9996aaSopenharmony_ci } 1485f9996aaSopenharmony_ci indexDst = indexDst + 1 1495f9996aaSopenharmony_ci } 1505f9996aaSopenharmony_ci indexSrc = indexSrc + 1 1515f9996aaSopenharmony_ci } 1525f9996aaSopenharmony_ci } 1535f9996aaSopenharmony_ci} 154