From 642bfb7a73d65d8eba114a600c9f682994c57196 Mon Sep 17 00:00:00 2001 From: PolyOS Project Date: Tue, 28 Nov 2023 15:36:43 +0800 Subject: [PATCH] Add RISCV-64 building support Add generate-ninja configurations of the third party dependencies, some configurations are porting from https://gitee.com/riscv-sig. Explicitly specify ABI of RISCV target. Currently using lp64 and rv64gc, this is temporary behavior that should be fixed later. Co-authored-by: Bingshan Chang Co-authored-by: wenfei6316 Co-authored-by: Rong Chen Signed-off-by: Bingshan Chang Signed-off-by: PolyOS Project --- build/compile_script/ark.py | 16 ++ build/config/BUILDCONFIG.gn | 2 +- build/config/compiler/BUILD.gn | 8 + build/config/ohos/config.gni | 4 +- build/third_party_gn/musl/BUILD.gn | 139 +++++++++----- build/third_party_gn/musl/musl_config.gni | 2 + build/third_party_gn/musl/musl_src.gni | 191 ++++++++++++++++++++ build/third_party_gn/musl/musl_template.gni | 19 +- build/third_party_gn/openssl/BUILD.gn | 47 +++++ build/toolchain/ark/BUILD.gn | 9 + build/toolchain/ark/ark_toolchain.gni | 2 + build/toolchain/linux/BUILD.gn | 13 +- 12 files changed, 389 insertions(+), 63 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/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/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..e510a06 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,15 +221,21 @@ 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_arpa_file") { + sources = [] + 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}/arpa/{{source_file_part}}" ] + deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_bits") { +copy("musl_copy_inc_bits_file") { sources = [] - sources_bits = musl_inc_bits_files - foreach(s, sources_bits) { + sources_bits_file = musl_inc_bits_files + foreach(s, sources_bits_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } outputs = @@ -229,10 +243,10 @@ copy("musl_copy_inc_bits") { deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_fortify") { +copy("musl_copy_inc_fortify_file") { sources = [] - sources_fortify = musl_inc_fortify_files - foreach(s, sources_fortify) { + sources_fortify_file = musl_inc_fortify_files + foreach(s, sources_fortify_file) { sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] } outputs = @@ -240,23 +254,30 @@ copy("musl_copy_inc_fortify") { deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_root") { +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_inc_root = musl_inc_root_files - foreach(s, sources_inc_root) { + 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}/{{source_file_part}}" ] + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/info/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_sys") { +copy("musl_copy_inc_net_file") { sources = [] - sources_inc_sys = musl_inc_sys_files - foreach(s, sources_inc_sys) { + sources_net_file = musl_inc_net_files + foreach(s, sources_net_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}/net/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } @@ -271,34 +292,56 @@ copy("musl_copy_inc_netinet_file") { deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_arpa_file") { +copy("musl_copy_inc_netpacket_file") { sources = [] - sources_arpa_file = musl_inc_arpa_files - foreach(s, sources_arpa_file) { + sources_netpacket_file = musl_inc_netpacket_files + foreach(s, sources_netpacket_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}/netpacket/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_net_file") { +copy("musl_copy_inc_root_file") { sources = [] - sources_net_file = musl_inc_net_files - foreach(s, sources_net_file) { + 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}/net/{{source_file_part}}" ] + outputs = + [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] deps = [ ":create_porting_src" ] } -copy("musl_copy_inc_netpacket_file") { +copy("musl_copy_inc_scsi_file") { sources = [] - sources_netpacket_file = musl_inc_netpacket_files - foreach(s, sources_netpacket_file) { + 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}/netpacket/{{source_file_part}}" ] + [ "${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..0bec800 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", @@ -414,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", @@ -1662,6 +1785,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 +1961,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", @@ -2169,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", @@ -2190,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", @@ -2304,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 23b6f19..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 += [ @@ -779,10 +784,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 +813,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/third_party_gn/openssl/BUILD.gn b/build/third_party_gn/openssl/BUILD.gn index 741de2f..4aab5ac 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 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 @@ -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..106a248 100755 --- a/build/toolchain/ark/BUILD.gn +++ b/build/toolchain/ark/BUILD.gn @@ -40,6 +40,15 @@ ark_clang_toolchain("ark_clang_arm64") { } } +ark_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" } 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