16e9f12a34
Also rename tests and rename some constants, and modify Makefile to handle the new structure.
95 lines
2.9 KiB
Makefile
95 lines
2.9 KiB
Makefile
CC = cc
|
|
|
|
CFLAGS = -std=gnu23
|
|
CFLAGS_WARNINGS = -Wall -Wextra
|
|
CFLAGS_RELEASE = -O2 -fstack-protector-strong -fpie -s
|
|
CFLAGS_DEBUG = -O0 -ggdb -DDEBUG -fsanitize=address -static-libasan
|
|
|
|
TEST_LIBS = -lcmocka
|
|
TEST_INCLUDES = $(shell pkg-config --cflags cmocka)
|
|
CFLAGS_TEST = -O0 -ggdb -DTEST -fsanitize=address -static-libasan -fprofile-instr-generate -fcoverage-mapping $(TEST_INCLUDES)
|
|
LDFLAGS_TEST = $(TEST_LIBS)
|
|
|
|
prefix = /usr/local
|
|
exec_prefix = $(prefix)
|
|
bindir = $(exec_prefix)/bin
|
|
|
|
SOURCE_FOLDER = src
|
|
SOURCES = $(wildcard $(SOURCE_FOLDER)/*.c)
|
|
APP_SOURCES = $(filter-out $(SOURCE_FOLDER)/main.c,$(SOURCES))
|
|
TARGET = wamf
|
|
TARGET_DEBUG = wamf-debug
|
|
OUTPUT_FOLDER = output
|
|
OUTPUT = $(OUTPUT_FOLDER)/$(TARGET)
|
|
OUTPUT_DEBUG = $(OUTPUT_FOLDER)/$(TARGET_DEBUG)
|
|
|
|
TEST_FOLDER = test
|
|
TEST_SOURCES = $(wildcard $(TEST_FOLDER)/*.c)
|
|
TEST_OUTPUT_FOLDER = $(OUTPUT_FOLDER)/test
|
|
TEST_OUTPUT = $(TEST_OUTPUT_FOLDER)/test
|
|
|
|
REMOTE_USER = root
|
|
REMOTE_HOST = innovation.pvv.ntnu.no
|
|
REMOTE_DIR = /tmp/wamf
|
|
REMOTE_PATH = $(REMOTE_USER)@$(REMOTE_HOST):$(REMOTE_DIR)
|
|
|
|
.PHONY: all install release debug clean deploy remote-build remote-clean remote-run help test
|
|
|
|
all: $(OUTPUT)
|
|
|
|
$(OUTPUT_FOLDER):
|
|
mkdir -p $(OUTPUT_FOLDER)
|
|
|
|
$(TEST_OUTPUT_FOLDER): $(OUTPUT_FOLDER)
|
|
mkdir -p $(TEST_OUTPUT_FOLDER)
|
|
|
|
$(OUTPUT) release: $(SOURCES) $(OUTPUT_FOLDER)
|
|
$(CC) $(CFLAGS) $(CFLAGS_WARNINGS) $(CFLAGS_RELEASE) -o $(OUTPUT) $(SOURCES)
|
|
|
|
$(OUTPUT_DEBUG) debug: $(SOURCES) $(OUTPUT_FOLDER)
|
|
$(CC) $(CFLAGS) $(CFLAGS_WARNINGS) $(CFLAGS_DEBUG) -o $(OUTPUT_DEBUG) $(SOURCES)
|
|
|
|
$(TEST_OUTPUT): $(APP_SOURCES) $(TEST_SOURCES) $(TEST_OUTPUT_FOLDER)
|
|
$(CC) $(CFLAGS) $(CFLAGS_WARNINGS) $(CFLAGS_TEST) -o $(TEST_OUTPUT) $(APP_SOURCES) $(TEST_SOURCES) $(LDFLAGS_TEST)
|
|
|
|
install: $(OUTPUT)
|
|
install -Dm755 $(OUTPUT) -t $(bindir)
|
|
|
|
clean:
|
|
rm -rf $(OUTPUT_FOLDER)
|
|
|
|
deploy:
|
|
@echo "Creating remote directory..."
|
|
ssh $(REMOTE_USER)@$(REMOTE_HOST) "mkdir -p $(REMOTE_DIR)"
|
|
@echo "Copying source files to $(REMOTE_HOST)..."
|
|
scp $(SOURCE_FOLDER)/* $(REMOTE_PATH)/$(SOURCE_FOLDER)
|
|
scp Makefile $(REMOTE_PATH)
|
|
@echo "Files deployed successfully"
|
|
|
|
remote-build: deploy
|
|
@echo "Building on remote server..."
|
|
ssh $(REMOTE_USER)@$(REMOTE_HOST) "cd $(REMOTE_DIR) && make all"
|
|
@echo "Build completed on remote server"
|
|
|
|
remote-clean:
|
|
@echo "Cleaning remote build..."
|
|
ssh $(REMOTE_USER)@$(REMOTE_HOST) "cd $(REMOTE_DIR) && make clean"
|
|
|
|
remote-run: remote-build
|
|
@echo "Running on remote server..."
|
|
ssh $(REMOTE_USER)@$(REMOTE_HOST) "cd $(REMOTE_DIR) && ./$(TARGET)"
|
|
|
|
check: $(TEST_OUTPUT)
|
|
@echo "Running tests..."
|
|
./$(TEST_OUTPUT)
|
|
|
|
help:
|
|
@echo "Available targets:"
|
|
@echo " all - Build locally"
|
|
@echo " clean - Clean local build"
|
|
@echo " deploy - Copy files to remote server"
|
|
@echo " remote-build - Deploy and build on remote server"
|
|
@echo " remote-clean - Clean remote build"
|
|
@echo " remote-run - Build and run on remote server"
|
|
@echo " check - Run tests"
|