Files
Codesys-Library-Atom-Modbus/ExtensionSDK/makefile
T

184 lines
4.7 KiB
Makefile

##############################################################################
# Copyright: Copyright CODESYS Development GmbH
# Program: Extension API for the Linux SL products
##############################################################################
ifeq ($(dir $(lastword $(MAKEFILE_LIST))), ./)
#
# MAKEFILE is used wrong! Never call it from this folder directly
#
.PHONY:help
help:
@echo "**********************"
@echo "Dont work inside this folder! Please go to your library folder and call this makefile e.g.:"
@echo "make -f ../sdk/makefile newproject"
@echo
@echo "**********************"
.PHONY:all
all: help
.PHONY:newproject
newproject: help
.PHONY:makefile
makefile: help
else
#
# NORMAL RULES
#
# get some info from generated files
ITFM4 = $(wildcard *Itf.m4)
CSRC = $(wildcard *.c)
CMPBASENAME=$(CSRC:.c=)
# set some variables
OUTDIR=./out
ITF = $(basename ${ITFM4})
TEMPLATEDEP = $(SDKDIR)/m4/TemplateDep.m4
DEP = ${CMPBASENAME}Dep
# set name of shared object
SONAME= lib${CMPBASENAME}.so
# set sources of component
SRC += ${CSRC} CmpFrame.c
# objects: all sources
OBJS = $(addprefix ${OUTDIR}/,$(SRC:.c=.o))
# set default includes
INCLUDES += -I${SDKDIR}/include/ -I${OUTDIR}/ -I.
CFLAGS += -fPIC -g -O0 -Wall -Wextra -Wno-unused
CFLAGS += -DDEP_H=\"${DEP}.h\"
# set a vendorID
CMPVENDORID=0xFFFF
vpath %.m4 ${SDKDIR}/cmpstub/
vpath %.c ${SDKDIR}/src/
.PHONY:help
help:
@echo "**********************"
@echo "help / usage / available make targets:"
@echo "-all : just do everything needed"
@echo "-clean : cleanup all generated files"
@echo "-newproject : create a new project"
@echo "-showenv : show intern variables (for debugging)"
@echo "**********************"
.PHONY:newproject
newproject: makefile
.PHONY:all
all: ${OUTDIR}/$(SONAME)
SDK_BASE=$(dir $(lastword $(MAKEFILE_LIST)))
.PHONY:showenv
showenv:
@echo "**********************"
@echo "ITFM4: ${ITFM4}"
@echo "CSRC: ${CSRC}"
@echo "SONAME: ${SONAME}"
@echo "ITF: ${ITF}"
@echo "DEP: ${DEP}"
@echo "OBJS: ${OBJS}"
@echo "CC: $(CC)"
@echo "CFLAGS: ${CFLAGS}"
@echo "SDKDIR: ${SDKDIR}"
@echo "CMPBASENAME: ${CMPBASENAME}"
@echo "MAKEFILE_LIST: $(MAKEFILE_LIST)"
@echo "**********************"
@echo ""
# check if there are whitespaces in the SDK BASE DIR
# this causes horrible things in make, so we detect/avoid it directly at creating a new project
ifeq (1,$(words $(MAKEFILE_LIST)))
makefile:
@echo "**********************"
@echo "creating makefile for your project "
cp ${SDK_BASE}/makefile_template $@
@echo "# include of the SDK makefiles" >> $@
@echo "SDKDIR="$(abspath ${SDK_BASE}) >> $@
@echo 'include $${SDKDIR}/makefile' >> $@
@echo "" >> $@
@echo "now check your makefile here"
@echo "**********************"
@echo ""
else
makefile:
@echo "**********************"
@echo "creating makefile for your project FAILED:"
@echo "there are whitespaces in the SDK path"
@echo "this does not work with 'make'!"
@echo "Please put your SDK to a path without whitespaces"
@echo "**********************"
@echo ""
endif
${OUTDIR}/%.o: %.c
@echo "**********************"
@echo "compile: $@ from $<"
@mkdir -p ${OUTDIR}
$(CC) -c $(CFLAGS) $(INCLUDES) -o $@ $<
@echo "**********************"
@echo ""
${OUTDIR}/${SONAME}: ${OUTDIR}/$(DEP).h ${OUTDIR}/$(ITF).h $(OBJS)
@echo "**********************"
@echo "link: $@"
@mkdir -p ${OUTDIR}
$(CC) $(LDFLAGS) -shared $(OBJS) -Wl,-soname,$(SONAME) -o $@ $(LDLIBS)
@echo "**********************"
@echo ""
${OUTDIR}/$(DEP).m4:
@echo "**********************"
@echo "create $@ from template"
@mkdir -p ${OUTDIR}
echo 'SET_COMPONENT_NAME(`'${CMPBASENAME}"')" > $@
echo 'COMPONENT_VERSION(`'${CMPVERSION}"')" >> $@
echo 'COMPONENT_VENDORID(`'${CMPVENDORID}"')" >> $@
echo "#define CMPID_${CMPBASENAME} ${CMPID}" >> $@
echo "IMPLEMENT_ITF("'`'"${CMPBASENAME}Itf.m4')" >> $@
@echo "**********************"
@echo ""
${OUTDIR}/$(DEP).h: ${OUTDIR}/$(DEP).m4 $(ITF).m4
@echo "**********************"
@echo "build dependency header: $@ from $<"
@mkdir -p ${OUTDIR}
$(DOS2UNIX) $<
$(M4) -I$(SDKDIR)/m4 -I. Implementation.m4 - < $< > $@
@echo "**********************"
@echo ""
${OUTDIR}/$(ITF).h: $(ITF).m4
@echo "**********************"
@echo "build interface header: $@ from $<"
@sed -n '/DEF_API/ !d; /_cext/ ! { s/^/ERROR: This functionname does not contain _cext (this is mandatory, see help for details):\n/p;q 1}' $<
@mkdir -p ${OUTDIR}
$(DOS2UNIX) $<
$(M4) -I$(SDKDIR)/m4 Exports.m4 - < $< > $@
@echo "**********************"
@echo ""
.PHONY:clean
clean:
@echo ""
@echo "**********************"
@echo "clean up"
rm -rf ${OUTDIR};
@echo "**********************"
@echo ""
endif