CMAKE_MINIMUM_REQUIRED(VERSION 3.2)

PROJECT(Surround360Render CXX)

FIND_PACKAGE(OpenCV)
FIND_PACKAGE(Ceres REQUIRED)

INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source/util)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source/optical_flow)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source/camera_isp)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source/calibration)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/source/render)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
INCLUDE_DIRECTORIES(/usr/include/eigen3)
INCLUDE_DIRECTORIES(/usr/local/include/eigen3)

if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  # required for clang, including AppleClang
  LINK_DIRECTORIES(/usr/local/lib)
endif()

#IF(NOT IS_DIRECTORY CMAKE_BUILD_TYPE)
#  SET(${CMAKE_BUILD_TYPE} Release ... FORCE)
#ENDIF()

IF(NOT ${CMAKE_BUILD_TYPE} MATCHES Debug)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -Ofast")
  MESSAGE( STATUS "Release!" )
ELSEIF(${CMAKE_BUILD_TYPE} MATCHES Debug)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -g3 -DDEBUG=1")
  MESSAGE( STATUS "DEBUG!" )
ENDIF()

IF (NOT MSVC)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ENDIF()

IF(NOT APPLE AND NOT MSVC)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
ENDIF()

SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_OSX_ARCHITECTURES "${ARCHS_STANDARD}")

### Add custom targets to show all source and header files in Xcode ###

FILE(GLOB SRC "${CMAKE_CURRENT_SOURCE_DIR}/source/*")
ADD_CUSTOM_TARGET( _source SOURCES ${SRC} )

### LibJSON ###

ADD_LIBRARY(
  LibJSON
  source/thirdparty/supereasyjson/json.cpp
)

### LibVrCamera ###

FILE(GLOB calibration_SRC "source/calibration/*.cpp")
FILE(GLOB optical_flow_SRC "source/optical_flow/*.cpp")
FILE(GLOB render_SRC "source/render/*.cpp")
FILE(GLOB util_SRC "source/util/*.cpp")

ADD_LIBRARY(
  LibVrCamera
  source/util/SystemUtil.cpp
  ${calibration_SRC}
  ${optical_flow_SRC}
  ${render_SRC}
  ${util_SRC}
)
TARGET_COMPILE_FEATURES(LibVrCamera PRIVATE cxx_range_for)



### TestRenderStereoPanorama ###

ADD_EXECUTABLE(
  TestRenderStereoPanorama
  source/test/TestRenderStereoPanorama.cpp
)
TARGET_COMPILE_FEATURES(TestRenderStereoPanorama PRIVATE cxx_range_for)
TARGET_LINK_LIBRARIES(
  TestRenderStereoPanorama
  LibVrCamera
  LibJSON
  folly
  glog
  gflags
  ${OpenCV_LIBS}
  ${PLATFORM_SPECIFIC_LIBS}
)
