CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(CMAKE_SYSTEM_NAME LPC1769)

# do not use compiler tests
INCLUDE(CMakeForceCompiler)

PROJECT(FreeRTOS)

# compiler and tools
SET(ARMPATH /opt/gcc-arm)
SET(JLINKPATH /opt/jlink)

SET(CMAKE_C_COMPILER ${ARMPATH}/bin/arm-none-eabi-gcc)
SET(CMAKE_CXX_COMPILER ${ARMPATH}/bin/arm-none-eabi-g++)
SET(CMAKE_AR ${ARMPATH}/bin/arm-none-eabi-ar)
# use size instead of ranlib
SET(CMAKE_RANLIB ${ARMPATH}/bin/arm-none-eabi-size)

# used for post build steps
SET(SIZE ${ARMPATH}/bin/arm-none-eabi-size)
SET(OBJCOPY ${ARMPATH}/bin/arm-none-eabi-objcopy)

# debugging
SET(GDB ${ARMPATH}/bin/arm-none-eabi-gdb)
SET(GDBSERVER ${JLINKPATH}/JLinkGDBServer.command)

# settings
SET(CMAKE_C_FLAGS "-DDEBUG -D__USE_CMSIS -O0 -g3 -Wall")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0 -fno-builtin -ffunction-sections -mcpu=cortex-m3 -mthumb")
SET(CMAKE_EXE_LINKER_FLAGS "-Xlinker --gc-sections")
SET(CMAKE_LINK_FLAGS)

# FreeRTOSConfig
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})

# build Libs
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/CMSIS/inc)
ADD_SUBDIRECTORY(CMSIS)

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/FreeRTOS/include)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/FreeRTOS/portable)
ADD_SUBDIRECTORY(FreeRTOS)

# build demo project
SET(DEMO_SRCS
 main.c
 startup_lpc17.c
)
SET(DEMO_BIN FreeRTOSTest.elf)

ADD_EXECUTABLE(${DEMO_BIN} ${DEMO_SRCS})
SET_TARGET_PROPERTIES(${DEMO_BIN} PROPERTIES LINK_FLAGS "-Xlinker -Map=FreeRTOSTest.map")
SET_TARGET_PROPERTIES(${DEMO_BIN} PROPERTIES LINK_FLAGS "-T \"../FreeRTOSDemo.ld\"")
TARGET_LINK_LIBRARIES(${DEMO_BIN} FreeRTOS CMSIS)

ADD_CUSTOM_COMMAND(TARGET ${DEMO_BIN} POST_BUILD COMMAND ${SIZE} FreeRTOSTest.elf)
ADD_CUSTOM_COMMAND(TARGET ${DEMO_BIN} POST_BUILD COMMAND ${OBJCOPY} -O ihex ${DEMO_BIN} FreeRTOSTest.hex)

# prepare for debuging
CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/gdb_load.in ${CMAKE_BINARY_DIR}/gdb_load.cmd)
ADD_CUSTOM_TARGET(gdb ${GDB} -x gdb_load.cmd)
ADD_CUSTOM_TARGET(gdbserver ${GDBSERVER})

