# Copyright 2022 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR riscv64)

SET(VLEN "512" CACHE STRING "Vector Length for QEMU.")
IF(NOT VLEN MATCHES "^(32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536)$")
  MESSAGE(FATAL_ERROR "User specified VLEN=${VLEN} is invalid.")
ENDIF()

IF(NOT RISCV_TOOLCHAIN_ROOT)
  SET(CMAKE_C_COMPILER "riscv64-linux-gnu-gcc")
  SET(CMAKE_ASM_COMPILER "riscv64-linux-gnu-gcc")
  SET(CMAKE_CXX_COMPILER "riscv64-linux-gnu-g++")

  SET(CMAKE_FIND_ROOT_PATH "/usr/riscv64-linux-gnu")
  SET(CMAKE_INCLUDE_PATH "/usr/include/riscv64-linux-gnu")
  SET(CMAKE_LIBRARY_PATH "/usr/lib/riscv64-linux-gnu")
  SET(CMAKE_PROGRAM_PATH "/usr/bin/riscv64-linux-gnu")
ELSE()
  MESSAGE(STATUS "RISCV_TOOLCHAIN_ROOT=${RISCV_TOOLCHAIN_ROOT} is defined during compilation.")
  SET(CMAKE_C_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-linux-gnu-clang")
  SET(CMAKE_ASM_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-linux-gnu-clang")
  SET(CMAKE_CXX_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-linux-gnu-clang++")
  SET(CMAKE_FIND_ROOT_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/")
  SET(CMAKE_INCLUDE_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/include/")
  SET(CMAKE_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/lib/")
  SET(CMAKE_PROGRAM_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/bin/")
ENDIF()

SET(CMAKE_CROSSCOMPILING TRUE)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

IF(NOT XNNPACK_ENABLE_RISCV_VECTOR)
  SET(QEMU_OPTION -L ${CMAKE_FIND_ROOT_PATH})
ELSE()
  SET(QEMU_OPTION -cpu rv64,zba=true,zbb=true,zbc=true,zbs=true,v=true,vlen=${VLEN},elen=64,vext_spec=v1.0 -L ${CMAKE_FIND_ROOT_PATH})
ENDIF()

IF(NOT RISCV_QEMU_ROOT)
  SET(CMAKE_CROSSCOMPILING_EMULATOR "qemu-riscv64;${QEMU_OPTION}")
ELSE()
  SET(CMAKE_CROSSCOMPILING_EMULATOR "${RISCV_QEMU_ROOT}/bin/qemu-riscv64;${QEMU_OPTION}")
ENDIF()
MESSAGE(STATUS "CMAKE_CROSSCOMPILING_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}")
