• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2021 Huawei Device Co., Ltd.
2# Copyright (C) 2019 The Android Open Source Project
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import("//build/config/clang/clang.gni")
16import("//build/ohos/ndk/ndk.gni")
17import("//third_party/musl/musl_config.gni")
18import("//third_party/musl/musl_src.gni")
19import("//third_party/musl/musl_template.gni")
20
21musl_target_out_dir = "${root_out_dir}/obj/third_party/musl"
22ndk_musl_include = "ndk_musl_include"
23interface_musl_dir = "//interface/sdk_c/third_party/musl"
24
25if (host_os == "mac") {
26  if (host_cpu == "arm64") {
27    toolchains_file_name = "darwin-arm64"
28    deps_name = "darwin_arm64"
29  } else {
30    toolchains_file_name = "darwin-x86_64"
31    deps_name = "darwin_x86_64"
32  }
33
34  darwin_system_toolchains_dir = "${toolchains_dir}/${toolchains_file_name}"
35  ohos_ndk_toolchains("${deps_name}") {
36    dest_dir = "$ndk_darwin_toolchains_out_dir"
37    sources = [
38      "${darwin_system_toolchains_dir}/llvm/NOTICE",
39      "${darwin_system_toolchains_dir}/llvm/bin",
40      "${darwin_system_toolchains_dir}/llvm/include",
41      "${darwin_system_toolchains_dir}/llvm/lib",
42      "${darwin_system_toolchains_dir}/llvm/libexec",
43      "${darwin_system_toolchains_dir}/llvm/python3",
44      "${darwin_system_toolchains_dir}/llvm/script",
45      "${darwin_system_toolchains_dir}/llvm/share",
46    ]
47    license_file = "${darwin_system_toolchains_dir}/llvm/NOTICE"
48  }
49
50  action("darwin_toolchain") {
51    outputs = [ "${ndk_darwin_toolchains_out_dir}" ]
52    script = "toolchain.sh"
53    args =
54        [ "-i" ] + [ rebase_path("${darwin_system_toolchains_dir}/libcxx-ndk") ]
55    args += [ "-o" ] + [ rebase_path("${ndk_darwin_toolchains_out_dir}") ]
56    if (host_cpu == "arm64") {
57      deps = [ ":darwin_arm64" ]
58    } else {
59      deps = [ ":darwin_x86_64" ]
60    }
61  }
62} else {
63  linux_x86_64_toolchains_dir = "${toolchains_dir}/linux-x86_64"
64  windows_x86_64_toolchain_dir = "${toolchains_dir}/windows-x86_64"
65
66  ohos_ndk_toolchains("linux_x86_64") {
67    dest_dir = "$ndk_linux_toolchains_out_dir"
68    sources = [
69      "${linux_x86_64_toolchains_dir}/llvm/NOTICE",
70      "${linux_x86_64_toolchains_dir}/llvm/bin",
71      "${linux_x86_64_toolchains_dir}/llvm/include",
72      "${linux_x86_64_toolchains_dir}/llvm/lib",
73      "${linux_x86_64_toolchains_dir}/llvm/libexec",
74      "${linux_x86_64_toolchains_dir}/llvm/python3",
75      "${linux_x86_64_toolchains_dir}/llvm/script",
76      "${linux_x86_64_toolchains_dir}/llvm/share",
77    ]
78    license_file = "${linux_x86_64_toolchains_dir}/llvm/NOTICE"
79  }
80
81  ohos_ndk_toolchains("windows_x86_64") {
82    dest_dir = "$ndk_windows_toolchains_out_dir"
83    sources = [
84      "${windows_x86_64_toolchain_dir}/llvm/NOTICE",
85      "${windows_x86_64_toolchain_dir}/llvm/bin",
86      "${windows_x86_64_toolchain_dir}/llvm/include",
87      "${windows_x86_64_toolchain_dir}/llvm/lib",
88      "${windows_x86_64_toolchain_dir}/llvm/libexec",
89      "${windows_x86_64_toolchain_dir}/llvm/script",
90      "${windows_x86_64_toolchain_dir}/llvm/share",
91    ]
92    args = [ "--follow-all-symlinks" ]
93    license_file = "${windows_x86_64_toolchain_dir}/llvm/NOTICE"
94  }
95  action("linux_toolchain") {
96    outputs = [ "${ndk_linux_toolchains_out_dir}" ]
97    script = "toolchain.sh"
98    args =
99        [ "-i" ] + [ rebase_path("${linux_x86_64_toolchains_dir}/libcxx-ndk") ]
100    args += [ "-o" ] + [ rebase_path("${ndk_linux_toolchains_out_dir}") ]
101    deps = [ ":linux_x86_64" ]
102  }
103
104  action("windows_toolchain") {
105    outputs = [ "${ndk_windows_toolchains_out_dir}" ]
106    script = "toolchain.sh"
107    args =
108        [ "-i" ] + [ rebase_path("${windows_x86_64_toolchain_dir}/libcxx-ndk") ]
109    args += [ "-o" ] + [ rebase_path("${ndk_windows_toolchains_out_dir}") ]
110    deps = [ ":windows_x86_64" ]
111  }
112}
113
114group("ndk_toolchain") {
115  if (host_os == "mac") {
116    deps = [ ":darwin_toolchain" ]
117  } else {
118    deps = [
119      ":linux_toolchain",
120      ":windows_toolchain",
121    ]
122  }
123}
124
125group("musl_sysroot") {
126  deps = [
127    ":copy_musl_sysroot",
128    ":musl_arm_bits_arm32",
129    ":musl_arm_uapi_arm32",
130    ":musl_bits_aarch64",
131    ":musl_bits_x86_64",
132  ]
133}
134
135action("copy_ndk_uapi") {
136  outputs = [ "${musl_target_out_dir}/${ndk_musl_include}/linux" ]
137  script = "${musl_dir}/scripts/copy_uapi.sh"
138  args = [ "-i" ] + [ rebase_path("${uapi_dir}") ]
139  args +=
140      [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
141  args += [ "-t" ] + [ "${musl_arch}" ]
142}
143
144action("copy_ndk_musl_headers") {
145  outputs = [ "${musl_target_out_dir}/${ndk_musl_include}" ]
146  script = "copy_ndk_musl_headers.sh"
147  args = [ "-i" ] + [ rebase_path("${interface_musl_dir}/${ndk_musl_include}") ]
148  args +=
149      [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
150  deps = [ ":copy_ndk_uapi" ]
151}
152
153action("copy_musl_sysroot") {
154  outputs = [ "${ndk_headers_out_dir}" ]
155  script = "copy_musl_sysroot.sh"
156  args =
157      [ "-i" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
158  args += [ "-o" ] + [ rebase_path("${ndk_headers_out_dir}") ]
159  args += [ "-t" ] + [ "${musl_arch}" ]
160  deps = [ ":copy_ndk_musl_headers" ]
161}
162
163musl_libs_arm32 = [
164  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm)",
165  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm)",
166  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm)",
167]
168
169musl_libs_aarch64 = [
170  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm64)",
171  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm64)",
172  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm64)",
173]
174
175musl_libs_x86_64 = [
176  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_x86_64)",
177  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_x86_64)",
178  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_x86_64)",
179]
180
181musl_lib_arm32 = [
182  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm)",
183  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm)",
184  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm)",
185  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm)",
186  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm)",
187  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm)",
188  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm)",
189  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm)",
190  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm)",
191  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm)",
192]
193
194musl_lib_arm64 = [
195  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm64)",
196  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm64)",
197  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm64)",
198  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm64)",
199  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm64)",
200  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm64)",
201  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm64)",
202  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm64)",
203  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm64)",
204  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm64)",
205]
206
207musl_lib_x86_64 = [
208  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_x86_64)",
209  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_x86_64)",
210  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_x86_64)",
211  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_x86_64)",
212  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_x86_64)",
213  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_x86_64)",
214  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_x86_64)",
215  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_x86_64)",
216  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_x86_64)",
217  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_x86_64)",
218]
219
220## arm-linux-ohos asm directory
221ohos_ndk_copy("musl_arm_uapi_arm32") {
222  dest_dir = "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos"
223
224  sources =
225      [ "//kernel/linux/patches/linux-5.10/prebuilts/usr/include/asm-arm/asm" ]
226  args = [ "--ignore-stale" ]
227}
228
229## arm-linux-ohos bits directory
230ohos_copy("musl_arm_bits_arm32") {
231  deps = musl_libs_arm32
232  sources = []
233  sources_temp = [
234    "alltypes.h",
235    "syscall.h",
236  ]
237  sources_temp += musl_inc_bits_files
238  sources_orig = get_path_info(sources_temp, "file")
239
240  # print("${sources_orig}")
241
242  foreach(s, sources_orig) {
243    sources += [ get_label_info(deps[0], "target_out_dir") +
244                 "/usr/include/arm-linux-ohos/bits/${s}" ]
245  }
246  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos/bits/{{source_file_part}}" ]
247}
248
249## aarch64-linux-ohos bits directory
250ohos_copy("musl_bits_aarch64") {
251  deps = musl_libs_aarch64
252  sources = []
253  sources_temp = [
254    "alltypes.h",
255    "syscall.h",
256  ]
257  sources_temp += musl_inc_bits_files
258  sources_orig = get_path_info(sources_temp, "file")
259
260  # print("${sources_orig}")
261
262  foreach(s, sources_orig) {
263    sources += [ get_label_info(deps[0], "target_out_dir") +
264                 "/usr/include/aarch64-linux-ohos/bits/${s}" ]
265  }
266  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/aarch64-linux-ohos/bits/{{source_file_part}}" ]
267}
268
269## x86_64-linux-ohos bits directory
270ohos_copy("musl_bits_x86_64") {
271  deps = musl_libs_x86_64
272  sources = []
273  sources_temp = [
274    "alltypes.h",
275    "syscall.h",
276  ]
277  sources_temp += musl_inc_bits_files
278  sources_orig = get_path_info(sources_temp, "file")
279
280  # print("${sources_orig}")
281
282  foreach(s, sources_orig) {
283    sources += [ get_label_info(deps[0], "target_out_dir") +
284                 "/usr/include/x86_64-linux-ohos/bits/${s}" ]
285  }
286  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/x86_64-linux-ohos/bits/{{source_file_part}}" ]
287}
288
289ohos_copy("musl_ndk_libs_arm32") {
290  deps = musl_lib_arm32
291  crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/arm-linux-ohos"
292  sources = [
293    "${crt_dir}/Scrt1.o",
294    "${crt_dir}/crt1.o",
295    "${crt_dir}/crti.o",
296    "${crt_dir}/crtn.o",
297    "${crt_dir}/rcrt1.o",
298  ]
299  sources += [ get_label_info(deps[0], "target_out_dir") +
300               "/usr/lib/arm-linux-ohos/libm.a" ]
301  sources += [ get_label_info(deps[0], "target_out_dir") +
302               "/usr/lib/arm-linux-ohos/libdl.a" ]
303  sources += [ get_label_info(deps[0], "target_out_dir") +
304               "/usr/lib/arm-linux-ohos/libc.a" ]
305  sources += [ get_label_info(deps[0], "target_out_dir") +
306               "/usr/lib/arm-linux-ohos/libcrypt.a" ]
307  sources += [ get_label_info(deps[0], "target_out_dir") +
308               "/usr/lib/arm-linux-ohos/libpthread.a" ]
309  sources += [ get_label_info(deps[0], "target_out_dir") +
310               "/usr/lib/arm-linux-ohos/libresolv.a" ]
311  sources += [ get_label_info(deps[0], "target_out_dir") +
312               "/usr/lib/arm-linux-ohos/librt.a" ]
313  sources += [ get_label_info(deps[0], "target_out_dir") +
314               "/usr/lib/arm-linux-ohos/libutil.a" ]
315  sources += [ get_label_info(deps[0], "target_out_dir") +
316               "/usr/lib/arm-linux-ohos/libxnet.a" ]
317
318  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/arm-linux-ohos/{{source_file_part}}" ]
319}
320
321ohos_copy("musl_ndk_libs_aarch64") {
322  deps = musl_lib_arm64
323  sources = [ get_label_info(deps[0], "target_out_dir") +
324              "/usr/lib/aarch64-linux-ohos/Scrt1.o" ]
325  sources += [ get_label_info(deps[0], "target_out_dir") +
326               "/usr/lib/aarch64-linux-ohos/crt1.o" ]
327  sources += [ get_label_info(deps[0], "target_out_dir") +
328               "/usr/lib/aarch64-linux-ohos/crti.o" ]
329  sources += [ get_label_info(deps[0], "target_out_dir") +
330               "/usr/lib/aarch64-linux-ohos/crtn.o" ]
331  sources += [ get_label_info(deps[0], "target_out_dir") +
332               "/usr/lib/aarch64-linux-ohos/rcrt1.o" ]
333  sources += [ get_label_info(deps[0], "target_out_dir") +
334               "/usr/lib/aarch64-linux-ohos/libc.a" ]
335  sources += [ get_label_info(deps[0], "target_out_dir") +
336               "/usr/lib/aarch64-linux-ohos/libdl.a" ]
337  sources += [ get_label_info(deps[0], "target_out_dir") +
338               "/usr/lib/aarch64-linux-ohos/libm.a" ]
339  sources += [ get_label_info(deps[0], "target_out_dir") +
340               "/usr/lib/aarch64-linux-ohos/libcrypt.a" ]
341  sources += [ get_label_info(deps[0], "target_out_dir") +
342               "/usr/lib/aarch64-linux-ohos/libpthread.a" ]
343  sources += [ get_label_info(deps[0], "target_out_dir") +
344               "/usr/lib/aarch64-linux-ohos/libresolv.a" ]
345  sources += [ get_label_info(deps[0], "target_out_dir") +
346               "/usr/lib/aarch64-linux-ohos/librt.a" ]
347  sources += [ get_label_info(deps[0], "target_out_dir") +
348               "/usr/lib/aarch64-linux-ohos/libutil.a" ]
349  sources += [ get_label_info(deps[0], "target_out_dir") +
350               "/usr/lib/aarch64-linux-ohos/libxnet.a" ]
351
352  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/aarch64-linux-ohos/{{source_file_part}}" ]
353}
354
355ohos_copy("musl_ndk_libs_x86_64") {
356  deps = musl_lib_x86_64
357  crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/x86_64-linux-ohos"
358  sources = [
359    "${crt_dir}/Scrt1.o",
360    "${crt_dir}/crt1.o",
361    "${crt_dir}/crti.o",
362    "${crt_dir}/crtn.o",
363    "${crt_dir}/rcrt1.o",
364  ]
365  sources += [ get_label_info(deps[0], "target_out_dir") +
366               "/usr/lib/x86_64-linux-ohos/libc.a" ]
367  sources += [ get_label_info(deps[0], "target_out_dir") +
368               "/usr/lib/x86_64-linux-ohos/libdl.a" ]
369  sources += [ get_label_info(deps[0], "target_out_dir") +
370               "/usr/lib/x86_64-linux-ohos/libm.a" ]
371  sources += [ get_label_info(deps[0], "target_out_dir") +
372               "/usr/lib/x86_64-linux-ohos/libcrypt.a" ]
373  sources += [ get_label_info(deps[0], "target_out_dir") +
374               "/usr/lib/x86_64-linux-ohos/libpthread.a" ]
375  sources += [ get_label_info(deps[0], "target_out_dir") +
376               "/usr/lib/x86_64-linux-ohos/libresolv.a" ]
377  sources += [ get_label_info(deps[0], "target_out_dir") +
378               "/usr/lib/x86_64-linux-ohos/librt.a" ]
379  sources += [ get_label_info(deps[0], "target_out_dir") +
380               "/usr/lib/x86_64-linux-ohos/libutil.a" ]
381  sources += [ get_label_info(deps[0], "target_out_dir") +
382               "/usr/lib/x86_64-linux-ohos/libxnet.a" ]
383
384  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/x86_64-linux-ohos/{{source_file_part}}" ]
385}
386