initial commit
This commit is contained in:
		
						commit
						7df819dfee
					
				
					 13 changed files with 1558 additions and 0 deletions
				
			
		
							
								
								
									
										375
									
								
								myapps/blinky-old-32mg/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								myapps/blinky-old-32mg/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,375 @@ | |||
| # boilermake: A reusable, but flexible, boilerplate Makefile.
 | ||||
| #
 | ||||
| # Copyright 2008, 2009, 2010 Dan Moulding, Alan T. DeKok
 | ||||
| #
 | ||||
| # This program is free software: you can redistribute it and/or modify
 | ||||
| # it under the terms of the GNU General Public License as published by
 | ||||
| # the Free Software Foundation, either version 3 of the License, or
 | ||||
| # (at your option) any later version.
 | ||||
| #
 | ||||
| # This program is distributed in the hope that it will be useful,
 | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||
| # GNU General Public License for more details.
 | ||||
| #
 | ||||
| # You should have received a copy of the GNU General Public License
 | ||||
| # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| 
 | ||||
| # Caution: Don't edit this Makefile! Create your own main.mk and other
 | ||||
| #          submakefiles, which will be included by this Makefile.
 | ||||
| #          Only edit this if you need to modify boilermake's behavior (fix
 | ||||
| #          bugs, add features, etc).
 | ||||
| 
 | ||||
| # Note: Parameterized "functions" in this makefile that are marked with
 | ||||
| #       "USE WITH EVAL" are only useful in conjuction with eval. This is
 | ||||
| #       because those functions result in a block of Makefile syntax that must
 | ||||
| #       be evaluated after expansion. Since they must be used with eval, most
 | ||||
| #       instances of "$" within them need to be escaped with a second "$" to
 | ||||
| #       accomodate the double expansion that occurs when eval is invoked.
 | ||||
| 
 | ||||
| # ADD_CLEAN_RULE - Parameterized "function" that adds a new rule and phony
 | ||||
| #   target for cleaning the specified target (removing its build-generated
 | ||||
| #   files).
 | ||||
| #
 | ||||
| #   USE WITH EVAL
 | ||||
| #
 | ||||
| define ADD_CLEAN_RULE | ||||
|     clean: clean_${1} | ||||
|     .PHONY: clean_${1} | ||||
|     clean_${1}: | ||||
| 	$$(strip rm -f ${TARGET_DIR}/${1} $${${1}_OBJS:%.o=%.[doP]}) | ||||
| 	$${${1}_POSTCLEAN} | ||||
| endef | ||||
| 
 | ||||
| # ADD_OBJECT_RULE - Parameterized "function" that adds a pattern rule for
 | ||||
| #   building object files from source files with the filename extension
 | ||||
| #   specified in the second argument. The first argument must be the name of the
 | ||||
| #   base directory where the object files should reside (such that the portion
 | ||||
| #   of the path after the base directory will match the path to corresponding
 | ||||
| #   source files). The third argument must contain the rules used to compile the
 | ||||
| #   source files into object code form.
 | ||||
| #
 | ||||
| #   USE WITH EVAL
 | ||||
| #
 | ||||
| define ADD_OBJECT_RULE | ||||
| ${1}/%.o: ${2} | ||||
| 	${3} | ||||
| endef | ||||
| 
 | ||||
| # ADD_TARGET_RULE - Parameterized "function" that adds a new target to the
 | ||||
| #   Makefile. The target may be an executable or a library. The two allowable
 | ||||
| #   types of targets are distinguished based on the name: library targets must
 | ||||
| #   end with the traditional ".a" extension.
 | ||||
| #
 | ||||
| #   USE WITH EVAL
 | ||||
| #
 | ||||
| define ADD_TARGET_RULE | ||||
|     ifeq "$$(suffix ${1})" ".a" | ||||
|         # Add a target for creating a static library. | ||||
|         $${TARGET_DIR}/${1}: $${${1}_OBJS} | ||||
| 	    @mkdir -p $$(dir $$@) | ||||
| 	    $$(strip $${AR} $${ARFLAGS} $$@ $${${1}_OBJS}) | ||||
| 	    $${${1}_POSTMAKE} | ||||
|     else | ||||
|         # Add a target for linking an executable. First, attempt to select the | ||||
|         # appropriate front-end to use for linking. This might not choose the | ||||
|         # right one (e.g. if linking with a C++ static library, but all other | ||||
|         # sources are C sources), so the user makefile is allowed to specify a | ||||
|         # linker to be used for each target. | ||||
|         ifeq "$$(strip $${${1}_LINKER})" "" | ||||
|             # No linker was explicitly specified to be used for this target. If | ||||
|             # there are any C++ sources for this target, use the C++ compiler. | ||||
|             # For all other targets, default to using the C compiler. | ||||
|             ifneq "$$(strip $$(filter $${CXX_SRC_EXTS},$${${1}_SOURCES}))" "" | ||||
|                 ${1}_LINKER = $${CXX} | ||||
|             else | ||||
|                 ${1}_LINKER = $${CC} | ||||
|             endif | ||||
|         endif | ||||
| 
 | ||||
