C_runtime/Makefile
changeset 3937 e13543d716b6
equal deleted inserted replaced
3936:129202e555e0 3937:e13543d716b6
       
     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)