• 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/ohos/ndk/ndk.gni")
16import("//third_party/musl/musl_config.gni")
17import("//third_party/musl/musl_src.gni")
18import("//third_party/musl/musl_template.gni")
19
20toolchains_dir = "//prebuilts/clang/ohos"
21musl_target_out_dir = "${root_out_dir}/obj/third_party/musl"
22
23if (host_os == "mac") {
24  darwin_x86_64_toolchains_dir = "${toolchains_dir}/darwin-x86_64"
25  ohos_ndk_toolchains("darwin_x86_64") {
26    dest_dir = "$ndk_darwin_toolchains_out_dir"
27    sources = [
28      "${darwin_x86_64_toolchains_dir}/llvm/NOTICE",
29      "${darwin_x86_64_toolchains_dir}/llvm/bin",
30      "${darwin_x86_64_toolchains_dir}/llvm/include",
31      "${darwin_x86_64_toolchains_dir}/llvm/lib",
32      "${darwin_x86_64_toolchains_dir}/llvm/libexec",
33      "${darwin_x86_64_toolchains_dir}/llvm/share",
34    ]
35    license_file = "${darwin_x86_64_toolchains_dir}/llvm/NOTICE"
36  }
37  action("darwin_toolchain") {
38    outputs = [ "${ndk_darwin_toolchains_out_dir}" ]
39    script = "toolchain.sh"
40    args =
41        [ "-i" ] + [ rebase_path("${darwin_x86_64_toolchains_dir}/libcxx-ndk") ]
42    args += [ "-o" ] + [ rebase_path("${ndk_darwin_toolchains_out_dir}") ]
43    deps = [ ":darwin_x86_64" ]
44  }
45} else {
46  linux_x86_64_toolchains_dir = "${toolchains_dir}/linux-x86_64"
47  windows_x86_64_toolchain_dir = "${toolchains_dir}/windows-x86_64"
48
49  ohos_ndk_toolchains("linux_x86_64") {
50    dest_dir = "$ndk_linux_toolchains_out_dir"
51    sources = [
52      "${linux_x86_64_toolchains_dir}/llvm/NOTICE",
53      "${linux_x86_64_toolchains_dir}/llvm/bin",
54      "${linux_x86_64_toolchains_dir}/llvm/include",
55      "${linux_x86_64_toolchains_dir}/llvm/lib",
56      "${linux_x86_64_toolchains_dir}/llvm/libexec",
57      "${linux_x86_64_toolchains_dir}/llvm/share",
58    ]
59    license_file = "${linux_x86_64_toolchains_dir}/llvm/NOTICE"
60  }
61
62  ohos_ndk_toolchains("windows_x86_64") {
63    dest_dir = "$ndk_windows_toolchains_out_dir"
64    sources = [
65      "${windows_x86_64_toolchain_dir}/llvm/NOTICE",
66      "${windows_x86_64_toolchain_dir}/llvm/bin",
67      "${windows_x86_64_toolchain_dir}/llvm/include",
68      "${windows_x86_64_toolchain_dir}/llvm/lib",
69      "${windows_x86_64_toolchain_dir}/llvm/libexec",
70      "${windows_x86_64_toolchain_dir}/llvm/share",
71    ]
72    args = [ "--follow-all-symlinks" ]
73    license_file = "${windows_x86_64_toolchain_dir}/llvm/NOTICE"
74  }
75  action("linux_toolchain") {
76    outputs = [ "${ndk_linux_toolchains_out_dir}" ]
77    script = "toolchain.sh"
78    args =
79        [ "-i" ] + [ rebase_path("${linux_x86_64_toolchains_dir}/libcxx-ndk") ]
80    args += [ "-o" ] + [ rebase_path("${ndk_linux_toolchains_out_dir}") ]
81    deps = [ ":linux_x86_64" ]
82  }
83
84  action("windows_toolchain") {
85    outputs = [ "${ndk_windows_toolchains_out_dir}" ]
86    script = "toolchain.sh"
87    args =
88        [ "-i" ] + [ rebase_path("${windows_x86_64_toolchain_dir}/libcxx-ndk") ]
89    args += [ "-o" ] + [ rebase_path("${ndk_windows_toolchains_out_dir}") ]
90    deps = [ ":windows_x86_64" ]
91  }
92}
93
94group("ndk_toolchain") {
95  if (host_os == "mac") {
96    deps = [ ":darwin_toolchain" ]
97  } else {
98    deps = [
99      ":linux_toolchain",
100      ":windows_toolchain",
101    ]
102  }
103}
104
105group("musl_sysroot") {
106  deps = [
107    ":copy_musl_sysroot",
108    ":musl_arm_bits_arm32",
109    ":musl_arm_uapi_arm32",
110  ]
111}
112
113action("copy_musl_sysroot") {
114  outputs = [ "${ndk_headers_out_dir}" ]
115  script = "copy_musl_sysroot.sh"
116  args =
117      [ "-i" ] + [ rebase_path("${musl_target_out_dir}/${musl_inc_out_dir}") ]
118  args += [ "-o" ] + [ rebase_path("${ndk_headers_out_dir}") ]
119  args += [ "-t" ] + [ "${musl_arch}" ]
120  deps = [ "//third_party/musl:musl_headers" ]
121}
122
123musl_libs_arm32 = [
124  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm)",
125  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm)",
126  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm)",
127]
128
129musl_lib_arm32 = [
130  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm)",
131  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm)",
132  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm)",
133  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm)",
134  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm)",
135  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm)",
136  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm)",
137  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm)",
138  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm)",
139  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm)",
140]
141
142musl_lib_arm64 = [
143  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm64)",
144  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm64)",
145  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm64)",
146  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm64)",
147  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm64)",
148  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm64)",
149  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm64)",
150  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm64)",
151  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm64)",
152  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm64)",
153]
154
155## arm-linux-ohos asm directory
156ohos_ndk_copy("musl_arm_uapi_arm32") {
157  dest_dir = "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos"
158
159  sources =
160      [ "//kernel/linux/patches/linux-5.10/prebuilts/usr/include/asm-arm/asm" ]
161  args = [ "--ignore-stale" ]
162}
163
164## arm-linux-ohos bits directory
165ohos_copy("musl_arm_bits_arm32") {
166  deps = musl_libs_arm32
167  sources = []
168  sources_temp = [
169    "alltypes.h",
170    "syscall.h",
171  ]
172  sources_temp += musl_inc_bits_files
173  sources_orig = get_path_info(sources_temp, "file")
174
175  # print("${sources_orig}")
176
177  foreach(s, sources_orig) {
178    sources += [ get_label_info(deps[0], "target_out_dir") +
179                 "/usr/include/arm-linux-ohos/bits/${s}" ]
180  }
181  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos/bits/{{source_file_part}}" ]
182}
183
184ohos_copy("musl_ndk_libs_arm32") {
185  deps = musl_lib_arm32
186  sources = [ get_label_info(deps[0], "target_out_dir") +
187              "/usr/lib/arm-linux-ohos/Scrt1.o" ]
188  sources += [ get_label_info(deps[0], "target_out_dir") +
189               "/usr/lib/arm-linux-ohos/crt1.o" ]
190  sources += [ get_label_info(deps[0], "target_out_dir") +
191               "/usr/lib/arm-linux-ohos/crti.o" ]
192  sources += [ get_label_info(deps[0], "target_out_dir") +
193               "/usr/lib/arm-linux-ohos/crtn.o" ]
194  sources += [ get_label_info(deps[0], "target_out_dir") +
195               "/usr/lib/arm-linux-ohos/rcrt1.o" ]
196  sources += [ get_label_info(deps[0], "target_out_dir") +
197               "/usr/lib/arm-linux-ohos/libm.a" ]
198  sources += [ get_label_info(deps[0], "target_out_dir") +
199               "/usr/lib/arm-linux-ohos/libdl.a" ]
200  sources += [ get_label_info(deps[0], "target_out_dir") +
201               "/usr/lib/arm-linux-ohos/libc.a" ]
202  sources += [ get_label_info(deps[0], "target_out_dir") +
203               "/usr/lib/arm-linux-ohos/libcrypt.a" ]
204  sources += [ get_label_info(deps[0], "target_out_dir") +
205               "/usr/lib/arm-linux-ohos/libpthread.a" ]
206  sources += [ get_label_info(deps[0], "target_out_dir") +
207               "/usr/lib/arm-linux-ohos/libresolv.a" ]
208  sources += [ get_label_info(deps[0], "target_out_dir") +
209               "/usr/lib/arm-linux-ohos/librt.a" ]
210  sources += [ get_label_info(deps[0], "target_out_dir") +
211               "/usr/lib/arm-linux-ohos/libutil.a" ]
212  sources += [ get_label_info(deps[0], "target_out_dir") +
213               "/usr/lib/arm-linux-ohos/libxnet.a" ]
214
215  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/arm-linux-ohos/{{source_file_part}}" ]
216}
217
218ohos_copy("musl_ndk_libs_aarch64") {
219  deps = musl_lib_arm64
220  sources = [ get_label_info(deps[0], "target_out_dir") +
221              "/usr/lib/aarch64-linux-ohos/Scrt1.o" ]
222  sources += [ get_label_info(deps[0], "target_out_dir") +
223               "/usr/lib/aarch64-linux-ohos/crt1.o" ]
224  sources += [ get_label_info(deps[0], "target_out_dir") +
225               "/usr/lib/aarch64-linux-ohos/crti.o" ]
226  sources += [ get_label_info(deps[0], "target_out_dir") +
227               "/usr/lib/aarch64-linux-ohos/crtn.o" ]
228  sources += [ get_label_info(deps[0], "target_out_dir") +
229               "/usr/lib/aarch64-linux-ohos/rcrt1.o" ]
230  sources += [ get_label_info(deps[0], "target_out_dir") +
231               "/usr/lib/aarch64-linux-ohos/libc.a" ]
232  sources += [ get_label_info(deps[0], "target_out_dir") +
233               "/usr/lib/aarch64-linux-ohos/libdl.a" ]
234  sources += [ get_label_info(deps[0], "target_out_dir") +
235               "/usr/lib/aarch64-linux-ohos/libm.a" ]
236  sources += [ get_label_info(deps[0], "target_out_dir") +
237               "/usr/lib/aarch64-linux-ohos/libcrypt.a" ]
238  sources += [ get_label_info(deps[0], "target_out_dir") +
239               "/usr/lib/aarch64-linux-ohos/libpthread.a" ]
240  sources += [ get_label_info(deps[0], "target_out_dir") +
241               "/usr/lib/aarch64-linux-ohos/libresolv.a" ]
242  sources += [ get_label_info(deps[0], "target_out_dir") +
243               "/usr/lib/aarch64-linux-ohos/librt.a" ]
244  sources += [ get_label_info(deps[0], "target_out_dir") +
245               "/usr/lib/aarch64-linux-ohos/libutil.a" ]
246  sources += [ get_label_info(deps[0], "target_out_dir") +
247               "/usr/lib/aarch64-linux-ohos/libxnet.a" ]
248
249  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/aarch64-linux-ohos/{{source_file_part}}" ]
250}
251