Added Makefile
This commit is contained in:
parent
6ec1aaf979
commit
d59cd96e23
71
Makefile
71
Makefile
|
|
@ -1,36 +1,65 @@
|
||||||
|
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
|
# Debug flags and release flags for GCC
|
||||||
ifeq ($(BUILD),debug)
|
ifeq ($(BUILD),release)
|
||||||
CFLAGS += -O0 -g
|
|
||||||
BUILD_DIR = build/debug
|
|
||||||
else
|
|
||||||
CFLAGS += -O2 -s -DNDEBUG
|
CFLAGS += -O2 -s -DNDEBUG
|
||||||
BUILD_DIR = build/release
|
_BUILD_DIR = ./build/release
|
||||||
|
_OBJECT_DIR = ./obj/release
|
||||||
|
else
|
||||||
|
CFLAGS += -O0 -g
|
||||||
|
_BUILD_DIR = ./build/debug
|
||||||
|
_OBJECT_DIR = ./obj/debug
|
||||||
endif
|
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
|
# Get the system architecture if not specified
|
||||||
ifeq ($(ARCH),)
|
ifeq ($(ARCH),)
|
||||||
ARCH = $(shell uname -m)
|
ARCH = $(shell uname -m)
|
||||||
|
BUILD_DIR = $(addsuffix $(ARCH), $(_BUILD_DIR)/)
|
||||||
|
OBJECT_DIR = $(addsuffix $(ARCH), $(_OBJECT_DIR)/)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
VALGRIND_ARGS += --leak-check=full --track-origins=yes --show-leak-kinds=all
|
# 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
|
BINARY_NAME = demo
|
||||||
|
# Source list files
|
||||||
|
SRC = kernels solve gp demo
|
||||||
|
OBJ = $(patsubst %,$(OBJECT_DIR)/%.o,$(SRC))
|
||||||
|
|
||||||
$(BUILD_DIR)/$(ARCH)/$(BINARY_NAME): obj/kernels.o obj/solve.o obj/gp.o obj/main.o
|
|
||||||
gcc -std=c99 $(CFLAGS) obj/kernels.o obj/gp.o obj/solve.o obj/main.o\
|
|
||||||
-lgsl -lopenblas -lm -o $(BUILD_DIR)/$(ARCH)/$(BINARY_NAME).$(ARCH)
|
|
||||||
obj/$(BINARY_NAME).o: $(BINARY_NAME).c
|
|
||||||
gcc -Wall -c main.c -o obj/main.o
|
|
||||||
obj/kernels.o: src/kernels.c
|
|
||||||
gcc -Wall -c src/kernels.c -o obj/kernels.o
|
|
||||||
obj/solve.o: src/solve.c
|
|
||||||
gcc -Wall -c src/solve.c -o obj/solve.o
|
|
||||||
obj/gp.o: src/gp.c
|
|
||||||
gcc -Wall -c src/gp.c -o obj/gp.o
|
|
||||||
|
|
||||||
.PHONY : debug
|
|
||||||
debug:
|
$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c
|
||||||
$(MAKE) "BUILD=debug" && valgrind $(VALGRIND_ARGS) build/debug/main.x86_64
|
$(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
|
.PHONY : clean
|
||||||
clean:
|
clean:
|
||||||
rm obj/*.o
|
rm -rf $(OBJECT_DIR)/*.o build
|
||||||
|
|
||||||
|
.PHONY : valgrind
|
||||||
|
valgrind:
|
||||||
|
valgrind $(VALGRIND_ARGS) $(BUILD_DIR)/$(BINARY_NAME).$(ARCH)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user