15f9996aaSopenharmony_ci# Copyright 2014 The Chromium Authors. All rights reserved.
25f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be
35f9996aaSopenharmony_ci# found in the LICENSE file.
45f9996aaSopenharmony_ci
55f9996aaSopenharmony_ciimport("//build/config/compiler/compiler.gni")
65f9996aaSopenharmony_ciimport("//build/config/ohos/config.gni")
75f9996aaSopenharmony_ci
85f9996aaSopenharmony_ciimport("//build/config/c++/c++.gni")
95f9996aaSopenharmony_ciimport("//build/config/sanitizers/sanitizers.gni")
105f9996aaSopenharmony_ci
115f9996aaSopenharmony_ciassert(is_ohos)
125f9996aaSopenharmony_ci
135f9996aaSopenharmony_ci# This is included by reference in the //build/config/compiler config that
145f9996aaSopenharmony_ci# is applied to all targets. It is here to separate out the logic that is
155f9996aaSopenharmony_ci# ohos-only.
165f9996aaSopenharmony_ciconfig("compiler") {
175f9996aaSopenharmony_ci  cflags = [
185f9996aaSopenharmony_ci    "-ffunction-sections",
195f9996aaSopenharmony_ci    "-fno-short-enums",
205f9996aaSopenharmony_ci  ]
215f9996aaSopenharmony_ci  defines = [
225f9996aaSopenharmony_ci    # The NDK has these things, but doesn't define the constants to say that it
235f9996aaSopenharmony_ci    # does. Define them here instead.
245f9996aaSopenharmony_ci    "HAVE_SYS_UIO_H",
255f9996aaSopenharmony_ci  ]
265f9996aaSopenharmony_ci
275f9996aaSopenharmony_ci  defines += [
285f9996aaSopenharmony_ci    "__MUSL__",
295f9996aaSopenharmony_ci    "_LIBCPP_HAS_MUSL_LIBC",
305f9996aaSopenharmony_ci    "__BUILD_LINUX_WITH_CLANG",
315f9996aaSopenharmony_ci  ]
325f9996aaSopenharmony_ci
335f9996aaSopenharmony_ci  ldflags = [
345f9996aaSopenharmony_ci    "-Wl,--no-undefined",
355f9996aaSopenharmony_ci    "-Wl,--exclude-libs=libunwind_llvm.a",
365f9996aaSopenharmony_ci    "-Wl,--exclude-libs=libc++_static.a",
375f9996aaSopenharmony_ci
385f9996aaSopenharmony_ci    # Don't allow visible symbols from libraries that contain
395f9996aaSopenharmony_ci    # assembly code with symbols that aren't hidden properly.
405f9996aaSopenharmony_ci    # http://crbug.com/448386
415f9996aaSopenharmony_ci    "-Wl,--exclude-libs=libvpx_assembly_arm.a",
425f9996aaSopenharmony_ci  ]
435f9996aaSopenharmony_ci  if (current_cpu == "riscv64") {
445f9996aaSopenharmony_ci    ldflags -= [ "-Wl,--exclude-libs=libvpx_assembly_arm.a" ]
455f9996aaSopenharmony_ci  }
465f9996aaSopenharmony_ci
475f9996aaSopenharmony_ci  cflags += [ "--target=$abi_target" ]
485f9996aaSopenharmony_ci  include_dirs = [ "${musl_sysroot}/usr/include/${abi_target}" ]
495f9996aaSopenharmony_ci
505f9996aaSopenharmony_ci  ldflags += [ "--target=$abi_target" ]
515f9996aaSopenharmony_ci
525f9996aaSopenharmony_ci  # Assign any flags set for the C compiler to asmflags so that they are sent
535f9996aaSopenharmony_ci  # to the assembler.
545f9996aaSopenharmony_ci  asmflags = cflags
555f9996aaSopenharmony_ci}
565f9996aaSopenharmony_ci
575f9996aaSopenharmony_ci# This is included by reference in the //build/config/compiler:runtime_library
585f9996aaSopenharmony_ci# config that is applied to all targets. It is here to separate out the logic
595f9996aaSopenharmony_ci# that is ohos-only. Please see that target for advice on what should go in
605f9996aaSopenharmony_ci# :runtime_library vs. :compiler.
615f9996aaSopenharmony_ciconfig("runtime_library") {
625f9996aaSopenharmony_ci  cflags_cc = []
635f9996aaSopenharmony_ci
645f9996aaSopenharmony_ci  defines = [
655f9996aaSopenharmony_ci    "__GNU_SOURCE=1",  # Necessary for clone().
665f9996aaSopenharmony_ci    "CHROMIUM_CXX_TWEAK_INLINES",  # Saves binary size.
675f9996aaSopenharmony_ci  ]
685f9996aaSopenharmony_ci
695f9996aaSopenharmony_ci  defines += [
705f9996aaSopenharmony_ci    "__MUSL__",
715f9996aaSopenharmony_ci    "_LIBCPP_HAS_MUSL_LIBC",
725f9996aaSopenharmony_ci    "__BUILD_LINUX_WITH_CLANG",
735f9996aaSopenharmony_ci  ]
745f9996aaSopenharmony_ci  ldflags = [ "-nostdlib" ]
755f9996aaSopenharmony_ci
765f9996aaSopenharmony_ci  libs = []
775f9996aaSopenharmony_ci
785f9996aaSopenharmony_ci  # arm builds of libc++ starting in NDK r12 depend on unwind.
795f9996aaSopenharmony_ci  if (current_cpu == "arm" || current_cpu == "arm64" ||
805f9996aaSopenharmony_ci      current_cpu == "riscv64") {
815f9996aaSopenharmony_ci    libs += [ "unwind" ]
825f9996aaSopenharmony_ci  }
835f9996aaSopenharmony_ci
845f9996aaSopenharmony_ci  ldflags += [
855f9996aaSopenharmony_ci    "-L" + rebase_path("${musl_sysroot}/usr/lib/${abi_target}", root_build_dir),
865f9996aaSopenharmony_ci    "-L" + rebase_path(
875f9996aaSopenharmony_ci            "${clang_base_path}/lib/clang/${clang_version}/lib/${abi_target}",
885f9996aaSopenharmony_ci            root_build_dir),
895f9996aaSopenharmony_ci  ]
905f9996aaSopenharmony_ci  if (current_cpu == "riscv64") {
915f9996aaSopenharmony_ci    ldflags += [ "-Wl,--dynamic-linker,/lib/ld-musl-${musl_arch}.so.1" ]
925f9996aaSopenharmony_ci  }
935f9996aaSopenharmony_ci
945f9996aaSopenharmony_ci  libs += [
955f9996aaSopenharmony_ci    rebase_path(libclang_rt_file),
965f9996aaSopenharmony_ci    "c",
975f9996aaSopenharmony_ci    rebase_path(libcxxabi_file),
985f9996aaSopenharmony_ci  ]
995f9996aaSopenharmony_ci
1005f9996aaSopenharmony_ci  if (!is_llvm_build && current_cpu == "arm64") {
1015f9996aaSopenharmony_ci    libs += [ rebase_path(libgwp_asan_file) ]
1025f9996aaSopenharmony_ci  }
1035f9996aaSopenharmony_ci
1045f9996aaSopenharmony_ci  if (current_cpu == "arm" && arm_version == 6) {
1055f9996aaSopenharmony_ci    libs += [ "atomic" ]
1065f9996aaSopenharmony_ci  }
1075f9996aaSopenharmony_ci
1085f9996aaSopenharmony_ci  ldflags += [ "-Wl,--warn-shared-textrel" ]
1095f9996aaSopenharmony_ci
1105f9996aaSopenharmony_ci  # We add this parameter to speed up link process, enable_lto_O0 default is false.
1115f9996aaSopenharmony_ci  if (!is_mac && !is_win && use_lld && enable_lto_O0) {
1125f9996aaSopenharmony_ci    ldflags += [ "-Wl,--lto-O0" ]
1135f9996aaSopenharmony_ci  }
1145f9996aaSopenharmony_ci}
1155f9996aaSopenharmony_ci
1165f9996aaSopenharmony_ciconfig("executable_config") {
1175f9996aaSopenharmony_ci  cflags = [ "-fPIE" ]
1185f9996aaSopenharmony_ci  asmflags = [ "-fPIE" ]
1195f9996aaSopenharmony_ci  ldflags = [ "-pie" ]
1205f9996aaSopenharmony_ci}
1215f9996aaSopenharmony_ci
1225f9996aaSopenharmony_ci# Used for instrumented build to generate the orderfile.
1235f9996aaSopenharmony_ciconfig("default_orderfile_instrumentation") {
1245f9996aaSopenharmony_ci  if (use_order_profiling) {
1255f9996aaSopenharmony_ci    cflags = [ "-finstrument-function-entry-bare" ]
1265f9996aaSopenharmony_ci    if (use_thin_lto) {
1275f9996aaSopenharmony_ci      ldflags = [ "-Wl,-u,__cyg_profile_func_enter_bare" ]
1285f9996aaSopenharmony_ci    }
1295f9996aaSopenharmony_ci  }
1305f9996aaSopenharmony_ci}
1315f9996aaSopenharmony_ci
1325f9996aaSopenharmony_ciconfig("adlt_config") {
1335f9996aaSopenharmony_ci  ldflags = [
1345f9996aaSopenharmony_ci    "-Wl,--emit-relocs",
1355f9996aaSopenharmony_ci    "-Wl,--no-relax",
1365f9996aaSopenharmony_ci  ]
1375f9996aaSopenharmony_ci}
138