1*4e366538SXin Liset(CMAKE_CROSSCOMPILING TRUE) 2*4e366538SXin Liset(CMAKE_SYSTEM_NAME "Linux") 3*4e366538SXin Liset(CMAKE_SYSTEM_PROCESSOR "riscv64") 4*4e366538SXin Li 5*4e366538SXin Lioption(USE_RVV "Enable riscv vector or not." ON) 6*4e366538SXin Lioption(USE_AUTO_VECTORIZER "Enable riscv auto vectorizer or not." OFF) 7*4e366538SXin Li 8*4e366538SXin Li# Avoid to use system path for cross-compile 9*4e366538SXin Liset(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE) 10*4e366538SXin Li 11*4e366538SXin Liset(TOOLCHAIN_PATH "" CACHE STRING "The toolcahin path.") 12*4e366538SXin Liif(NOT TOOLCHAIN_PATH) 13*4e366538SXin Li set(TOOLCHAIN_PATH ${CMAKE_SOURCE_DIR}/build-toolchain-qemu/riscv-clang) 14*4e366538SXin Liendif() 15*4e366538SXin Li 16*4e366538SXin Liset(TOOLCHAIN_PREFIX "riscv64-unknown-linux-gnu-" CACHE STRING "The toolcahin prefix.") 17*4e366538SXin Li 18*4e366538SXin Li# toolchain setting 19*4e366538SXin Liset(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}clang") 20*4e366538SXin Liset(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}clang++") 21*4e366538SXin Li 22*4e366538SXin Li# CMake will just use the host-side tools for the following tools, so we setup them here. 23*4e366538SXin Liset(CMAKE_C_COMPILER_AR "${TOOLCHAIN_PATH}/bin/llvm-ar") 24*4e366538SXin Liset(CMAKE_CXX_COMPILER_AR "${TOOLCHAIN_PATH}/bin/llvm-ar") 25*4e366538SXin Liset(CMAKE_C_COMPILER_RANLIB "${TOOLCHAIN_PATH}/bin/llvm-ranlib") 26*4e366538SXin Liset(CMAKE_CXX_COMPILER_RANLIB "${TOOLCHAIN_PATH}/bin/llvm-ranlib") 27*4e366538SXin Liset(CMAKE_OBJDUMP "${TOOLCHAIN_PATH}/bin/llvm-objdump") 28*4e366538SXin Liset(CMAKE_OBJCOPY "${TOOLCHAIN_PATH}/bin/llvm-objcopy") 29*4e366538SXin Li 30*4e366538SXin Li# compile options 31*4e366538SXin Liset(RISCV_COMPILER_FLAGS "" CACHE STRING "Compile flags") 32*4e366538SXin Li# if user provides RISCV_COMPILER_FLAGS, appeding compile flags is avoided. 33*4e366538SXin Liif(RISCV_COMPILER_FLAGS STREQUAL "") 34*4e366538SXin Li message(STATUS "USE_RVV: ${USE_RVV}") 35*4e366538SXin Li message(STATUS "USE_AUTO_VECTORIZER: ${USE_AUTO_VECTORIZER}") 36*4e366538SXin Li if(USE_RVV) 37*4e366538SXin Li list(APPEND RISCV_COMPILER_FLAGS "-march=rv64gcv") 38*4e366538SXin Li if(NOT USE_AUTO_VECTORIZER) 39*4e366538SXin Li # Disable auto-vectorizer 40*4e366538SXin Li add_compile_options(-fno-vectorize -fno-slp-vectorize) 41*4e366538SXin Li endif() 42*4e366538SXin Li else() 43*4e366538SXin Li list(APPEND RISCV_COMPILER_FLAGS "-march=rv64gc") 44*4e366538SXin Li endif() 45*4e366538SXin Liendif() 46*4e366538SXin Limessage(STATUS "RISCV_COMPILER_FLAGS: ${RISCV_COMPILER_FLAGS}") 47*4e366538SXin Li 48*4e366538SXin Liset(CMAKE_C_FLAGS "${RISCV_COMPILER_FLAGS} ${CMAKE_C_FLAGS}") 49*4e366538SXin Liset(CMAKE_CXX_FLAGS "${RISCV_COMPILER_FLAGS} ${CMAKE_CXX_FLAGS}") 50*4e366538SXin Li 51*4e366538SXin Liset(RISCV_LINKER_FLAGS "-lstdc++ -lpthread -lm -ldl") 52*4e366538SXin Liset(RISCV_LINKER_FLAGS_EXE) 53*4e366538SXin Liset(CMAKE_SHARED_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}") 54*4e366538SXin Liset(CMAKE_MODULE_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}") 55*4e366538SXin Liset(CMAKE_EXE_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${RISCV_LINKER_FLAGS_EXE} ${CMAKE_EXE_LINKER_FLAGS}") 56