Feature/makefile add apps library (#218)

* add BACnet stack library at apps/lib

* convert apps to use apps/lib for smaller binary

* fix -DBACDL_ALL=1 build

* fix piface build

* datalink MAX_MPDU and MAX_HEADER cleanup

* add bip6 to git workflow

* fix system library dependency of BACnet library

Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
Steve Karg
2022-01-29 15:55:40 -06:00
committed by GitHub
parent 9c72572692
commit 295f127c2b
79 changed files with 917 additions and 1104 deletions
+27 -194
View File
@@ -4,220 +4,53 @@
## General Flags
TARGET = bacpiface
# BACnet objects that are used with this app
BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object
SRC = main.c \
$(BACNET_OBJECT_DIR)/device.c \
$(BACNET_OBJECT_DIR)/netport.c \
$(BACNET_OBJECT_DIR)/bi.c \
$(BACNET_OBJECT_DIR)/bo.c
CFLAGS += -DMAX_TSM_TRANSACTIONS=1
CFLAGS += -DMAX_BINARY_INPUTS=4
CFLAGS += -DMAX_BINARY_OUTPUTS=8
# TARGET_EXT is defined in apps/Makefile as .exe or nothing
TARGET_BIN = ${TARGET}$(TARGET_EXT)
# Source locations
BACNET_CORE = ../../src
BACNET_INCLUDE = ../../include
BACNET_HANDLER = ../../demo/handler
BACNET_OBJECT = ../../demo/object
BACNET_DEMO = ../../demo
BACNET_PORT_DIR = ../../ports/linux
PIFACE_INCLUDE = libpifacedigital/src
PIFACE_LIB = libpifacedigital
MCP23S17_LIB = libmcp23s17
## BACnet options
BACDL_DEFINE ?= -DBACDL_BIP=1
# Declare your level of BBMD support
BBMD_DEFINE ?= -DBBMD_ENABLED=1
# local files for this project
CSRC = main.c \
device.c
# common demo files needed
DEMOSRC = \
$(BACNET_HANDLER)/dlenv.c \
$(BACNET_HANDLER)/txbuf.c \
$(BACNET_HANDLER)/noserv.c \
$(BACNET_HANDLER)/h_npdu.c \
$(BACNET_HANDLER)/h_whois.c \
$(BACNET_HANDLER)/h_iam.c \
$(BACNET_HANDLER)/h_rp.c \
$(BACNET_HANDLER)/h_rp_a.c \
$(BACNET_HANDLER)/h_rpm.c \
$(BACNET_HANDLER)/h_rpm_a.c \
$(BACNET_HANDLER)/h_rr.c \
$(BACNET_HANDLER)/h_wp.c \
$(BACNET_HANDLER)/h_wpm.c \
$(BACNET_HANDLER)/h_alarm_ack.c \
$(BACNET_HANDLER)/h_arf.c \
$(BACNET_HANDLER)/h_arf_a.c \
$(BACNET_HANDLER)/h_awf.c \
$(BACNET_HANDLER)/h_rd.c \
$(BACNET_HANDLER)/h_dcc.c \
$(BACNET_HANDLER)/h_ts.c \
$(BACNET_HANDLER)/h_whohas.c \
$(BACNET_HANDLER)/h_ihave.c \
$(BACNET_HANDLER)/h_cov.c \
$(BACNET_HANDLER)/h_ccov.c \
$(BACNET_HANDLER)/h_ucov.c \
$(BACNET_HANDLER)/h_getevent.c \
$(BACNET_HANDLER)/h_gas_a.c \
$(BACNET_HANDLER)/h_get_alarm_sum.c \
$(BACNET_HANDLER)/h_getevent_a.c \
$(BACNET_HANDLER)/h_pt.c \
$(BACNET_HANDLER)/h_pt_a.c \
$(BACNET_HANDLER)/h_upt.c \
$(BACNET_HANDLER)/s_arfs.c \
$(BACNET_HANDLER)/s_awfs.c \
$(BACNET_HANDLER)/s_dcc.c \
$(BACNET_HANDLER)/s_ihave.c \
$(BACNET_HANDLER)/s_get_alarm_sum.c \
$(BACNET_HANDLER)/s_get_event.c \
$(BACNET_HANDLER)/s_iam.c \
$(BACNET_HANDLER)/s_cov.c \
$(BACNET_HANDLER)/s_ptransfer.c \
$(BACNET_HANDLER)/s_rd.c \
$(BACNET_HANDLER)/s_rp.c \
$(BACNET_HANDLER)/s_rpm.c \
$(BACNET_HANDLER)/s_ts.c \
$(BACNET_HANDLER)/s_cevent.c \
$(BACNET_HANDLER)/s_router.c \
$(BACNET_HANDLER)/s_uevent.c \
$(BACNET_HANDLER)/s_whohas.c \
$(BACNET_HANDLER)/s_whois.c \
$(BACNET_HANDLER)/s_wpm.c \
$(BACNET_HANDLER)/s_upt.c \
$(BACNET_HANDLER)/s_wp.c
OBJSRC = \
$(BACNET_OBJECT)/bi.c \
$(BACNET_OBJECT)/bo.c \
$(BACNET_OBJECT)/netport.c
# core BACnet stack files
CORESRC = \
$(BACNET_CORE)/apdu.c \
$(BACNET_CORE)/npdu.c \
$(BACNET_CORE)/bacdcode.c \
$(BACNET_CORE)/bacint.c \
$(BACNET_CORE)/bacreal.c \
$(BACNET_CORE)/bacstr.c \
$(BACNET_CORE)/bacapp.c \
$(BACNET_CORE)/bacprop.c \
$(BACNET_CORE)/bactext.c \
$(BACNET_CORE)/datetime.c \
$(BACNET_CORE)/indtext.c \
$(BACNET_CORE)/key.c \
$(BACNET_CORE)/keylist.c \
$(BACNET_CORE)/proplist.c \
$(BACNET_CORE)/debug.c \
$(BACNET_CORE)/bigend.c \
$(BACNET_CORE)/arf.c \
$(BACNET_CORE)/awf.c \
$(BACNET_CORE)/cov.c \
$(BACNET_CORE)/dcc.c \
$(BACNET_CORE)/iam.c \
$(BACNET_CORE)/ihave.c \
$(BACNET_CORE)/rd.c \
$(BACNET_CORE)/rp.c \
$(BACNET_CORE)/rpm.c \
$(BACNET_CORE)/timesync.c \
$(BACNET_CORE)/whohas.c \
$(BACNET_CORE)/whois.c \
$(BACNET_CORE)/wp.c \
$(BACNET_CORE)/wpm.c \
$(BACNET_CORE)/abort.c \
$(BACNET_CORE)/reject.c \
$(BACNET_CORE)/bacerror.c \
$(BACNET_CORE)/ptransfer.c \
$(BACNET_CORE)/memcopy.c \
$(BACNET_CORE)/filename.c \
$(BACNET_CORE)/tsm.c \
$(BACNET_CORE)/bacaddr.c \
$(BACNET_CORE)/address.c \
$(BACNET_CORE)/bacdevobjpropref.c \
$(BACNET_CORE)/bacpropstates.c \
$(BACNET_CORE)/alarm_ack.c \
$(BACNET_CORE)/event.c \
$(BACNET_CORE)/getevent.c \
$(BACNET_CORE)/get_alarm_sum.c \
$(BACNET_CORE)/readrange.c \
$(BACNET_CORE)/timestamp.c \
$(BACNET_CORE)/lighting.c \
$(BACNET_CORE)/version.c
PORT_BIP_SRC = \
$(BACNET_PORT_DIR)/bip-init.c \
$(BACNET_CORE)/bvlc.c \
$(BACNET_CORE)/bip.c
ifeq (${BACDL_DEFINE},-DBACDL_BIP=1)
PORT_SRC = ${PORT_BIP_SRC}
endif
## Include Directories
INCLUDES = -I. -I$(BACNET_INCLUDE) -I$(BACNET_HANDLER) -I$(BACNET_OBJECT)
INCLUDES += -I$(BACNET_PORT_DIR)
INCLUDES += -I$(PIFACE_INCLUDE)
# Source to Object conversion
COBJ = $(CSRC:%.c=%.o)
DEMOOBJ = $(DEMOSRC:.c=.o)
COREOBJ = $(CORESRC:.c=.o)
OBJOBJ = $(OBJSRC:.c=.o)
PORTOBJ = $(PORT_SRC:.c=.o)
# define something from the Makefile or batch file
DEFINES = $(BACDL_DEFINE) $(BBMD_DEFINE)
OPTIMIZATION = -Os $(OPTIMIZE_FLAGS)
DEBUGGING = -g
ifeq (${BUILD},debug)
OPTIMIZATION = -O0
DEBUGGING = -g
endif
ifeq (${BUILD},release)
OPTIMIZATION = -Os $(OPTIMIZE_FLAGS)
DEBUGGING = -DNDEBUG
endif
BFLAGS += -DBACNET_PROTOCOL_REVISION=17
BFLAGS += -DMAX_TSM_TRANSACTIONS=1
BFLAGS += -DMAX_BINARY_INPUTS=4
BFLAGS += -DMAX_BINARY_OUTPUTS=8
## Compile options for C files
CFLAGS = $(DEFINES)
CFLAGS += $(DEBUGGING)
CFLAGS += $(INCLUDES)
# warnings
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
CFLAGS += -Wmissing-prototypes
# put it all together
CFLAGS += $(BFLAGS) $(OPTIMIZATION)
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Linker flags
LDPIFACE = -Wl,-L$(PIFACE_LIB),-lpifacedigital,-L$(MCP23S17_LIB),-lmcp23s17
LDFLAGS = -Wl,-lc,-lgcc,-lrt,-lm
LFLAGS := $(LDPIFACE) $(LDFLAGS)
LFLAGS += $(LDPIFACE)
## Objects not in library that must be built in order to link
OBJECTS = $(COBJ) $(DEMOOBJ) $(COREOBJ) $(OBJOBJ) $(PORTOBJ)
OBJS += ${SRC:.c=.o}
all: $(TARGET)
all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN}
$(TARGET): $(OBJECTS) $(LIBRARY)
$(CC) $(OBJECTS) $(LFLAGS) -o $@
${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET}
${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@
size $@
cp $@ ../../bin
${BACNET_LIB_TARGET}:
( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s )
.c.o:
${CC} -c ${CFLAGS} $*.c -o $@
.PHONY: depend
depend:
rm -f .depend
${CC} -MM ${CFLAGS} *.c >> .depend
.PHONY: clean
clean:
rm -f core ${TARGET} ${OBJECTS}
rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET}
.PHONY: include
include: .depend
.PHONY: clean all include depend
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
Regular → Executable
+9 -2
View File
@@ -3,8 +3,15 @@
# The library is located at github.com/piface
# Since the PiFace library is GPLv3, we have to keep it separate.
git clone https://github.com/piface/libmcp23s17.git
git clone https://github.com/piface/libpifacedigital.git
if [ ! -d "libmcp23s17" ]
then
git clone git@github.com:piface/libmcp23s17.git
fi
if [ ! -d "libpifacedigital" ]
then
git clone git@github.com:piface/libpifacedigital.git
fi
# Build the library