Reorganizing CMake build system.
- Only one file to edit now - Compiler architecture automatically detected based off of chip target
This commit is contained in:
parent
cfea1de2e8
commit
38266ca2cc
6 changed files with 234 additions and 246 deletions
195
CMakeLists.txt
195
CMakeLists.txt
|
@ -7,37 +7,82 @@
|
|||
#
|
||||
###
|
||||
|
||||
#| Windows / Cygwin Compatibility options
|
||||
set( CMAKE_LEGACY_CYGWIN_WIN32 0 )
|
||||
set( CMAKE_USE_RELATIVE_PATHS 1 )
|
||||
|
||||
|
||||
###
|
||||
# Chip Selection
|
||||
#
|
||||
|
||||
#| You _MUST_ set this to match the microcontroller you are trying to compile for
|
||||
#| You _MUST_ clean the build directory if you change this value
|
||||
#|
|
||||
set( CHIP
|
||||
# "at90usb162" # Teensy 1.0 (avr)
|
||||
# "atmega32u4" # Teensy 2.0 (avr)
|
||||
# "at90usb646" # Teensy++ 1.0 (avr)
|
||||
"at90usb1286" # Teensy++ 2.0 (avr)
|
||||
# "mk20dx128" # Teensy 3.0 (arm)
|
||||
# "mk20dx256" # Teensy 3.1 (arm)
|
||||
)
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Compiler Family
|
||||
# Compiler Intialization
|
||||
#
|
||||
include( Lib/CMake/initialize.cmake )
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Project Modules
|
||||
#
|
||||
|
||||
#| Specify the compiler family to use
|
||||
#| Currently only supports AVR and ARM
|
||||
#| "avr" # Teensy 1.0
|
||||
#| "avr" # Teensy 2.0
|
||||
#| "avr" # Teensy++ 1.0
|
||||
#| "avr" # Teensy++ 2.0
|
||||
#| "arm" # Teensy 3.0
|
||||
#| "arm" # Teensy 3.1
|
||||
#set( COMPILER_FAMILY "arm" )
|
||||
set( COMPILER_FAMILY "avr" )
|
||||
#| Note: This is the only section you probably want to modify
|
||||
#| Each module is defined by it's own folder (e.g. Scan/Matrix represents the "Matrix" module)
|
||||
#| All of the modules must be specified, as they generate the sources list of files to compile
|
||||
#| Any modifications to this file will cause a complete rebuild of the project
|
||||
|
||||
message( STATUS "Compiler Family:" )
|
||||
message( "${COMPILER_FAMILY}" )
|
||||
#| Please look at the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones
|
||||
|
||||
##| Deals with acquiring the keypress information and turning it into a key index
|
||||
set( ScanModule "DPH" )
|
||||
|
||||
##| Provides the mapping functions for DefaultMap and handles any macro processing before sending to the OutputModule
|
||||
set( MacroModule "PartialMap" )
|
||||
|
||||
##| Sends the current list of usb key codes through USB HID
|
||||
set( OutputModule "pjrcUSB" )
|
||||
|
||||
##| Debugging source to use, each module has it's own set of defines that it sets
|
||||
set( DebugModule "full" )
|
||||
|
||||
|
||||
|
||||
#| Load the compiler family specific configurations
|
||||
include( ${COMPILER_FAMILY}.cmake )
|
||||
###
|
||||
# Keymap Configuration (XXX - Not worky yet, currently ignored)
|
||||
#
|
||||
|
||||
#| Binutils not set by CMake
|
||||
set( CMAKE_SIZE "${_CMAKE_TOOLCHAIN_PREFIX}size" )
|
||||
##| If there are multiple DefaultMaps, it is defined here. If, the specified DefaultMap is not found, defaultMap.h is used.
|
||||
set( DefaultMap "kishsaver" )
|
||||
|
||||
##| PartialMap combined keymap layering. The first keymap has the "least" precedence.
|
||||
set( CombinedMap colemak capslock2ctrl )
|
||||
|
||||
##| ParitalMaps available on top of the CombinedMap. If there are input conflicts, the last PartialMap takes precedence.
|
||||
set( PartialMaps hhkbnav kbdctrl )
|
||||
|
||||
##| MacroSets define extra capabilities that are not provided by the Scan or Output modules. Last MacroSet takes precedence.
|
||||
set( MacroSets retype )
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Source Defines (in addition to the selected Modules)
|
||||
#
|
||||
set( MAIN_SRCS
|
||||
main.c
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
@ -57,113 +102,7 @@ cmake_minimum_required( VERSION 2.8 )
|
|||
|
||||
|
||||
###
|
||||
# Source Defines
|
||||
# Module Initialization / Compilation / Targets
|
||||
#
|
||||
|
||||
#| Sources (see setup.h for configuring in/away code blocks or other complete modules)
|
||||
#| XXX Not set here in this project, see setup.cmake
|
||||
#set( SRCS ./main.c )
|
||||
|
||||
#| Instead, include the module source selector
|
||||
include( setup.cmake )
|
||||
set( SRCS
|
||||
main.c
|
||||
${COMPILER_SRCS}
|
||||
${SCAN_SRCS}
|
||||
${MACRO_SRCS}
|
||||
${OUTPUT_SRCS}
|
||||
${DEBUG_SRCS}
|
||||
)
|
||||
|
||||
#| Directories to include by default
|
||||
include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Module Compatibility Check
|
||||
#
|
||||
|
||||
#| Check for whether the set modules are compatible with the specified compiler family
|
||||
ModuleCompatibility( ${ScanModulePath} ${ScanModuleCompatibility} )
|
||||
ModuleCompatibility( ${MacroModulePath} ${MacroModuleCompatibility} )
|
||||
ModuleCompatibility( ${OutputModulePath} ${OutputModuleCompatibility} )
|
||||
ModuleCompatibility( ${DebugModulePath} ${DebugModuleCompatibility} )
|
||||
|
||||
|
||||
|
||||
###
|
||||
# CMake Module Checking
|
||||
#
|
||||
find_package( Git REQUIRED )
|
||||
|
||||
|
||||
###
|
||||
# Build Targets
|
||||
#
|
||||
|
||||
#| Create the .ELF file
|
||||
set( TARGET_ELF ${TARGET}.elf )
|
||||
add_executable( ${TARGET_ELF} ${SRCS} )
|
||||
|
||||
|
||||
#| .ELF Properties
|
||||
set_target_properties( ${TARGET_ELF} PROPERTIES
|
||||
LINK_FLAGS ${LINKER_FLAGS}
|
||||
SUFFIX "" # XXX Force Windows to keep the .exe off
|
||||
)
|
||||
|
||||
|
||||
#| Convert the .ELF into a .HEX to load onto the Teensy
|
||||
set( TARGET_HEX ${TARGET}.hex )
|
||||
add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} ${HEX_FLAGS} ${TARGET_ELF} ${TARGET_HEX}
|
||||
COMMENT "Creating load file for Flash: ${TARGET_HEX}"
|
||||
)
|
||||
|
||||
|
||||
#| Generate the Extended .LSS
|
||||
set( TARGET_LSS ${TARGET}.lss )
|
||||
add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
|
||||
COMMAND ${CMAKE_OBJDUMP} ${LSS_FLAGS} ${TARGET_ELF} > ${TARGET_LSS}
|
||||
COMMENT "Creating Extended Listing: ${TARGET_LSS}"
|
||||
)
|
||||
|
||||
|
||||
#| Generate the Symbol Table .SYM
|
||||
set( TARGET_SYM ${TARGET}.sym )
|
||||
add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
|
||||
COMMAND ${CMAKE_NM} -n ${TARGET_ELF} > ${TARGET_SYM}
|
||||
COMMENT "Creating Symbol Table: ${TARGET_SYM}"
|
||||
)
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Size Information
|
||||
#
|
||||
|
||||
#| After Changes Size Information
|
||||
#| TODO Do lookup on Flash and RAM sizes and do % used
|
||||
add_custom_target( SizeAfter ALL
|
||||
COMMAND ${CMAKE_SIZE} --target=${FORMAT} ${TARGET_HEX} ${TARGET_ELF}
|
||||
DEPENDS ${TARGET_ELF}
|
||||
COMMENT "Size after generation\n\tFlash Usage: data (hex)\n\t RAM Usage: data (elf)"
|
||||
)
|
||||
|
||||
|
||||
|
||||
###
|
||||
# Setup Loader Script and Program
|
||||
#
|
||||
|
||||
|
||||
#| Provides the user with the correct teensy-loader-cli command for the built .HEX file
|
||||
#| Windows
|
||||
if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
|
||||
configure_file( LoadFile/winload load NEWLINE_STYLE UNIX )
|
||||
#| Default
|
||||
else()
|
||||
configure_file( LoadFile/load load NEWLINE_STYLE UNIX )
|
||||
endif()
|
||||
include( Lib/CMake/modules.cmake )
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue