|
1 # Builds standalone C/C++ Beremiz runtime |
|
2 |
|
3 # This Makefile is based on fragments of eRPC Makefiles |
|
4 |
|
5 APP_NAME = beremiz_runtime |
|
6 |
|
7 RUNTIME_ROOT = $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) |
|
8 ERPC_ROOT ?= $(abspath $(RUNTIME_ROOT)/../../erpc) |
|
9 ERPC_C_ROOT = $(ERPC_ROOT)/erpc_c |
|
10 |
|
11 INCLUDES += $(ERPC_C_ROOT)/infra \ |
|
12 $(ERPC_C_ROOT)/port \ |
|
13 $(ERPC_C_ROOT)/setup \ |
|
14 $(ERPC_C_ROOT)/transports \ |
|
15 $(ERPC_ROOT)/test/common/config \ |
|
16 $(ERPC_ROOT)/erpcgen/src |
|
17 |
|
18 INCLUDES := $(foreach includes, $(INCLUDES), -I $(includes)) |
|
19 |
|
20 ERPC_SOURCES += $(ERPC_ROOT)/erpcgen/src/format_string.cpp \ |
|
21 $(ERPC_ROOT)/erpcgen/src/Logging.cpp \ |
|
22 $(ERPC_ROOT)/erpcgen/src/options.cpp \ |
|
23 $(ERPC_C_ROOT)/infra/erpc_arbitrated_client_manager.cpp \ |
|
24 $(ERPC_C_ROOT)/infra/erpc_basic_codec.cpp \ |
|
25 $(ERPC_C_ROOT)/infra/erpc_client_manager.cpp \ |
|
26 $(ERPC_C_ROOT)/infra/erpc_crc16.cpp \ |
|
27 $(ERPC_C_ROOT)/infra/erpc_server.cpp \ |
|
28 $(ERPC_C_ROOT)/infra/erpc_simple_server.cpp \ |
|
29 $(ERPC_C_ROOT)/infra/erpc_framed_transport.cpp \ |
|
30 $(ERPC_C_ROOT)/infra/erpc_message_buffer.cpp \ |
|
31 $(ERPC_C_ROOT)/infra/erpc_message_loggers.cpp \ |
|
32 $(ERPC_C_ROOT)/infra/erpc_transport_arbitrator.cpp \ |
|
33 $(ERPC_C_ROOT)/infra/erpc_utils.cpp \ |
|
34 $(ERPC_C_ROOT)/port/erpc_port_stdlib.cpp \ |
|
35 $(ERPC_C_ROOT)/port/erpc_threading_pthreads.cpp \ |
|
36 $(ERPC_C_ROOT)/port/erpc_serial.cpp \ |
|
37 $(ERPC_C_ROOT)/transports/erpc_serial_transport.cpp \ |
|
38 $(ERPC_C_ROOT)/transports/erpc_tcp_transport.cpp |
|
39 |
|
40 SOURCES += $(RUNTIME_ROOT)/c_erpc_PLCObject_client.cpp \ |
|
41 $(RUNTIME_ROOT)/c_erpc_PLCObject_server.cpp \ |
|
42 $(RUNTIME_ROOT)/erpc_PLCObject_client.cpp \ |
|
43 $(RUNTIME_ROOT)/erpc_PLCObject_interface.cpp \ |
|
44 $(RUNTIME_ROOT)/erpc_PLCObject_server.cpp \ |
|
45 $(RUNTIME_ROOT)/posix_main.cpp \ |
|
46 $(RUNTIME_ROOT)/PLCObject.cpp |
|
47 |
|
48 |
|
49 # get version from version.py |
|
50 BEREMIZ_VERSION := $(shell python3 $(RUNTIME_ROOT)/../version.py) |
|
51 |
|
52 CXXFLAGS += -std=gnu++17 -Wunused-variable -Wno-deprecated-register -Wno-narrowing -Werror -DBEREMIZ_VERSION=$(BEREMIZ_VERSION) |
|
53 # CFLAGS += -Os -DNDEBUG |
|
54 CXXFLAGS += -g3 -O0 -DDEBUG |
|
55 |
|
56 LIBRARIES += -lpthread -lrt -lc -lm |
|
57 LD = $(CXX) |
|
58 |
|
59 OBJS_ROOT = $(RUNTIME_ROOT)/build |
|
60 SOURCES_ABS := $(foreach s,$(SOURCES),$(abspath $(s))) |
|
61 SOURCES_REL := $(subst $(RUNTIME_ROOT)/,,$(SOURCES_ABS)) |
|
62 SOURCE_DIRS_ABS := $(sort $(foreach f,$(SOURCES_ABS),$(dir $(f)))) |
|
63 SOURCE_DIRS_REL := $(subst $(RUNTIME_ROOT)/,,$(SOURCE_DIRS_ABS)) |
|
64 CXX_SOURCES = $(filter %.cpp,$(SOURCES_REL)) |
|
65 OBJECTS_CXX := $(addprefix $(OBJS_ROOT)/,$(CXX_SOURCES:.cpp=.o)) |
|
66 |
|
67 $(OBJS_ROOT)/%.o: $(RUNTIME_ROOT)/%.cpp |
|
68 @echo Compiling $(subst $(RUNTIME_ROOT)/,,$<) |
|
69 $(CXX) $(CXXFLAGS) $(INCLUDES) -MMD -MF $(basename $@).d -MP -o $@ -c $< |
|
70 |
|
71 ERPC_OBJS_ROOT = $(RUNTIME_ROOT)/erpcbuild |
|
72 ERPC_SOURCES_ABS := $(foreach s,$(ERPC_SOURCES),$(abspath $(s))) |
|
73 ERPC_SOURCES_REL := $(subst $(ERPC_ROOT)/,,$(ERPC_SOURCES_ABS)) |
|
74 ERPC_SOURCE_DIRS_ABS := $(sort $(foreach f,$(ERPC_SOURCES_ABS),$(dir $(f)))) |
|
75 ERPC_SOURCE_DIRS_REL := $(subst $(ERPC_ROOT)/,,$(ERPC_SOURCE_DIRS_ABS)) |
|
76 ERPC_CXX_SOURCES = $(filter %.cpp,$(ERPC_SOURCES_REL)) |
|
77 ERPC_OBJECTS_CXX := $(addprefix $(ERPC_OBJS_ROOT)/,$(ERPC_CXX_SOURCES:.cpp=.o)) |
|
78 |
|
79 $(ERPC_OBJS_ROOT)/%.o: $(ERPC_ROOT)/%.cpp |
|
80 @echo Compiling, $(subst $(ERPC_ROOT)/,,$<) |
|
81 $(CXX) $(CXXFLAGS) $(INCLUDES) -MMD -MF $(basename $@).d -MP -o $@ -c $< |
|
82 |
|
83 OBJECTS_ALL := $(sort $(ERPC_OBJECTS_CXX) $(OBJECTS_CXX)) |
|
84 OBJECTS_DIRS := $(OBJS_ROOT) $(addprefix $(OBJS_ROOT)/,$(SOURCE_DIRS_REL)) $(ERPC_OBJS_ROOT) $(addprefix $(ERPC_OBJS_ROOT)/,$(ERPC_SOURCE_DIRS_REL)) |
|
85 |
|
86 .PHONY: all $(APP_NAME) |
|
87 all: $(APP_NAME) $(OBJECTS_DIRS) |
|
88 |
|
89 $(OBJECTS_DIRS) : |
|
90 mkdir -p $@ |
|
91 |
|
92 $(OBJECTS_ALL): | $(OBJECTS_DIRS) |
|
93 |
|
94 $(APP_NAME): $(OBJECTS_ALL) |
|
95 @echo Linking, $(APP_NAME) |
|
96 $(LD) $(LDFLAGS) \ |
|
97 $(OBJECTS_ALL) \ |
|
98 -o $@ \ |
|
99 $(LIBRARIES) |
|
100 @echo "Output binary:" ; echo " $(APP_NAME)" |
|
101 |
|
102 .PHONY: clean |
|
103 clean:: |
|
104 @echo "Cleaning $(APP_NAME)" |
|
105 rm -rf $(OBJECTS_ALL) $(OBJECTS_DIRS) $(APP_NAME) |
|
106 |
|
107 -include $(OBJECTS_ALL:.o=.d) |