X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Lib%2FCMake%2Fmodules.cmake;h=02ecbe8e4c69c59ca7a4aad5e2ce3393cc44be77;hb=88ace02e517950f3ec3eb71d9d0b7b51939d46f7;hp=35b3e2b3853a50dcaf3ac6bf9eac75469c5c50df;hpb=54c11ebd0785676b078e85cf3f9f57e72c1e5dc3;p=kiibohd-controller.git diff --git a/Lib/CMake/modules.cmake b/Lib/CMake/modules.cmake index 35b3e2b..02ecbe8 100644 --- a/Lib/CMake/modules.cmake +++ b/Lib/CMake/modules.cmake @@ -24,6 +24,7 @@ endif () + ### # Path Setup # @@ -41,36 +42,16 @@ set( HEAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}" ) # Module Check Function # -#| Usage: -#| PathPrepend( ModulePath ) -#| Uses the ${COMPILER_FAMILY} variable -function( ModuleCompatibility ModulePath ) - foreach( mod_var ${ARGN} ) +function ( ModuleCompatibility ModulePath ) + foreach ( mod_var ${ARGN} ) if ( ${mod_var} STREQUAL ${COMPILER_FAMILY} ) # Module found, no need to scan further return() endif () - endforeach() + endforeach () - message( FATAL_ERROR "${ModulePath} does not support the ${COMPILER_FAMILY} family..." ) -endfunction() - - - -### -# Module Configuration -# - -#| Additional options, usually define settings -add_definitions() - -#| Include path for each of the modules -add_definitions( - -I${HEAD_DIR}/${ScanModulePath} - -I${HEAD_DIR}/${MacroModulePath} - -I${HEAD_DIR}/${OutputModulePath} - -I${HEAD_DIR}/${DebugModulePath} -) + message ( FATAL_ERROR "${ModulePath} does not support the ${COMPILER_FAMILY} family..." ) +endfunction () @@ -81,51 +62,86 @@ add_definitions( #| Go through lists of sources and append paths #| Usage: #| PathPrepend( OutputListOfSources ) -macro( PathPrepend Output SourcesPath ) - unset( tmpSource ) +macro ( PathPrepend Output SourcesPath ) + unset ( tmpSource ) # Loop through items - foreach( item ${ARGN} ) + foreach ( item ${ARGN} ) # Set the path - set( tmpSource ${tmpSource} "${SourcesPath}/${item}" ) - endforeach() + set ( tmpSource ${tmpSource} "${SourcesPath}/${item}" ) + endforeach () # Finalize by writing the new list back over the old one - set( ${Output} ${tmpSource} ) -endmacro() + set ( ${Output} ${tmpSource} ) +endmacro () + + + +### +# Add Module Macro +# +# Optional Arg 1: Main Module Check, set to True/1 if adding a main module + +function ( AddModule ModuleType ModuleName ) + # Module path + set ( ModulePath ${ModuleType}/${ModuleName} ) + set ( ModuleFullPath ${HEAD_DIR}/${ModuleType}/${ModuleName} ) + + # Include setup.cmake file + include ( ${ModuleFullPath}/setup.cmake ) + + # Check if this is a main module add + foreach ( extraArg ${ARGN} ) + # Make sure this isn't a submodule + if ( DEFINED SubModule ) + message ( FATAL_ERROR + "The '${ModuleName}' module is not a stand-alone module, and requires further setup." + ) + endif () + endforeach () + + # PathPrepend to give proper paths to each of the source files + PathPrepend ( Module_SRCS ${ModulePath} ${Module_SRCS} ) + # Check the current scope to see if a sub-module added some source files + set ( Module_SRCS ${${ModuleType}_SRCS} ${Module_SRCS} ) -#| Scan Module -include ( "${ScanModulePath}/setup.cmake" ) -PathPrepend( SCAN_SRCS ${ScanModulePath} ${SCAN_SRCS} ) + # Append each of the sources to each type of module srcs list + set ( ${ModuleType}_SRCS ${Module_SRCS} ) -#| Macro Module -include ( "${MacroModulePath}/setup.cmake" ) -PathPrepend( MACRO_SRCS ${MacroModulePath} ${MACRO_SRCS} ) + # Add .h files + add_definitions ( -I${ModuleFullPath} ) -#| Output Module -include ( "${OutputModulePath}/setup.cmake" ) -PathPrepend( OUTPUT_SRCS ${OutputModulePath} ${OUTPUT_SRCS} ) + # Check module compatibility + ModuleCompatibility( ${ModulePath} ${ModuleCompatibility} ) + + # Check if this is a main module add + foreach ( extraArg ${ARGN} ) + # Display detected source files + if ( NOT DEFINED SubModule ) + message ( STATUS "Detected ${ModuleType} Module Source Files:" ) + message ( "${${ModuleType}_SRCS}" ) + endif () + endforeach () + + # Finally, add the sources to the parent scope (i.e. return) + set ( ${ModuleType}_SRCS ${${ModuleType}_SRCS} PARENT_SCOPE ) +endfunction () -#| Debugging Module -include ( "${DebugModulePath}/setup.cmake" ) -PathPrepend( DEBUG_SRCS ${DebugModulePath} ${DEBUG_SRCS} ) +#| Add main modules +AddModule ( Scan ${ScanModule} 1 ) +AddModule ( Macro ${MacroModule} 1 ) +AddModule ( Output ${OutputModule} 1 ) +AddModule ( Debug ${DebugModule} 1 ) -#| Default Map -# TODO Add support for different defaultMaps -configure_file( "${ScanModulePath}/defaultMap.h" defaultMap.h ) -#| Print list of all module sources -message( STATUS "Detected Scan Module Source Files:" ) -message( "${SCAN_SRCS}" ) -message( STATUS "Detected Macro Module Source Files:" ) -message( "${MACRO_SRCS}" ) -message( STATUS "Detected Output Module Source Files:" ) -message( "${OUTPUT_SRCS}" ) -message( STATUS "Detected Debug Module Source Files:" ) -message( "${DEBUG_SRCS}" ) +### +# CMake Module Checking +# +find_package ( Git REQUIRED ) +find_package ( Ctags ) # Optional @@ -142,7 +158,7 @@ set( MANUFACTURER "Kiibohd" ) #| Modified #| Takes a bit of work to extract the "M " using CMake, and not using it if there are no modifications -execute_process( COMMAND git status -s -uno --porcelain +execute_process( COMMAND ${GIT_EXECUTABLE} status -s -uno --porcelain WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Modified_INFO ERROR_QUIET @@ -156,7 +172,7 @@ if ( ${Git_Modified_LENGTH} GREATER 2 ) endif () #| Branch -execute_process( COMMAND git rev-parse --abbrev-ref HEAD +execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Branch_INFO ERROR_QUIET @@ -164,7 +180,7 @@ execute_process( COMMAND git rev-parse --abbrev-ref HEAD ) #| Date -execute_process( COMMAND git show -s --format=%ci +execute_process( COMMAND ${GIT_EXECUTABLE} show -s --format=%ci WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Date_INFO ERROR_QUIET @@ -172,7 +188,7 @@ execute_process( COMMAND git show -s --format=%ci ) #| Commit Author and Email -execute_process( COMMAND git show -s --format="%cn <%ce>" +execute_process( COMMAND ${GIT_EXECUTABLE} show -s --format="%cn <%ce>" WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Commit_Author ERROR_QUIET @@ -180,7 +196,7 @@ execute_process( COMMAND git show -s --format="%cn <%ce>" ) #| Commit Revision -execute_process( COMMAND git show -s --format=%H +execute_process( COMMAND ${GIT_EXECUTABLE} show -s --format=%H WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Commit_Revision ERROR_QUIET @@ -188,7 +204,7 @@ execute_process( COMMAND git show -s --format=%H ) #| Origin URL -execute_process( COMMAND git config --get remote.origin.url +execute_process( COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE Git_Origin_URL ERROR_QUIET @@ -217,10 +233,10 @@ configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Lib/_buildvars.h buildvars.h ) set( SRCS ${MAIN_SRCS} ${COMPILER_SRCS} - ${SCAN_SRCS} - ${MACRO_SRCS} - ${OUTPUT_SRCS} - ${DEBUG_SRCS} + ${Scan_SRCS} + ${Macro_SRCS} + ${Output_SRCS} + ${Debug_SRCS} ) #| Directories to include by default @@ -228,25 +244,6 @@ 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 ) -find_package( Ctags ) # Optional - - ### # ctag Generation # @@ -268,89 +265,3 @@ if( CTAGS_EXECUTABLE ) ) endif() - - -### -# 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 .bin to load onto the McHCK -set( TARGET_BIN ${TARGET}.bin.dfu ) -add_custom_command( TARGET ${TARGET_ELF} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ${BIN_FLAGS} ${TARGET_ELF} ${TARGET_BIN} - COMMENT "Creating binary file to load: ${TARGET_BIN}" -) - - -#| Convert the .ELF into a .HEX to load onto the Teensy -set( TARGET_HEX ${TARGET}.teensy.hex ) -add_custom_command( TARGET ${TARGET_ELF} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ${HEX_FLAGS} ${TARGET_ELF} ${TARGET_HEX} - COMMENT "Creating iHex file to load: ${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}" -) - - -#| Compiler Selection Record -add_custom_command( TARGET ${TARGET_ELF} POST_BUILD - COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/writer compiler ${COMPILER_FAMILY} -) - - - -### -# Size Information -# - -#| After Changes Size Information -add_custom_target( SizeAfter ALL - COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/sizeCalculator ${CMAKE_SIZE} ihex ${TARGET_ELF} ${SIZE_RAM} " SRAM" - COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/sizeCalculator ${CMAKE_SIZE} ihex ${TARGET_HEX} ${SIZE_FLASH} "Flash" - DEPENDS ${TARGET_ELF} - COMMENT "Chip usage for ${CHIP}" -) - - - -### -# 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() - -