New Makefile

This commit is contained in:
gandc 2025-05-22 23:59:07 +03:00
parent 76121a11db
commit ea6ae2d7e9
Signed by: gandc
GPG Key ID: 9F77B03D43C42CB4

130
Makefile
View File

@ -1,107 +1,31 @@
CC = gcc
PKG_CONFIG = pkg-config
CONFIG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libconfig)
CONFIG_LDFLAGS := $(shell $(PKG_CONFIG) --libs libconfig)
CFLAGS = -Wall -O2 -Ilibmysyslog $(CONFIG_CFLAGS)
LDFLAGS = -L$(BUILD_DIR) -lmysyslog $(CONFIG_LDFLAGS)
BUILD_DIR = build
LIB_SRC = libmysyslog/libmysyslog.c
LIB_OBJ = $(BUILD_DIR)/libmysyslog.o
LIB_A = $(BUILD_DIR)/libmysyslog.a
CLIENT_DIR := myRPC-client/src
CLIENT_SRC := $(CLIENT_DIR)/myRPC-client.c
CLIENT_OBJ := $(BUILD_DIR)/myRPC-client.o
CLIENT_BIN := $(BUILD_DIR)/myRPC-client
SERVER_DIR := myRPC-server/src
SERVER_SRC := $(SERVER_DIR)/myRPC-server.c
SERVER_OBJ := $(BUILD_DIR)/myRPC-server.o
SERVER_BIN := $(BUILD_DIR)/myRPC-server
version = 1.0
revision = 0
architecture = all
.PHONY: all clean deb repo systemd_install
all: $(BUILD_DIR) $(LIB_A) $(CLIENT_BIN) $(SERVER_BIN)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(LIB_OBJ): $(LIB_SRC) | $(BUILD_DIR)
$(CC) $(CFLAGS) -fPIC -c $< -o $@
$(LIB_A): $(LIB_OBJ)
ar rcs $@ $^
$(CLIENT_OBJ): $(CLIENT_SRC) | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(CLIENT_BIN): $(CLIENT_OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
$(SERVER_OBJ): $(SERVER_SRC) | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(SERVER_BIN): $(SERVER_OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
###############################################################################
# Создание deb-пакетов
###############################################################################
deb: deb_client deb_server
@rm -rf MyRPC_client_$(version)-$(revision)_$(architecture)
@rm -rf MyRPC_server_$(version)-$(revision)_$(architecture)
deb_client:
@mkdir -p MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN
@printf "Package: myrpc-client\nVersion: $(version)\nArchitecture: $(architecture)\nMaintainer: gandc <admin@gandc.ru>\nDescription: Client for remote command execution via myRPC\n" > MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN/control
@mkdir -p MyRPC_client_$(version)-$(revision)_$(architecture)/usr/local/bin
@cp $(CLIENT_BIN) MyRPC_client_$(version)-$(revision)_$(architecture)/usr/local/bin
@dpkg-deb --root-owner-group --build MyRPC_client_$(version)-$(revision)_$(architecture)
deb_server:
@mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN
@printf "Package: myrpc-server\nVersion: $(version)\nArchitecture: $(architecture)\nMaintainer: gandc <admin@gandc.ru>\nDescription: Server for remote command execution via myRPC\n" > MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/control
@mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/usr/local/bin
@cp $(SERVER_BIN) MyRPC_server_$(version)-$(revision)_$(architecture)/usr/local/bin
@mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/lib/systemd/system
@cp systemd/myrpc-server.service MyRPC_server_$(version)-$(revision)_$(architecture)/lib/systemd/system
@printf "#!/bin/sh\nsystemctl daemon-reload\n" > MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/postinst
@chmod 755 MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/postinst
@dpkg-deb --root-owner-group --build MyRPC_server_$(version)-$(revision)_$(architecture)
###############################################################################
# Создание локального репозитория APT
###############################################################################
repo:
@mkdir -p /usr/local/repos
@cp *.deb /usr/local/repos
@cd /usr/local/repos && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
@echo "deb [trusted=yes] file:/usr/local/repos ./" | sudo tee /etc/apt/sources.list.d/myrpc.list
@sudo apt-get update
###############################################################################
# Установка systemd unit-файла
###############################################################################
systemd_install:
@echo "Installing systemd unit for myrpc-server..."
@sudo cp systemd/myrpc-server.service /etc/systemd/system/
@sudo systemctl daemon-reload
@echo "Done. You can now sudo systemctl enable myrpc-server && sudo systemctl start myrpc-server"
###############################################################################
# Очистка
###############################################################################
all: clean
$(MAKE) -C libmysyslog all
$(MAKE) -C myRPC-client all
$(MAKE) -C myRPC-server all
clean:
rm -rf $(BUILD_DIR)
rm -f *.deb
$(MAKE) -C libmysyslog clean
$(MAKE) -C myRPC-client clean
$(MAKE) -C myRPC-server clean
rm -f *.deb
deb: all
$(MAKE) -C libmysyslog deb
$(MAKE) -C myRPC-client deb
$(MAKE) -C myRPC-server deb
mv libmysyslog/*.deb .
mv myRPC-client/*.deb .
mv myRPC-server/*.deb .
repo: deb
mkdir -p /usr/local/repos
cp *.deb /usr/local/repos
cd /usr/local/repos && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
echo "deb [trusted=yes] file:/usr/local/repos ./" | sudo tee /etc/apt/sources.list.d/myrpc.list
sudo apt-get update
systemd_install:
sudo cp systemd/myrpc-server.service /etc/systemd/system/
sudo systemctl daemon-reload