# Project name
PROJECT(stm32-template)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
ENABLE_LANGUAGE(ASM)

# Select your memory sizes here
# Flash size
SET(STM32_FLASH_SIZE "512K")
# RAM size
SET(STM32_RAM_SIZE "64K")
# Stack address - bottom of RAM => RAM origin + RAM size
SET(STM32_STACK_ADDRESS "0x20010000")

# Origins
SET(STM32_FLASH_ORIGIN "0x08000000")
SET(STM32_RAM_ORIGIN "0x20000000")

# Compiler definitions for std. periph. library
# Select your chip type here
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F10X_HD")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTM32F10X_HD")

# Startup sources
# Select your chip type here
SET(STARTUP_SOURCE ${STM32_STARTUP_HD})

# Uncomment needed modules
SET(MOD_SOURCES
  ${STM32_MISC_SOURCE}
#  ${STM32_ADC_SOURCE}
#  ${STM32_BKP_SOURCE}
#  ${STM32_CAN_SOURCE}
#  ${STM32_CEC_SOURCE}
#  ${STM32_CRC_SOURCE}
#  ${STM32_DAC_SOURCE}
#  ${STM32_DBGMCU_SOURCE}
#  ${STM32_DMA_SOURCE}
#  ${STM32_EXTI_SOURCE}
#  ${STM32_FLASH_SOURCE}
#  ${STM32_FSMC_SOURCE}
  ${STM32_GPIO_SOURCE}
#  ${STM32_I2C_SOURCE}
#  ${STM32_IWDG_SOURCE}
#  ${STM32_PWR_SOURCE}
  ${STM32_RCC_SOURCE}
#  ${STM32_RTC_SOURCE}
#  ${STM32_SDIO_SOURCE}
#  ${STM32_SPI_SOURCE}
  ${STM32_TIM_SOURCE}
#  ${STM32_USART_SOURCE}
#  ${STM32_WWDG_SOURCE}
)

# Project sources
SET(PROJECT_SOURCES
  main.c
)

# Configuring linker script for our target
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.ld.in ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")

INCLUDE_DIRECTORIES(
  ${CMAKE_CURRENT_SOURCE_DIR}/.
  ${STM32_StdPeriphLib_INCLUDE_DIRS}
)

# Compile executable (*.elf)
ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${MOD_SOURCES} ${STARTUP_SOURCE} ${STM32_SYSTEM_SOURCE})

# Convert elf to bin and hex
ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)