From 1e9f55a0bfd7f8253c2869d095e42a497ba3b3c2 Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Sun, 25 Jan 2015 17:53:48 -0800 Subject: [PATCH] Updating setup.cmake files to use Module hierarchy implicitly - Added AddModule CMake function which simplifies specifying module requirements --- Debug/cli/setup.cmake | 22 +---- Debug/full/setup.cmake | 25 ++---- Debug/led/setup.cmake | 17 +--- Debug/off/led.h | 30 ------- Debug/off/print.h | 70 --------------- Debug/off/setup.cmake | 28 ------ Debug/print/setup.cmake | 17 +--- Lib/CMake/modules.cmake | 143 ++++++++++++++++--------------- Macro/PartialMap/setup.cmake | 11 +-- Output/pjrcUSB/setup.cmake | 13 +-- Output/uartOut/arm/uart_serial.c | 2 +- Output/uartOut/setup.cmake | 13 +-- Output/usbMuxUart/setup.cmake | 35 ++------ Scan/DPH/setup.cmake | 12 +-- Scan/MD1/setup.cmake | 16 ++-- Scan/MatrixARM/setup.cmake | 20 ++--- 16 files changed, 125 insertions(+), 349 deletions(-) delete mode 100644 Debug/off/led.h delete mode 100644 Debug/off/print.h delete mode 100644 Debug/off/setup.cmake diff --git a/Debug/cli/setup.cmake b/Debug/cli/setup.cmake index 82ec440..989d06f 100644 --- a/Debug/cli/setup.cmake +++ b/Debug/cli/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Debug Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,31 +11,15 @@ # Module C files # -set( DEBUG_SRCS +set ( Module_SRCS cli.c ) -### -# Setup File Dependencies -# - - -### -# Module Specific Options -# - - -### -# Just in case, you only want this module and are using others as well -# -add_definitions( -I${HEAD_DIR}/Debug/off ) - - ### # Compiler Family Compatibility # -set( DebugModuleCompatibility +set ( ModuleCompatibility arm avr ) diff --git a/Debug/full/setup.cmake b/Debug/full/setup.cmake index 46c8b4e..2fe8691 100644 --- a/Debug/full/setup.cmake +++ b/Debug/full/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Debug Module |### # -# Written by Jacob Alexander in 2011-2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2011-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -8,31 +8,18 @@ ### -# Module C files +# Required Submodules # -#| XXX Requires the ../ due to how the paths are constructed -set( DEBUG_SRCS - ../cli/cli.c - ../led/led.c - ../print/print.c -) - - -### -# Module Specific Options -# -add_definitions( - -I${HEAD_DIR}/Debug/cli - -I${HEAD_DIR}/Debug/led - -I${HEAD_DIR}/Debug/print -) +AddModule ( Debug cli ) +AddModule ( Debug led ) +AddModule ( Debug print ) ### # Compiler Family Compatibility # -set( DebugModuleCompatibility +set ( ModuleCompatibility arm avr ) diff --git a/Debug/led/setup.cmake b/Debug/led/setup.cmake index 9e218b5..b6514b4 100644 --- a/Debug/led/setup.cmake +++ b/Debug/led/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Debug Module |### # -# Written by Jacob Alexander in 2011,2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2011-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,26 +11,15 @@ # Module C files # -set( DEBUG_SRCS +set ( Module_SRCS led.c ) -### -# Module Specific Options -# - - -### -# Just in case, you only want this module and are using others as well -# -add_definitions( -I${HEAD_DIR}/Debug/off ) - - ### # Compiler Family Compatibility # -set( DebugModuleCompatibility +set ( ModuleCompatibility arm avr ) diff --git a/Debug/off/led.h b/Debug/off/led.h deleted file mode 100644 index 81c317b..0000000 --- a/Debug/off/led.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011 by Jacob Alexander - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef __led_h -#define __led_h - -// ----- Disabler Defines ----- -#define init_errorLED() -#define errorLED(on) - -#endif - diff --git a/Debug/off/print.h b/Debug/off/print.h deleted file mode 100644 index 0c828c0..0000000 --- a/Debug/off/print.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2011 by Jacob Alexander - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef print_h__ -#define print_h__ - -// ----- Disabler Defines ----- - -#define dPrint(c) -#define dPrintStr(c) -#define dPrintStrs(...) -#define dPrintStrNL(c) -#define dPrintStrsNL(...) - -// Special Msg Constructs (Uses VT100 tags) -#define dPrintMsg(colour_code_str,msg,...) -#define printMsg(colour_code_str,msg,str) - -// Info Messages -#define info_dPrint(...) -#define info_print(str) - -// Warning Messages -#define warn_dPrint(...) -#define warn_print(str) - -// Error Messages -#define erro_dPrint(...) -#define erro_print(str) - -// Debug Messages -#define dbug_dPrint(...) -#define dbug_print(str) - -// Static String Printing -#define print(s) _print(PSTR(s)) - -// Output Functions -#define _print(s) -#define usb_debug_putstr(s) -#define usb_debug_putstrs(s, ...) - -// String Functions -#define hexToStr(hex, out) -#define int8ToStr(in, out) -#define int16ToStr(in, out) -#define hexToStr_op(in, out, op) -#define revsStr(in) -#define lenStr(in) - -#endif - diff --git a/Debug/off/setup.cmake b/Debug/off/setup.cmake deleted file mode 100644 index 56d213f..0000000 --- a/Debug/off/setup.cmake +++ /dev/null @@ -1,28 +0,0 @@ -###| CMake Kiibohd Controller Debug Module |### -# -# Written by Jacob Alexander in 2011 for the Kiibohd Controller -# -# Released into the Public Domain -# -### - - -### -# Module C files -# -#| None! - - -### -# Module Specific Options -# - - -### -# Compiler Family Compatibility -# -set( DebugModuleCompatibility - arm - avr -) - diff --git a/Debug/print/setup.cmake b/Debug/print/setup.cmake index d52b964..536088c 100644 --- a/Debug/print/setup.cmake +++ b/Debug/print/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Debug Module |### # -# Written by Jacob Alexander in 2011,2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2011-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,26 +11,15 @@ # Module C files # -set( DEBUG_SRCS +set ( Module_SRCS print.c ) -### -# Module Specific Options -# - - -### -# Just in case, you only want this module and are using others as well -# -add_definitions( -I${HEAD_DIR}/Debug/off ) - - ### # Compiler Family Compatibility # -set( DebugModuleCompatibility +set ( ModuleCompatibility arm avr ) diff --git a/Lib/CMake/modules.cmake b/Lib/CMake/modules.cmake index fc8685b..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,54 +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 () -#| Scan Module -include ( "${ScanModulePath}/setup.cmake" ) -PathPrepend( SCAN_SRCS ${ScanModulePath} ${SCAN_SRCS} ) -#| Macro Module -include ( "${MacroModulePath}/setup.cmake" ) -PathPrepend( MACRO_SRCS ${MacroModulePath} ${MACRO_SRCS} ) +### +# Add Module Macro +# +# Optional Arg 1: Main Module Check, set to True/1 if adding a main module -#| Output Module -include ( "${OutputModulePath}/setup.cmake" ) -PathPrepend( OUTPUT_SRCS ${OutputModulePath} ${OUTPUT_SRCS} ) +function ( AddModule ModuleType ModuleName ) + # Module path + set ( ModulePath ${ModuleType}/${ModuleName} ) + set ( ModuleFullPath ${HEAD_DIR}/${ModuleType}/${ModuleName} ) -#| Debugging Module -include ( "${DebugModulePath}/setup.cmake" ) -PathPrepend( DEBUG_SRCS ${DebugModulePath} ${DEBUG_SRCS} ) + # 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} ) + + # Append each of the sources to each type of module srcs list + set ( ${ModuleType}_SRCS ${Module_SRCS} ) + + # Add .h files + add_definitions ( -I${ModuleFullPath} ) + + # 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 () -#| 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}" ) +#| Add main modules +AddModule ( Scan ${ScanModule} 1 ) +AddModule ( Macro ${MacroModule} 1 ) +AddModule ( Output ${OutputModule} 1 ) +AddModule ( Debug ${DebugModule} 1 ) ### # CMake Module Checking # -find_package( Git REQUIRED ) -find_package( Ctags ) # Optional +find_package ( Git REQUIRED ) +find_package ( Ctags ) # Optional @@ -220,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 @@ -231,18 +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} ) - - - ### # ctag Generation # diff --git a/Macro/PartialMap/setup.cmake b/Macro/PartialMap/setup.cmake index 9b2a3a7..7f72689 100644 --- a/Macro/PartialMap/setup.cmake +++ b/Macro/PartialMap/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Macro Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,20 +11,15 @@ # Module C files # -set( MACRO_SRCS +set ( Module_SRCS macro.c ) -### -# Module Specific Options -# - - ### # Compiler Family Compatibility # -set( MacroModuleCompatibility +set ( ModuleCompatibility arm avr ) diff --git a/Output/pjrcUSB/setup.cmake b/Output/pjrcUSB/setup.cmake index d982976..519c4a8 100644 --- a/Output/pjrcUSB/setup.cmake +++ b/Output/pjrcUSB/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller USB Module |### # -# Written by Jacob Alexander in 2011-2013 for the Kiibohd Controller +# Written by Jacob Alexander in 2011-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,11 +11,10 @@ # Module C files # - #| AVR Compiler if ( ${COMPILER_FAMILY} MATCHES "avr" ) - set( OUTPUT_SRCS + set ( Module_SRCS output_com.c avr/usb_keyboard_serial.c ) @@ -23,7 +22,7 @@ if ( ${COMPILER_FAMILY} MATCHES "avr" ) #| ARM Compiler elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) - set( OUTPUT_SRCS + set ( Module_SRCS output_com.c arm/usb_desc.c arm/usb_dev.c @@ -35,14 +34,10 @@ elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) endif ( ${COMPILER_FAMILY} MATCHES "avr" ) -### -# Module Specific Options -# - ### # Compiler Family Compatibility # -set( OutputModuleCompatibility +set( ModuleCompatibility arm avr ) diff --git a/Output/uartOut/arm/uart_serial.c b/Output/uartOut/arm/uart_serial.c index b947967..e92bbd1 100644 --- a/Output/uartOut/arm/uart_serial.c +++ b/Output/uartOut/arm/uart_serial.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 by Jacob Alexander +/* Copyright (C) 2014-2015 by Jacob Alexander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/Output/uartOut/setup.cmake b/Output/uartOut/setup.cmake index 66eec96..17cc278 100644 --- a/Output/uartOut/setup.cmake +++ b/Output/uartOut/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller UART Output Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,11 +11,10 @@ # Module C files # - #| AVR Compiler if ( ${COMPILER_FAMILY} MATCHES "avr" ) - set( OUTPUT_SRCS + set ( Module_SRCS output_com.c avr/uart_serial.c ) @@ -23,7 +22,7 @@ if ( ${COMPILER_FAMILY} MATCHES "avr" ) #| ARM Compiler elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) - set( OUTPUT_SRCS + set ( Module_SRCS output_com.c arm/uart_serial.c ) @@ -31,14 +30,10 @@ elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) endif () -### -# Module Specific Options -# - ### # Compiler Family Compatibility # -set( OutputModuleCompatibility +set( ModuleCompatibility arm # avr # TODO ) diff --git a/Output/usbMuxUart/setup.cmake b/Output/usbMuxUart/setup.cmake index e435417..32dfecc 100644 --- a/Output/usbMuxUart/setup.cmake +++ b/Output/usbMuxUart/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Muxed UART and USB Output Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -8,43 +8,26 @@ ### -# Module C files +# Required Submodules # - -#| AVR Compiler -if ( ${COMPILER_FAMILY} MATCHES "avr" ) - - set( OUTPUT_SRCS - ) - -#| ARM Compiler -elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) - - set( OUTPUT_SRCS - output_com.c - ../pjrcUSB/arm/usb_desc.c - ../pjrcUSB/arm/usb_dev.c - ../pjrcUSB/arm/usb_keyboard.c - ../pjrcUSB/arm/usb_mem.c - ../pjrcUSB/arm/usb_serial.c - ../uartOut/arm/uart_serial.c - ) - -endif () - +AddModule ( Output pjrcUSB ) +AddModule ( Output uartOut ) ### -# Module Specific Options +# Module C files # +set( Module_SRCS + output_com.c +) ### # Compiler Family Compatibility # -set( OutputModuleCompatibility +set( ModuleCompatibility arm # avr # TODO ) diff --git a/Scan/DPH/setup.cmake b/Scan/DPH/setup.cmake index bf46c44..43a3a72 100644 --- a/Scan/DPH/setup.cmake +++ b/Scan/DPH/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Scan Module |### # -# Written by Jacob Alexander in 2013-2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2013-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -10,21 +10,15 @@ ### # Module C files # - -set( SCAN_SRCS +set ( Module_SRCS scan_loop.c ) -### -# Module Specific Options -# - - ### # Compiler Family Compatibility # -set( ScanModuleCompatibility +set ( ModuleCompatibility avr ) diff --git a/Scan/MD1/setup.cmake b/Scan/MD1/setup.cmake index 3b6ea0c..d40a338 100644 --- a/Scan/MD1/setup.cmake +++ b/Scan/MD1/setup.cmake @@ -8,27 +8,25 @@ ### -# Module C files +# Required Submodules # -set( SCAN_SRCS - scan_loop.c - ../MatrixARM/matrix_scan.c -) +AddModule ( Scan MatrixARM ) ### -# Module Specific Options +# Module C files # -add_definitions( - -I${HEAD_DIR}/Scan/MatrixARM + +set ( Module_SRCS + scan_loop.c ) ### # Compiler Family Compatibility # -set( ScanModuleCompatibility +set ( ModuleCompatibility arm ) diff --git a/Scan/MatrixARM/setup.cmake b/Scan/MatrixARM/setup.cmake index 631f6d6..f8feea7 100644 --- a/Scan/MatrixARM/setup.cmake +++ b/Scan/MatrixARM/setup.cmake @@ -1,36 +1,30 @@ ###| CMake Kiibohd Controller Scan Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # ### + ### -# Warning, that this module is not meant to be built stand-alone +# Sub-module flag, cannot be included stand-alone # -message( FATAL_ERROR -"The 'MatrixARM' module is not a stand-alone module, and requires further setup." -) +set ( SubModule 1 ) + ### # Module C files # - -set( SCAN_SRCS +set ( Module_SRCS matrix_scan.c ) -### -# Module Specific Options -# - - ### # Compiler Family Compatibility # -set( ScanModuleCompatibility +set ( ModuleCompatibility arm )