|         $${TARGET_DIR}/${1}: $${${1}_OBJS} $${${1}_PREREQS} | ||||
| 	    @mkdir -p $$(dir $$@) | ||||
| 	    $$(strip $${${1}_LINKER} -o $$@ $${LDFLAGS} $${${1}_LDFLAGS} \
 | ||||
| 	        $${${1}_OBJS} $${LDLIBS} $${${1}_LDLIBS}) | ||||
| 	    $${${1}_POSTMAKE} | ||||
|     endif | ||||
| endef | ||||
| 
 | ||||
| # CANONICAL_PATH - Given one or more paths, converts the paths to the canonical
 | ||||
| #   form. The canonical form is the path, relative to the project's top-level
 | ||||
| #   directory (the directory from which "make" is run), and without
 | ||||
| #   any "./" or "../" sequences. For paths that are not  located below the
 | ||||
| #   top-level directory, the canonical form is the absolute path (i.e. from
 | ||||
| #   the root of the filesystem) also without "./" or "../" sequences.
 | ||||
| define CANONICAL_PATH | ||||
| $(patsubst ${CURDIR}/%,%,$(abspath ${1})) | ||||
| endef | ||||
| 
 | ||||
| # COMPILE_C_CMDS - Commands for compiling C source code.
 | ||||
| define COMPILE_C_CMDS | ||||
| 	@mkdir -p $(dir $@) | ||||
| 	$(strip ${CC} -o $@ -c -MD ${CFLAGS} ${SRC_CFLAGS} ${INCDIRS} \
 | ||||
| 	    ${SRC_INCDIRS} ${SRC_DEFS} ${DEFS} $<) | ||||
| 	@cp ${@:%$(suffix $@)=%.d} ${@:%$(suffix $@)=%.P}; \
 | ||||
| 	 sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
 | ||||
| 	     -e '/^$$/ d' -e 's/$$/ :/' < ${@:%$(suffix $@)=%.d} \
 | ||||
| 	     >> ${@:%$(suffix $@)=%.P}; \
 | ||||
| 	 rm -f ${@:%$(suffix $@)=%.d} | ||||
| endef | ||||
| 
 | ||||
| # COMPILE_CXX_CMDS - Commands for compiling C++ source code.
 | ||||
| define COMPILE_CXX_CMDS | ||||
| 	@mkdir -p $(dir $@) | ||||
| 	$(strip ${CXX} -o $@ -c -MD ${CXXFLAGS} ${SRC_CXXFLAGS} ${INCDIRS} \
 | ||||
| 	    ${SRC_INCDIRS} ${SRC_DEFS} ${DEFS} $<) | ||||
| 	@cp ${@:%$(suffix $@)=%.d} ${@:%$(suffix $@)=%.P}; \
 | ||||
| 	 sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
 | ||||
| 	     -e '/^$$/ d' -e 's/$$/ :/' < ${@:%$(suffix $@)=%.d} \
 | ||||
| 	     >> ${@:%$(suffix $@)=%.P}; \
 | ||||
| 	 rm -f ${@:%$(suffix $@)=%.d} | ||||
| endef | ||||
| 
 | ||||
| # INCLUDE_SUBMAKEFILE - Parameterized "function" that includes a new
 | ||||
| #   "submakefile" fragment into the overall Makefile. It also recursively
 | ||||
| #   includes all submakefiles of the specified submakefile fragment.
 | ||||
| #
 | ||||
| #   USE WITH EVAL
 | ||||
| #
 | ||||
| define INCLUDE_SUBMAKEFILE | ||||
|     # Initialize all variables that can be defined by a makefile fragment, then | ||||
|     # include the specified makefile fragment. | ||||
|     TARGET        := | ||||
|     TGT_CFLAGS    := | ||||
|     TGT_CXXFLAGS  := | ||||
|     TGT_DEFS      := | ||||
|     TGT_INCDIRS   := | ||||
|     TGT_LDFLAGS   := | ||||
|     TGT_LDLIBS    := | ||||
|     TGT_LINKER    := | ||||
|     TGT_POSTCLEAN := | ||||
|     TGT_POSTMAKE  := | ||||
|     TGT_PREREQS   := | ||||
| 
 | ||||
|     SOURCES       := | ||||
|     SRC_CFLAGS    := | ||||
|     SRC_CXXFLAGS  := | ||||
|     SRC_DEFS      := | ||||
|     SRC_INCDIRS   := | ||||
| 
 | ||||
|     SUBMAKEFILES  := | ||||
| 
 | ||||
|     # A directory stack is maintained so that the correct paths are used as we | ||||
|     # recursively include all submakefiles. Get the makefile's directory and | ||||
|     # push it onto the stack. | ||||
|     DIR := $(call CANONICAL_PATH,$(dir ${1})) | ||||
|     DIR_STACK := $$(call PUSH,$${DIR_STACK},$${DIR}) | ||||
| 
 | ||||
|     include ${1} | ||||
| 
 | ||||
|     # Initialize internal local variables. | ||||
|     OBJS := | ||||
| 
 | ||||
|     # Ensure that valid values are set for BUILD_DIR and TARGET_DIR. | ||||
|     ifeq "$$(strip $${BUILD_DIR})" "" | ||||
|         BUILD_DIR := build | ||||
|     endif | ||||
|     ifeq "$$(strip $${TARGET_DIR})" "" | ||||
|         TARGET_DIR := . | ||||
|     endif | ||||
| 
 | ||||
