65 lines
2.8 KiB
CMake
65 lines
2.8 KiB
CMake
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
|
|
|
|
#custom command to use objcopy to create .bin files out of ELF files
|
|
function(make_mbed_firmware INPUT)
|
|
add_custom_command(TARGET ${INPUT}
|
|
COMMAND arm-none-eabi-objcopy -O binary ${INPUT} ${INPUT}_${MBED_TARGET}.bin
|
|
COMMENT "objcopying to make mbed compatible firmware")
|
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${INPUT}_${MBED_TARGET}.bin)
|
|
endfunction(make_mbed_firmware)
|
|
|
|
#assume we're using an LPC1768 model if it's not specified by -DMBED_TARGET=
|
|
if( NOT MBED_TARGET MATCHES "LPC1768" AND NOT MBED_TARGET MATCHES "LPC2368" AND NOT MBED_TARGET MATCHES "LPC11U24")
|
|
message(STATUS "invalid or no mbed target specified. Options are LPC1768, LPC2368 or LPC11U24. Assuming LPC1768 for now.
|
|
Target may be specified using -DMBED_TARGET=")
|
|
set(MBED_TARGET "LPC1768")
|
|
endif( NOT MBED_TARGET MATCHES "LPC1768" AND NOT MBED_TARGET MATCHES "LPC2368" AND NOT MBED_TARGET MATCHES "LPC11U24")
|
|
|
|
set(MBED_INCLUDE "${CMAKE_SOURCE_DIR}/mbed/${MBED_TARGET}/GCC_CS/")
|
|
|
|
#setup target specific object files
|
|
if(MBED_TARGET MATCHES "LPC1768")
|
|
set(MBED_PREFIX "LPC17")
|
|
set(CORE "cm3")
|
|
set(CHIP ${MBED_INCLUDE}sys.o
|
|
${MBED_INCLUDE}startup_LPC17xx.o)
|
|
elseif(MBED_TARGET MATCHES "LPC2368")
|
|
set(CHIP ${MBED_INCLUDE}vector_functions.o
|
|
${MBED_INCLUDE}vector_realmonitor.o
|
|
${MBED_INCLUDE}vector_table.o)
|
|
set(MBED_PREFIX "LPC23")
|
|
set(CORE "arm7")
|
|
elseif(MBED_TARGET MATCHES "LPC11U24")
|
|
set(CHIP ${MBED_INCLUDE}sys.o
|
|
${MBED_INCLUDE}startup_LPC11xx.o)
|
|
set(CORE "cm0")
|
|
set(MBED_PREFIX "LPC11U")
|
|
endif(MBED_TARGET MATCHES "LPC1768")
|
|
|
|
#setup precompiled mbed files which will be needed for all projects
|
|
set(CHIP ${CHIP}
|
|
${MBED_INCLUDE}system_${MBED_PREFIX}xx.o
|
|
${MBED_INCLUDE}cmsis_nvic.o
|
|
${MBED_INCLUDE}core_${CORE}.o)
|
|
|
|
#force min size build type
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING
|
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
|
FORCE)
|
|
endif(NOT CMAKE_BUILD_TYPE)
|
|
|
|
#set correct linker script
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \"-T${CMAKE_SOURCE_DIR}/mbed/${MBED_TARGET}/GCC_CS/${MBED_TARGET}.ld\" -static")
|
|
|
|
#find CodeSourcery Toolchain for appropriate include dirs
|
|
find_path(CSPATH arm-none-eabi-g++ PATHS ENV)
|
|
message(STATUS "${CSPATH} is where CodeSourcery is installed")
|
|
|
|
#setup directories for appropriate C, C++, mbed libraries and includes
|
|
include_directories(${MBED_INCLUDE})
|
|
include_directories(mbed)
|
|
include_directories(${CSPATH}/../arm-none-eabi/include)
|
|
include_directories(${CSPATH}/../arm-none-eabi/include/c++/4.6.1)
|
|
link_directories(${MBED_INCLUDE})
|