Files
TencentOS-tiny/components/connectivity/Modbus/3rdparty/freemodbus-v1.6/demo/STR71XGCC/Makefile
Supowang1989 ef82dbfc6d add modbus slave support
add modbus slave support
2020-02-24 21:40:06 +08:00

188 lines
6.5 KiB
Makefile

#
# FreeModbus STR71X GCC Makefile
#
# Copyright (C) 2006 Christian Walter <wolti@sil.at>
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# $Id: Makefile,v 1.1 2006/11/02 23:14:43 wolti Exp $
#
# MCU name and submodel
MCU = arm7tdmi
SUBMDL = STR711
#THUMB = -mthumb
#THUMB_IW = -mthumb-interwork
## Create ROM-Image (final)
#RUN_MODE=ROM_RUN
## Create RAM-Image (debugging)
RUN_MODE=RAM_RUN
# --------------------------------------------------------------------------- #
# TARGET ... name of the target executable to generate
# SRC ... C source files ( either THUMB or ARM )
# SRCARM ... C source files which are always compiled in ARM mode
# CPPSRC ... C++ source files ( either THUMB or ARM )
# CPPSRCARM ... C++ source files which are always compiled in ARM mode
# --------------------------------------------------------------------------- #
TARGET = demo
INC = -I. -Iport \
-Ifreertos/include \
-Ilibstr71x/include \
-I../../modbus/include \
-I../../modbus/rtu \
-I../../modbus/ascii
SRC = demo.c \
$(addprefix freertos/, list.c queue.c tasks.c ) \
$(addprefix freertos/portable/MemMang/, heap_2.c ) \
$(addprefix freertos/portable/GCC/ARM7_STR71X/, port.c ) \
$(addprefix libstr71x/, wdg.c rccu.c eic.c tim.c uart.c gpio.c ) \
$(addprefix ../../modbus/, mb.c ) \
$(addprefix ../../modbus/rtu/, mbrtu.c mbcrc.c ) \
$(addprefix ../../modbus/ascii/, mbascii.c ) \
$(addprefix ../../modbus/functions/, mbfunccoils.c mbfuncdiag.c mbfuncholding.c mbfuncinput.c mbfuncother.c mbfuncdisc.c mbutils.c )
SRCARM = $(addprefix freertos/portable/GCC/ARM7_STR71X/, portISR.c ) \
$(addprefix port/, portevent.c portserial.c porttimer.c )
CPPSRC =
CPPSRCARM =
AINC = -I.
ASRC =
ASRCARM = $(addprefix system/, startup.S vector.S )
# --------------------------------------------------------------------------- #
# This section includes compiler and linker settings.
# --------------------------------------------------------------------------- #
# Flags for C and C++ (arm-elf-gcc/arm-elf-g++)
CPPFLAGS = -gdwarf-2 -O0 -fno-strict-aliasing
CPPFLAGS += -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswitch
CPPFLAGS += -Wredundant-decls -Wreturn-type -Wshadow -Wunused
CPPFLAGS += -D$(RUN_MODE) -DGCC_ARM7_STR71X=1
# Flags for C
CFLAGS = $(CPPFLAGS) $(INC)
# Flags for C++
CCXXFLAGS = $(CFLAGS)
# Assembler flags.
#ASFLAGS = --defsym $(RUN_MODE)=1 --defsym REMAP=2 --gdwarf-2
ASFLAGS = -gdwarf-2 -D$(RUN_MODE)=1 -DREMAP=0 $(AINC)
# Linker flags.
LDFLAGS = -nostartfiles -Wl,-Map=$(TARGET).map,--cref -lc -lgcc
ifeq ($(RUN_MODE),RAM_RUN)
LDFLAGS +=-Tsupport/ram71x.ld
else
LDFLAGS +=-Tsupport/rom71x.ld
endif
# --------------------------------------------------------------------------- #
# Toolchain setup
# --------------------------------------------------------------------------- #
PREFIX = /opt/gcc-arm/bin
AS = $(PREFIX)/arm-elf-as
CC = $(PREFIX)/arm-elf-gcc
CPP = $(PREFIX)/arm-elf-g++
OBJCOPY = $(PREFIX)/arm-elf-objcopy
OBJDUMP = $(PREFIX)/arm-elf-objdump
SIZE = $(PREFIX)/arm-elf-size
NM = $(PREFIX)/arm-elf-nm
INSIGHT = $(PREFIX)/arm-elf-insight
# --------------------------------------------------------------------------- #
# Define all output files and dependencies based upon the specified
# source files.
# --------------------------------------------------------------------------- #
COBJ = $(SRC:.c=.o)
AOBJ = $(ASRC:.S=.o)
COBJARM = $(SRCARM:.c=.o)
AOBJARM = $(ASRCARM:.S=.o)
CPPOBJ = $(CPPSRC:.cpp=.o)
CPPOBJARM = $(CPPSRCARM:.cpp=.o)
# Flags need to generate dependencies
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
# Combine all necessary flags and optional flags.
ALL_CFLAGS = -mcpu=$(MCU) $(THUMB_IW) $(CFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mcpu=$(MCU) $(THUMB_IW) $(ASFLAGS)
# --------------------------------------------------------------------------- #
# Make targets
# --------------------------------------------------------------------------- #
all: $(TARGET).elf $(TARGET).sym $(TARGET).hex $(TARGET).bin
# Debug target which invokes the debugger
debug: $(TARGET).hex
$(INSIGHT) --se=$(TARGET).elf --command=support/target-71.gdb
# Flasg target which downloads the code.
flash: $(TARGET).hex $(TARGET).bin
%.hex: %.elf
$(OBJCOPY) -O ihex $< $@
%.bin: %.elf
$(OBJCOPY) -O binary $< $@
%.sym: %.elf
$(NM) -n $< > $@
$(TARGET).elf: $(AOBJARM) $(AOBJ) $(COBJARM) $(COBJ) $(CPPOBJ) $(CPPOBJARM)
$(CC) $(THUMB) $(THUMB_IW) $(AOBJARM) $(AOBJ) $(COBJARM) $(COBJ) $(CPPOBJ) $(CPPOBJARM) --output $@ $(LDFLAGS)
# Compile: create object files from C source files. ARM/Thumb
$(COBJ) : %.o : %.c
$(CC) -c $(THUMB) $(ALL_CFLAGS) $(CONLYFLAGS) $< -o $@
# Compile: create object files from C source files. ARM-only
$(COBJARM) : %.o : %.c
$(CC) -c $(ALL_CFLAGS) $(CONLYFLAGS) $< -o $@
# Compile: create object files from C++ source files. ARM/Thumb
$(CPPOBJ) : %.o : %.cpp
$(CPP) -c $(THUMB) $(ALL_CFLAGS) $(CPPFLAGS) $< -o $@
# Compile: create object files from C++ source files. ARM-only
$(CPPOBJARM) : %.o : %.cpp
$(CPP) -c $(ALL_CFLAGS) $(CPPFLAGS) $< -o $@
# Assemble: create object files from assembler source files. ARM/Thumb
$(AOBJ) : %.o : %.S
$(CC) -c $(THUMB) $(ALL_ASFLAGS) $< -o $@
# $(AS) $(THUMB) $(ALL_ASFLAGS) -o $@ $<
# Assemble: create object files from assembler source files. ARM-only
$(AOBJARM) : %.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# $(AS) $(ALL_ASFLAGS) -o $@ $<
# Target: clean project.
clean:
rm -f $(TARGET).hex $(TARGET).bin $(TARGET).obj $(TARGET).elf $(TARGET).map
rm -f $(TARGET).obj $(TARGET).sym $(TARGET).lss $(TARGET).lst
rm -f $(COBJ) $(CPPOBJ) $(AOBJ) $(COBJARM) $(CPPOBJARM) $(AOBJARM)
rm -f $(SRC:.c=.d) $(SRCARM:.c=.d) $(CPPSRC:.cpp=.d) $(CPPSRCARM:.cpp=.d)
rm -f .dep/*
# Include the dependency files.
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
# Listing of phony targets.
.PHONY : all clean