|
| 1 | +# SYNOPSIS: |
| 2 | +# |
| 3 | +# make [all] - makes everything. |
| 4 | +# make TARGET - makes the given target. |
| 5 | +# make run_tests - makes everything and runs all test |
| 6 | +# make run-% - run specific test file (exclude .py) |
| 7 | +# replace % with given test file |
| 8 | +# make clean - removes all files generated by make. |
| 9 | + |
| 10 | +# Please tweak the following variable definitions as needed by your |
| 11 | +# project, except GTEST_HEADERS, which you can use in your own targets |
| 12 | +# but shouldn't modify. |
| 13 | + |
| 14 | +ifeq (,$(wildcard ./.dockerenv)) |
| 15 | +SWIGTYPE = local |
| 16 | +else |
| 17 | +SWIGTYPE = global |
| 18 | +endif |
| 19 | + |
| 20 | +# Where to find user code. |
| 21 | +SRC_DIR = ../src |
| 22 | + |
| 23 | +# Where to find test code. |
| 24 | +TEST_DIR = ../test |
| 25 | + |
| 26 | +INCLUDES = -I$(SRC_DIR) -I$(TEST_DIR) |
| 27 | +DEFFLAGS = -DUNIT_TEST -DSWIGLIB |
| 28 | +# Flags passed to the preprocessor. |
| 29 | +# Set Google Test's header directory as a system directory, such that |
| 30 | +# the compiler doesn't generate warnings in Google Test headers. |
| 31 | +CPPFLAGS += -D_IR_LOCALE_=en-AU -fPIC $(DEFFLAGS) |
| 32 | + |
| 33 | +# Flags passed to the C++ compiler. |
| 34 | +CXXFLAGS += -g -Wall -Wextra -pthread -std=gnu++11 |
| 35 | + |
| 36 | +PYTHONINCL = $(shell python3-config --includes) |
| 37 | + |
| 38 | +objects = $(patsubst %.cpp,%,$(wildcard *.cpp)) |
| 39 | + |
| 40 | +all : _irhvac.so |
| 41 | + |
| 42 | +library : $(objects) |
| 43 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -shared -Wl,-soname,lib_irhvac.so -o _irhvac.so $(COMMON_OBJ) |
| 44 | + |
| 45 | +swig : libirhvac_wrap.cxx |
| 46 | +ifneq (,$(wildcard /.dockerenv)) |
| 47 | + SWIG_LIB=$(shell realpath -qe swig-4.2.0/Lib) ./swig-4.2.0/swig $(INCLUDES) $(DEFFLAGS) -c++ -python libirhvac.i |
| 48 | +else |
| 49 | + swig $(INCLUDES) $(DEFFLAGS) -c++ -python libirhvac.i |
| 50 | +endif |
| 51 | + |
| 52 | +clean : |
| 53 | + rm -f *.o *.pyc *.cxx *.cpp |
| 54 | + rm -rf swig-4.2.0 |
| 55 | +distclean : |
| 56 | + rm -f *.o *.pyc libirhvac_wrap.cxx irhvac.py _irhvac.so |
| 57 | + rm -rf swig-4.2.0 |
| 58 | + |
| 59 | + |
| 60 | +test : _irhvac.so |
| 61 | + python test_lib.py |
| 62 | + |
| 63 | +docker : swig-4.2.0/swig _irhvac.so |
| 64 | + |
| 65 | +testdocker : swig-4.2.0/swig _irhvac.so |
| 66 | + python test_lib.py |
| 67 | + |
| 68 | +# Keep all intermediate files. |
| 69 | +.SECONDARY: |
| 70 | + |
| 71 | +# All the IR protocol object files. |
| 72 | +PROTOCOL_OBJS = $(patsubst %.cpp,%.o,$(wildcard $(SRC_DIR)/ir_*.cpp)) |
| 73 | +PROTOCOLS = $(patsubst $(SRC_DIR)/%,%,$(PROTOCOL_OBJS)) |
| 74 | + |
| 75 | +# Common object files |
| 76 | +COMMON_OBJ = libirhvac_wrap.o IRutils.o IRtimer.o IRsend.o IRrecv.o IRtext.o IRac.o $(PROTOCOLS) |
| 77 | + |
| 78 | +# Common dependencies |
| 79 | +COMMON_DEPS = $(SRC_DIR)/IRrecv.h $(SRC_DIR)/IRsend.h $(SRC_DIR)/IRtimer.h \ |
| 80 | + $(SRC_DIR)/IRutils.h $(SRC_DIR)/IRremoteESP8266.h \ |
| 81 | + $(SRC_DIR)/IRtext.h $(SRC_DIR)/i18n.h |
| 82 | +# Common test dependencies |
| 83 | +COMMON_TEST_DEPS = $(COMMON_DEPS) $(TEST_DIR)/IRsend_test.h |
| 84 | + |
| 85 | +IRtext.o : $(SRC_DIR)/IRtext.cpp $(SRC_DIR)/IRtext.h $(SRC_DIR)/IRremoteESP8266.h $(SRC_DIR)/i18n.h $(SRC_DIR)/locale/*.h |
| 86 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(SRC_DIR)/IRtext.cpp |
| 87 | + |
| 88 | +IRutils.o : $(SRC_DIR)/IRutils.cpp $(SRC_DIR)/IRutils.h $(SRC_DIR)/IRremoteESP8266.h |
| 89 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SRC_DIR)/IRutils.cpp |
| 90 | + |
| 91 | +IRsend.o : $(SRC_DIR)/IRsend.cpp $(SRC_DIR)/IRsend.h $(SRC_DIR)/IRremoteESP8266.h |
| 92 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SRC_DIR)/IRsend.cpp |
| 93 | + |
| 94 | +IRrecv.o : $(SRC_DIR)/IRrecv.cpp $(SRC_DIR)/IRrecv.h $(SRC_DIR)/IRremoteESP8266.h $(GTEST_HEADERS) |
| 95 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SRC_DIR)/IRrecv.cpp |
| 96 | + |
| 97 | +libirhvac_wrap.o : libirhvac_wrap.cxx |
| 98 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) $(PYTHONINCL) -c libirhvac_wrap.cxx |
| 99 | + |
| 100 | +libirhvac_wrap.cxx : |
| 101 | + swig $(INCLUDES) $(DEFFLAGS) -c++ -python libirhvac.i |
| 102 | + |
| 103 | +_irhvac.so : $(COMMON_OBJ) |
| 104 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -shared -Wl,-soname,lib_irhvac.so -o _irhvac.so $(COMMON_OBJ) |
| 105 | + |
| 106 | +swig-4.2.0/swig : |
| 107 | + curl -s -L -o - http://downloads.sourceforge.net/project/swig/swig/swig-4.2.0/swig-4.2.0.tar.gz | tar xfz - |
| 108 | + ( cd swig-4.2.0; ./configure ; make ) |
| 109 | +# new specific targets goes above this line |
| 110 | + |
| 111 | +$(objects) : %: $(COMMON_OBJ) |
| 112 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ |
| 113 | + |
| 114 | +ir_%.o : $(SRC_DIR)/ir_%.h $(SRC_DIR)/ir_%.cpp $(COMMON_DEPS) $(GTEST_HEADERS) |
| 115 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(SRC_DIR)/ir_$*.cpp |
| 116 | + |
| 117 | +ir_%.o : $(SRC_DIR)/ir_%.cpp $(GTEST_HEADERS) |
| 118 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(SRC_DIR)/ir_$*.cpp |
| 119 | + |
| 120 | +%.o : %.cpp $(COMMON_DEPS) $(GTEST_HEADERS) |
| 121 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $*.cpp |
| 122 | + |
| 123 | +%.o : $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h $(COMMON_DEPS) $(GTEST_HEADERS) |
| 124 | + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(SRC_DIR)/$*.cpp |
0 commit comments