|     # Determine which target this makefile's variables apply to. A stack is | ||||
|     # used to keep track of which target is the "current" target as we | ||||
|     # recursively include other submakefiles. | ||||
|     ifneq "$$(strip $${TARGET})" "" | ||||
|         # This makefile defined a new target. Target variables defined by this | ||||
|         # makefile apply to this new target. Initialize the target's variables. | ||||
|         TGT := $$(strip $${TARGET}) | ||||
|         ALL_TGTS += $${TGT} | ||||
|         $${TGT}_CFLAGS    := $${TGT_CFLAGS} | ||||
|         $${TGT}_CXXFLAGS  := $${TGT_CXXFLAGS} | ||||
|         $${TGT}_DEFS      := $${TGT_DEFS} | ||||
|         $${TGT}_DEPS      := | ||||
|         TGT_INCDIRS       := $$(call QUALIFY_PATH,$${DIR},$${TGT_INCDIRS}) | ||||
|         TGT_INCDIRS       := $$(call CANONICAL_PATH,$${TGT_INCDIRS}) | ||||
|         $${TGT}_INCDIRS   := $${TGT_INCDIRS} | ||||
|         $${TGT}_LDFLAGS   := $${TGT_LDFLAGS} | ||||
|         $${TGT}_LDLIBS    := $${TGT_LDLIBS} | ||||
|         $${TGT}_LINKER    := $${TGT_LINKER} | ||||
|         $${TGT}_OBJS      := | ||||
|         $${TGT}_POSTCLEAN := $${TGT_POSTCLEAN} | ||||
|         $${TGT}_POSTMAKE  := $${TGT_POSTMAKE} | ||||
|         $${TGT}_PREREQS   := $$(addprefix $${TARGET_DIR}/,$${TGT_PREREQS}) | ||||
|         $${TGT}_SOURCES   := | ||||
|     else | ||||
|         # The values defined by this makefile apply to the the "current" target | ||||
|         # as determined by which target is at the top of the stack. | ||||
|         TGT := $$(strip $$(call PEEK,$${TGT_STACK})) | ||||
|         $${TGT}_CFLAGS    += $${TGT_CFLAGS} | ||||
|         $${TGT}_CXXFLAGS  += $${TGT_CXXFLAGS} | ||||
|         $${TGT}_DEFS      += $${TGT_DEFS} | ||||
|         TGT_INCDIRS       := $$(call QUALIFY_PATH,$${DIR},$${TGT_INCDIRS}) | ||||
|         TGT_INCDIRS       := $$(call CANONICAL_PATH,$${TGT_INCDIRS}) | ||||
|         $${TGT}_INCDIRS   += $${TGT_INCDIRS} | ||||
|         $${TGT}_LDFLAGS   += $${TGT_LDFLAGS} | ||||
|         $${TGT}_LDLIBS    += $${TGT_LDLIBS} | ||||
|         $${TGT}_POSTCLEAN += $${TGT_POSTCLEAN} | ||||
|         $${TGT}_POSTMAKE  += $${TGT_POSTMAKE} | ||||
|         $${TGT}_PREREQS   += $${TGT_PREREQS} | ||||
|     endif | ||||
| 
 | ||||
|     # Push the current target onto the target stack. | ||||
|     TGT_STACK := $$(call PUSH,$${TGT_STACK},$${TGT}) | ||||
| 
 | ||||
|     ifneq "$$(strip $${SOURCES})" "" | ||||
|         # This makefile builds one or more objects from source. Validate the | ||||
|         # specified sources against the supported source file types. | ||||
|         BAD_SRCS := $$(strip $$(filter-out $${ALL_SRC_EXTS},$${SOURCES})) | ||||
|         ifneq "$${BAD_SRCS}" "" | ||||
|             $$(error Unsupported source file(s) found in ${1} [$${BAD_SRCS}]) | ||||
|         endif | ||||
| 
 | ||||
|         # Qualify and canonicalize paths. | ||||
|         SOURCES     := $$(call QUALIFY_PATH,$${DIR},$${SOURCES}) | ||||
|         SOURCES     := $$(call CANONICAL_PATH,$${SOURCES}) | ||||
|         SRC_INCDIRS := $$(call QUALIFY_PATH,$${DIR},$${SRC_INCDIRS}) | ||||
|         SRC_INCDIRS := $$(call CANONICAL_PATH,$${SRC_INCDIRS}) | ||||
| 
 | ||||
|         # Save the list of source files for this target. | ||||
|         $${TGT}_SOURCES += $${SOURCES} | ||||
| 
 | ||||
|         # Convert the source file names to their corresponding object file | ||||
|         # names. | ||||
|         OBJS := $$(addprefix $${BUILD_DIR}/$$(call CANONICAL_PATH,$${TGT})/,\
 | ||||
|                    $$(addsuffix .o,$$(basename $${SOURCES}))) | ||||
| 
 | ||||
