-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add initial version of CMake scripts.
- Loading branch information
Showing
6 changed files
with
221 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
## | ||
## Author: Johannes Bruder | ||
## License: See LICENSE.TXT file included in the project | ||
## | ||
## CMake arm-none-eabi binutils integration and helper functions | ||
## | ||
|
||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set tools | ||
#--------------------------------------------------------------------------------------- | ||
set(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-objcopy${TOOLCHAIN_EXT}) | ||
set(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-objdump${TOOLCHAIN_EXT}) | ||
set(CMAKE_SIZE ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-size${TOOLCHAIN_EXT}) | ||
|
||
|
||
#--------------------------------------------------------------------------------------- | ||
# Prints the section sizes | ||
#--------------------------------------------------------------------------------------- | ||
function(print_section_sizes TARGET) | ||
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_SIZE} ${TARGET}) | ||
endfunction() | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Creates output in hex format | ||
#--------------------------------------------------------------------------------------- | ||
function(create_hex_output TARGET) | ||
add_custom_target(${TARGET}.hex ALL DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Oihex ${TARGET} ${TARGET}.hex) | ||
endfunction() | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Creates output in binary format | ||
#--------------------------------------------------------------------------------------- | ||
function(create_bin_output TARGET) | ||
add_custom_target(${TARGET}.bin ALL DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Obinary ${TARGET} ${TARGET}.bin) | ||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
## | ||
## Authors: Johannes Bruder | ||
## License: See LICENSE.TXT file included in the project | ||
## | ||
## | ||
## EFR32MG target specific CMake file | ||
## | ||
|
||
if(NOT DEFINED LINKER_SCRIPT) | ||
message(FATAL_ERROR "No linker script defined") | ||
endif(NOT DEFINED LINKER_SCRIPT) | ||
message("Linker script: ${LINKER_SCRIPT}") | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set target compiler/linker flags | ||
#--------------------------------------------------------------------------------------- | ||
|
||
# Object build options | ||
# -mcpu=cortex-m4 SepcifiesTarget ARM processor. | ||
# -mfpu=fpv4-sp-d16 Specifies floating-point hardware. | ||
# -mfloat-abi=softfp Allows the generation of code using hardware floating-point instructions, but still uses the soft-float calling conventions. | ||
|
||
set(OBJECT_GEN_FLAGS "-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp") | ||
|
||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OBJECT_GEN_FLAGS} -std=gnu99 " CACHE INTERNAL "C Compiler options") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${OBJECT_GEN_FLAGS} -std=c++11 " CACHE INTERNAL "C++ Compiler options") | ||
set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} ${OBJECT_GEN_FLAGS} -x assembler-with-cpp " CACHE INTERNAL "ASM Compiler options") | ||
|
||
# Linker flags | ||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -T${LINKER_SCRIPT}" CACHE INTERNAL "Linker options") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
## | ||
## Author: Johannes Bruder | ||
## License: See LICENSE.TXT file included in the project | ||
## | ||
## Collection of functions to generate different GDB debugging configurations | ||
## | ||
|
||
# Get the path of this module | ||
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR}) | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set tools | ||
#--------------------------------------------------------------------------------------- | ||
set(GDB_BIN ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gdb${TOOLCHAIN_EXT}) | ||
if(NOT OPENOCD_BIN) | ||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) | ||
set(OPENOCD_BIN "/usr/bin/openocd" CACHE STRING "OpenOCD executable") | ||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) | ||
set(OPENOCD_BIN "/usr/local/bin/openocd" CACHE STRING "OpenOCD executable") | ||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) | ||
set(OPENOCD_BIN "C:/openocd/bin/openocd.exe" CACHE STRING "OpenOCD executable") | ||
endif() | ||
endif() | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Generates a GDB run script for debugging with STLINKv1/v2/v2-1 programmer and texane stlink tool. | ||
# More infos check: https://github.com/texane/stlink | ||
#--------------------------------------------------------------------------------------- | ||
function(generate_run_gdb_stlink TARGET) | ||
get_target_property( TARGET_NAME ${TARGET} NAME ) | ||
configure_file(${CURRENT_MODULE_DIR}/stlink-run.gdb.in ${PROJECT_BINARY_DIR}/stlink-run.gdb @ONLY) | ||
endfunction() | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Generates a GDB run script for debugging with any supported programmer and openOCD. | ||
#--------------------------------------------------------------------------------------- | ||
function(generate_run_gdb_openocd TARGET) | ||
get_target_property( TARGET_NAME ${TARGET} NAME ) | ||
configure_file(${CURRENT_MODULE_DIR}/openocd-run.gdb.in ${PROJECT_BINARY_DIR}/openocd-run.gdb @ONLY) | ||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
file @TARGET_NAME@ | ||
target extended-remote localhost:3333 | ||
monitor reset halt | ||
load | ||
thbreak main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
file @TARGET_NAME@ | ||
target extended localhost:4242 | ||
monitor reset halt | ||
shell sleep 1 | ||
load | ||
thbreak main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
## | ||
## Author: Johannes Bruder | ||
## License: See LICENSE.TXT file included in the project | ||
## | ||
## | ||
## CMake arm-none-eabi toolchain file | ||
## | ||
|
||
# Append current directory to CMAKE_MODULE_PATH for making device specific cmake modules visible | ||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) | ||
|
||
# Target definition | ||
set(CMAKE_SYSTEM_NAME Generic) | ||
set(CMAKE_SYSTEM_PROCESSOR ARM) | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set toolchain paths | ||
#--------------------------------------------------------------------------------------- | ||
set(TOOLCHAIN arm-none-eabi) | ||
if(NOT DEFINED TOOLCHAIN_PREFIX) | ||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) | ||
set(TOOLCHAIN_PREFIX "/usr") | ||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) | ||
set(TOOLCHAIN_PREFIX "/usr/local") | ||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) | ||
message(STATUS "Please specify the TOOLCHAIN_PREFIX !\n For example: -DTOOLCHAIN_PREFIX=\"C:/Program Files/GNU Tools ARM Embedded\" ") | ||
else() | ||
set(TOOLCHAIN_PREFIX "/usr") | ||
message(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX}) | ||
endif() | ||
endif() | ||
set(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin) | ||
set(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/include) | ||
set(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/lib) | ||
|
||
# Set system depended extensions | ||
if(WIN32) | ||
set(TOOLCHAIN_EXT ".exe" ) | ||
else() | ||
set(TOOLCHAIN_EXT "" ) | ||
endif() | ||
|
||
# Perform compiler test with static library | ||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set compiler/linker flags | ||
#--------------------------------------------------------------------------------------- | ||
|
||
# Object build options | ||
# -O0 No optimizations, reduce compilation time and make debugging produce the expected results. | ||
# -mthumb Generat thumb instructions. | ||
# -fno-builtin Do not use built-in functions provided by GCC. | ||
# -Wall Print only standard warnings, for all use Wextra | ||
# -ffunction-sections Place each function item into its own section in the output file. | ||
# -fdata-sections Place each data item into its own section in the output file. | ||
# -fomit-frame-pointer Omit the frame pointer in functions that don’t need one. | ||
# -mabi=aapcs Defines enums to be a variable sized type. | ||
set(OBJECT_GEN_FLAGS "-O0 -mthumb -fno-builtin -Wall -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs") | ||
|
||
set(CMAKE_C_FLAGS "${OBJECT_GEN_FLAGS} -std=gnu99 " CACHE INTERNAL "C Compiler options") | ||
set(CMAKE_CXX_FLAGS "${OBJECT_GEN_FLAGS} -std=c++11 " CACHE INTERNAL "C++ Compiler options") | ||
set(CMAKE_ASM_FLAGS "${OBJECT_GEN_FLAGS} -x assembler-with-cpp " CACHE INTERNAL "ASM Compiler options") | ||
|
||
|
||
# -Wl,--gc-sections Perform the dead code elimination. | ||
# --specs=nano.specs Link with newlib-nano. | ||
# --specs=nosys.specs No syscalls, provide empty implementations for the POSIX system calls. | ||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections --specs=nano.specs --specs=nosys.specs -mthumb -mabi=aapcs -Wl,-Map=${CMAKE_PROJECT_NAME}.map" CACHE INTERNAL "Linker options") | ||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set debug/release build configuration Options | ||
#--------------------------------------------------------------------------------------- | ||
|
||
# Options for DEBUG build | ||
# -Og Enables optimizations that do not interfere with debugging. | ||
# -g Produce debugging information in the operating system’s native format. | ||
set(CMAKE_C_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "C Compiler options for debug build type") | ||
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "C++ Compiler options for debug build type") | ||
set(CMAKE_ASM_FLAGS_DEBUG "-g" CACHE INTERNAL "ASM Compiler options for debug build type") | ||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "" CACHE INTERNAL "Linker options for debug build type") | ||
|
||
# Options for RELEASE build | ||
# -Os Optimize for size. -Os enables all -O2 optimizations. | ||
# -flto Runs the standard link-time optimizer. | ||
set(CMAKE_C_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "C Compiler options for release build type") | ||
set(CMAKE_CXX_FLAGS_RELEASE "-Os -flto" CACHE INTERNAL "C++ Compiler options for release build type") | ||
set(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "ASM Compiler options for release build type") | ||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-flto" CACHE INTERNAL "Linker options for release build type") | ||
|
||
|
||
#--------------------------------------------------------------------------------------- | ||
# Set compilers | ||
#--------------------------------------------------------------------------------------- | ||
set(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "C Compiler") | ||
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-g++${TOOLCHAIN_EXT} CACHE INTERNAL "C++ Compiler") | ||
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "ASM Compiler") | ||
|
||
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${${TOOLCHAIN}} ${CMAKE_PREFIX_PATH}) | ||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | ||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | ||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | ||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | ||
|