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