|         # Add the objects to the current target's list of objects, and create | ||||
|         # target-specific variables for the objects based on any source | ||||
|         # variables that were defined. | ||||
|         $${TGT}_OBJS += $${OBJS} | ||||
|         $${TGT}_DEPS += $${OBJS:%.o=%.P} | ||||
|         $${OBJS}: SRC_CFLAGS   := $${$${TGT}_CFLAGS} $${SRC_CFLAGS} | ||||
|         $${OBJS}: SRC_CXXFLAGS := $${$${TGT}_CXXFLAGS} $${SRC_CXXFLAGS} | ||||
|         $${OBJS}: SRC_DEFS     := $$(addprefix -D,$${$${TGT}_DEFS} $${SRC_DEFS}) | ||||
|         $${OBJS}: SRC_INCDIRS  := $$(addprefix -I,\
 | ||||
|                                      $${$${TGT}_INCDIRS} $${SRC_INCDIRS}) | ||||
|     endif | ||||
| 
 | ||||
|     ifneq "$$(strip $${SUBMAKEFILES})" "" | ||||
|         # This makefile has submakefiles. Recursively include them. | ||||
|         $$(foreach MK,$${SUBMAKEFILES},\
 | ||||
|            $$(eval $$(call INCLUDE_SUBMAKEFILE,\
 | ||||
|                       $$(call CANONICAL_PATH,\
 | ||||
|                          $$(call QUALIFY_PATH,$${DIR},$${MK}))))) | ||||
|     endif | ||||
| 
 | ||||
|     # Reset the "current" target to it's previous value. | ||||
|     TGT_STACK := $$(call POP,$${TGT_STACK}) | ||||
|     TGT := $$(call PEEK,$${TGT_STACK}) | ||||
| 
 | ||||
|     # Reset the "current" directory to it's previous value. | ||||
|     DIR_STACK := $$(call POP,$${DIR_STACK}) | ||||
|     DIR := $$(call PEEK,$${DIR_STACK}) | ||||
| endef | ||||
| 
 | ||||
| # MIN - Parameterized "function" that results in the minimum lexical value of
 | ||||
| #   the two values given.
 | ||||
| define MIN | ||||
| $(firstword $(sort ${1} ${2})) | ||||
| endef | ||||
| 
 | ||||
| # PEEK - Parameterized "function" that results in the value at the top of the
 | ||||
| #   specified colon-delimited stack.
 | ||||
| define PEEK | ||||
| $(lastword $(subst :, ,${1})) | ||||
| endef | ||||
| 
 | ||||
| # POP - Parameterized "function" that pops the top value off of the specified
 | ||||
| #   colon-delimited stack, and results in the new value of the stack. Note that
 | ||||
| #   the popped value cannot be obtained using this function; use peek for that.
 | ||||
| define POP | ||||
| ${1:%:$(lastword $(subst :, ,${1}))=%} | ||||
| endef | ||||
| 
 | ||||
| # PUSH - Parameterized "function" that pushes a value onto the specified colon-
 | ||||
| #   delimited stack, and results in the new value of the stack.
 | ||||
| define PUSH | ||||
| ${2:%=${1}:%} | ||||
| endef | ||||
| 
 | ||||
| # QUALIFY_PATH - Given a "root" directory and one or more paths, qualifies the
 | ||||
| #   paths using the "root" directory (i.e. appends the root directory name to
 | ||||
| #   the paths) except for paths that are absolute.
 | ||||
| define QUALIFY_PATH | ||||
| $(addprefix ${1}/,$(filter-out /%,${2})) $(filter /%,${2}) | ||||
| endef | ||||
| 
 | ||||
| ###############################################################################
 | ||||
| #
 | ||||
| # Start of Makefile Evaluation
 | ||||
| #
 | ||||
| ###############################################################################
 | ||||
| 
 | ||||
| # Older versions of GNU Make lack capabilities needed by boilermake.
 | ||||
| # With older versions, "make" may simply output "nothing to do", likely leading
 | ||||
| # to confusion. To avoid this, check the version of GNU make up-front and
 | ||||
| # inform the user if their version of make doesn't meet the minimum required.
 | ||||
| MIN_MAKE_VERSION := 3.81 | ||||
| MIN_MAKE_VER_MSG := boilermake requires GNU Make ${MIN_MAKE_VERSION} or greater | ||||
| ifeq "${MAKE_VERSION}" "" | ||||
|     $(info GNU Make not detected) | ||||
|     $(error ${MIN_MAKE_VER_MSG}) | ||||
| endif | ||||
| ifneq "${MIN_MAKE_VERSION}" "$(call MIN,${MIN_MAKE_VERSION},${MAKE_VERSION})" | ||||
|     $(info This is GNU Make version ${MAKE_VERSION}) | ||||
|     $(error ${MIN_MAKE_VER_MSG}) | ||||
| endif | ||||
| 
 | ||||
| # Define the source file extensions that we know how to handle.
 | ||||
| C_SRC_EXTS := %.c %.S | ||||
| CXX_SRC_EXTS := %.C %.cc %.cp %.cpp %.CPP %.cxx %.c++ | ||||
| ALL_SRC_EXTS := ${C_SRC_EXTS} ${CXX_SRC_EXTS} | ||||
| 
 | ||||
| # Initialize global variables.
 | ||||
| ALL_TGTS := | ||||
| DEFS := | ||||
| DIR_STACK := | ||||
| INCDIRS := | ||||
| TGT_STACK := | ||||
| 
 | ||||
| # Include the main user-supplied submakefile. This also recursively includes
 | ||||
| # all other user-supplied submakefiles.
 | ||||
| $(eval $(call INCLUDE_SUBMAKEFILE,main.mk)) | ||||
| 
 | ||||
