ceph/9002-fix-riscv64-build.patch
laokz 798a69b716 riscv64: fix build error
Self contained arrow version is 6.0.1 which has no RISC-V
support. The build error looks like:

  CMake Error at cmake_modules/SetupCxxFlags.cmake:439 (message):
     SSE4.2 required but compiler doesn't support it.
2024-05-27 14:34:25 +08:00

42 lines
1.8 KiB
Diff

diff --git a/src/arrow/cpp/cmake_modules/SetupCxxFlags.cmake b/src/arrow/cpp/cmake_modules/SetupCxxFlags.cmake
index c1a1ba0..84f224b 100644
--- a/src/arrow/cpp/cmake_modules/SetupCxxFlags.cmake
+++ b/src/arrow/cpp/cmake_modules/SetupCxxFlags.cmake
@@ -32,6 +32,8 @@ if(NOT DEFINED ARROW_CPU_FLAG)
set(ARROW_CPU_FLAG "ppc")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
set(ARROW_CPU_FLAG "s390x")
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64")
+ set(ARROW_CPU_FLAG "riscv64")
else()
set(ARROW_CPU_FLAG "x86")
endif()
diff --git a/src/arrow/cpp/src/arrow/vendored/fast_float/float_common.h b/src/arrow/cpp/src/arrow/vendored/fast_float/float_common.h
index f7b7662..c1fe08d 100644
--- a/src/arrow/cpp/src/arrow/vendored/fast_float/float_common.h
+++ b/src/arrow/cpp/src/arrow/vendored/fast_float/float_common.h
@@ -10,7 +10,7 @@
|| defined(__MINGW64__) \
|| defined(__s390x__) \
|| (defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) \
- || defined(__EMSCRIPTEN__))
+ || defined(__EMSCRIPTEN__) || defined(__riscv))
#define FASTFLOAT_64BIT
#elif (defined(__i386) || defined(__i386__) || defined(_M_IX86) \
|| defined(__arm__) \
diff --git a/src/common/Cycles.h b/src/common/Cycles.h
index b546479..14bc6bf 100644
--- a/src/common/Cycles.h
+++ b/src/common/Cycles.h
@@ -84,6 +84,10 @@ class Cycles {
uint64_t tsc;
asm volatile("stck %0" : "=Q" (tsc) : : "cc");
return tsc;
+#elif defined(__riscv) && __riscv_xlen == 64
+ uint64_t tsc;
+ asm volatile ("rdcycle %0" : "=r" (tsc));
+ return tsc;
#else
#warning No high-precision counter available for your OS/arch
return 0;