# Set the minimum version of CMake that can be used
# To find the cmake version run
# $ cmake --version
cmake_minimum_required(VERSION 3.15)

include(arm_cross_setup.cmake)

ENABLE_LANGUAGE(C ASM)
#project name
project(AC7840x_Demo)

set(PORJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(PROJECT_BINARY_DIR ${PORJECT_SOURCE_DIR}/build)

#compile flags
#set(CMAKE_C_FLAGS "-gdwarf-2 -MD -Wall -Werror -O1 -std=c99 -mcpu=cortex-m4 -mthumb -mthumb-interwork -mfloat-abi=soft")
set(CMAKE_C_FLAGS "-gdwarf-2 -MD -Wall -Werror -O3 -std=c99 -mcpu=cortex-m4 -mthumb -mthumb-interwork -mfloat-abi=softfp -mfpu=fpv4-sp-d16")
#set(CMAKE_C_FLAGS "-gdwarf-2 -MD -Wall -Werror -O1 -std=c99 -mcpu=cortex-m4 -mthumb -mthumb-interwork -mfloat-abi=hard -mfpu=fpv4-sp-d16")

set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}")
#set(FORCE_LINK_FLAGS "-Wl,-uUART0_IRQHandler,-uUART2_IRQHandler,-uUART3_IRQHandler,-uDMA0_Channel0_IRQHandler,-uCAN1_IRQHandler,-uI2C0_IRQHandler")
set(CMAKE_EXE_LINKER_FLAGS "-T ${PORJECT_SOURCE_DIR}/AC7840x_flash_gcc.ld -specs=nosys.specs -Wl,-Map=${PROJECT_NAME}.map ${FORCE_LINK_FLAGS}")
#set(CMAKE_ASM_GNU_Assembler TRUE)

#add std lib
set(CMAKE_SHARED_LIBARAY_LINK_C_FLAGS)

#buil type Debug or Release+
set(CMAKE_BUILD_TYPE Debug)

#add pre macro
#DEBUG_CMD_IN_INTERRUPT
#add_compile_definitions(AC7840X DEBUG_CMD_INTERRUPT UCOS_DEBUGMSG_OUT CMSIS_SDK ATC_DEVICE_ASSERT OS_PLATFORM=1)

add_definitions(-DUSE_UINT32_T_AS_UNSIGNED_INT)

#include header file
include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/cmsis/include
	${CMAKE_CURRENT_SOURCE_DIR}/../Device
	${CMAKE_CURRENT_SOURCE_DIR}/../Device/ac7840x/include
	${CMAKE_CURRENT_SOURCE_DIR}/../Device/ac7840x/startup
	${CMAKE_CURRENT_SOURCE_DIR}/../Device/common
	${CMAKE_CURRENT_SOURCE_DIR}/../Rtos/osif
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/inc
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/acmp
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/adc
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/can
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/ckgen
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/cmu
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/crc
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/cse
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/ctu
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/dma
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/eim
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/eio
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/ewdg
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/flash
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/gpio
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/i2c
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/lin
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/mpu
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/pbr
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/pdt
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/pwm
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/rcm
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/rtc
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/smu
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/spi
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/spm
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/sram
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/timer
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/uart
	${CMAKE_CURRENT_SOURCE_DIR}/../Driver/src/wdg
)

#add sub module
add_subdirectory(src/user)
add_subdirectory(src/rtos)
add_subdirectory(src/device)
add_subdirectory(src/driver)

add_executable(${PROJECT_NAME}.elf ${CMAKE_CURRENT_SOURCE_DIR}/User/main.c)
#add_executable(${PROJECT_NAME}.elf)
target_link_libraries(${PROJECT_NAME}.elf user device driver rtos)

#
set(ELF_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.elf)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_OPTION "-Obinary")
set(HEX_OPTION "-Oihex")

#generate bin and hex file
add_custom_command(
	TARGET ${PROJECT_NAME}.elf POST_BUILD
	COMMAND ${CMAKE_OBJCOPY} ${HEX_OPTION} ${ELF_FILE} ${HEX_FILE}
	#COMMAND ${CMAKE_OBJCOPY} ${BIN_OPTION} ${ELF_FILE} ${BIN_FILE}
)
