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_ciimport("//build/config/clang/clang.gni") 155f9996aaSopenharmony_ciimport("//build/config/ohos/musl.gni") 165f9996aaSopenharmony_ciimport("//build/ohos.gni") 175f9996aaSopenharmony_ci 185f9996aaSopenharmony_ciconfig("soft_musl_config") { 195f9996aaSopenharmony_ci configs = [ 205f9996aaSopenharmony_ci "//build/config/compiler:compiler_cpu_abi", 215f9996aaSopenharmony_ci "//build/config/coverage:default_coverage", 225f9996aaSopenharmony_ci ] 235f9996aaSopenharmony_ci 245f9996aaSopenharmony_ci musl_out_dir = get_label_info(musl_target, "target_out_dir") 255f9996aaSopenharmony_ci 265f9996aaSopenharmony_ci include_dirs = [ 275f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/arch/${musl_arch}", 285f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/arch/generic", 295f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/src/internal", 305f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/src/include", 315f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/src/gwp_asan", 325f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/src/hook", 335f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/src/network", 345f9996aaSopenharmony_ci "${musl_out_dir}/${musl_ported_dir}/include", 355f9996aaSopenharmony_ci "${musl_out_dir}/${musl_inc_out_dir}", 365f9996aaSopenharmony_ci ] 375f9996aaSopenharmony_ci 385f9996aaSopenharmony_ci cflags_basic = [ 395f9996aaSopenharmony_ci "--target=${musl_target_triple}", 405f9996aaSopenharmony_ci "-Wall", 415f9996aaSopenharmony_ci "-Wl,-z,relro,-z,now,-z,noexecstack", 425f9996aaSopenharmony_ci ] 435f9996aaSopenharmony_ci 445f9996aaSopenharmony_ci if (musl_arch == "arm") { 455f9996aaSopenharmony_ci cflags_basic += [ "-mtp=cp15" ] 465f9996aaSopenharmony_ci } else if (musl_arch == "aarch64") { 475f9996aaSopenharmony_ci } 485f9996aaSopenharmony_ci 495f9996aaSopenharmony_ci cflags_auto = [ 505f9996aaSopenharmony_ci "-D_XOPEN_SOURCE=700", 515f9996aaSopenharmony_ci "-g", 525f9996aaSopenharmony_ci "-pipe", 535f9996aaSopenharmony_ci "-fno-omit-frame-pointer", 545f9996aaSopenharmony_ci "-ffunction-sections", 555f9996aaSopenharmony_ci "-fdata-sections", 565f9996aaSopenharmony_ci "-Werror=implicit-function-declaration", 575f9996aaSopenharmony_ci "-Werror=implicit-int", 585f9996aaSopenharmony_ci "-Werror=pointer-sign", 595f9996aaSopenharmony_ci "-Werror=pointer-arith", 605f9996aaSopenharmony_ci "-Qunused-arguments", 615f9996aaSopenharmony_ci "-Wno-int-conversion", 625f9996aaSopenharmony_ci ] 635f9996aaSopenharmony_ci 645f9996aaSopenharmony_ci if (is_llvm_build) { 655f9996aaSopenharmony_ci cflags_auto += [ 665f9996aaSopenharmony_ci "-fno-unwind-tables", 675f9996aaSopenharmony_ci "-fno-asynchronous-unwind-tables", 685f9996aaSopenharmony_ci ] 695f9996aaSopenharmony_ci } else { 705f9996aaSopenharmony_ci cflags_auto += [ 715f9996aaSopenharmony_ci "-funwind-tables", 725f9996aaSopenharmony_ci "-fasynchronous-unwind-tables", 735f9996aaSopenharmony_ci ] 745f9996aaSopenharmony_ci } 755f9996aaSopenharmony_ci 765f9996aaSopenharmony_ci if (is_asan && use_hwasan) { 775f9996aaSopenharmony_ci cflags_auto += [ "-DENABLE_HWASAN" ] 785f9996aaSopenharmony_ci } 795f9996aaSopenharmony_ci 805f9996aaSopenharmony_ci if (!is_asan && musl_arch != "mips") { 815f9996aaSopenharmony_ci cflags_auto += [ 825f9996aaSopenharmony_ci "-DHOOK_ENABLE", 835f9996aaSopenharmony_ci "-DOHOS_SOCKET_HOOK_ENABLE", 845f9996aaSopenharmony_ci ] 855f9996aaSopenharmony_ci } 865f9996aaSopenharmony_ci 875f9996aaSopenharmony_ci if (!is_llvm_build && !is_asan && musl_arch != "mips") { 885f9996aaSopenharmony_ci cflags_auto += [ "-DOHOS_FDTRACK_HOOK_ENABLE" ] 895f9996aaSopenharmony_ci } 905f9996aaSopenharmony_ci 915f9996aaSopenharmony_ci if (musl_arch == "mips" && musl_is_legacy) { 925f9996aaSopenharmony_ci cflags_auto += [ "-mnan=legacy" ] 935f9996aaSopenharmony_ci } 945f9996aaSopenharmony_ci 955f9996aaSopenharmony_ci if (musl_use_pthread_cancel) { 965f9996aaSopenharmony_ci cflags_auto += [ "-DFEATURE_PTHREAD_CANCEL" ] 975f9996aaSopenharmony_ci } 985f9996aaSopenharmony_ci 995f9996aaSopenharmony_ci cflags_auto += [ "-DRESERVE_SIGNAL_STACK" ] 1005f9996aaSopenharmony_ci cflags_auto += [ "-DDFX_SIGNAL_LIBC" ] 1015f9996aaSopenharmony_ci 1025f9996aaSopenharmony_ci cflags_c99fse = [ 1035f9996aaSopenharmony_ci "-std=c99", 1045f9996aaSopenharmony_ci "-nostdinc", 1055f9996aaSopenharmony_ci "-Wa,--noexecstack", 1065f9996aaSopenharmony_ci ] 1075f9996aaSopenharmony_ci 1085f9996aaSopenharmony_ci cflags_all = cflags_basic + cflags_c99fse + cflags_auto 1095f9996aaSopenharmony_ci 1105f9996aaSopenharmony_ci cflags = cflags_all 1115f9996aaSopenharmony_ci 1125f9996aaSopenharmony_ci defines = [ "BROKEN_VFP_ASM" ] 1135f9996aaSopenharmony_ci if (!is_llvm_build) { 1145f9996aaSopenharmony_ci defines += [ "FEATURE_ATEXIT_CB_PROTECT" ] 1155f9996aaSopenharmony_ci } 1165f9996aaSopenharmony_ci if (is_standard_system) { 1175f9996aaSopenharmony_ci defines += [ 1185f9996aaSopenharmony_ci "OHOS_DNS_PROXY_BY_NETSYS=1", 1195f9996aaSopenharmony_ci "OHOS_FWMARK_CLIENT_BY_NETSYS=1", 1205f9996aaSopenharmony_ci "OHOS_PERMISSION_INTERNET=1", 1215f9996aaSopenharmony_ci "OHOS_DISABLE_IPV6=0", 1225f9996aaSopenharmony_ci ] 1235f9996aaSopenharmony_ci } 1245f9996aaSopenharmony_ci 1255f9996aaSopenharmony_ci if (!is_standard_system && defined(musl_enable_musl_log)) { 1265f9996aaSopenharmony_ci if (musl_enable_musl_log) { 1275f9996aaSopenharmony_ci defines += [ "ENABLE_MUSL_LOG" ] 1285f9996aaSopenharmony_ci } 1295f9996aaSopenharmony_ci } 1305f9996aaSopenharmony_ci 1315f9996aaSopenharmony_ci dynamic_list = rebase_path("${musl_out_dir}/${musl_ported_dir}/dynamic.list") 1325f9996aaSopenharmony_ci 1335f9996aaSopenharmony_ci ldflags = cflags_all 1345f9996aaSopenharmony_ci ldflags += [ 1355f9996aaSopenharmony_ci "--target=${musl_target_triple}", 1365f9996aaSopenharmony_ci "-fuse-ld=lld", 1375f9996aaSopenharmony_ci "-Wl,--sort-section,alignment", 1385f9996aaSopenharmony_ci "-Wl,--sort-common", 1395f9996aaSopenharmony_ci "-Wl,--gc-sections", 1405f9996aaSopenharmony_ci "-Wl,--hash-style=both", 1415f9996aaSopenharmony_ci "-Wl,--no-undefined", 1425f9996aaSopenharmony_ci "-Wl,--dynamic-list=${dynamic_list}", 1435f9996aaSopenharmony_ci "-Wl,--build-id=md5", 1445f9996aaSopenharmony_ci ] 1455f9996aaSopenharmony_ci if (musl_arch == "mips") { 1465f9996aaSopenharmony_ci ldflags -= [ "-Wl,--hash-style=both" ] 1475f9996aaSopenharmony_ci } 1485f9996aaSopenharmony_ci asmflags = cflags 1495f9996aaSopenharmony_ci} 150