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 "//kernel/liteos_m:public", 14 "//kernel/liteos_m: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 ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}-test.ini") { 35 source = 36 "${musl_porting_dir}/config/ld-musl-namespace-${musl_arch}-test.ini" 37 } 38 39 ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}.ini") { 40 source = "${musl_porting_dir}/config/ld-musl-namespace-${musl_arch}.ini" 41 install_images = [ 42 "system", 43 "updater", 44 ] 45 } 46 47 group("musl_ns_config") { 48 deps = [ 49 ":ld-musl-namespace-${musl_arch}-test.ini", 50 ":ld-musl-namespace-${musl_arch}.ini", 51 ] 52 } 53 54 group("musl_libs") { 55 deps = [ 56 ":musl_headers", 57 ":musl_sysparam", 58 ":soft_libs", 59 ] 60 } 61 62 ohos_prebuilt_etc("musl_sysparam") { 63 source = "${musl_porting_dir}/etc/musl.para" 64 relative_install_dir = "param" 65 } 66 67 musl_libs("soft_libs") { 68 } 69 70 group("musl_headers") { 71 deps = [ 72 ":copy_uapi", 73 ":create_alltypes_h", 74 ":create_syscall_h", 75 ":create_version_h", 76 ":musl_copy_inc_arpa", 77 ":musl_copy_inc_bits", 78 ":musl_copy_inc_fortify", 79 ":musl_copy_inc_hook", 80 ":musl_copy_inc_info", 81 ":musl_copy_inc_net", 82 ":musl_copy_inc_netinet", 83 ":musl_copy_inc_netpacket", 84 ":musl_copy_inc_root", 85 ":musl_copy_inc_scsi", 86 ":musl_copy_inc_sys", 87 ":musl_copy_inc_trace", 88 ":musl_ns_config", 89 ] 90 } 91 92 action("create_porting_src") { 93 script = "scripts/porting.sh" 94 95 sources_dir = [ "//third_party/musl" ] 96 97 outdir = [ "${target_out_dir}/${musl_ported_dir}" ] 98 99 src_files = musl_src_arch_file 100 src_files += musl_src_file 101 src_files += musl_src_ldso 102 src_files += musl_inc_bits_files 103 src_files += musl_inc_arpa_files 104 src_files += musl_inc_net_files 105 src_files += musl_inc_netinet_files 106 src_files += musl_inc_netpacket_files 107 src_files += musl_inc_scsi_files 108 src_files += musl_inc_sys_files 109 src_files += musl_inc_fortify_files 110 src_files += musl_inc_root_files 111 src_files += [ 112 "crt/${musl_arch}/crti.s", 113 "crt/${musl_arch}/crtn.s", 114 "crt/Scrt1.c", 115 "crt/crt1.c", 116 "crt/rcrt1.c", 117 "tools/mkalltypes.sed", 118 "arch/${musl_arch}/bits/alltypes.h.in", 119 "arch/${musl_arch}/bits/syscall.h.in", 120 "include/alltypes.h.in", 121 "VERSION", 122 "tools/version.sh", 123 "tools/install.sh", 124 "scripts/install.py", 125 "scripts/create_alltypes.sh", 126 "scripts/create_vesion.sh", 127 "scripts/create_syscall.sh", 128 ] 129 130 args = [ "-i" ] + rebase_path(sources_dir) 131 args += [ "-o" ] + rebase_path(outdir) 132 args += [ "-p" ] + [ "${musl_target_os}" ] 133 134 foreach(i, src_files) { 135 foreach(s, musl_src_porting_file) { 136 if (i == s) { 137 src_files -= [ "${s}" ] 138 } 139 } 140 } 141 142 outputs = [] 143 foreach(s, src_files) { 144 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 145 } 146 147 foreach(s, musl_src_porting_file) { 148 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 149 } 150 151 inputs = [] 152 foreach(s, src_files) { 153 inputs += [ "${musl_dir}/${s}" ] 154 } 155 156 foreach(s, musl_src_porting_file) { 157 inputs += [ "${musl_porting_dir}/${s}" ] 158 } 159 } 160 161 action("create_alltypes_h") { 162 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_alltypes.sh" 163 164 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/alltypes.h" ] 165 166 sources = [ "${target_out_dir}/${musl_ported_dir}/tools/mkalltypes.sed" ] 167 sources += [ 168 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/alltypes.h.in", 169 "${target_out_dir}/${musl_ported_dir}/include/alltypes.h.in", 170 ] 171 172 args = [ "-o" ] + rebase_path(outputs, root_build_dir) 173 args += rebase_path(sources, root_build_dir) 174 175 deps = [ ":create_porting_src" ] 176 } 177 178 action("create_version_h") { 179 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_vesion.sh" 180 181 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/version.h" ] 182 183 sources = [ 184 "${target_out_dir}/${musl_ported_dir}/VERSION", 185 "${target_out_dir}/${musl_ported_dir}/tools/version.sh", 186 ] 187 188 args = rebase_path(sources, root_build_dir) 189 args += 190 [ rebase_path("${target_out_dir}/${musl_inc_out_dir}", root_build_dir) ] 191 192 deps = [ ":create_porting_src" ] 193 } 194 195 action("create_syscall_h") { 196 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_syscall.sh" 197 198 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/syscall.h" ] 199 200 sources = [ "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/syscall.h.in" ] 201 202 args = rebase_path(sources, root_build_dir) 203 args += rebase_path(outputs, root_build_dir) 204 205 deps = [ ":create_porting_src" ] 206 } 207 208 # if uapi_dir does not exist, then make uapi from linux_kernel_dir 209 if (exec_script("/bin/sh", 210 [ 211 "-c", 212 "if [ ! -d " + rebase_path(uapi_dir) + 213 " ]; then echo true; else echo false; fi", 214 ], 215 "value")) { 216 kernel_dir = rebase_path(linux_kernel_dir) 217 kernel_out_dir = "${kernel_dir}/make_output" 218 uapi_dir = "${kernel_out_dir}/usr/include" 219 make_uapi_cmd = "rm -rf ${uapi_dir}" 220 make_uapi_cmd += " && make -C ${kernel_dir} -sj headers O=${kernel_out_dir} ARCH=${target_cpu}" 221 make_uapi_cmd += " && cp -f ${kernel_dir}/drivers/staging/android/uapi/ashmem.h ${uapi_dir}/linux/ashmem.h" 222 make_uapi_cmd += " && sed -i '/#define _INPUT_H/i#define _UAPI_INPUT_H' ${uapi_dir}/linux/input.h" 223 make_uapi_cmd += " && sed -i '/struct __kernel_sockaddr_storage/i#define sockaddr_storage __kernel_sockaddr_storage' ${uapi_dir}/linux/socket.h" 224 args_make_uapi = [ "-c" ] 225 args_make_uapi += [ make_uapi_cmd ] 226 exec_script("/bin/sh", args_make_uapi, "value") 227 uapi_from = "make" 228 } else { 229 uapi_from = "local" 230 } 231 232 uapi_full_path = rebase_path(uapi_dir) 233 arguments_uapi = [ "-c" ] 234 235 # exclude these files because they need special treatment 236 if (uapi_from == "make") { 237 exclude_files = "^asm\$|^scsi\$" 238 } else { 239 exclude_files = "^asm-arm\$|^asm-arm64\$|^scsi\$" 240 } 241 242 arguments_uapi += 243 [ "ls ${uapi_full_path} | grep -Ev " + "\"" + "${exclude_files}" + "\"" ] 244 uspi_files = exec_script("/bin/sh", arguments_uapi, "list lines") 245 246 # Generate a copy target for each file 247 foreach(file, uspi_files) { 248 copy("copy_uapi_${file}") { 249 sources = [ "${uapi_dir}/${file}" ] 250 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/${file}" ] 251 } 252 } 253 254 group("copy_uapi_scsi") { 255 deps = [] 256 sources = [] 257 outputs = [] 258 uapi_scsi_dir = rebase_path("${uapi_dir}/scsi") 259 arguments_scsi = [ "-c" ] 260 arguments_scsi += [ "ls ${uapi_scsi_dir}" ] 261 uapi_scsi_files = exec_script("/bin/sh", arguments_scsi, "list lines") 262 263 # Generate a copy target for each file in scsi dir to avoid being influenced by musl_copy_inc_scsi output 264 foreach(file, uapi_scsi_files) { 265 copy("copy_uapi_scsi_${file}") { 266 sources += [ "${uapi_dir}/scsi/${file}" ] 267 outputs += [ "${target_out_dir}/${musl_inc_out_dir}/scsi/${file}" ] 268 } 269 deps += [ ":copy_uapi_scsi_${file}" ] 270 } 271 } 272 273 copy("copy_uapi_asm") { 274 if (uapi_from == "local") { 275 if ("${musl_arch}" == "arm") { 276 file_name = "asm-arm" 277 } else { # aarch64 and x86_64 use same file 278 file_name = "asm-arm64" 279 } 280 sources = [ "${uapi_dir}/${file_name}/asm" ] 281 } else { 282 sources = [ "${uapi_dir}/asm" ] 283 } 284 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/asm" ] 285 } 286 287 group("copy_uapi") { 288 deps = [ ":copy_uapi_scsi" ] 289 290 # We need do different processing for asm according to the source of uapi 291 deps += [ ":copy_uapi_asm" ] 292 foreach(file, uspi_files) { 293 deps += [ ":copy_uapi_${file}" ] 294 } 295 } 296 297 copy("musl_copy_inc_bits") { 298 sources = [] 299 sources_orig = musl_inc_bits_files 300 foreach(s, sources_orig) { 301 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 302 } 303 outputs = 304 [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] 305 deps = [ ":create_porting_src" ] 306 } 307 308 copy("musl_copy_inc_arpa") { 309 sources = [] 310 sources_orig = musl_inc_arpa_files 311 foreach(s, sources_orig) { 312 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 313 } 314 outputs = 315 [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] 316 deps = [ ":create_porting_src" ] 317 } 318 319 copy("musl_copy_inc_net") { 320 sources = [] 321 sources_orig = musl_inc_net_files 322 foreach(s, sources_orig) { 323 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 324 } 325 outputs = 326 [ "${target_out_dir}/${musl_inc_out_dir}/net/{{source_file_part}}" ] 327 deps = [ ":create_porting_src" ] 328 } 329 330 copy("musl_copy_inc_netinet") { 331 sources = [] 332 sources_orig = musl_inc_netinet_files 333 foreach(s, sources_orig) { 334 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 335 } 336 outputs = 337 [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] 338 deps = [ ":create_porting_src" ] 339 } 340 341 copy("musl_copy_inc_netpacket") { 342 sources = [] 343 sources_orig = musl_inc_netpacket_files 344 foreach(s, sources_orig) { 345 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 346 } 347 outputs = [ 348 "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}", 349 ] 350 deps = [ ":create_porting_src" ] 351 } 352 353 copy("musl_copy_inc_scsi") { 354 sources = [] 355 sources_orig = musl_inc_scsi_files 356 foreach(s, sources_orig) { 357 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 358 } 359 outputs = 360 [ "${target_out_dir}/${musl_inc_out_dir}/scsi/{{source_file_part}}" ] 361 deps = [ ":create_porting_src" ] 362 } 363 364 copy("musl_copy_inc_sys") { 365 sources = [] 366 sources_orig = musl_inc_sys_files 367 foreach(s, sources_orig) { 368 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 369 } 370 outputs = 371 [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 372 deps = [ ":create_porting_src" ] 373 } 374 375 copy("musl_copy_inc_trace") { 376 sources = [] 377 sources_orig = musl_inc_trace_files 378 foreach(s, sources_orig) { 379 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 380 } 381 outputs = 382 [ "${target_out_dir}/${musl_inc_out_dir}/trace/{{source_file_part}}" ] 383 deps = [ ":create_porting_src" ] 384 } 385 386 copy("musl_copy_inc_info") { 387 sources = [] 388 sources_orig = musl_inc_info_files 389 foreach(s, sources_orig) { 390 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 391 } 392 outputs = 393 [ "${target_out_dir}/${musl_inc_out_dir}/info/{{source_file_part}}" ] 394 deps = [ ":create_porting_src" ] 395 } 396 397 copy("musl_copy_inc_fortify") { 398 sources = [] 399 sources_orig = musl_inc_fortify_files 400 foreach(s, sources_orig) { 401 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 402 } 403 outputs = 404 [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] 405 deps = [ ":create_porting_src" ] 406 } 407 408 copy("musl_copy_inc_root") { 409 sources = [] 410 sources_orig = musl_inc_root_files 411 foreach(s, sources_orig) { 412 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 413 } 414 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 415 deps = [ ":create_porting_src" ] 416 } 417 418 copy("musl_copy_inc_hook") { 419 sources = musl_inc_hook_files 420 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 421 } 422 423 group("libctest") { 424 testonly = true 425 deps = [ "libc-test:musl_libc_test" ] 426 } 427} 428