IF(CMAKE_VERSION VERSION_LESS "3.10")
  CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
ELSE()
  CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
ENDIF()

PROJECT(MTCL)

SET(CMAKE_HAS_SORT 1)
SET(CMAKE_MODULE_PATH
  "${MTCL_SOURCE_DIR}/CMake"
  ${CMAKE_MODULE_PATH}
)

## Disallow in-source builds
INCLUDE(OutOfSourceBuild)

## Set version and info
SET(MTCL_MAJOR_VERSION 1)
SET(MTCL_MINOR_VERSION 1)
SET(MTCL_PATCH_VERSION 0)

SET(MTCL_PACKAGE "CToy")
SET(MTCL_VENDOR "Anael Seghezzi")
SET(MTCL_VERSION "${MTCL_MAJOR_VERSION}.${MTCL_MINOR_VERSION}.${MTCL_PATCH_VERSION}")
SET(MTCL_COPYRIGHT "Copyright (c) 2016, ${MTCL_VENDOR}.")

MESSAGE(STATUS "${MTCL_PACKAGE} ${MTCL_VERSION}")

## Set install path
SET(MTCL_INSTALL_DIR MTCL)

IF(WIN32 AND NOT MINGW)
  FIND_PACKAGE(OpenGL REQUIRED)
  SET(MTCL_BUILD_FLAGS "")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MOE_BUILD_FLAGS} /EHsc /nologo /GR /FC /DWIN32 /D_MBCS")
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Z7 /W4 /Od /MDd /D_DEBUG /D__Debug__")
  SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /W1 /Ox /Ot /MD /DNDEBUG")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MARATIS_BUILD_FLAGS} /EHsc /nologo /GR /FC /DWIN32 /D_MBCS")
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7 /W4 /Od /MDd /D_DEBUG /D__Debug__")
  SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /W1 /Ox /Ot /MD /DNDEBUG")
  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:8000000")
  SET(OS_SPECIFIC_LIBRARIES)
ENDIF(WIN32 AND NOT MINGW)

IF(MINGW)
  FIND_PACKAGE(OpenGL REQUIRED)
  SET(MTCL_BUILD_FLAGS "")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -ffast-math -m64 -mavx -DWIN32 -std=c99")
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D__Debug__")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -ffast-math -m64 -mavx -DWIN32")
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D__Debug__")
ENDIF(MINGW)

IF(APPLE)
  FIND_PACKAGE(OpenGL REQUIRED)
  FIND_LIBRARY(COCOA_LIB Cocoa)
  FIND_LIBRARY(VIDEO_LIB CoreVideo)
  FIND_LIBRARY(FOUNDATION_LIB CoreFoundation)
  FIND_LIBRARY(IOKIT_LIB IOKit)
  SET(MTCL_BUILD_FLAGS "-mmacosx-version-min=10.6")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -DOSX")
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D__Debug__")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -DOSX")
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D__Debug__")
  SET(CMAKE_SHARED_LINKER_FLAGS "-Wl")
  SET(OS_SPECIFIC_LIBRARIES ${COCOA_LIB} ${VIDEO_LIB} ${FOUNDATION_LIB} ${IOKIT_LIB})
ENDIF(APPLE)

IF(UNIX AND NOT APPLE)
  FIND_PACKAGE(Threads REQUIRED)
  SET(MTCL_BUILD_FLAGS "")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -fPIC -DLINUX")
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D__Debug__")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MTCL_BUILD_FLAGS} -O3 -fPIC -DLINUX")
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D__Debug__")
  SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed,--allow-multiple-definition,--build-id")
  SET(OS_SPECIFIC_LIBRARIES Xxf86vm X11 Xrandr Xi dl m)
ENDIF(UNIX AND NOT APPLE)

FIND_PACKAGE(OpenMP)
IF(OPENMP_FOUND)
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
ENDIF()

## Set up 3rd party dependencies
SET(GLFW_INCLUDE_DIR "${MTCL_SOURCE_DIR}/3rdparty/glfw/include")
SET(TINYCTHREAD_INCLUDE_DIR "${MTCL_SOURCE_DIR}/3rdparty/tinycthread/source")
SET(GLAD_INCLUDE_DIR "${MTCL_SOURCE_DIR}/3rdparty/glad/include")
SET(TINYCTHREAD_LIBRARIES tinycthread)

## Set up SDK dependencies
SET(MTCL_INCLUDE_DIR "${MTCL_SOURCE_DIR}/src")

## Set up subdirectories...
ADD_SUBDIRECTORY(3rdparty)
MESSAGE( STATUS "GLFW: ${GLFW_LIBRARIES}")
SET(GLFW_LIBRARIES glfw ${GLFW_LIBRARIES})
ADD_SUBDIRECTORY(src)
