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