gprc/Makefile
TheOnePath 5ddd9c978d
Updated Makefile
BUILD_NAME is part of OBJ construction
2024-09-11 14:34:27 +01:00

66 lines
1.5 KiB
Makefile

CC = gcc
INCLUDE_DIR = ./include
SOURCE_DIR = ./src
CFLAGS += -I$(INCLUDE_DIR) -ansi -std=c99
LIBS += -lgsl -lopenblas -lm
# Debug flags and release flags for GCC
ifeq ($(BUILD),release)
CFLAGS += -O2 -s -DNDEBUG
_BUILD_DIR = ./build/release
_OBJECT_DIR = ./obj/release
else
CFLAGS += -O0 -g
_BUILD_DIR = ./build/debug
_OBJECT_DIR = ./obj/debug
endif
# Check for required directories for GCC outputs
ifeq ($(wildcard $(OBJECT_DIR)/.),)
$(shell mkdir -p $(OBJECT_DIR))
endif
# Valgrind specific flags for debugging help
VALGRIND_ARGS += -s --leak-check=full --track-origins=yes \
--show-leak-kinds=all
# Get the system architecture if not specified
ifeq ($(ARCH),)
ARCH = $(shell uname -m)
BUILD_DIR = $(addsuffix $(ARCH), $(_BUILD_DIR)/)
OBJECT_DIR = $(addsuffix $(ARCH), $(_OBJECT_DIR)/)
endif
# Create directories if they don't exist
ifeq ($(wildcard $(BUILD_DIR)/.),)
$(shell mkdir -p $(BUILD_DIR))
endif
ifeq ($(wildcard $(OBJECT_DIR)/.),)
$(shell mkdir -p $(OBJECT_DIR))
endif
# Binary name for executable to compile
BINARY_NAME = demo
# Source list files
SRC = kernels solve gp linalg matio
OBJ = $(patsubst %,$(OBJECT_DIR)/%.o,$(SRC) $(BINARY_NAME))
$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c
$(CC) -c -o $@ $< $(CFLAGS)
$(BUILD_DIR)/$(BINARY_NAME).$(ARCH): $(OBJ)
gcc -std=c99 $(CFLAGS) $(OBJ) $(LIBS) -o $(BUILD_DIR)/$(BINARY_NAME).$(ARCH)
.PHONY : release
release:
$(MAKE) "BUILD=release"
.PHONY : clean
clean:
rm -rf $(OBJECT_DIR)/*.o build
.PHONY : valgrind
valgrind:
valgrind $(VALGRIND_ARGS) $(BUILD_DIR)/$(BINARY_NAME).$(ARCH)