1if (is_lite_system && current_os == "ohos") { 2 group("sysroot_lite") { 3 print("ohos_build_compiler:", ohos_build_compiler) 4 print("ohos_kernel_type:", ohos_kernel_type) 5 6 # Mini system of liteos_a needs not prepare for build, so set "kernel_is_prebuilt is true" in 7 # config.json to avoid it. 8 if (!is_mini_system && !ohos_kernel_is_prebuilt) { 9 deps = [ "scripts/build_lite:build" ] 10 } else if (!ohos_kernel_is_prebuilt) { 11 if (ohos_kernel_type == "liteos_m") { 12 all_dependent_configs = [ 13 "${ohos_kernel_path}:public", 14 "${ohos_kernel_path}:kconfig_config", 15 ] 16 } else if (ohos_kernel_type == "uniproton") { 17 all_dependent_configs = [ 18 "//kernel/uniproton:os_config", 19 "//kernel/uniproton:kconfig_config", 20 ] 21 } 22 } 23 } 24} else { 25 import("musl_template.gni") 26 27 group("musl_all") { 28 deps = [ 29 ":musl_headers", 30 ":soft_libs", 31 ] 32 } 33 34 if (musl_arch != "mips" && musl_arch != "riscv64") { 35 ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}-test.ini") { 36 source = "${musl_dir}/config/ld-musl-namespace-${musl_arch}-test.ini" 37 } 38 39 ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}.ini") { 40 source = "${musl_dir}/config/ld-musl-namespace-${musl_arch}.ini" 41 install_images = [ 42 "system", 43 "updater", 44 "ramdisk", 45 ] 46 } 47 48 group("musl_ns_config") { 49 deps = [ 50 ":ld-musl-namespace-${musl_arch}-test.ini", 51 ":ld-musl-namespace-${musl_arch}.ini", 52 ] 53 } 54 } else { 55 group("musl_ns_config") { 56 deps = [] 57 } 58 } 59 60 group("musl_libs") { 61 deps = [ 62 ":musl_headers", 63 ":musl_sysparam", 64 ":musl_sysparam_dac", 65 ":soft_libs", 66 ] 67 } 68 69 ohos_prebuilt_etc("musl_sysparam") { 70 source = "${musl_dir}/etc/musl.para" 71 relative_install_dir = "param" 72 } 73 74 ohos_prebuilt_etc("musl_sysparam_dac") { 75 source = "${musl_dir}/etc/musl.para.dac" 76 relative_install_dir = "param" 77 } 78 79 musl_libs("soft_libs") { 80 } 81 82 group("musl_headers") { 83 deps = [ 84 ":FreeBSD_copy", 85 ":copy_uapi", 86 ":create_alltypes_h", 87 ":create_syscall_h", 88 ":create_version_h", 89 ":musl_copy_inc_arpa", 90 ":musl_copy_inc_bits", 91 ":musl_copy_inc_fortify", 92 ":musl_copy_inc_hook", 93 ":musl_copy_inc_info", 94 ":musl_copy_inc_net", 95 ":musl_copy_inc_netinet", 96 ":musl_copy_inc_netpacket", 97 ":musl_copy_inc_root", 98 ":musl_copy_inc_scsi", 99 ":musl_copy_inc_sys", 100 ":musl_copy_inc_trace", 101 ":musl_ns_config", 102 ] 103 } 104 105 action("create_porting_src") { 106 script = "scripts/porting.sh" 107 108 sources_dir = [ "//third_party/musl" ] 109 110 outdir = [ "${target_out_dir}/${musl_ported_dir}" ] 111 112 src_files = musl_src_arch_file 113 src_files += musl_src_file 114 src_files += musl_src_ldso 115 src_files += musl_inc_bits_files 116 src_files += musl_inc_arpa_files 117 src_files += musl_inc_net_files 118 src_files += musl_inc_netinet_files 119 src_files += musl_inc_netpacket_files 120 src_files += musl_inc_scsi_files 121 src_files += musl_inc_sys_files 122 src_files += musl_inc_fortify_files 123 src_files += musl_inc_root_files 124 src_files += musl_inc_info_files 125 src_files += musl_inc_trace_files 126 127 src_files += [ 128 "crt/Scrt1.c", 129 "crt/crt1.c", 130 "crt/rcrt1.c", 131 "tools/mkalltypes.sed", 132 "arch/${musl_arch}/bits/alltypes.h.in", 133 "arch/${musl_arch}/bits/syscall.h.in", 134 "include/alltypes.h.in", 135 "VERSION", 136 "tools/version.sh", 137 "tools/install.sh", 138 "scripts/install.py", 139 "scripts/create_alltypes.sh", 140 "scripts/create_vesion.sh", 141 "scripts/create_syscall.sh", 142 ] 143 if (musl_arch == "riscv64") { 144 src_files += [ 145 "crt/crti.c", 146 "crt/crtn.c", 147 ] 148 } else if (musl_arch == "loongarch64") { 149 src_files += [ 150 "crt/crti.c", 151 "crt/crtn.c", 152 ] 153 } else { 154 src_files += [ 155 "crt/${musl_arch}/crti.s", 156 "crt/${musl_arch}/crtn.s", 157 ] 158 } 159 160 args = [ "-i" ] + rebase_path(sources_dir) 161 args += [ "-o" ] + rebase_path(outdir) 162 args += [ "-p" ] + [ "${musl_target_os}" ] 163 164 foreach(i, src_files) { 165 foreach(s, musl_src_files_ext) { 166 if (i == s) { 167 src_files -= [ "${s}" ] 168 } 169 } 170 } 171 172 outputs = [] 173 foreach(s, src_files) { 174 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 175 } 176 177 foreach(s, musl_src_files_ext) { 178 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 179 } 180 181 inputs = [] 182 foreach(i, src_files) { 183 foreach(s, musl_src_linux_files) { 184 if (i == s) { 185 src_files -= [ "${s}" ] 186 } 187 } 188 } 189 foreach(s, src_files) { 190 inputs += [ "${musl_dir}/${s}" ] 191 } 192 193 foreach(s, musl_src_files_ext) { 194 inputs += [ "${musl_dir}/${s}" ] 195 } 196 } 197 198 action("create_alltypes_h") { 199 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_alltypes.sh" 200 201 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/alltypes.h" ] 202 203 sources = [ "${target_out_dir}/${musl_ported_dir}/tools/mkalltypes.sed" ] 204 sources += [ 205 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/alltypes.h.in", 206 "${target_out_dir}/${musl_ported_dir}/include/alltypes.h.in", 207 ] 208 209 args = [ "-o" ] + rebase_path(outputs, root_build_dir) 210 args += rebase_path(sources, root_build_dir) 211 212 deps = [ ":create_porting_src" ] 213 } 214 215 action("create_version_h") { 216 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_vesion.sh" 217 218 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/version.h" ] 219 220 sources = [ 221 "${target_out_dir}/${musl_ported_dir}/VERSION", 222 "${target_out_dir}/${musl_ported_dir}/tools/version.sh", 223 ] 224 225 args = rebase_path(sources, root_build_dir) 226 args += 227 [ rebase_path("${target_out_dir}/${musl_inc_out_dir}", root_build_dir) ] 228 229 deps = [ ":create_porting_src" ] 230 } 231 232 action("create_syscall_h") { 233 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_syscall.sh" 234 235 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/syscall.h" ] 236 237 sources = [ "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/syscall.h.in" ] 238 239 args = rebase_path(sources, root_build_dir) 240 args += rebase_path(outputs, root_build_dir) 241 242 deps = [ ":create_porting_src" ] 243 } 244 245 # if musl_uapi_dir does not exist, then make uapi from musl_linux_kernel_dir 246 if (exec_script("/bin/sh", 247 [ 248 "-c", 249 "if [ ! -d " + rebase_path(musl_uapi_dir) + 250 " ]; then echo true; else echo false; fi", 251 ], 252 "value")) { 253 kernel_dir = rebase_path(musl_linux_kernel_dir) 254 kernel_out_dir = "${kernel_dir}/make_output" 255 musl_uapi_dir = "${kernel_out_dir}/usr/include" 256 make_uapi_cmd = "rm -rf ${musl_uapi_dir}" 257 make_uapi_cmd += " && make -C ${kernel_dir} -sj headers O=${kernel_out_dir} ARCH=${target_cpu}" 258 make_uapi_cmd += " && cp -f ${kernel_dir}/drivers/staging/android/uapi/ashmem.h ${musl_uapi_dir}/linux/ashmem.h" 259 make_uapi_cmd += " && sed -i '/#define _INPUT_H/i#define _UAPI_INPUT_H' ${musl_uapi_dir}/linux/input.h" 260 make_uapi_cmd += " && sed -i '/struct __kernel_sockaddr_storage/i#define sockaddr_storage __kernel_sockaddr_storage' ${musl_uapi_dir}/linux/socket.h" 261 args_make_uapi = [ "-c" ] 262 args_make_uapi += [ make_uapi_cmd ] 263 exec_script("/bin/sh", args_make_uapi, "value") 264 uapi_from = "make" 265 } else { 266 uapi_from = "local" 267 } 268 269 uapi_full_path = rebase_path(musl_uapi_dir) 270 arguments_uapi = [ "-c" ] 271 272 # exclude these files because they need special treatment 273 if (uapi_from == "make") { 274 exclude_files = "^asm\$|^scsi\$" 275 } else { 276 exclude_files = "^asm-arm\$|^asm-arm64\$|^scsi\$" 277 } 278 279 arguments_uapi += 280 [ "ls ${uapi_full_path} | grep -Ev " + "\"" + "${exclude_files}" + "\"" ] 281 uspi_files = exec_script("/bin/sh", arguments_uapi, "list lines") 282 283 # Generate a copy target for each file 284 foreach(file, uspi_files) { 285 copy("copy_uapi_${file}") { 286 sources = [ "${musl_uapi_dir}/${file}" ] 287 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/${file}" ] 288 } 289 } 290 291 group("copy_uapi_scsi") { 292 deps = [] 293 sources = [] 294 outputs = [] 295 uapi_scsi_dir = rebase_path("${musl_uapi_dir}/scsi") 296 arguments_scsi = [ "-c" ] 297 arguments_scsi += [ "ls ${uapi_scsi_dir}" ] 298 uapi_scsi_files = exec_script("/bin/sh", arguments_scsi, "list lines") 299 300 # Generate a copy target for each file in scsi dir to avoid being influenced by musl_copy_inc_scsi output 301 foreach(file, uapi_scsi_files) { 302 copy("copy_uapi_scsi_${file}") { 303 sources += [ "${musl_uapi_dir}/scsi/${file}" ] 304 outputs += [ "${target_out_dir}/${musl_inc_out_dir}/scsi/${file}" ] 305 } 306 deps += [ ":copy_uapi_scsi_${file}" ] 307 } 308 } 309 310 copy("copy_uapi_asm") { 311 if (uapi_from == "local") { 312 if ("${musl_arch}" == "arm") { 313 file_name = "asm-arm" 314 } else if ("${musl_arch}" == "riscv64") { 315 file_name = "asm-riscv" 316 } else if ("${musl_arch}" == "loongarch64") { 317 file_name = "asm-loongarch" 318 } else { # aarch64 and x86_64 use same file 319 file_name = "asm-arm64" 320 } 321 sources = [ "${musl_uapi_dir}/${file_name}/asm" ] 322 } else { 323 sources = [ "${musl_uapi_dir}/asm" ] 324 } 325 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/asm" ] 326 } 327 328 group("copy_uapi") { 329 deps = [ ":copy_uapi_scsi" ] 330 331 # We need do different processing for asm according to the source of uapi 332 deps += [ ":copy_uapi_asm" ] 333 foreach(file, uspi_files) { 334 deps += [ ":copy_uapi_${file}" ] 335 } 336 } 337 338 copy("musl_copy_inc_bits") { 339 sources = [] 340 sources_orig = musl_inc_bits_files 341 foreach(s, sources_orig) { 342 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 343 } 344 outputs = 345 [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] 346 deps = [ ":create_porting_src" ] 347 } 348 349 copy("musl_copy_inc_arpa") { 350 sources = [] 351 sources_orig = musl_inc_arpa_files 352 foreach(s, sources_orig) { 353 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 354 } 355 outputs = 356 [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] 357 deps = [ ":create_porting_src" ] 358 } 359 360 copy("musl_copy_inc_net") { 361 sources = [] 362 sources_orig = musl_inc_net_files 363 foreach(s, sources_orig) { 364 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 365 } 366 outputs = 367 [ "${target_out_dir}/${musl_inc_out_dir}/net/{{source_file_part}}" ] 368 deps = [ ":create_porting_src" ] 369 } 370 371 copy("musl_copy_inc_netinet") { 372 sources = [] 373 sources_orig = musl_inc_netinet_files 374 foreach(s, sources_orig) { 375 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 376 } 377 outputs = 378 [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] 379 deps = [ ":create_porting_src" ] 380 } 381 382 copy("musl_copy_inc_netpacket") { 383 sources = [] 384 sources_orig = musl_inc_netpacket_files 385 foreach(s, sources_orig) { 386 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 387 } 388 outputs = [ 389 "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}", 390 ] 391 deps = [ ":create_porting_src" ] 392 } 393 394 copy("musl_copy_inc_scsi") { 395 sources = [] 396 sources_orig = musl_inc_scsi_files 397 foreach(s, sources_orig) { 398 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 399 } 400 outputs = 401 [ "${target_out_dir}/${musl_inc_out_dir}/scsi/{{source_file_part}}" ] 402 deps = [ ":create_porting_src" ] 403 } 404 405 copy("musl_copy_inc_sys") { 406 sources = [] 407 sources_orig = musl_inc_sys_files 408 foreach(s, sources_orig) { 409 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 410 } 411 outputs = 412 [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 413 deps = [ ":create_porting_src" ] 414 } 415 416 copy("musl_copy_inc_trace") { 417 sources = [] 418 sources_orig = musl_inc_trace_files 419 foreach(s, sources_orig) { 420 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 421 } 422 outputs = 423 [ "${target_out_dir}/${musl_inc_out_dir}/trace/{{source_file_part}}" ] 424 deps = [ ":create_porting_src" ] 425 } 426 427 copy("musl_copy_inc_info") { 428 sources = [] 429 sources_orig = musl_inc_info_files 430 foreach(s, sources_orig) { 431 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 432 } 433 outputs = 434 [ "${target_out_dir}/${musl_inc_out_dir}/info/{{source_file_part}}" ] 435 deps = [ ":create_porting_src" ] 436 } 437 438 copy("musl_copy_inc_fortify") { 439 sources = [] 440 sources_orig = musl_inc_fortify_files 441 foreach(s, sources_orig) { 442 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 443 } 444 outputs = 445 [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] 446 deps = [ ":create_porting_src" ] 447 } 448 449 copy("musl_copy_inc_root") { 450 sources = [] 451 sources_orig = musl_inc_root_files 452 foreach(s, sources_orig) { 453 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 454 } 455 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 456 deps = [ ":create_porting_src" ] 457 } 458 459 copy("musl_copy_inc_hook") { 460 sources = musl_inc_hook_files 461 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 462 } 463 464 group("FreeBSD_copy") { 465 deps = [ 466 ":FreeBSD_headers", 467 ":FreeBSD_sys_headers", 468 ] 469 } 470 471 copy("FreeBSD_headers") { 472 sources = freebsd_headers 473 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 474 deps = [ ":create_porting_src" ] 475 } 476 477 copy("FreeBSD_sys_headers") { 478 sources = freebsd_sys_headers 479 outputs = 480 [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 481 deps = [ ":create_porting_src" ] 482 } 483 484 group("libctest") { 485 testonly = true 486 deps = [ "libc-test:musl_libc_test" ] 487 } 488 489 group("benchmark-musl") { 490 testonly = true 491 deps = [ "Benchmark/musl:benchmark_musl_group" ] 492 } 493 494 static_and_shared_libs_template("static") { 495 musl_use_flto = false 496 musl_use_gwp_asan = false 497 } 498 499 static_and_shared_libs_template("shared") { 500 musl_use_flto = true 501 } 502} 503