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