@@ -173,6 +173,42 @@ if(ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64" OR ARM_ID STREQUAL "armv
173173 endif ()
174174endif ()
175175
176+ # RISC-V
177+ if (ARCH_ID STREQUAL "riscv64" )
178+ list (APPEND randomx_sources
179+ src/jit_compiler_rv64_static.S
180+ src/jit_compiler_rv64.cpp)
181+ # cheat because cmake and ccache hate each other
182+ set_property (SOURCE src/jit_compiler_rv64_static.S PROPERTY LANGUAGE C )
183+ set_property (SOURCE src/jit_compiler_rv64_static.S PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.asm )
184+
185+ # default build uses the RV64GC baseline
186+ set (RVARCH "rv64gc" )
187+
188+ # for native builds, enable Zba and Zbb if supported by the CPU
189+ if (ARCH STREQUAL "native" )
190+ enable_language (ASM )
191+ try_run (RANDOMX_ZBA_RUN_FAIL
192+ RANDOMX_ZBA_COMPILE_OK
193+ ${CMAKE_CURRENT_BINARY_DIR} /
194+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zba.s
195+ COMPILE_DEFINITIONS "-march=rv64gc_zba" )
196+ if (RANDOMX_ZBA_COMPILE_OK AND NOT RANDOMX_ZBA_RUN_FAIL)
197+ set (RVARCH "${RVARCH} _zba" )
198+ endif ()
199+ try_run (RANDOMX_ZBB_RUN_FAIL
200+ RANDOMX_ZBB_COMPILE_OK
201+ ${CMAKE_CURRENT_BINARY_DIR} /
202+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zbb.s
203+ COMPILE_DEFINITIONS "-march=rv64gc_zbb" )
204+ if (RANDOMX_ZBB_COMPILE_OK AND NOT RANDOMX_ZBB_RUN_FAIL)
205+ set (RVARCH "${RVARCH} _zbb" )
206+ endif ()
207+ endif ()
208+
209+ add_flag ("-march=${RVARCH} " )
210+ endif ()
211+
176212set (RANDOMX_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR} /src" CACHE STRING "RandomX Include path" )
177213
178214add_library (randomx ${randomx_sources} )
0 commit comments