Archived
1
0
This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
controller/CMakeLists.txt
2014-03-22 14:09:01 -07:00

162 lines
3.4 KiB
CMake

###| CMAKE Kiibohd Controller |###
#
# Jacob Alexander 2011-2013
# Due to this file's usefulness:
#
# Released into the Public Domain
#
###
#| Windows / Cygwin Compatibility options
set( CMAKE_LEGACY_CYGWIN_WIN32 0 )
set( CMAKE_USE_RELATIVE_PATHS 1 )
#| Add Dependency Macro
include( AddFileDependencies )
###
# Compiler Family
#
#| 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
set( COMPILER_FAMILY "arm" )
#set( COMPILER_FAMILY "avr" )
message( STATUS "Compiler Family:" )
message( "${COMPILER_FAMILY}" )
#| Load the compiler family specific configurations
include( ${COMPILER_FAMILY}.cmake )
###
# Project Description
#
#| Project
project( kiibohd_controller )
#| Target Name (output name)
set( TARGET kiibohd )
#| General Settings
cmake_minimum_required( VERSION 2.8 )
###
# Source Defines
#
#| 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} )
###
# 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 ${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 ${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 ${NM} -n ${TARGET_ELF} > ${TARGET_SYM}
COMMENT "Creating Symbol Table: ${TARGET_SYM}"
)
###
# Size Information
#
#| After Changes Size Information
add_custom_target( SizeAfter ALL ${SIZE} --target=${FORMAT} ${TARGET_HEX} ${TARGET_ELF}
DEPENDS ${TARGET_ELF}
COMMENT "Size after generation:"
)
###
# Setup Loader Script
#
#| Provides the user with the correct teensy-loader-cli command for the built .HEX file
#| teensy-loader-cli must be in the user's path
if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
configure_file( LoadFile/bash load )
endif()
#| TODO Windows
if( ${CMAKE_SYSTEM_NAME} MATCHES "Windows" )
configure_file( LoadFile/bash load )
endif()