| # Perform post-processing on global variables as needed.
 | ||||
| DEFS := $(addprefix -D,${DEFS}) | ||||
| INCDIRS := $(addprefix -I,$(call CANONICAL_PATH,${INCDIRS})) | ||||
| 
 | ||||
| # Define the "all" target (which simply builds all user-defined targets) as the
 | ||||
| # default goal.
 | ||||
| .PHONY: all | ||||
| all: $(addprefix ${TARGET_DIR}/,${ALL_TGTS}) | ||||
| 
 | ||||
| # Add a new target rule for each user-defined target.
 | ||||
| $(foreach TGT,${ALL_TGTS},\ | ||||
|   $(eval $(call ADD_TARGET_RULE,${TGT}))) | ||||
| 
 | ||||
| # Add pattern rule(s) for creating compiled object code from C source.
 | ||||
| $(foreach TGT,${ALL_TGTS},\ | ||||
|   $(foreach EXT,${C_SRC_EXTS},\
 | ||||
|     $(eval $(call ADD_OBJECT_RULE,${BUILD_DIR}/$(call CANONICAL_PATH,${TGT}),\
 | ||||
|              ${EXT},$${COMPILE_C_CMDS})))) | ||||
| 
 | ||||
| # Add pattern rule(s) for creating compiled object code from C++ source.
 | ||||
| $(foreach TGT,${ALL_TGTS},\ | ||||
|   $(foreach EXT,${CXX_SRC_EXTS},\
 | ||||
|     $(eval $(call ADD_OBJECT_RULE,${BUILD_DIR}/$(call CANONICAL_PATH,${TGT}),\
 | ||||
|              ${EXT},$${COMPILE_CXX_CMDS})))) | ||||
| 
 | ||||
| # Add "clean" rules to remove all build-generated files.
 | ||||
| .PHONY: clean | ||||
| $(foreach TGT,${ALL_TGTS},\ | ||||
|   $(eval $(call ADD_CLEAN_RULE,${TGT}))) | ||||
| 
 | ||||
| # Include generated rules that define additional (header) dependencies.
 | ||||
| $(foreach TGT,${ALL_TGTS},\ | ||||
|   $(eval -include ${${TGT}_DEPS})) | ||||
							
								
								
									
										44
									
								
								myapps/blinky-old-32mg/emlib.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								myapps/blinky-old-32mg/emlib.mk
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| SOURCES := ../../platform/emlib/src/em_cmu_fpga.c \
 | ||||
