@@ -21,6 +21,19 @@ if (NOT VAES_SUPPORTED)
2121 set (WITH_VAES OFF )
2222endif ()
2323
24+ # Detect RISC-V architecture early (before it's used below)
25+ if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv64|riscv|rv64)$" )
26+ set (RISCV_TARGET 64)
27+ set (XMRIG_RISCV ON )
28+ add_definitions (-DXMRIG_RISCV )
29+ message (STATUS "Detected RISC-V 64-bit architecture (${CMAKE_SYSTEM_PROCESSOR } )" )
30+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv32|rv32)$" )
31+ set (RISCV_TARGET 32)
32+ set (XMRIG_RISCV ON )
33+ add_definitions (-DXMRIG_RISCV )
34+ message (STATUS "Detected RISC-V 32-bit architecture (${CMAKE_SYSTEM_PROCESSOR } )" )
35+ endif ()
36+
2437if (XMRIG_64_BIT AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$" )
2538 add_definitions (-DRAPIDJSON_SSE2 )
2639else ()
@@ -29,6 +42,57 @@ else()
2942 set (WITH_VAES OFF )
3043endif ()
3144
45+ # Disable x86-specific features for RISC-V
46+ if (XMRIG_RISCV)
47+ set (WITH_SSE4_1 OFF )
48+ set (WITH_AVX2 OFF )
49+ set (WITH_VAES OFF )
50+
51+ # default build uses the RV64GC baseline
52+ set (RVARCH "rv64gc" )
53+
54+ # for native builds, enable Zba and Zbb if supported by the CPU
55+ if (ARCH STREQUAL "native" )
56+ enable_language (ASM )
57+
58+ try_run (RANDOMX_VECTOR_RUN_FAIL
59+ RANDOMX_VECTOR_COMPILE_OK
60+ ${CMAKE_CURRENT_BINARY_DIR } /
61+ ${CMAKE_CURRENT_SOURCE_DIR } /src/crypto/randomx/tests/riscv64_vector.s
62+ COMPILE_DEFINITIONS "-march=rv64gcv_zicbop" )
63+
64+ if (RANDOMX_VECTOR_COMPILE_OK AND NOT RANDOMX_VECTOR_RUN_FAIL)
65+ set (RVARCH "${RVARCH} v_zicbop" )
66+ add_definitions (-DXMRIG_RVV_ENABLED )
67+ message (STATUS "RISC-V vector extension detected" )
68+ endif ()
69+
70+ try_run (RANDOMX_ZBA_RUN_FAIL
71+ RANDOMX_ZBA_COMPILE_OK
72+ ${CMAKE_CURRENT_BINARY_DIR } /
73+ ${CMAKE_CURRENT_SOURCE_DIR } /src/crypto/randomx/tests/riscv64_zba.s
74+ COMPILE_DEFINITIONS "-march=rv64gc_zba" )
75+
76+ if (RANDOMX_ZBA_COMPILE_OK AND NOT RANDOMX_ZBA_RUN_FAIL)
77+ set (RVARCH "${RVARCH} _zba" )
78+ message (STATUS "RISC-V zba extension detected" )
79+ endif ()
80+
81+ try_run (RANDOMX_ZBB_RUN_FAIL
82+ RANDOMX_ZBB_COMPILE_OK
83+ ${CMAKE_CURRENT_BINARY_DIR } /
84+ ${CMAKE_CURRENT_SOURCE_DIR } /src/crypto/randomx/tests/riscv64_zbb.s
85+ COMPILE_DEFINITIONS "-march=rv64gc_zbb" )
86+
87+ if (RANDOMX_ZBB_COMPILE_OK AND NOT RANDOMX_ZBB_RUN_FAIL)
88+ set (RVARCH "${RVARCH} _zbb" )
89+ message (STATUS "RISC-V zbb extension detected" )
90+ endif ()
91+ endif ()
92+
93+ message (STATUS "Using -march=${RVARCH} " )
94+ endif ()
95+
3296add_definitions (-DRAPIDJSON_WRITE_DEFAULT_FLAGS=6 ) # rapidjson::kWriteNanAndInfFlag | rapidjson::kWriteNanAndInfNullFlag
3397
3498if (ARM_V8)
@@ -40,7 +104,7 @@ endif()
40104if (NOT ARM_TARGET)
41105 if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64|armv8-a)$" )
42106 set (ARM_TARGET 8)
43- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|armv7f|armv7s|armv7k|armv7-a|armv7l|armv7ve)$" )
107+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|armv7f|armv7s|armv7k|armv7-a|armv7l|armv7ve|armv8l )$" )
44108 set (ARM_TARGET 7)
45109 endif ()
46110endif ()
0 commit comments