help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

makefile help


From: Michael Chicken
Subject: makefile help
Date: Tue, 29 Sep 2009 07:56:14 +0200

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)

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)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]