| ../../platform/emlib/src/em_dma.c \ | ||||
| ../../platform/emlib/src/em_csen.c \ | ||||
| ../../platform/emlib/src/em_msc.c \ | ||||
| ../../platform/emlib/src/em_lcd.c \ | ||||
| ../../platform/emlib/src/em_rtcc.c \ | ||||
| ../../platform/emlib/src/em_can.c \ | ||||
| ../../platform/emlib/src/em_wdog.c \ | ||||
| ../../platform/emlib/src/em_system.c \ | ||||
| ../../platform/emlib/src/em_prs.c \ | ||||
| ../../platform/emlib/src/em_se.c \ | ||||
| ../../platform/emlib/src/em_eusart.c \ | ||||
| ../../platform/emlib/src/em_dbg.c \ | ||||
| ../../platform/emlib/src/em_cmu.c \ | ||||
| ../../platform/emlib/src/em_rmu.c \ | ||||
| ../../platform/emlib/src/em_vcmp.c \ | ||||
| ../../platform/emlib/src/em_gpio.c \ | ||||
| ../../platform/emlib/src/em_aes.c \ | ||||
| ../../platform/emlib/src/em_burtc.c \ | ||||
| ../../platform/emlib/src/em_usart.c \ | ||||
| ../../platform/emlib/src/em_qspi.c \ | ||||
| ../../platform/emlib/src/em_lesense.c \ | ||||
| ../../platform/emlib/src/em_adc.c \ | ||||
| ../../platform/emlib/src/em_core.c \ | ||||
| ../../platform/emlib/src/em_letimer.c \ | ||||
| ../../platform/emlib/src/em_idac.c \ | ||||
| ../../platform/emlib/src/em_ldma.c \ | ||||
| ../../platform/emlib/src/em_vdac.c \ | ||||
| ../../platform/emlib/src/em_rtc.c \ | ||||
| ../../platform/emlib/src/em_dac.c \ | ||||
| ../../platform/emlib/src/em_pcnt.c \ | ||||
| ../../platform/emlib/src/em_pdm.c \ | ||||
| ../../platform/emlib/src/em_cryotimer.c \ | ||||
| ../../platform/emlib/src/em_iadc.c \ | ||||
| ../../platform/emlib/src/em_acmp.c \ | ||||
| ../../platform/emlib/src/em_opamp.c \ | ||||
| ../../platform/emlib/src/em_timer.c \ | ||||
| ../../platform/emlib/src/em_i2c.c \ | ||||
| ../../platform/emlib/src/em_gpcrc.c \ | ||||
| ../../platform/emlib/src/em_crypto.c \ | ||||
| ../../platform/emlib/src/em_emu.c \ | ||||
| ../../platform/emlib/src/em_ebi.c \ | ||||
| ../../platform/emlib/src/em_leuart.c | ||||
| 
 | ||||
							
								
								
									
										292
									
								
								myapps/blinky-old-32mg/linker_script/efr32mg21.ld
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								myapps/blinky-old-32mg/linker_script/efr32mg21.ld
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,292 @@ | |||
| /***************************************************************************//** | ||||
|  * @file     gcc_EFR32MG21.ld | ||||
|  * @brief    GNU Linker Script for Cortex-M based device | ||||
|  * @version  V2.2.0 | ||||
|  * @date     16. December 2020 | ||||
|  * Linker script for Silicon Labs EFR32MG21 devices | ||||
|  ******************************************************************************* | ||||
|  * # License | ||||
|  * <b>Copyright 2024 Silicon Laboratories, Inc. www.silabs.com </b> | ||||
|  ******************************************************************************* | ||||
|  * | ||||
|  * SPDX-License-Identifier: Zlib | ||||
|  * | ||||
|  * The licensor of this software is Silicon Laboratories Inc. | ||||
|  * | ||||
|  * This software is provided 'as-is', without any express or implied | ||||
|  * warranty. In no event will the authors be held liable for any damages | ||||
|  * arising from the use of this software. | ||||
|  * | ||||
|  * Permission is granted to anyone to use this software for any purpose, | ||||
|  * including commercial applications, and to alter it and redistribute it | ||||
|  * freely, subject to the following restrictions: | ||||
|  * | ||||
|  * 1. The origin of this software must not be misrepresented; you must not | ||||
|  *    claim that you wrote the original software. If you use this software | ||||
|  *    in a product, an acknowledgment in the product documentation would be | ||||
|  *    appreciated but is not required. | ||||
|  * 2. Altered source versions must be plainly marked as such, and must not be | ||||
|  *    misrepresented as being the original software. | ||||
|  * 3. This notice may not be removed or altered from any source distribution. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| MEMORY | ||||
| { | ||||
|   FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1024K | ||||
|   RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 96K | ||||
| } | ||||
| 
 | ||||
| /* Linker script to place sections and symbol values. Should be used together | ||||
|  * with other linker script that defines memory regions FLASH and RAM. | ||||
|  * It references following symbols, which must be defined in code: | ||||
|  *   Reset_Handler : Entry of reset handler | ||||
|  * | ||||
|  * It defines following symbols, which code can use without definition: | ||||
|  *   __exidx_start | ||||
|  *   __exidx_end | ||||
|  *   __copy_table_start__ | ||||
|  *   __copy_table_end__ | ||||
|  *   __zero_table_start__ | ||||
|  *   __zero_table_end__ | ||||
|  *   __etext | ||||
|  *   __data_start__ | ||||
|  *   __preinit_array_start | ||||
|  *   __preinit_array_end | ||||
|  *   __init_array_start | ||||
|  *   __init_array_end | ||||
|  *   __fini_array_start | ||||
|  *   __fini_array_end | ||||
|  *   __data_end__ | ||||
|  *   __bss_start__ | ||||
|  *   __bss_end__ | ||||
|  *   __end__ | ||||
|  *   end | ||||
|  *   __HeapLimit | ||||
|  *   __StackLimit | ||||
|  *   __StackTop | ||||
|  *   __stack | ||||
|  *   __StackSeal      (only if ARMv8-M stack sealing is used) | ||||
|  */ | ||||
| 
 | ||||
| ENTRY(Reset_Handler) | ||||
| 
 | ||||
| SECTIONS | ||||
| { | ||||
|   .text : | ||||
|   { | ||||
|     KEEP(*(.vectors)) | ||||
|     *(.text*) | ||||
| 
 | ||||
|     KEEP(*(.init)) | ||||
|     KEEP(*(.fini)) | ||||
| 
 | ||||
|     /* .ctors */ | ||||
|     *crtbegin.o(.ctors) | ||||
|     *crtbegin?.o(.ctors) | ||||
|     *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) | ||||
|     *(SORT(.ctors.*)) | ||||
|     *(.ctors) | ||||
| 
 | ||||
|     /* .dtors */ | ||||
|     *crtbegin.o(.dtors) | ||||
|     *crtbegin?.o(.dtors) | ||||
|     *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) | ||||
|     *(SORT(.dtors.*)) | ||||
|     *(.dtors) | ||||
| 
 | ||||
|     *(.rodata*) | ||||
| 
 | ||||
|     KEEP(*(.eh_frame*)) | ||||
|   } > FLASH | ||||
|   /* | ||||
|    * SG veneers: | ||||
|    * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address | ||||
|    * must be set, either with the command line option ‘--section-start’ or in a linker script, | ||||
|    * to indicate where to place these veneers in memory. | ||||
|    */ | ||||
| /* | ||||
|   .gnu.sgstubs : ALIGN(32) | ||||
|   { | ||||
|     . = ALIGN(32); | ||||
|     linker_sg_begin = .; | ||||
|     KEEP(*(.gnu.sgstubs*)) | ||||
|     . = ALIGN(32); | ||||
|   } > FLASH | ||||
|   linker_sg_end = linker_sg_begin + SIZEOF(.gnu.sgstubs); | ||||
| */ | ||||
|   .ARM.extab : | ||||
|   { | ||||
|     *(.ARM.extab* .gnu.linkonce.armextab.*) | ||||
|   } > FLASH | ||||
| 
 | ||||
