• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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