CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(VMLTK_MODULE)

# DEBUG, RELEASE, MINSIZEREL, RELWITHDEBINFO
# We can use -DCMAKE_BUILD_TYPE=Debug or -DCMAKE_BUILD_TYPE=RelWithDebInfo to define something
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
	MESSAGE("====== Debug mode ======")
	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wall -Wextra -pedantic -pthread -O0 -g3 -fasynchronous-unwind-tables")
	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic -pthread -O0 -g3 -fasynchronous-unwind-tables")
	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic")
	SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -rdynamic")
	SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -rdynamic")
	ADD_DEFINITIONS("-DDEBUG")
	SET(DEBUG_ENABLE true)
ELSE(CMAKE_BUILD_TYPE STREQUAL "Debug")
	IF(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
		MESSAGE("====== RelWithDebInfo mode ======")
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -O3 -Wall -Wextra -pedantic -pthread")
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall -Wextra -pedantic -pthread")
		ADD_DEFINITIONS("-DDEBUG")
		SET(DEBUG_ENABLE true)
	ELSE(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
		MESSAGE("====== Release mode ======")
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -O3 -Wall -Wextra -pedantic -pthread -s")
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall -Wextra -pedantic -pthread -s")
		ADD_DEFINITIONS("-DNDEBUG")
		SET(DEBUG_ENABLE false)
	ENDIF(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")

IF(SDK_TYPE STREQUAL "SDK_IPCAMERA")
	ADD_DEFINITIONS("-DSDK_IPCAMERA")	
	SET(GAMR_SUPPORT_ENABLE 1)
	SET(AAC_SW_DEC_ENABLE 1)
ELSEIF(SDK_TYPE STREQUAL "SDK_CAR_BLACK_BOX")
	ADD_DEFINITIONS("-DSDK_CAR_BLACK_BOX")	
ENDIF()

ADD_DEFINITIONS("-D_GNU_SOURCE")

SET(AAC_HW_ENCODE_ENABLE 1)

# To use SW AAC (fdk-aacenc/fdk-aacdec), must disable HW and enable SW DEC
# SET(AAC_HW_ENCODE_ENABLE 0)
# SET(AAC_SW_DEC_ENABLE 1)

SET(VIENNA_PLATFORM true CACHE BOOL "target to Vienna platform")
SET(PLATFORM_DIR vienna)
SET(CMAKE_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)

SET(OPEN_SRC_3RD_INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/install_temp_open_src_3rd)
SET(INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../vtcs_root_${PLATFORM_DIR}")
SET(VTCS_SW_DEV_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../vtcs_root_${PLATFORM_DIR}")

IF(CMAKE_CROSSCOMPILING)
	SET(HOST_CONFIG --host=arm-linux)
	#GET_FILENAME_COMPONENT(MY_TOOLCHAIN_DIR ${CMAKE_C_COMPILER} DIRECTORY) # This is for CMake > 2.8.11
	GET_FILENAME_COMPONENT(MY_TOOLCHAIN_DIR ${CMAKE_C_COMPILER} PATH) # This is for CMake <= 2.8.11
	SET(ADDITIONAL_ENV_CONFIG CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} LD=${CMAKE_LINKER} NM=${CMAKE_NM} AR=${CMAKE_AR} RANLIB=${CMAKE_RANLIB} STRIP=${CMAKE_STRIP} OBJDUMP=${CMAKE_OBJDUMP} PKG_CONFIG=${MY_TOOLCHAIN_DIR}/pkg-config)
ENDIF(CMAKE_CROSSCOMPILING)

#### Get the path of toolchain and the prefix of toolchain binaries.
#GET_FILENAME_COMPONENT(MY_TOOLCHAIN_BIN_PATH ${CMAKE_C_COMPILER} PATH)
#GET_FILENAME_COMPONENT(TEMP_CC_NAME ${CMAKE_C_COMPILER} NAME)
#STRING(REGEX REPLACE "gcc|cc$" "" MY_TOOLCHAIN_BIN_PREFIX ${TEMP_CC_NAME})

INCLUDE_DIRECTORIES(${VTCS_SW_DEV_ROOT}/include ${OPEN_SRC_3RD_INSTALL_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR})
LINK_DIRECTORIES(${VTCS_SW_DEV_ROOT}/lib ${OPEN_SRC_3RD_INSTALL_DIR}/lib)

SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/libs/${PLATFORM_DIR})
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin/${PLATFORM_DIR})

INCLUDE(${CMAKE_MODULE_DIR}/ConditionalAddSubDir.cmake)

ADD_SUBDIRECTORY(MsgBroker)
ADD_SUBDIRECTORY(open_source_3rd)
ADD_SUBDIRECTORY(audiotk)
ADD_SUBDIRECTORY(apps)
#ADD_SUBDIRECTORY(vospi)