|   __exidx_start = .; | ||||
|   .ARM.exidx : | ||||
|   { | ||||
|     *(.ARM.exidx* .gnu.linkonce.armexidx.*) | ||||
|   } > FLASH | ||||
|   __exidx_end = .; | ||||
| 
 | ||||
|   .copy.table : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __copy_table_start__ = .; | ||||
| 
 | ||||
|     LONG (__etext) | ||||
|     LONG (__data_start__) | ||||
|     LONG ((__data_end__ - __data_start__) / 4) | ||||
| 
 | ||||
|     /* Add each additional data section here */ | ||||
| /* | ||||
|     LONG (__etext2) | ||||
|     LONG (__data2_start__) | ||||
|     LONG ((__data2_end__ - __data2_start__) / 4) | ||||
| */ | ||||
|     __copy_table_end__ = .; | ||||
|   } > FLASH | ||||
| 
 | ||||
|   .zero.table : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __zero_table_start__ = .; | ||||
|     /* Add each additional bss section here */ | ||||
| /* | ||||
|     LONG (__bss2_start__) | ||||
|     LONG ((__bss2_end__ - __bss2_start__) / 4) | ||||
| */ | ||||
|     __zero_table_end__ = .; | ||||
|     __etext = ALIGN(4); | ||||
|   } > FLASH | ||||
| 
 | ||||
