I've taken over someone else's project code which uses #defines to select which region the code is being compiled for. Instead of hard-coding these #defines, i would like to edit the makefile to specify the region at compile time.
ie. I would like to be able to enter "make USA" or "make Mexico" and have that automatically define REG_UNITED STATES or REG_MEXICO when compiling.
I've tried to check the MAKECMDGOALS variable, but I still get a "No rule to make target "USA". Stop" error.
my makefile currently is:
----------------------------------------------------------------------------------------
###################################################
# Define Project name
###################################################
PRJ_NAME=OTB
SVN_REV=0
MODEL_NAME=EON-XCOM
SUBVERSION=0
OBJDIR=obj
SRCDIR=source
INCDIR=inc
LSTDIR=list
###################################################
###################################################
START_OF_SRAM=0x800000
#START_OF_SRAM=0x00814000
SIZE_OF_SRAM=1024k
START_OF_FLASH=0x01100000
# Must be 6 HEX digit
START_OF_PROTECTED=000000
#END_OF_PROTECTED=00FFFF
END_OF_PROTECTED=042400
###################################################
# Source file list
###################################################
C_SRC=$(notdir $(wildcard $(SRCDIR)/*.c))
A_SRC=$(notdir $(wildcard $(SRCDIR)/*.s))
###################################################
# Gen object file name automatically
###################################################
C_OBJ=$(addprefix $(OBJDIR)/, $(C_SRC:.c=.o))
A_OBJ=$(addprefix $(OBJDIR)/, $(A_SRC:.s=.o))
OUT_FILE=$(PRJ_NAME)
BIN_FILE=$(PRJ_NAME).bin
TMS_FILE=$(PRJ_NAME).tms
SCRIPT_FILE=$(PRJ_NAME).ld
MAP_FILE=$(PRJ_NAME).map
###################################################
# Tools setup
###################################################
CROSS=arm-unknown-linux-gnu-
LIBCDIR=/opt/lib_arm
LIBSYSDIR=../lib
INCLUDES=-I $(INCDIR) -I $(LIBSYSDIR)
DEFINES=-D__NO_CTYPE -DSVN_REV=$(SVN_REC) -D__pcs=
#--------------------------------------------------
#Check for USA or Mexico command line arguments
#--------------------------------------------------
ifeq ($(MAKECMDGOALS),USA)
REG_DEFINE=-DREG_UNITED_STATES
endif
ifeq ($(MAKECMDGOALS),Mexico)
REG_DEFINE=-DREG_MEXICO
endif
CC=$(CROSS)gcc
CFLAGS=-c -std=gnu89 -Os -Wall -msoft-float -mthumb -mthumb-interwork -mcpu=arm7tdmi $(DEFINES) $(INCLUDES) $(REG_DEFINE)
ASM=$(CROSS)gcc
ASFLAGS=$(CFLAGS)
LINK=$(CROSS)ld
LFLAGS=-nostdlib -L $(LIBCDIR)/lib -L $(LIBSYSDIR) -static -T $(SCRIPT_FILE) -Map $(MAP_FILE)
LIBS=-lgcc -lc -lm -lsyscall -lsysutil
AR=$(CROSS)ar
ARFLAGS=-rc
OBJCOPY=$(CROSS)objcopy
OCFLAGS=-S -O binary
BIN2TMS=bin2tms
TMSFLAGS=-s$(SUBVERSION) -m$(MODEL_NAME) -n$(PRJ_NAME) -x XXXX XX XX $(START_OF_PROTECTED) $(END_OF_PROTECTED)
############################################################################
# Loader config
############################################################################
LOADER=ConLoader
LOADER_KEY=734EC4FF38F93130
LOADER_COM=6
LOADER_BAUD=115200
LOADER_AID=COMM_EXP
############################################################################
# Linker script
############################################################################
LD_SCRIPT=" ENTRY (cstartup) \
SECTIONS { \
_start_of_data = $(START_OF_SRAM); \
_start_of_flash = $(START_OF_FLASH); \
_end_of_sram = _start_of_data + $(SIZE_OF_SRAM); \
_start_of_header = _start_of_flash + 0x20; \
_start_of_app = _start_of_flash + 0x30; \
. = _start_of_flash; \
.startup : { *(sect_startup) } \
. = _start_of_header; \
.header : { *(sect_header) } \
. = _start_of_app; \
.text : { *(.text .glue*) } \
.const : { *(.rodata*) } \
_end_of_app = (. + 3) & ~ 3; \
. = _start_of_data; \
.data : AT (_end_of_app) { *(.data) } \
_end_of_data = (. + 3) & ~ 3; \
. = _end_of_data; \
_start_of_bss = .; \
.bss : { *(.bss) } \
_end_of_bss = .; \
_end_of_flash = _end_of_app + SIZEOF (.data); \
}"
###################################################
# Link file
###################################################
$(OUT_FILE) : $(A_OBJ) $(C_OBJ)
@echo .
@echo [$(OUT_FILE)]
@rm -f $(SCRIPT_FILE)
@echo $(LD_SCRIPT) > $(SCRIPT_FILE)
@$(LINK) $(LFLAGS) -o $(OUT_FILE) --start-group $(LIBS) $(A_OBJ) $(C_OBJ) --end-group
@rm -f $(SCRIPT_FILE)
@$(OBJCOPY) $(OCFLAGS) $(OUT_FILE) $(BIN_FILE)
@$(BIN2TMS) $(TMSFLAGS) $(BIN_FILE)
###################################################
###################################################
$(SRCDIR)/%.rc : $(INCDIR)/rc.h
@touch $(SRCDIR)/$(@F)
$(SRCDIR)/%.cpp : $(INCDIR)/%.h
@touch $(SRCDIR)/$(@F)
$(SRCDIR)/%.c : $(INCDIR)/%.h
@touch $(SRCDIR)/$(@F)
###################################################
# Compile C files
###################################################
$(OBJDIR)/%.o : $(SRCDIR)/%.c
@echo [$<]
@$(CC) $(CFLAGS) $< -o $@ -Wa,-a=$(LSTDIR)/$(@F:.o=.lst)
###################################################
# Assembly ASM files
###################################################
$(OBJDIR)/%.o : $(SRCDIR)/%.s
@echo [$<]
@$(ASM) $(ASFLAGS) $< -o $@ -Wa,-a=$(LSTDIR)/$(@F:.o=.lst)
###################################################
# Load
###################################################
.PHONY : load
load :
@echo $(LOADER_AID) > uniload.inf
@$(LOADER) $(TMS_FILE) -s$(LOADER_BAUD) -K$(LOADER_KEY) -$(LOADER_COM)
@rm -f uniload.inf
###################################################
# Clear all object file and output file
###################################################
.PHONY : clean
clean :
@echo Delete all object file.
@rm -f $(OBJDIR)/*.*
@rm -f $(LSTDIR)/*.*
@rm -f $(OUT_FILE)
@rm -f $(BIN_FILE)
@rm -f $(TMS_FILE)
@rm -f $(MAP_FILE)
@rm -f $(SCRIPT_FILE)
SECTIONS { \
_start_of_data = $(START_OF_SRAM); \
_start_of_flash = $(START_OF_FLASH); \
_end_of_sram = _start_of_data + $(SIZE_OF_SRAM); \
_start_of_header = _start_of_flash + 0x20; \
_start_of_app = _start_of_flash + 0x30; \
. = _start_of_flash; \
.startup : { *(sect_startup) } \
. = _start_of_header; \
.header : { *(sect_header) } \
. = _start_of_app; \
.text : { *(.text .glue*) } \
.const : { *(.rodata*) } \
_end_of_app = (. + 3) & ~ 3; \
. = _start_of_data; \
.data : AT (_end_of_app) { *(.data) } \
_end_of_data = (. + 3) & ~ 3; \
. = _end_of_data; \
_start_of_bss = .; \
.bss : { *(.bss) } \
_end_of_bss = .; \
_end_of_flash = _end_of_app + SIZEOF (.data); \
}"
###################################################
# Link file
###################################################
$(OUT_FILE) : $(A_OBJ) $(C_OBJ)
@echo .
@echo [$(OUT_FILE)]
@rm -f $(SCRIPT_FILE)
@echo $(LD_SCRIPT) > $(SCRIPT_FILE)
@$(LINK) $(LFLAGS) -o $(OUT_FILE) --start-group $(LIBS) $(A_OBJ) $(C_OBJ) --end-group
@rm -f $(SCRIPT_FILE)
@$(OBJCOPY) $(OCFLAGS) $(OUT_FILE) $(BIN_FILE)
@$(BIN2TMS) $(TMSFLAGS) $(BIN_FILE)
###################################################
###################################################
$(SRCDIR)/%.rc : $(INCDIR)/rc.h
@touch $(SRCDIR)/$(@F)
$(SRCDIR)/%.cpp : $(INCDIR)/%.h
@touch $(SRCDIR)/$(@F)
$(SRCDIR)/%.c : $(INCDIR)/%.h
@touch $(SRCDIR)/$(@F)
###################################################
# Compile C files
###################################################
$(OBJDIR)/%.o : $(SRCDIR)/%.c
@echo [$<]
@$(CC) $(CFLAGS) $< -o $@ -Wa,-a=$(LSTDIR)/$(@F:.o=.lst)
###################################################
# Assembly ASM files
###################################################
$(OBJDIR)/%.o : $(SRCDIR)/%.s
@echo [$<]
@$(ASM) $(ASFLAGS) $< -o $@ -Wa,-a=$(LSTDIR)/$(@F:.o=.lst)
###################################################
# Load
###################################################
.PHONY : load
load :
@echo $(LOADER_AID) > uniload.inf
@$(LOADER) $(TMS_FILE) -s$(LOADER_BAUD) -K$(LOADER_KEY) -$(LOADER_COM)
@rm -f uniload.inf
###################################################
# Clear all object file and output file
###################################################
.PHONY : clean
clean :
@echo Delete all object file.
@rm -f $(OBJDIR)/*.*
@rm -f $(LSTDIR)/*.*
@rm -f $(OUT_FILE)
@rm -f $(BIN_FILE)
@rm -f $(TMS_FILE)
@rm -f $(MAP_FILE)
@rm -f $(SCRIPT_FILE)
@echo Delete all object file.