#
# Copyright (c) 2021, Alliance for Open Media. All rights reserved
#
# This source code is subject to the terms of the BSD 3-Clause Clear License and
# the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
# License was not distributed with this source code in the LICENSE file, you can
# obtain it at aomedia.org/license/software-license/bsd-3-c-c/.  If the Alliance
# for Open Media Patent License 1.0 was not distributed with this source code in
# the PATENTS file, you can obtain it at aomedia.org/license/patent-license/.
#
if(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_)
  return()
endif() # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_
set(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_ 1)

set(CMAKE_SYSTEM_NAME "Linux")

if(ENABLE_DSPR2 AND ENABLE_MSA)
  message(FATAL_ERROR "ENABLE_DSPR2 and ENABLE_MSA cannot be combined.")
endif()

if(ENABLE_DSPR2)
  set(HAVE_DSPR2
      1
      CACHE BOOL "" FORCE)

  if("${CROSS}" STREQUAL "")

    # Default the cross compiler prefix to something known to work.
    set(CROSS mips-linux-gnu-)
  endif()

  set(MIPS_CFLAGS "-mdspr2")
  set(MIPS_CXXFLAGS "-mdspr2")
elseif(ENABLE_MSA)
  set(HAVE_MSA
      1
      CACHE BOOL "" FORCE)

  if("${CROSS}" STREQUAL "")

    # Default the cross compiler prefix to something known to work.
    set(CROSS mips-mti-linux-gnu-)
  endif()

  set(MIPS_CFLAGS "-mmsa")
  set(MIPS_CXXFLAGS "-mmsa")
endif()

if("${CROSS}" STREQUAL "")

  # TODO(tomfinegan): Make it possible to turn this off. The $CROSS prefix won't
  # be desired on a mips host.  Default cross compiler prefix to something that
  # might work for an  unoptimized build.
  set(CROSS mips-linux-gnu-)
endif()

if("${MIPS_CPU}" STREQUAL "")
  set(MIPS_CFLAGS "${MIPS_CFLAGS} -mips32r2")
  set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} -mips32r2")
elseif("${MIPS_CPU}" STREQUAL "p5600")
  set(P56_FLAGS
      "-mips32r5 -mload-store-pairs -msched-weight -mhard-float -mfp64")
  set(MIPS_CFLAGS "${MIPS_CFLAGS} ${P56_FLAGS}")
  set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} ${P56_FLAGS}")
  set(CMAKE_EXE_LINKER_FLAGS "-mfp64 ${CMAKE_EXE_LINKER_FLAGS}")
endif()

set(CMAKE_C_COMPILER ${CROSS}gcc)
set(CMAKE_CXX_COMPILER ${CROSS}g++)
set(AS_EXECUTABLE ${CROSS}as)
set(CMAKE_C_COMPILER_ARG1 "-EL ${MIPS_CFLAGS}")
set(CMAKE_CXX_COMPILER_ARG1 "-EL ${MIPS_CXXFLAGS}")
set(CMAKE_SYSTEM_PROCESSOR "mips32")

# No runtime cpu detect for mips32-linux-gcc.
if(CONFIG_RUNTIME_CPU_DETECT)
  message("--- CONFIG_RUNTIME_CPU_DETECT not supported for mips32 targets.")
endif()

set(CONFIG_RUNTIME_CPU_DETECT
    0
    CACHE STRING "" FORCE)
