mirror of
https://github.com/seahu/rflink.git
synced 2025-12-10 07:57:23 +01:00
161 lines
6.6 KiB
Makefile
161 lines
6.6 KiB
Makefile
|
|
|
|
# Defines the RPI variable which is needed by rc-switch/RCSwitch.h
|
|
CXXFLAGS=-DRPI
|
|
|
|
# configuration file for plugins placed into directory ../../Config/
|
|
CONFIG_PLUGINS="Config_02.c"
|
|
|
|
#all: send codesend RFSniffer
|
|
all: | prepare
|
|
|
|
# prepare (generate) files for plagins and filess need for compile
|
|
prepare: | createDirPlugins ./Plugins/Make_Generated_list_plugin.txt ./Plugins/Make_Generated_all_h.h ./Plugins/Make_Generated_all_RX.h ./Plugins/Make_Generated_all_TX.h
|
|
$(MAKE) RFlink
|
|
|
|
# variable object conatin project files for compilation with .o (make use default macros for create .o from .c or .cpp)
|
|
objects = ./Base.o ./RawSignal.o ./server.o ./Plug.o ./Misc.o ./arduino/EmulateArduino.o
|
|
#objects =
|
|
|
|
# NOTICE main diference between = and :=
|
|
#---------------------------------------
|
|
# name_variable = $(shell cmd) # this will be actualize every time vhen $(name_variable) is call
|
|
# name_variable := $(shell cmd) # this will be set only one when start make
|
|
|
|
# example howto generate variable form files in directory and coincided rename items of variable to .o
|
|
#allowed_plagins = $(patsubst %.h,%.o,$(wildcard ./Plugins/Plugin_*.h))
|
|
|
|
# examle howto generate variable from shell (only one command may be used not sequence )
|
|
allowed_plagins = $(shell cat ./Plugins/Make_Generated_list_plugin.txt )
|
|
|
|
RFlink: $(objects) $(allowed_plagins)
|
|
$(CXX) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lpthread
|
|
|
|
clean:
|
|
$(RM) ./RFlink ./*.o ./*.gch ./arduino/*.o ./arduino/*.gch ./Plugins/* ; rmdir ./Plugins
|
|
|
|
|
|
#---------------------------------------------- install/uninstall-------------------------------------------------------------------------
|
|
# must be run as sudo (sudo make install)
|
|
install: ./RFlink
|
|
if ! [ -d "/opt/rflink" ] ; then mkdir "/opt/rflink"; fi ;
|
|
if ! [ -f "/opt/rflink/RFlink" ] ; then cp "./RFlink" "/opt/rflink/" ; fi ;
|
|
if ! [ -f "/etc/rflink.conf" ] ; then cp "./etc/rflink.conf" "/etc/" ; fi ;
|
|
if ! [ -f "/etc/init.d/rflink.sh" ] ; then cp "./etc/init.d/rflink.sh" "/etc/init.d/" ; fi
|
|
update-rc.d rflink defaults
|
|
update-rc.d rflink enable
|
|
|
|
# must be run as sudo (sudo make uninstall)
|
|
uninstall:
|
|
update-rc.d rflink remove
|
|
if [ -f "/etc/init.d/rflink.sh" ] ; then /etc/init.d/rflink.sh stop ; fi
|
|
if [ -f "/etc/init.d/rflink.sh" ] ; then rm "/etc/init.d/rflink.sh" ; fi
|
|
if [ -f "/etc/rflink.conf" ] ; then rm "/etc/rflink.conf" ; fi ;
|
|
if [ -f "/opt/rflink/RFlink" ] ; then rm "/opt/rflink/RFlink" ; fi ;
|
|
if [ -d "/opt/rflink" ] ; then rmdir "/opt/rflink"; fi ;
|
|
|
|
# enable autostart RFlink service after start system
|
|
autostart_on: /opt/rflink/RFlink
|
|
update-rc.d rflink.sh enable
|
|
/etc/init.d/rflink.sh start
|
|
|
|
# disable auto start RFlink service after start system
|
|
autostart_off: /opt/rflink/RFlink
|
|
/etc/init.d/rflink.sh stop
|
|
update-rc.d rflink.sh disable
|
|
|
|
#---------------------------------------------- GENERATE FILES -------------------------------------------------------------------------
|
|
|
|
#create dir with pugins if not exist
|
|
createDirPlugins:
|
|
if ! [ -d ./Plugins ] ; then mkdir "./Plugins"; fi ;
|
|
|
|
# generate not only list of allowed plugins but also .cpp, .h files for allowed plagins
|
|
# file "Make_Generated_list_plugin.txt" contain name of allowed plafin with .o used later for generate variable with list files for compile
|
|
# .cpp and .h contain nessesery files for compile plugins
|
|
./Plugins/Make_Generated_list_plugin.txt:
|
|
cd ./Plugins; \
|
|
for i in `ls ../../Plugins/Plugin_*.c`;do \
|
|
n=$${i#*_}; \
|
|
n=$${n%.*}; \
|
|
if grep -q "^#define PLUGIN_$$n" "../../Config/$(CONFIG_PLUGINS)"; then \
|
|
echo -n "./Plugins/Plugin_$$n.o " >> ./Make_Generated_list_plugin.txt; \
|
|
\
|
|
echo "//This file is generated by GNU make, do not edit." >> ./Plugin_$$n.cpp; \
|
|
echo "#include \"Plugin_$$n.h\"" >> ./Plugin_$$n.cpp; \
|
|
echo "#ifdef PLUGIN_$$n" >> ./Plugin_$$n.cpp; \
|
|
echo "#include \"../../Plugins/Plugin_$$n.c\"" >> ./Plugin_$$n.cpp; \
|
|
echo "#endif" >> ./Plugin_$$n.cpp; \
|
|
\
|
|
echo "//This file is generated by GNU make, do not edit." >> ./Plugin_$$n.h; \
|
|
echo -n "#ifndef _plugin_$$n" >> ./Plugin_$$n.h; \
|
|
echo "_h" >> ./Plugin_$$n.h; \
|
|
echo -n " #define _plugin_$$n" >> ./Plugin_$$n.h; \
|
|
echo "_h" >> ./Plugin_$$n.h; \
|
|
echo " #include \"../../Config/$(CONFIG_PLUGINS)\"" >> ./Plugin_$$n.h; \
|
|
echo " #ifdef PLUGIN_$$n" >> ./Plugin_$$n.h; \
|
|
echo " #include \"../Base.h\"" >> ./Plugin_$$n.h; \
|
|
echo " //prototype functions" >> ./Plugin_$$n.h; \
|
|
echo " boolean Plugin_$$n(byte function, char *string);" >> ./Plugin_$$n.h; \
|
|
if grep -q "^#define PLUGIN_TX_$$n" "../../Config/$(CONFIG_PLUGINS)"; then \
|
|
echo " boolean PluginTX_$$n(byte function, char *string);" >> ./Plugin_$$n.h; \
|
|
fi; \
|
|
echo " #endif" >> ./Plugin_$$n.h; \
|
|
echo "#endif" >> ./Plugin_$$n.h; \
|
|
fi; \
|
|
done;
|
|
|
|
# Generate Make_Generated_all_h.h file contain include directives for all plugins:
|
|
# #include "./Plugins/Plugin_001.h"
|
|
# #include "./Plugins/Plugin_002.h"
|
|
# ...
|
|
# ..
|
|
./Plugins/Make_Generated_all_h.h:
|
|
echo "//This file is generated by GNU make, do not edit.\n//This generated file is used in ../Plug.h ." >> ./Plugins/Make_Generated_all_h.h; \
|
|
cd ./Plugins; \
|
|
for i in `ls ./Plugin_*.h`;do \
|
|
echo "#include \"$$i\"" >> ./Make_Generated_all_h.h; \
|
|
done;
|
|
|
|
|
|
# Generate Make_Generated_all_RX.h file contain block C++ code init RX function plugins.
|
|
# Only for enable plugin in ..\Config\Config_02.c. Example:
|
|
# Plugin_id[x]=1;Plugin_ptr[x++]=&Plugin_001;
|
|
# Plugin_id[x]=2;Plugin_ptr[x++]=&Plugin_002;
|
|
# ...
|
|
# ..
|
|
./Plugins/Make_Generated_all_RX.h:
|
|
cd ./Plugins; \
|
|
echo "//This file is generated by GNU make, do not edit." >> ./Make_Generated_all_RX.h; \
|
|
echo "//This generated file is used in ../Plug.h ." >> ./Make_Generated_all_RX.h; \
|
|
x=1; \
|
|
for i in `ls Plugin_*.h`;do \
|
|
n=$${i#*_}; \
|
|
n=$${n%.*}; \
|
|
if grep -q "^#define PLUGIN_$$n" "../../Config/$(CONFIG_PLUGINS)"; then \
|
|
echo "Plugin_id[x]=$$x;Plugin_ptr[x++]=&Plugin_$$n;" >> ./Make_Generated_all_RX.h; \
|
|
x=$$(($$x+1)); \
|
|
fi; \
|
|
done;
|
|
|
|
# Generate Make_Generated_all_TX.h file contain block C++ code init TX function plugins.
|
|
# Only for enable plugin in ..\Config\Config_02.c. Example:
|
|
# PluginTX_id[x]=1;PluginTX_ptr[x++]=&Plugin_001;
|
|
# PluginTX_id[x]=2;PluginTX_ptr[x++]=&Plugin_002;
|
|
# ...
|
|
# ..
|
|
./Plugins/Make_Generated_all_TX.h:
|
|
cd ./Plugins; \
|
|
echo "//This file is generated by GNU make, do not edit." >> ./Make_Generated_all_TX.h; \
|
|
echo "//This generated file is used in ../Plug.h ." >> ./Make_Generated_all_TX.h; \
|
|
x=1; \
|
|
for i in `ls Plugin_*.h`;do \
|
|
n=$${i#*_}; \
|
|
n=$${n%.*}; \
|
|
if grep -q "^#define PLUGIN_TX_$$n" "../../Config/$(CONFIG_PLUGINS)"; then \
|
|
echo "PluginTX_id[x]=$$x;PluginTX_ptr[x++]=&PluginTX_$$n;" >> ./Make_Generated_all_TX.h; \
|
|
x=$$(($$x+1)); \
|
|
fi; \
|
|
done;
|
|
|