musl_template.gni 11.1 KB
Newer Older
Z
zhuoli 已提交
1 2 3 4 5 6 7 8
import("//build/ohos.gni")
import("musl_src.gni")

template("musl_libs") {

  no_default_deps = true

  forward_variables_from(invoker, ["target_abi"])
9
  abi_prefix = "${target_name}"
Z
zhuoli 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  
  porting_deps = [
    "//third_party/musl:create_porting_src",
    "//third_party/musl:create_alltypes_h",
    "//third_party/musl:create_syscall_h",
    "//third_party/musl:create_version_h",
  ]

  if (target_abi == "soft") {
    static_lib_out_dir = "usr/lib/${musl_target_triple}"
    shared_lib_out_dir = "."
  } else {
    static_lib_out_dir = "usr/lib/${musl_target_triple}/${target_abi}"
    shared_lib_out_dir = "${target_abi}"
  }

26 27 28 29 30 31
  musl_subarch = ""
  if (target_abi == "a7_hard_neon-vfpv4") {
    musl_subarch = "hf"
  }

  group("${abi_prefix}_libs") {
Z
zhuoli 已提交
32
    deps = [
33 34 35 36 37 38 39 40 41 42 43 44
      ":${abi_prefix}_libc_musl_shared",
      ":${abi_prefix}_libc_musl_static",
      ":${abi_prefix}_libcrypt",
      ":${abi_prefix}_libdl",
      ":${abi_prefix}_libm",
      ":${abi_prefix}_libpthread",
      ":${abi_prefix}_libresolv",
      ":${abi_prefix}_librt",
      ":${abi_prefix}_libutil",
      ":${abi_prefix}_libxnet",
      ":${abi_prefix}_musl_crt_install_action",
      ":${abi_prefix}_create_linker",
Z
zhuoli 已提交
45 46 47
    ]
  }

48
  # part of default_compiler_configs from build/config/BUILDCONFIG.gn
Z
zhuoli 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  musl_inherited_configs = [
    "//build/config/compiler:afdo",
    "//build/config/compiler:afdo_optimize_size",
    "//build/config/compiler:compiler",
    "//build/config/compiler:compiler_arm_fpu",
    "//build/config/compiler:compiler_arm_thumb",
    "//build/config/compiler:chromium_code",
    "//build/config/compiler:default_include_dirs",
    "//build/config/compiler:default_optimization",
    "//build/config/compiler:default_stack_frames",
    "//build/config/compiler:default_symbols",
    "//build/config/compiler:export_dynamic",
    "//build/config/compiler:no_exceptions",
    "//build/config/compiler:no_rtti",
    "//build/config/compiler:runtime_library",
64
    "//build/config/compiler:thin_archive",
Z
zhuoli 已提交
65 66
  ]

67
  config("${abi_prefix}_musl_abi_config") {
Z
zhuoli 已提交
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
    if (target_abi == "soft") {
      cflags = [ "-mfloat-abi=soft" ]
    } else if (target_abi == "a7_soft") {
      cflags = [
        "-mcpu=cortex-a7",
        "-mfloat-abi=soft",
      ]
    } else if (target_abi == "a7_softfp_neon-vfpv4") {
      cflags = [
        "-mcpu=cortex-a7",
        "-mfloat-abi=softfp",
        "-mfpu=neon-vfpv4",
      ]
    } else if (target_abi == "a7_hard_neon-vfpv4") {
      cflags = [
        "-mcpu=cortex-a7",
        "-mfloat-abi=hard",
        "-mfpu=neon-vfpv4",
      ]
    }
  }

90 91
  config("${abi_prefix}_musl_config") {
    configs = [ ":${abi_prefix}_musl_abi_config" ]
Z
zhuoli 已提交
92 93 94 95 96 97 98 99 100 101

    include_dirs = [
      "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}",
      "${target_out_dir}/${musl_ported_dir}/arch/generic",
      "${target_out_dir}/${musl_ported_dir}/src/internal",
      "${target_out_dir}/${musl_ported_dir}/src/include",
      "${target_out_dir}/${musl_ported_dir}/include",
      "${target_out_dir}/${musl_inc_out_dir}",
    ]

Z
zhuoli 已提交
102
    cflags_basic = [
Z
zhuoli 已提交
103
      "--target=${musl_target_triple}",
Z
zhuoli 已提交
104 105 106 107 108 109 110 111
      "-march=armv7-a",
      "-O2",
      "-Wall",
      "-D_FORTIFY_SOURCE=2",
      "-Wl,-z,relro,-z,now,-z,noexecstack",
    ]

    cflags_auto = [
Z
zhuoli 已提交
112 113 114
      "-D_XOPEN_SOURCE=700",
      "-Os",
      "-pipe",
Z
zhuoli 已提交
115 116 117
      "-fomit-frame-pointer",
      "-fno-unwind-tables",
      "-fno-asynchronous-unwind-tables",
Z
zhuoli 已提交
118 119 120 121 122 123
      "-ffunction-sections",
      "-fdata-sections",
      "-Werror=implicit-function-declaration",
      "-Werror=implicit-int",
      "-Werror=pointer-sign",
      "-Werror=pointer-arith",
Z
zhuoli 已提交
124 125 126 127 128 129 130 131 132
      "-Qunused-arguments",
    ]

    cflags_c99fse = [
      "-std=c99",
      "-nostdinc",  
      "-ffreestanding",
      "-frounding-math",
      "-Wa,--noexecstack",
Z
zhuoli 已提交
133 134
    ]

Z
zhuoli 已提交
135 136 137 138 139 140 141 142
    cflags_all = cflags_basic +
                 cflags_c99fse +
                 cflags_auto         

    cflags = cflags_all

    if ("${target_abi}" != "a7_hard_neon-vfpv4") {
      defines = [ "BROKEN_VFP_ASM" ]
Z
zhuoli 已提交
143 144
    }

Z
zhuoli 已提交
145 146
    dynamic_list = rebase_path("${target_out_dir}/${musl_ported_dir}/dynamic.list")

147 148
    ldflags = cflags_all
    ldflags += [
Z
zhuoli 已提交
149 150
      "--target=${musl_target_triple}",
      "-fuse-ld=lld",
Z
zhuoli 已提交
151 152 153 154 155 156 157
      "-Wl,--sort-section,alignment",
      "-Wl,--sort-common",
      "-Wl,--gc-sections",
      "-Wl,--hash-style=both",
      "-Wl,--no-undefined",
      "-Wl,--exclude-libs=ALL",
      "-Wl,--dynamic-list=${dynamic_list}",
Z
zhuoli 已提交
158 159 160 161
    ]
    asmflags = cflags
  }

162
  source_set("${abi_prefix}_musl_crt") {
Z
zhuoli 已提交
163 164 165 166 167 168 169 170 171 172 173
    sources = [
      "${target_out_dir}/${musl_ported_dir}/crt/${musl_arch}/crti.s",
      "${target_out_dir}/${musl_ported_dir}/crt/${musl_arch}/crtn.s",
      "${target_out_dir}/${musl_ported_dir}/crt/Scrt1.c",
      "${target_out_dir}/${musl_ported_dir}/crt/crt1.c",
      "${target_out_dir}/${musl_ported_dir}/crt/rcrt1.c",
    ]

    defines = [ "CRT" ]

    configs -= musl_inherited_configs
174 175 176 177 178
    configs += [ ":${abi_prefix}_musl_config" ]
    cflags = [
      "-fPIC",
      "-fno-stack-protector",
    ]
Z
zhuoli 已提交
179 180 181 182 183 184

    deps = porting_deps

    asmflags = cflags
  }

185
  source_set("${abi_prefix}_musl_src") {
Z
zhuoli 已提交
186 187 188 189 190 191
    sources_orig = []
    sources = []
    set_sources_assignment_filter([])

    sources_orig = musl_src_arch_file + musl_src_file
    sources_orig -= musl_src_filterout
Z
zhuoli 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
    sources_orig -= [
      "src/string/mempcpy.c",
      "src/string/memset.c",
      "src/env/__init_tls.c",
      "src/env/__libc_start_main.c",
      "src/env/__stack_chk_fail.c",
      "src/thread/${musl_arch}/__set_thread_area.c",
    ]

    if ("${target_abi}" == "a7_hard_neon-vfpv4") {
      defines = [ "__ARM_PCS_VFP" ]
    }

    foreach(s, sources_orig) {
      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
    }

209
    cflags = [
Z
zhuoli 已提交
210 211
      "-O3",
      "-fPIC",
212
      "-fstack-protector-strong",
Z
zhuoli 已提交
213 214 215
    ]

    configs -= musl_inherited_configs
216
    configs += [ ":${abi_prefix}_musl_config" ]
Z
zhuoli 已提交
217 218 219 220

    deps = porting_deps
  }

221
  source_set("${abi_prefix}_musl_src_nossp") {
Z
zhuoli 已提交
222 223 224 225 226 227 228 229 230
    sources = []
    sources_orig = [
      "src/string/mempcpy.c",
      "src/string/memset.c",
      "src/env/__init_tls.c",
      "src/env/__libc_start_main.c",
      "src/env/__stack_chk_fail.c",
      "src/thread/${musl_arch}/__set_thread_area.c",
    ]
Z
zhuoli 已提交
231 232 233 234 235

    foreach(s, sources_orig) {
      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
    }

236 237 238
    configs -= musl_inherited_configs
    configs += [ ":${abi_prefix}_musl_config" ]
    cflags = [
Z
zhuoli 已提交
239
      "-O3",
Z
zhuoli 已提交
240 241 242 243 244 245 246
      "-fPIC",
      "-fno-stack-protector",
    ]

    deps = porting_deps
  }

247
  source_set("${abi_prefix}_musl_ldso") {
Z
zhuoli 已提交
248 249 250 251 252 253 254 255
    sources = []
    sources_orig = musl_src_ldso

    foreach(s, sources_orig) {
      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
    }

    configs -= musl_inherited_configs
256 257 258 259 260
    configs += [ ":${abi_prefix}_musl_config" ]
    cflags = [
      "-fPIC",
      "-fno-stack-protector",
    ]
Z
zhuoli 已提交
261 262 263 264

    deps = porting_deps
  }

265
  static_library("${abi_prefix}_libc_musl_static") {
Z
zhuoli 已提交
266 267 268
    output_name = "libc"
    complete_static_lib = true

269 270
    configs -= musl_inherited_configs

Z
zhuoli 已提交
271
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
Z
zhuoli 已提交
272
    deps = [
273 274
      ":${abi_prefix}_musl_src",
      ":${abi_prefix}_musl_src_nossp",
Z
zhuoli 已提交
275
    ]
Z
zhuoli 已提交
276 277
  }

278 279 280 281
  static_library("${abi_prefix}_libm") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libm"
Z
zhuoli 已提交
282 283 284
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

285 286 287 288
  static_library("${abi_prefix}_librt") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "librt"
Z
zhuoli 已提交
289 290 291
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

292 293 294 295
  static_library("${abi_prefix}_libpthread") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libpthread"
Z
zhuoli 已提交
296 297 298
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

299 300 301 302
  static_library("${abi_prefix}_libcrypt") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libcrypt"
Z
zhuoli 已提交
303 304 305
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

306 307 308 309
  static_library("${abi_prefix}_libutil") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libutil"
Z
zhuoli 已提交
310 311 312
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

313 314 315 316
  static_library("${abi_prefix}_libresolv") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libresolv"
Z
zhuoli 已提交
317 318 319
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

320 321 322 323
  static_library("${abi_prefix}_libxnet") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libxnet"
Z
zhuoli 已提交
324 325 326
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

327 328 329 330
  static_library("${abi_prefix}_libdl") {
    complete_static_lib = true
    configs -= musl_inherited_configs
    output_name = "libdl"
Z
zhuoli 已提交
331 332 333
    output_dir = "${target_out_dir}/${static_lib_out_dir}"
  }

334 335 336
  shared_library("${abi_prefix}_libc_musl_shared") {
    output_dir = "${root_out_dir}/common/common/libc/${shared_lib_out_dir}"
    output_name = "libc"
Z
zhuoli 已提交
337 338
    output_extension = "so"

Z
zhuoli 已提交
339 340
    libclang_rt_path = rebase_path("${runtime_lib_path}/${musl_target_triple}/${shared_lib_out_dir}")

Z
zhuoli 已提交
341 342 343
    ldflags = [
      "-nostdlib",
      "-Wl,-e,_dlstart",
Z
zhuoli 已提交
344 345
      "-L${libclang_rt_path}",
      "-lclang_rt.builtins",
Z
zhuoli 已提交
346 347 348 349 350
    ]

    remove_configs = musl_inherited_configs
    remove_configs += [ "//build/config:default_libs" ]

351 352 353
    configs -= musl_inherited_configs
    configs -= [ "//build/config:default_libs" ]
    configs += [ ":${abi_prefix}_musl_config" ]
Z
zhuoli 已提交
354 355

    deps = [
356 357 358
      ":${abi_prefix}_musl_ldso",
      ":${abi_prefix}_musl_src",
      ":${abi_prefix}_musl_src_nossp",
Z
zhuoli 已提交
359 360 361
    ]
  }

362
  action_foreach("${abi_prefix}_musl_crt_install_action") {
Z
zhuoli 已提交
363 364 365
    redir = "${root_out_dir}/obj"
    script = "${target_out_dir}/${musl_ported_dir}/scripts/install.py"
    sources = [
366 367 368 369 370
      "${redir}/${target_out_dir}/${musl_ported_dir}/crt/${musl_arch}/${abi_prefix}_musl_crt/crti.o",
      "${redir}/${target_out_dir}/${musl_ported_dir}/crt/${musl_arch}/${abi_prefix}_musl_crt/crtn.o",
      "${redir}/${target_out_dir}/${musl_ported_dir}/crt/${abi_prefix}_musl_crt/Scrt1.o",
      "${redir}/${target_out_dir}/${musl_ported_dir}/crt/${abi_prefix}_musl_crt/crt1.o",
      "${redir}/${target_out_dir}/${musl_ported_dir}/crt/${abi_prefix}_musl_crt/rcrt1.o",
Z
zhuoli 已提交
371 372 373 374 375 376 377 378 379 380
     ]

    outputs = [ "${target_out_dir}/${static_lib_out_dir}/{{source_file_part}}" ]

    args = [
      "--input",
      "{{source}}",
    ]
    args += [ "--output" ] + rebase_path(outputs, root_build_dir)

381
    deps = [ ":${abi_prefix}_musl_crt" ]
Z
zhuoli 已提交
382 383
  }

384
  action("${abi_prefix}_create_linker") {
Z
zhuoli 已提交
385 386 387 388
    script = "${target_out_dir}/${musl_ported_dir}/tools/install.sh"
    
    sources = [ "${root_out_dir}/common/common/libc/${shared_lib_out_dir}/libc.so" ]

389
    outputs = [ "${root_out_dir}/common/common/libc/${shared_lib_out_dir}/ld-musl-${musl_arch}${musl_subarch}.so.1" ]
Z
zhuoli 已提交
390 391 392 393 394 395 396 397

    args = [ 
      "-D",
      "-r",
    ]
    args +=  rebase_path(sources)
    args +=  rebase_path(outputs)

398
    deps = [ ":${abi_prefix}_libc_musl_shared" ]
Z
zhuoli 已提交
399 400 401
  }

}