- Added AddModule CMake function which simplifies specifying module requirements
###| 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
#
# 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
)
###| 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
#
###
-# 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
)
###| 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
#
# 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
)
+++ /dev/null
-/* 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
-
+++ /dev/null
-/* 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
-
+++ /dev/null
-###| 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
-)
-
###| 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
#
# 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
)
+
###
# Path Setup
#
# Module Check Function
#
-#| Usage:
-#| PathPrepend( ModulePath <ListOfFamiliesSupported> )
-#| 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()
-
- message( FATAL_ERROR "${ModulePath} does not support the ${COMPILER_FAMILY} family..." )
-endfunction()
-
-
-
-###
-# Module Configuration
-#
+ endforeach ()
-#| 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 ()
#| Go through lists of sources and append paths
#| Usage:
#| PathPrepend( OutputListOfSources <Prepend Path> <InputListOfSources> )
-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
+
+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} )
+
+ # Append each of the sources to each type of module srcs list
+ set ( ${ModuleType}_SRCS ${Module_SRCS} )
-#| Output Module
-include ( "${OutputModulePath}/setup.cmake" )
-PathPrepend( OUTPUT_SRCS ${OutputModulePath} ${OUTPUT_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 ()
-#| Debugging Module
-include ( "${DebugModulePath}/setup.cmake" )
-PathPrepend( DEBUG_SRCS ${DebugModulePath} ${DEBUG_SRCS} )
+ # 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
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
-###
-# 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
#
###| 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
#
# Module C files
#
-set( MACRO_SRCS
+set ( Module_SRCS
macro.c
)
-###
-# Module Specific Options
-#
-
-
###
# Compiler Family Compatibility
#
-set( MacroModuleCompatibility
+set ( ModuleCompatibility
arm
avr
)
###| 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
#
# Module C files
#
-
#| AVR Compiler
if ( ${COMPILER_FAMILY} MATCHES "avr" )
- set( OUTPUT_SRCS
+ set ( Module_SRCS
output_com.c
avr/usb_keyboard_serial.c
)
#| ARM Compiler
elseif ( ${COMPILER_FAMILY} MATCHES "arm" )
- set( OUTPUT_SRCS
+ set ( Module_SRCS
output_com.c
arm/usb_desc.c
arm/usb_dev.c
endif ( ${COMPILER_FAMILY} MATCHES "avr" )
-###
-# Module Specific Options
-#
-
###
# Compiler Family Compatibility
#
-set( OutputModuleCompatibility
+set( ModuleCompatibility
arm
avr
)
-/* 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
###| 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
#
# Module C files
#
-
#| AVR Compiler
if ( ${COMPILER_FAMILY} MATCHES "avr" )
- set( OUTPUT_SRCS
+ set ( Module_SRCS
output_com.c
avr/uart_serial.c
)
#| ARM Compiler
elseif ( ${COMPILER_FAMILY} MATCHES "arm" )
- set( OUTPUT_SRCS
+ set ( Module_SRCS
output_com.c
arm/uart_serial.c
)
endif ()
-###
-# Module Specific Options
-#
-
###
# Compiler Family Compatibility
#
-set( OutputModuleCompatibility
+set( ModuleCompatibility
arm
# avr # TODO
)
###| 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
#
###
-# 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
)
###| 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
#
###
# Module C files
#
-
-set( SCAN_SRCS
+set ( Module_SRCS
scan_loop.c
)
-###
-# Module Specific Options
-#
-
-
###
# Compiler Family Compatibility
#
-set( ScanModuleCompatibility
+set ( ModuleCompatibility
avr
)
###
-# 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
)
###| 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
)