SCons_build.py - Build all libraries and examples¶
Given a build environment, this file performs specific builds using the PIC24 library. It should be called from an SCons script that exports:
- env: the build environment to use
- buildTargets: a list of strings specifying what to build (see if statements toward the end of this file).
This file delegates to SConscript.py - Build source files from template to build all templates.
 
import os
Import('buildTargets env bin2hex linker_side_effect')
## Inform SCons about the dependencies in the template-based files
SConscript('templates/SConscript.py', 'env')
 
Common sources used for the PIC24 support library¶
PIC24SupportLibSources = [
  'lib/src/dataXfer.c',
  'lib/src/dataXferImpl.c',
  'lib/src/pic24_adc.c',
  'lib/src/pic24_clockfreq.c',
  'lib/src/pic24_configbits.c',
  'lib/src/pic24_ecan.c',
  'lib/src/pic24_flash.c',
  'lib/src/pic24_i2c.c',
  'lib/src/pic24_serial.c',
  'lib/src/pic24_spi.c',
  'lib/src/pic24_timer.c',
  'lib/src/pic24_uart.c',
  'lib/src/pic24_util.c' ]
 
Functions used to build the library¶
This function builds a program which includes the PIC24 library.
def buildProgramWithCommonSources(
A list of source files to be built into one program.
  sourceFileList,
A list of source files upon which all sources in the sourceFileList depend. Wildcards are not supported.
  commonSources,
An Environment in which to build these sources.
  buildEnvironment,
A string to serve as an alias for this build. commonSources,
  aliasString):
  be = buildEnvironment
  p = be.Program(sourceFileList + commonSources)
  linker_side_effect(be, p)
Pick the name of the target to be the first c file in the list
  bin2hex(sourceFileList[0], be, aliasString)
 
This function takes a list of source files (including wildcards), adds the PIC24 common sources to each item, then uses Program to build each item.
def buildWithCommonSources(
A list of source files (which may include wildcards) to be built.
  sourceFileList,
A list of source files upon which all sources in the sourceFileList depend. Wildcards are not supported.
  commonSources,
An Environment in which to build these sources.
  buildEnvironment,
A exceptionFileName={key=value pairs used to create the custom environment correpsonding to the exceptionFile} dict
  exceptionDict,
A string to serve as an alias for this set of builds.
  aliasString):
  for sourceFileGlob in sourceFileList:
    for sourceFile in Glob(sourceFileGlob, True, True, True):
See if this is an exception
        if sourceFile in exceptionDict:
Yes, so modify environment with dict of changes.
          be = buildEnvironment.Clone()
          flags = exceptionDict[sourceFile]
##          print flags
##          be.MergeFlags(flags) # produces weird
errors, so hand-code a simple alternative TODO: This overwrites flags, which is a BAD thing
          for a in flags:
            be[a] = flags[a]
        else:
No, just use the existing environment
          be = buildEnvironment
        buildProgramWithCommonSources([sourceFile], commonSources, be,
          aliasString)
 
 
Compile the support library into objects for the default environment.
PIC24SupportLibObjects = env.Object(PIC24SupportLibSources)
 
Definition of targets¶
if 'reset' in buildTargets:
  buildWithCommonSources(['chap08/reset.c'], PIC24SupportLibObjects, env, {}, 'reset')
if 'chap08' in buildTargets:
  buildWithCommonSources(['chap08/*.c'], PIC24SupportLibObjects, env, {}, 'chap08')
if 'chap09' in buildTargets:
  buildWithCommonSources(['chap09/*.c'], PIC24SupportLibObjects, env, {}, 'chap09')
if 'chap10' in buildTargets:
  buildWithCommonSources(['chap10/*.c'],
    PIC24SupportLibObjects, env,
    {'chap10\\reverse_string.c'  : { 'CPPDEFINES': 'UART1_RX_INTERRUPT'},
     'chap10\\reverse_string1.c' : { 'CPPDEFINES': ['UART1_RX_INTERRUPT', 'UART1_TX_INTERRUPT']}},
    'chap10')
if 'chap11' in buildTargets:
  buildWithCommonSources(['chap11/*.c'], PIC24SupportLibObjects, env, {}, 'chap11')
if 'chap12' in buildTargets:
  buildWithCommonSources(['chap12/*.c'], PIC24SupportLibSources, env, {}, 'chap12')
if 'chap13' in buildTargets:
  buildWithCommonSources(['chap13/*.c'], PIC24SupportLibObjects, env,
  {'chap13\\i2c_multmaster_rstring.c' :  { 'CPPDEFINES': 'CPU_ID=1' },
   'chap13\\i2c_multmaster_rstring1.c' : { 'CPPDEFINES': 'CPU_ID=2' }},
  'chap13')
if 'chap15' in buildTargets:
Currently, no files.
  pass
if 'explorer' in buildTargets:
  buildWithCommonSources(['explorer16_100p/*.c'], PIC24SupportLibObjects, env, {}, 'explorer')