From eddccf7ca628ac935652f8a695ad5e119eadda61 Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Tue, 28 Nov 2023 15:36:43 +0800 Subject: [PATCH 1/6] Add RISCV-64 support for third party dependencies Porting from https://gitee.com/riscv-sig Co-authored-by: wenfei6316 Co-authored-by: Rong Chen Change-Id: I3cfbbd5e2c3fcb66ac1934531bec1cbd51204e5a Signed-off-by: Bingshan Chang --- build/compile_script/ark.py | 16 ++ build/config/clang/clang.gni | 2 +- build/config/ohos/config.gni | 4 +- build/third_party_gn/musl/BUILD.gn | 145 ++++++++++++----- build/third_party_gn/musl/musl_config.gni | 2 + build/third_party_gn/musl/musl_src.gni | 183 ++++++++++++++++++++++ build/third_party_gn/openssl/BUILD.gn | 47 ++++++ build/toolchain/ark/BUILD.gn | 9 ++ build/toolchain/ark/ark_toolchain.gni | 2 + 9 files changed, 368 insertions(+), 42 deletions(-) diff --git a/build/compile_script/ark.py b/build/compile_script/ark.py index b0ee1d1..02cb23d 100644 --- a/build/compile_script/ark.py +++ b/build/compile_script/ark.py @@ -134,6 +134,22 @@ class ArkPy: "gn_args": ["target_os=\"ohos\"", "target_cpu=\"mipsel\""], "prefix_of_name_of_out_dir_of_second_level": "mipsel", }, + "ohos_riscv32": { + "flags": ["ohos_riscv32", "riscv32"], + "description": + "Build for arkcompiler target of target-operating-system ohos and " + "target-central-processing-unit riscv.", + "gn_args": ["target_os=\"ohos\"", "target_cpu=\"riscv32\""], + "prefix_of_name_of_out_dir_of_second_level": "riscv32", + }, + "ohos_riscv64": { + "flags": ["ohos_riscv64", "riscv64"], + "description": + "Build for arkcompiler target of target-operating-system ohos and " + "target-central-processing-unit riscv.", + "gn_args": ["target_os=\"ohos\"", "target_cpu=\"riscv64\""], + "prefix_of_name_of_out_dir_of_second_level": "riscv64", + }, }, "mode": { "release": { diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni index 77ec276..be2abd4 100644 --- a/build/config/clang/clang.gni +++ b/build/config/clang/clang.gni @@ -14,7 +14,7 @@ import("$build_root/toolchain/toolchain.gni") default_clang_base_path = "//prebuilts/clang/ohos/${host_platform_dir}/llvm" -clang_lib_path = "//prebuilts/clang/ohos/${host_platform_dir}/llvm/lib/clang/${clang_version}/lib" +clang_lib_path = "//out/install/${host_platform_dir}/clang-dev/lib/clang/${clang_version}/lib" declare_args() { clang_base_path = default_clang_base_path diff --git a/build/config/ohos/config.gni b/build/config/ohos/config.gni index 97efcd4..af971ca 100644 --- a/build/config/ohos/config.gni +++ b/build/config/ohos/config.gni @@ -25,9 +25,11 @@ if (is_ohos) { abi_target = "x86_64-linux-ohos" } else if (current_cpu == "mipsel") { abi_target = "mipsel-linux-ohos" + } else if (current_cpu == "riscv64") { + abi_target = "riscv64-linux-ohos" } else { assert(false, "Arch not supported") - } + } libclang_rt_file = "${clang_base_path}/lib/clang/15.0.4/lib/${abi_target}/libclang_rt.builtins.a" libcxxabi_file = "${clang_base_path}/lib/${abi_target}/libc++abi.a" } diff --git a/build/third_party_gn/musl/BUILD.gn b/build/third_party_gn/musl/BUILD.gn index e794a49..75103db 100644 --- a/build/third_party_gn/musl/BUILD.gn +++ b/build/third_party_gn/musl/BUILD.gn @@ -23,10 +23,17 @@ group("musl_headers") { ":create_syscall_h_file", ":create_version_h_file", ":musl_copy_inc_arpa_file", + ":musl_copy_inc_bits_file", + ":musl_copy_inc_fortify_file", ":musl_copy_inc_hook_file", + ":musl_copy_inc_info_file", ":musl_copy_inc_net_file", ":musl_copy_inc_netinet_file", ":musl_copy_inc_netpacket_file", + ":musl_copy_inc_root_file", + ":musl_copy_inc_scsi_file", + ":musl_copy_inc_sys_file", + ":musl_copy_inc_trace_file", ] } @@ -37,37 +44,38 @@ action("create_porting_src") { outdir = [ "${target_out_dir}/${musl_ported_dir}" ] - src_files = musl_src_arch_file - src_files += musl_inc_root_files + src_files = musl_inc_arpa_files + src_files += musl_inc_bits_files src_files += musl_inc_fortify_files - src_files += musl_inc_sys_files - src_files += musl_inc_scsi_files - src_files += musl_inc_netpacket_files - src_files += musl_inc_netinet_files src_files += musl_inc_net_files - src_files += musl_inc_arpa_files - src_files += musl_inc_bits_files - src_files += musl_src_ldso + src_files += musl_inc_netinet_files + src_files += musl_inc_netpacket_files + src_files += musl_inc_root_files + src_files += musl_inc_scsi_files + src_files += musl_inc_sys_files + src_files += musl_src_arch_file src_files += musl_src_file + src_files += musl_src_ldso src_files += [ + "arch/${musl_arch}/bits/syscall.h.in", + "arch/${musl_arch}/bits/alltypes.h.in", + "crt/${musl_arch}/crti.s", + "crt/${musl_arch}/crtn.s", + "crt/crt1.c", + "crt/rcrt1.c", + "crt/Scrt1.c", + "include/alltypes.h.in", + "scripts/create_alltypes.sh", "scripts/create_syscall.sh", "scripts/create_vesion.sh", - "scripts/create_alltypes.sh", "scripts/install.py", "tools/install.sh", + "tools/mkalltypes.sed", "tools/version.sh", "VERSION", - "include/alltypes.h.in", - "arch/${musl_arch}/bits/syscall.h.in", - "arch/${musl_arch}/bits/alltypes.h.in", - "tools/mkalltypes.sed", - "crt/rcrt1.c", - "crt/crt1.c", - "crt/Scrt1.c", - "crt/${musl_arch}/crtn.s", - "crt/${musl_arch}/crti.s", ] + args = [ "-i" ] + rebase_path(sources_dir) args += [ "-o" ] + rebase_path(outdir) args += [ "-p" ] + [ "${musl_target_os}" ] @@ -213,11 +221,6 @@ group("copy_uapi_file") { } } -copy("musl_copy_inc_hook_file") { - sources = musl_inc_hook_files - outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] -} - copy("musl_copy_inc_bits") { sources = [] sources_bits = musl_inc_bits_files @@ -240,45 +243,53 @@ copy("musl_copy_inc_fortify") { deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_root") { +copy("musl_copy_inc_arpa_file") { sources = [] - sources_inc_root = musl_inc_root_files - foreach(s, sources_inc_root) { + sources_arpa_file = musl_inc_arpa_files + foreach(s, sources_arpa_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } - outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_sys") { +copy("musl_copy_inc_bits_file") { sources = [] - sources_inc_sys = musl_inc_sys_files - foreach(s, sources_inc_sys) { + sources_bits_file = musl_inc_bits_files + foreach(s, sources_bits_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } - outputs = [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_netinet_file") { +copy("musl_copy_inc_fortify_file") { sources = [] - sources_netinet_file = musl_inc_netinet_files - foreach(s, sources_netinet_file) { + sources_fortify_file = musl_inc_fortify_files + foreach(s, sources_fortify_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } outputs = - [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] + [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_arpa_file") { +copy("musl_copy_inc_hook_file") { + sources = musl_inc_hook_files + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] +} + +copy("musl_copy_inc_info_file") { sources = [] - sources_arpa_file = musl_inc_arpa_files - foreach(s, sources_arpa_file) { + sources_info_file = musl_inc_info_files + foreach(s, sources_info_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } outputs = - [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] + [ "${target_out_dir}/${musl_inc_out_dir}/info/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } @@ -292,6 +303,17 @@ copy("musl_copy_inc_net_file") { deps = [ ":create_porting_src" ] } +copy("musl_copy_inc_netinet_file") { + sources = [] + sources_netinet_file = musl_inc_netinet_files + foreach(s, sources_netinet_file) { + sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] + } + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] +} + copy("musl_copy_inc_netpacket_file") { sources = [] sources_netpacket_file = musl_inc_netpacket_files @@ -302,3 +324,46 @@ copy("musl_copy_inc_netpacket_file") { [ "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } + +copy("musl_copy_inc_root_file") { + sources = [] + sources_inc_root = musl_inc_root_files + foreach(s, sources_inc_root) { + sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] + } + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] +} + +copy("musl_copy_inc_scsi_file") { + sources = [] + sources_inc_scsi = musl_inc_scsi_files + foreach(s, sources_inc_scsi) { + sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] + } + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/scsi/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] +} + +copy("musl_copy_inc_sys_file") { + sources = [] + sources_inc_sys = musl_inc_sys_files + foreach(s, sources_inc_sys) { + sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] + } + outputs = [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] +} + +copy("musl_copy_inc_trace_file") { + sources = [] + sources_inc_trace = musl_inc_trace_files + foreach(s, sources_inc_trace) { + sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] + } + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/trace/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] +} diff --git a/build/third_party_gn/musl/musl_config.gni b/build/third_party_gn/musl/musl_config.gni index ceff619..c7abf5c 100644 --- a/build/third_party_gn/musl/musl_config.gni +++ b/build/third_party_gn/musl/musl_config.gni @@ -20,6 +20,8 @@ declare_args() { musl_arch = "aarch64" } else if (current_cpu == "mipsel") { musl_arch = "mips" + } else if (current_cpu == "riscv64") { + musl_arch = "riscv64" } } diff --git a/build/third_party_gn/musl/musl_src.gni b/build/third_party_gn/musl/musl_src.gni index caf6686..f44502e 100644 --- a/build/third_party_gn/musl/musl_src.gni +++ b/build/third_party_gn/musl/musl_src.gni @@ -155,6 +155,128 @@ if (musl_arch == "arm") { "src/thread/aarch64/syscall_cp.s", "src/misc/aarch64/syscall.s", ] +} else if (musl_arch == "riscv64") { + musl_src_arch_file = [ + "src/fenv/riscv64/fenv.S", + "src/fenv/riscv64/fenv-sf.c", + "src/ldso/riscv64/dlsym.s", + "src/ldso/riscv64/dlvsym.s", + "src/math/riscv64/copysign.c", + "src/math/riscv64/copysignf.c", + "src/math/riscv64/fabs.c", + "src/math/riscv64/fabsf.c", + "src/math/riscv64/fma.c", + "src/math/riscv64/fmaf.c", + "src/math/riscv64/fmax.c", + "src/math/riscv64/fmaxf.c", + "src/math/riscv64/fmin.c", + "src/math/riscv64/fminf.c", + "src/math/riscv64/sqrt.c", + "src/math/riscv64/sqrtf.c", + "src/setjmp/riscv64/longjmp.S", + "src/setjmp/riscv64/setjmp.S", + "src/signal/riscv64/restore.s", + "src/signal/riscv64/sigsetjmp.s", + "src/thread/riscv64/__set_thread_area.s", + "src/thread/riscv64/__unmapself.s", + "src/thread/riscv64/clone.s", + "src/thread/riscv64/syscall_cp.s", + ] +} else if (musl_arch == "arm") { + musl_src_arch_file = [ + "src/exit/arm/__aeabi_atexit.c", + "src/fenv/arm/fenv-hf.S", + "src/fenv/arm/fenv.c", + "src/ldso/arm/dlsym.s", + "src/ldso/arm/dlsym_time64.S", + "src/ldso/arm/dlvsym.s", + "src/ldso/arm/find_exidx.c", + "src/ldso/arm/tlsdesc.S", + "src/math/arm/fabs.c", + "src/math/arm/fabsf.c", + "src/math/arm/fma.c", + "src/math/arm/fmaf.c", + "src/math/arm/sqrt.c", + "src/math/arm/sqrtf.c", + "src/process/arm/vfork.s", + "src/setjmp/arm/longjmp.S", + "src/setjmp/arm/setjmp.S", + "src/signal/arm/restore.s", + "src/signal/arm/sigsetjmp.s", + "src/string/arm/__aeabi_memcpy.s", + "src/string/arm/__aeabi_memset.s", + "src/string/arm/memcpy.S", + "src/thread/arm/__aeabi_read_tp.s", + "src/thread/arm/__set_thread_area.c", + "src/thread/arm/__unmapself.s", + "src/thread/arm/atomics.s", + "src/thread/arm/clone.s", + "src/thread/arm/syscall_cp.s", + "compat/time32/adjtime32.c", + "compat/time32/adjtimex_time32.c", + "compat/time32/aio_suspend_time32.c", + "compat/time32/clock_adjtime32.c", + "compat/time32/clock_getres_time32.c", + "compat/time32/clock_gettime32.c", + "compat/time32/clock_nanosleep_time32.c", + "compat/time32/clock_settime32.c", + "compat/time32/cnd_timedwait_time32.c", + "compat/time32/ctime32.c", + "compat/time32/ctime32_r.c", + "compat/time32/difftime32.c", + "compat/time32/fstatat_time32.c", + "compat/time32/fstat_time32.c", + "compat/time32/ftime32.c", + "compat/time32/futimens_time32.c", + "compat/time32/futimesat_time32.c", + "compat/time32/futimes_time32.c", + "compat/time32/getitimer_time32.c", + "compat/time32/getrusage_time32.c", + "compat/time32/gettimeofday_time32.c", + "compat/time32/gmtime32.c", + "compat/time32/gmtime32_r.c", + "compat/time32/localtime32.c", + "compat/time32/localtime32_r.c", + "compat/time32/lstat_time32.c", + "compat/time32/lutimes_time32.c", + "compat/time32/mktime32.c", + "compat/time32/mq_timedreceive_time32.c", + "compat/time32/mq_timedsend_time32.c", + "compat/time32/mtx_timedlock_time32.c", + "compat/time32/nanosleep_time32.c", + "compat/time32/ppoll_time32.c", + "compat/time32/pselect_time32.c", + "compat/time32/pthread_cond_timedwait_time32.c", + "compat/time32/pthread_mutex_timedlock_time32.c", + "compat/time32/pthread_rwlock_timedrdlock_time32.c", + "compat/time32/pthread_rwlock_timedwrlock_time32.c", + "compat/time32/pthread_timedjoin_np_time32.c", + "compat/time32/recvmmsg_time32.c", + "compat/time32/sched_rr_get_interval_time32.c", + "compat/time32/select_time32.c", + "compat/time32/semtimedop_time32.c", + "compat/time32/sem_timedwait_time32.c", + "compat/time32/setitimer_time32.c", + "compat/time32/settimeofday_time32.c", + "compat/time32/sigtimedwait_time32.c", + "compat/time32/stat_time32.c", + "compat/time32/stime32.c", + "compat/time32/thrd_sleep_time32.c", + "compat/time32/time32.c", + "compat/time32/time32gm.c", + "compat/time32/time32.h", + "compat/time32/timerfd_gettime32.c", + "compat/time32/timerfd_settime32.c", + "compat/time32/timer_gettime32.c", + "compat/time32/timer_settime32.c", + "compat/time32/timespec_get_time32.c", + "compat/time32/utimensat_time32.c", + "compat/time32/utimes_time32.c", + "compat/time32/utime_time32.c", + "compat/time32/wait3_time32.c", + "compat/time32/wait4_time32.c", + "compat/time32/__xstat.c", + ] } else if (musl_arch == "x86_64") { musl_src_arch_file = [ "src/fenv/x86_64/fenv.s", @@ -1662,6 +1784,31 @@ if (musl_arch == "arm") { "src/thread/syscall_cp.c", "src/misc/syscall.c", ] +} else if (musl_arch == "riscv64") { + musl_src_filterout = [ + "src/fenv/fenv.c", + "src/ldso/dlsym.c", + "src/math/copysign.c", + "src/math/copysignf.c", + "src/math/fabs.c", + "src/math/fabsf.c", + "src/math/fma.c", + "src/math/fmaf.c", + "src/math/fmax.c", + "src/math/fmaxf.c", + "src/math/fmin.c", + "src/math/fminf.c", + "src/math/sqrt.c", + "src/math/sqrtf.c", + "src/setjmp/longjmp.c", + "src/setjmp/setjmp.c", + "src/signal/restore.c", + "src/signal/sigsetjmp.c", + "src/thread/__unmapself.c", + "src/thread/clone.c", + "src/thread/__set_thread_area.c", + "src/thread/syscall_cp.c", + ] } else if (musl_arch == "x86_64") { musl_src_filterout = [ "src/fenv/fenv.c", @@ -1813,6 +1960,42 @@ if (musl_arch == "arm") { "arch/generic/bits/termios.h", "arch/generic/bits/vt.h", ] +} else if (musl_arch == "riscv64") { + musl_inc_bits_files = [ + "arch/riscv64/bits/fcntl.h", + "arch/riscv64/bits/fenv.h", + "arch/riscv64/bits/float.h", + "arch/riscv64/bits/posix.h", + "arch/riscv64/bits/reg.h", + "arch/riscv64/bits/setjmp.h", + "arch/riscv64/bits/signal.h", + "arch/riscv64/bits/stat.h", + "arch/riscv64/bits/stdint.h", + "arch/riscv64/bits/user.h", + "arch/generic/bits/dirent.h", + "arch/generic/bits/errno.h", + "arch/generic/bits/hwcap.h", + "arch/generic/bits/ioctl_fix.h", + "arch/generic/bits/ioctl.h", + "arch/generic/bits/io.h", + "arch/generic/bits/ipc.h", + "arch/generic/bits/ipcstat.h", + "arch/generic/bits/kd.h", + "arch/generic/bits/limits.h", + "arch/generic/bits/link.h", + "arch/generic/bits/mman.h", + "arch/generic/bits/msg.h", + "arch/generic/bits/poll.h", + "arch/generic/bits/ptrace.h", + "arch/generic/bits/resource.h", + "arch/generic/bits/sem.h", + "arch/generic/bits/shm.h", + "arch/generic/bits/socket.h", + "arch/generic/bits/soundcard.h", + "arch/generic/bits/statfs.h", + "arch/generic/bits/termios.h", + "arch/generic/bits/vt.h", + ] } else if (musl_arch == "x86_64") { musl_inc_bits_files = [ "arch/generic/bits/fcntl.h", diff --git a/build/third_party_gn/openssl/BUILD.gn b/build/third_party_gn/openssl/BUILD.gn index 741de2f..a566350 100644 --- a/build/third_party_gn/openssl/BUILD.gn +++ b/build/third_party_gn/openssl/BUILD.gn @@ -20,6 +20,10 @@ if (current_cpu == "arm" && !(current_os == "linux" || host_os == "mac")) { (!(current_os == "linux" || host_os == "mac") || current_os == "ohos")) { openssl_selected_platform = "linux-aarch64" +} else if (current_cpu == "riscv64" && + (!(current_os == "linux" || host_os == "mac") || + current_os == "ohos")) { + openssl_selected_platform = "linux64-riscv64" } else if ((current_cpu == "x64" || current_cpu == "x86_64") && (current_os == "mac" || current_os == "ios")) { openssl_selected_platform = "darwin64-x86_64-cc" @@ -72,6 +76,12 @@ libcrypto_build_all_generated_linux_aarch64_sources = [ "${openssl_selected_platform_full_path}/crypto/sha/sha256-armv8.S", "${openssl_selected_platform_full_path}/crypto/sha/sha512-armv8.S", ] +libcrypto_build_all_generated_linux64_riscv64_sources = [ + "${openssl_selected_platform_full_path}/crypto/aes/aes-riscv64-zkn.s", + "${openssl_selected_platform_full_path}/crypto/aes/aes-riscv64.s", + "${openssl_selected_platform_full_path}/crypto/modes/ghash-riscv64.s", + "${openssl_selected_platform_full_path}/crypto/riscv64cpuid.s", +] libcrypto_build_all_generated_darwin64_x86_64_cc_sources = [ "${openssl_selected_platform_full_path}/crypto/aes/aes-x86_64.s", "${openssl_selected_platform_full_path}/crypto/aes/aesni-mb-x86_64.s", @@ -198,6 +208,9 @@ if (openssl_selected_platform == "linux-armv4") { } else if (openssl_selected_platform == "linux-aarch64") { libcrypto_build_all_generated_selected_platform_sources += libcrypto_build_all_generated_linux_aarch64_sources +} else if (openssl_selected_platform == "linux64-riscv64") { + libcrypto_build_all_generated_selected_platform_sources += + libcrypto_build_all_generated_linux64_riscv64_sources } else if (openssl_selected_platform == "darwin64-x86_64-cc") { libcrypto_build_all_generated_selected_platform_sources += libcrypto_build_all_generated_darwin64_x86_64_cc_sources @@ -252,6 +265,11 @@ action("openssl_build_all_generated") { current_os == "ohos")) { print("openssl currcurrent_platforment linux-aarch64") openssl_current_platform = "linux-aarch64" + } else if (current_cpu == "riscv64" && + (!(current_os == "linux" || host_os == "mac") || + current_os == "ohos")) { + print("openssl currcurrent_platforment linux-riscv64") + openssl_current_platform = "linux-riscv64" } else if ((current_cpu == "x64" || current_cpu == "x86_64") && (current_os == "mac" || current_os == "ios")) { # compilation for ios depends the platform @@ -409,6 +427,14 @@ crypto_config_linux_aarch64_cflags = [ "-DVPAES_ASM", ] +crypto_config_linux64_riscv64_cflags = [ + "-pthread", + "-fPIC", + "-DOPENSSL_USE_NODELETE", + "-m64", + "-DL_ENDIAN", +] + crypto_config_darwin64_x86_64_cc_cflags = [ "-fPIC", "-DL_ENDIAN", @@ -514,6 +540,8 @@ if (openssl_selected_platform == "linux-armv4") { crypto_config_current_platform_cflags += crypto_config_linux_armv4_cflags } else if (openssl_selected_platform == "linux-aarch64") { crypto_config_current_platform_cflags += crypto_config_linux_aarch64_cflags +} else if (openssl_selected_platform == "linux64-riscv64") { + crypto_config_current_platform_cflags += crypto_config_linux64_riscv64_cflags } else if (openssl_selected_platform == "darwin64-x86_64-cc") { crypto_config_current_platform_cflags += crypto_config_darwin64_x86_64_cc_cflags @@ -1489,6 +1517,23 @@ ohos_source_set("crypto_source") { "//third_party/openssl/crypto/whrlpool/wp_block.c", "//third_party/openssl/engines/e_afalg.c", ] + } else if (openssl_selected_platform == "linux64-riscv64") { + sources += [ + "//third_party/openssl/crypto/aes/aes_cbc.c", + "//third_party/openssl/crypto/riscvcap.c", + "//third_party/openssl/crypto/chacha/chacha_enc.c", + "//third_party/openssl/crypto/sha/keccak1600.c", + "//third_party/openssl/crypto/bn/bn_asm.c", + "//third_party/openssl/crypto/camellia/camellia.c", + "//third_party/openssl/crypto/camellia/cmll_cbc.c", + "//third_party/openssl/crypto/rc4/rc4_enc.c", + "//third_party/openssl/crypto/rc4/rc4_skey.c", + "//third_party/openssl/crypto/whrlpool/wp_block.c", + "//third_party/openssl/engines/e_afalg.c", + ] + sources -= [ + "//third_party/openssl/crypto/ec/ecp_nistz256.c", + ] } else if (openssl_selected_platform == "darwin64-x86_64-cc") { sources += [ "//third_party/openssl/crypto/bn/asm/x86_64-gcc.c", @@ -1585,6 +1630,7 @@ unused_variables += crypto_config_common_public_include_dirs unused_variables += crypto_config_common_cflags unused_variables += crypto_config_linux_armv4_cflags unused_variables += crypto_config_linux_aarch64_cflags +unused_variables += crypto_config_linux64_riscv64_cflags unused_variables += crypto_config_darwin64_x86_64_cc_cflags unused_variables += crypto_config_darwin64_arm64_cc_cflags unused_variables += crypto_config_linux_x86_64_cflags @@ -1594,6 +1640,7 @@ unused_variables += libcommon_common_sources unused_variables += libdefault_common_sources unused_variables += libcrypto_build_all_generated_linux_armv4_sources unused_variables += libcrypto_build_all_generated_linux_aarch64_sources +unused_variables += libcrypto_build_all_generated_linux64_riscv64_sources unused_variables += libcrypto_build_all_generated_darwin64_x86_64_cc_sources unused_variables += libcrypto_build_all_generated_darwin64_arm64_cc_sources unused_variables += libcrypto_build_all_generated_linux_x86_64_sources diff --git a/build/toolchain/ark/BUILD.gn b/build/toolchain/ark/BUILD.gn index 5bea83d..40942e0 100755 --- a/build/toolchain/ark/BUILD.gn +++ b/build/toolchain/ark/BUILD.gn @@ -40,6 +40,15 @@ ark_clang_toolchain("ark_clang_arm64") { } } +clang_toolchain("ark_clang_riscv64") { + sysroot = "${musl_sysroot}" + lib_dir = "usr/lib/riscv64-linux-ohos" + toolchain_args = { + current_cpu = "riscv64" + current_os = "ohos" + } +} + ark_clang_toolchain("ark_clang_mipsel") { sysroot = "${musl_sysroot}" lib_dir = "usr/lib/mipsel-linux-ohos" diff --git a/build/toolchain/ark/ark_toolchain.gni b/build/toolchain/ark/ark_toolchain.gni index 2b169d8..51971f9 100755 --- a/build/toolchain/ark/ark_toolchain.gni +++ b/build/toolchain/ark/ark_toolchain.gni @@ -30,6 +30,8 @@ template("ark_clang_toolchain") { abi_target = "arm-linux-ohos" } else if (invoker.target_name == "ark_clang_arm64") { abi_target = "aarch64-linux-ohos" + } else if (invoker.target_name == "ark_clang_riscv64") { + abi_target = "riscv64-linux-ohos" } else if (invoker.target_name == "ark_clang_x86_64") { abi_target = "x86_64-linux-ohos" } -- Gitee From d9447530aac87c55a0fc5b944cf8dc3c721f21f1 Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Tue, 28 Nov 2023 16:19:07 +0800 Subject: [PATCH 2/6] Restore origin path of prebuilt clang Change-Id: I23f0183a467d727d729ccbf0f01e80303db5d732 Signed-off-by: Bingshan Chang --- build/config/clang/clang.gni | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni index be2abd4..77ec276 100644 --- a/build/config/clang/clang.gni +++ b/build/config/clang/clang.gni @@ -14,7 +14,7 @@ import("$build_root/toolchain/toolchain.gni") default_clang_base_path = "//prebuilts/clang/ohos/${host_platform_dir}/llvm" -clang_lib_path = "//out/install/${host_platform_dir}/clang-dev/lib/clang/${clang_version}/lib" +clang_lib_path = "//prebuilts/clang/ohos/${host_platform_dir}/llvm/lib/clang/${clang_version}/lib" declare_args() { clang_base_path = default_clang_base_path -- Gitee From bb87fe7a2c5d71001ca116f4da29b403820058bb Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Thu, 30 Nov 2023 10:43:15 +0800 Subject: [PATCH 3/6] Fix error of target dependencies Change-Id: I53608bf49b3bfe49ef3cbf479ca323725ef115d6 Signed-off-by: Bingshan Chang --- build/third_party_gn/musl/BUILD.gn | 22 --------------------- build/third_party_gn/musl/musl_template.gni | 14 ++++++------- build/toolchain/ark/BUILD.gn | 2 +- 3 files changed, 8 insertions(+), 30 deletions(-) diff --git a/build/third_party_gn/musl/BUILD.gn b/build/third_party_gn/musl/BUILD.gn index 75103db..e510a06 100644 --- a/build/third_party_gn/musl/BUILD.gn +++ b/build/third_party_gn/musl/BUILD.gn @@ -221,28 +221,6 @@ group("copy_uapi_file") { } } -copy("musl_copy_inc_bits") { - sources = [] - sources_bits = musl_inc_bits_files - foreach(s, sources_bits) { - sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] - } - outputs = - [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] - deps = [ ":create_porting_src" ] -} - -copy("musl_copy_inc_fortify") { - sources = [] - sources_fortify = musl_inc_fortify_files - foreach(s, sources_fortify) { - sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] - } - outputs = - [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] - deps = [ ":create_porting_src" ] -} - copy("musl_copy_inc_arpa_file") { sources = [] sources_arpa_file = musl_inc_arpa_files diff --git a/build/third_party_gn/musl/musl_template.gni b/build/third_party_gn/musl/musl_template.gni index 23b6f19..f13f666 100644 --- a/build/third_party_gn/musl/musl_template.gni +++ b/build/third_party_gn/musl/musl_template.gni @@ -779,10 +779,10 @@ template("musl_libs") { "$build_root/third_party_gn/musl:create_porting_src", "$build_root/third_party_gn/musl:create_syscall_h_file", "$build_root/third_party_gn/musl:create_version_h_file", - "$build_root/third_party_gn/musl:musl_copy_inc_bits", - "$build_root/third_party_gn/musl:musl_copy_inc_fortify", - "$build_root/third_party_gn/musl:musl_copy_inc_root", - "$build_root/third_party_gn/musl:musl_copy_inc_sys", + "$build_root/third_party_gn/musl:musl_copy_inc_bits_file", + "$build_root/third_party_gn/musl:musl_copy_inc_fortify_file", + "$build_root/third_party_gn/musl:musl_copy_inc_root_file", + "$build_root/third_party_gn/musl:musl_copy_inc_sys_file", ] configs -= musl_inherited_configs @@ -808,9 +808,9 @@ template("musl_libs") { "$build_root/third_party_gn/musl:create_porting_src", "$build_root/third_party_gn/musl:create_syscall_h_file", "$build_root/third_party_gn/musl:create_version_h_file", - "$build_root/third_party_gn/musl:musl_copy_inc_bits", - "$build_root/third_party_gn/musl:musl_copy_inc_root", - "$build_root/third_party_gn/musl:musl_copy_inc_sys", + "$build_root/third_party_gn/musl:musl_copy_inc_bits_file", + "$build_root/third_party_gn/musl:musl_copy_inc_root_file", + "$build_root/third_party_gn/musl:musl_copy_inc_sys_file", ] configs -= musl_inherited_configs diff --git a/build/toolchain/ark/BUILD.gn b/build/toolchain/ark/BUILD.gn index 40942e0..106a248 100755 --- a/build/toolchain/ark/BUILD.gn +++ b/build/toolchain/ark/BUILD.gn @@ -40,7 +40,7 @@ ark_clang_toolchain("ark_clang_arm64") { } } -clang_toolchain("ark_clang_riscv64") { +ark_clang_toolchain("ark_clang_riscv64") { sysroot = "${musl_sysroot}" lib_dir = "usr/lib/riscv64-linux-ohos" toolchain_args = { -- Gitee From 441e8521a4ba5bc281fd710386cd030f4cfed30a Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Thu, 30 Nov 2023 11:02:29 +0800 Subject: [PATCH 4/6] Fix os-arch platform typo Change-Id: I1a57ee6d6f69258fecce3c2bf0a4ce4a71b41066 Signed-off-by: Bingshan Chang --- build/third_party_gn/openssl/BUILD.gn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/third_party_gn/openssl/BUILD.gn b/build/third_party_gn/openssl/BUILD.gn index a566350..4aab5ac 100644 --- a/build/third_party_gn/openssl/BUILD.gn +++ b/build/third_party_gn/openssl/BUILD.gn @@ -268,8 +268,8 @@ action("openssl_build_all_generated") { } else if (current_cpu == "riscv64" && (!(current_os == "linux" || host_os == "mac") || current_os == "ohos")) { - print("openssl currcurrent_platforment linux-riscv64") - openssl_current_platform = "linux-riscv64" + print("openssl currcurrent_platforment linux64-riscv64") + openssl_current_platform = "linux64-riscv64" } else if ((current_cpu == "x64" || current_cpu == "x86_64") && (current_os == "mac" || current_os == "ios")) { # compilation for ios depends the platform -- Gitee From abb12283e4b19d55ba7ff581748fac5f765dfc1e Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Fri, 1 Dec 2023 17:17:10 +0800 Subject: [PATCH 5/6] Fix some files missing Change-Id: I8ff68e5cc9df8815c3e93cc689c6c4fa3415f5cd Signed-off-by: Bingshan Chang --- build/third_party_gn/musl/musl_src.gni | 8 ++++++++ build/third_party_gn/musl/musl_template.gni | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/build/third_party_gn/musl/musl_src.gni b/build/third_party_gn/musl/musl_src.gni index f44502e..0bec800 100644 --- a/build/third_party_gn/musl/musl_src.gni +++ b/build/third_party_gn/musl/musl_src.gni @@ -536,6 +536,7 @@ musl_src_file = [ "src/internal/syscall_ret.c", "src/internal/vdso.c", "src/internal/version.c", + "src/internal/network_conf_function.c", "src/hilog/hilog_adapter.c", "src/hilog/vsnprintf_s_p.c", "src/ipc/ftok.c", @@ -2352,6 +2353,9 @@ musl_src_porting_file = [ "src/internal/pthread_impl.h", "src/internal/locale_impl.h", "src/internal/syscall.h", + "src/internal/services.h", + "src/internal/network_conf_function.h", + "src/internal/network_conf_function.c", "ldso/namespace.h", "ldso/ns_config.h", "ldso/strops.h", @@ -2373,7 +2377,10 @@ musl_src_porting_file = [ "src/malloc/realloc.c", "src/network/inet_legacy.c", "src/network/lookup_name.c", + "src/network/lookup_serv.c", "src/network/resolvconf.c", + "src/network/if_indextoname.c", + "src/network/if_nametoindex.c", "src/network/socket.c", "src/passwd/getspnam_r.c", "src/sched/sched_setparam.c", @@ -2487,6 +2494,7 @@ musl_src_porting_file = [ "src/mq/mq_notify.c", "src/aio/aio.c", "src/misc/aarch64/syscall.s", + "src/stdlib/strtol.c", "src/stdlib/strtod.c", "src/thread/sem_timedwait.c", "src/stdio/vfscanf.c", diff --git a/build/third_party_gn/musl/musl_template.gni b/build/third_party_gn/musl/musl_template.gni index f13f666..c346a88 100644 --- a/build/third_party_gn/musl/musl_template.gni +++ b/build/third_party_gn/musl/musl_template.gni @@ -349,6 +349,11 @@ template("musl_libs") { if (musl_arch == "mips") { sources_orig += [ "src/string/memset.c" ] } + if (musl_arch == "riscv64") { + sources_orig += [ + "src/string/memset.c" + ] + } sources_orig -= musl_src_filterout sources += [ -- Gitee From f8c72ab814e0ef90914eb38d3e559fbd784dec16 Mon Sep 17 00:00:00 2001 From: Bingshan Chang Date: Mon, 11 Dec 2023 11:06:32 +0800 Subject: [PATCH 6/6] Explicitly specify ABI of RISCV target Change-Id: Ie0e56e1c18ab9b35b751980e89eaecffd18a4fd7 Signed-off-by: Bingshan Chang --- build/config/BUILDCONFIG.gn | 2 +- build/config/compiler/BUILD.gn | 8 ++++++++ build/toolchain/linux/BUILD.gn | 13 +++++++------ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index 0754ed4..4793c6b 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -16,7 +16,7 @@ declare_args() { use_musl = true build_root = "//arkcompiler/toolchain/build" run_with_qemu = false - enable_lto = true + enable_lto = false enable_lto_O0 = false } diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 37d2994..dcdf379 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -395,6 +395,14 @@ config("compiler_cpu_abi") { cflags += [ "-march=$arm_arch" ] } ldflags += [ "-march=$arm_arch" ] + } else if (current_cpu == "riscv64") { + cflags += [ + "-march=rv64g", + "-mabi=lp64", + ] + ldflags += [ + "-Wl,--hash-style=gnu", + ] } } diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn index 12a4f37..d25d890 100755 --- a/build/toolchain/linux/BUILD.gn +++ b/build/toolchain/linux/BUILD.gn @@ -12,27 +12,28 @@ # limitations under the License. import("$build_root/toolchain/gcc_toolchain.gni") -clang_toolchain("clang_riscv64") { + +clang_toolchain("clang_arm") { toolchain_args = { - current_cpu = "riscv64" + current_cpu = "arm" current_os = "linux" } executable_extension = "" shlib_extension = ".so" } -clang_toolchain("clang_arm") { +clang_toolchain("clang_arm64") { toolchain_args = { - current_cpu = "arm" + current_cpu = "arm64" current_os = "linux" } executable_extension = "" shlib_extension = ".so" } -clang_toolchain("clang_arm64") { +clang_toolchain("clang_riscv64") { toolchain_args = { - current_cpu = "arm64" + current_cpu = "riscv64" current_os = "linux" } executable_extension = "" -- Gitee