riscv-clang.cmake 2.3 KB

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