xref: /build/config/components/musl/BUILD.gn (revision 5f9996aa)
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