xref: /aosp_15_r20/external/libyuv/riscv_script/riscv-clang.cmake (revision 4e366538070a3a6c5c163c31b791eab742e1657a)
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