|   .data : AT (__etext) | ||||
|   { | ||||
|     __data_start__ = .; | ||||
|     *(vtable) | ||||
|     *(.data*) | ||||
|     . = ALIGN (4); | ||||
|     PROVIDE (__ram_func_section_start = .); | ||||
|     *(.ram) | ||||
|     PROVIDE (__ram_func_section_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* preinit data */ | ||||
|     PROVIDE_HIDDEN (__preinit_array_start = .); | ||||
|     KEEP(*(.preinit_array)) | ||||
|     PROVIDE_HIDDEN (__preinit_array_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* init data */ | ||||
|     PROVIDE_HIDDEN (__init_array_start = .); | ||||
|     KEEP(*(SORT(.init_array.*))) | ||||
|     KEEP(*(.init_array)) | ||||
|     PROVIDE_HIDDEN (__init_array_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* finit data */ | ||||
|     PROVIDE_HIDDEN (__fini_array_start = .); | ||||
|     KEEP(*(SORT(.fini_array.*))) | ||||
|     KEEP(*(.fini_array)) | ||||
|     PROVIDE_HIDDEN (__fini_array_end = .); | ||||
| 
 | ||||
|     KEEP(*(.jcr*)) | ||||
|     . = ALIGN(4); | ||||
|     /* All data end */ | ||||
|     __data_end__ = .; | ||||
| 
 | ||||
|   } > RAM | ||||
| 
 | ||||
|   /* | ||||
|    * Secondary data section, optional | ||||
|    * | ||||
|    * Remember to add each additional data section | ||||
|    * to the .copy.table above to asure proper | ||||
|    * initialization during startup. | ||||
|    */ | ||||
| /* | ||||
|   __etext2 = ALIGN (4); | ||||
| 
 | ||||
|   .data2 : AT (__etext2) | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __data2_start__ = .; | ||||
|     *(.data2) | ||||
|     *(.data2.*) | ||||
|     . = ALIGN(4); | ||||
|     __data2_end__ = .; | ||||
| 
 | ||||
|   } > RAM2 | ||||
| */ | ||||
|   .bss : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __bss_start__ = .; | ||||
|     *(.bss) | ||||
|     *(.bss.*) | ||||
|     *(COMMON) | ||||
|     . = ALIGN(4); | ||||
|     __bss_end__ = .; | ||||
|   } > RAM AT > RAM | ||||
| 
 | ||||
|   /* | ||||
|    * Secondary bss section, optional | ||||
|    * | ||||
|    * Remember to add each additional bss section | ||||
|    * to the .zero.table above to asure proper | ||||
|    * initialization during startup. | ||||
|    */ | ||||
| /* | ||||
|   .bss2 : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __bss2_start__ = .; | ||||
|     *(.bss2) | ||||
|     *(.bss2.*) | ||||
|     . = ALIGN(4); | ||||
|     __bss2_end__ = .; | ||||
|   } > RAM2 AT > RAM2 | ||||
| */ | ||||
| 
 | ||||
|   .heap (COPY): | ||||
|   { | ||||
|     __HeapBase = .; | ||||
|     __end__ = .; | ||||
|     end = __end__; | ||||
|     _end = __end__; | ||||
|     KEEP(*(.heap*)) | ||||
|     __HeapLimit = .; | ||||
|   } > RAM | ||||
|   /* ARMv8-M stack sealing: | ||||
|      to use ARMv8-M stack sealing uncomment '.stackseal' section and KEEP(*(.stackseal*)) | ||||
|      in .stack_dummy section | ||||
|    */ | ||||
| /* | ||||
|   .stackseal (COPY) : | ||||
|   { | ||||
|     . = ALIGN(8); | ||||
|     __StackSeal = .; | ||||
|     . = . + 8; | ||||
|     . = ALIGN(8); | ||||
|   } > RAM | ||||
| */ | ||||
| 
 | ||||
|   /* .stack_dummy section doesn't contains any symbols. It is only | ||||
|    * used for linker to calculate size of stack sections, and assign | ||||
|    * values to stack symbols later */ | ||||
|   .stack_dummy (COPY): | ||||
|   { | ||||
|     KEEP(*(.stack*)) | ||||
|  /* KEEP(*(.stackseal*))*/ | ||||
|   } > RAM | ||||
| 
 | ||||
|   /* Set stack top to end of RAM, and stack limit move down by | ||||
|    * size of stack_dummy section */ | ||||
|   __StackTop = ORIGIN(RAM) + LENGTH(RAM); | ||||
|   __StackLimit = __StackTop - SIZEOF(.stack_dummy); | ||||
|   PROVIDE(__stack = __StackTop); | ||||
| 
 | ||||
|   /* Check if data + heap + stack exceeds RAM limit */ | ||||
|   ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | ||||
| 
 | ||||
|   /* Check if FLASH usage exceeds FLASH size */ | ||||
|   ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !") | ||||
| } | ||||
							
								
								
									
										76
									
								
								myapps/blinky-old-32mg/main.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								myapps/blinky-old-32mg/main.mk
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| CC = arm-none-eabi-gcc | ||||
| SIZE = arm-none-eabi-size | ||||
| OBJCOPY = arm-none-eabi-objcopy | ||||
| 
 | ||||
| COMMON_FLAGS = \
 | ||||
|  -mcpu=cortex-m33 \
 | ||||
|  -mthumb \
 | ||||
|  -mfpu=fpv5-sp-d16 \
 | ||||
|  -mfloat-abi=hard \
 | ||||
|  -std=c99 \
 | ||||
|  -Wall \
 | ||||
|  -Wextra \
 | ||||
|  -Os \
 | ||||
|  -fdata-sections \
 | ||||
|  -ffunction-sections \
 | ||||
|  -fomit-frame-pointer \
 | ||||
|  -imacros sl_gcc_preinclude.h \
 | ||||
|  -mcmse \
 | ||||
|  -g | ||||
| 
 | ||||
| DEFINES = -DEFR32MG21A020F768IM32 | ||||
| 
 | ||||
| INCLUDE += -I include -I../../platform/CMSIS/Core/Include \
 | ||||
|  -I../../platform/Device/SiliconLabs/EFR32MG21/Include \
 | ||||
|  -I../../platform/common/inc \
 | ||||
|  -I ../../platform/common/toolchain/inc \
 | ||||
|  -I ../../platform/emlib/inc | ||||
| 
 | ||||
| 
 | ||||
| CFLAGS := $(COMMON_FLAGS) $(INCLUDE) $(DEFINES) | ||||
| 
 | ||||
| SUBMAKEFILES := emlib.mk | ||||
| SOURCES := ../../platform/Device/SiliconLabs/EFR32MG21/Source/system_efr32mg21.c \
 | ||||
| src/main.c | ||||
| 
 | ||||
| 
 | ||||
| BUILD_DIR  := build | ||||
| TARGET_DIR := build_output | ||||
| 
 | ||||
| #nosys.specs are required for printf
 | ||||
| LDFLAGS =  \
 | ||||
|  -mcpu=cortex-m33 \
 | ||||
|  -mthumb \
 | ||||
|  -mfpu=fpv5-sp-d16 \
 | ||||
|  -mfloat-abi=hard \
 | ||||
|  -T"linker_script/efr32mg21.ld" \
 | ||||
|  --specs=nano.specs \
 | ||||
|  --specs=nosys.specs \
 | ||||
|  -Xlinker -Map=$(TARGET_DIR)/main.map \
 | ||||
|  -Wl,--gc-sections | ||||
|   | ||||
| # Startup file
 | ||||
| LDLIBS := ../../platform/Device/SiliconLabs/EFR32MG21/Source/GCC/startup_efr32mg21.S | ||||
| 
 | ||||
| ###########
 | ||||
| 
 | ||||
| GROUP_START =-Wl,--start-group | ||||
| GROUP_END =-Wl,--end-group | ||||
| 
 | ||||
| PROJECT_LIBS = \
 | ||||
|  -lgcc \
 | ||||
|  -lc \
 | ||||
|  -lm \
 | ||||
|  -lnosys | ||||
| 
 | ||||
| LIBS += $(GROUP_START) $(PROJECT_LIBS) $(GROUP_END) | ||||
| 
 | ||||
| TGT_LDFLAGS += $(LIBS) | ||||
| ##########
 | ||||
| 
 | ||||
| TARGET := main.elf | ||||
| 
 | ||||
| size: $(TARGET_DIR)/main.elf | ||||
| 	$(SIZE) $(TARGET_DIR)/main.elf | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										17
									
								
								myapps/blinky-old-32mg/src/main.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								myapps/blinky-old-32mg/src/main.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| #include "em_cmu.h" | ||||
| #include "em_gpio.h" | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|   CMU_ClockEnable(cmuClock_GPIO, true); | ||||
|   GPIO_PinModeSet(gpioPortA, 0/*pin 0*/, gpioModePushPull /*push-pull output*/, 1/*output level*/); | ||||
|    | ||||
|   while(1) { | ||||
|     GPIO_PinOutToggle(gpioPortA, 0/*pin 0*/); | ||||
|     for (volatile uint32_t i = 0; i < 100000; i++) { } // busy delay
 | ||||
|   } | ||||
|    | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue