refactor: clean up Makefiles

lsm
Jef Roosens 2023-07-28 21:08:48 +02:00
parent fb4a9a3b2e
commit 0229db027d
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
6 changed files with 51 additions and 49 deletions

View File

@ -1,6 +1,4 @@
* data/
build/
!src/ trie/build/
!Makefile .git/
!thirdparty/
!include/

View File

@ -18,8 +18,9 @@ RUN curl -Lo - "https://github.com/Yelp/dumb-init/archive/refs/tags/v${DI_VER}.t
COPY . ./ COPY . ./
RUN make CFLAGS='-O3 -static' LDFLAGS='-flto' && \ RUN make CFLAGS='-O3' LDFLAGS='-static -flto' && \
strip build/lander && \ strip build/lander && \
readelf -d build/lander && \
[ "$(readelf -d build/lander | grep NEEDED | wc -l)" = 0 ] [ "$(readelf -d build/lander | grep NEEDED | wc -l)" = 0 ]

View File

@ -1,18 +1,10 @@
# https://spin.atomicobject.com/2016/08/26/makefile-c-projects/ was a great # https://spin.atomicobject.com/2016/08/26/makefile-c-projects/ was a great
# base for this Makefile # base for this Makefile
VERSION := 0.1.0 -include config.mk
BIN_FILENAME ?= lander export CFLAGS
export LDFLAGS
BUILD_DIR ?= build
SRC_DIR ?= src
TEST_DIR ?= test
THIRDPARTY_DIR ?= thirdparty
INC_DIRS ?= include $(THIRDPARTY_DIR)/include trie/include
LIBS ?= trie m
LIB_DIRS ?= ./trie/build
BIN := $(BUILD_DIR)/$(BIN_FILENAME) BIN := $(BUILD_DIR)/$(BIN_FILENAME)
@ -31,23 +23,11 @@ BINS_TEST := $(OBJS_TEST:%.c.o=%)
TARGETS_TEST := $(BINS_TEST:%=test-%) TARGETS_TEST := $(BINS_TEST:%=test-%)
TARGETS_MEM_TEST := $(BINS_TEST:%=test-mem-%) TARGETS_MEM_TEST := $(BINS_TEST:%=test-mem-%)
INC_FLAGS := $(addprefix -I,$(INC_DIRS)) _CFLAGS := $(addprefix -I,$(INC_DIRS)) $(CFLAGS) -Wall -Wextra -DLANDER_VERSION=\"$(VERSION)\"
# -MMD: generate a .d file for every source file. This file can be imported by
# make and makes make aware that a header file has been changed, ensuring an
# object file is also recompiled if only a header is changed.
# -MP: generate a dummy target for every header file (according to the docs it
# prevents some errors when removing header files)
CFLAGS ?= -MMD -MP -g
_CFLAGS := $(INC_FLAGS) $(CFLAGS) -Wall -Wextra -DLANDER_VERSION=\"$(VERSION)\"
_LDFLAGS := $(addprefix -L,$(LIB_DIRS)) $(addprefix -l,$(LIBS)) $(LDFLAGS) _LDFLAGS := $(addprefix -L,$(LIB_DIRS)) $(addprefix -l,$(LIBS)) $(LDFLAGS)
export CFLAGS
export LDFLAGS
.PHONY: all .PHONY: all
all: bin all: $(BIN)
# =====COMPILATION===== # =====COMPILATION=====
@ -60,8 +40,7 @@ libtrie:
$(MAKE) -C trie $(MAKE) -C trie
.PHONY: bin .PHONY: bin
bin: $(BIN) $(BIN): libtrie $(OBJS)
$(BIN): $(OBJS) libtrie
$(CC) -o $@ $(OBJS) $(_LDFLAGS) $(CC) -o $@ $(OBJS) $(_LDFLAGS)
$(BUILD_DIR)/$(SRC_DIR)/%.c.o: $(SRC_DIR)/%.c $(BUILD_DIR)/$(SRC_DIR)/%.c.o: $(SRC_DIR)/%.c
@ -111,6 +90,7 @@ $(BUILD_DIR)/$(TEST_DIR)/%.c.o: $(TEST_DIR)/%.c
-I$(dir $(@:$(BUILD_DIR)/$(TEST_DIR)/%=$(SRC_DIR)/%)) \ -I$(dir $(@:$(BUILD_DIR)/$(TEST_DIR)/%=$(SRC_DIR)/%)) \
-c $< -o $@ -c $< -o $@
# =====MAINTENANCE===== # =====MAINTENANCE=====
.PHONY: lint .PHONY: lint
lint: lint:

23
config.mk 100644
View File

@ -0,0 +1,23 @@
VERSION := 0.1.0
BIN_FILENAME = lander
BUILD_DIR = build
SRC_DIR = src
TEST_DIR = test
THIRDPARTY_DIR = thirdparty
INC_DIRS = include $(THIRDPARTY_DIR)/include trie/include
LIBS = trie m
LIB_DIRS = ./trie/build
# -MMD: generate a .d file for every source file. This file can be imported by
# make and makes make aware that a header file has been changed, ensuring an
# object file is also recompiled if only a header is changed.
# -MP: generate a dummy target for every header file (according to the docs it
# prevents some errors when removing header files)
CFLAGS = -MMD -MP -g
# When compiling release builds, these flags are better
# CLAGS = -O3
# LDFLAGS = -flto

View File

@ -1,12 +1,7 @@
# https://spin.atomicobject.com/2016/08/26/makefile-c-projects/ was a great # https://spin.atomicobject.com/2016/08/26/makefile-c-projects/ was a great
# base for this Makefile # base for this Makefile
LIB_FILENAME ?= libtrie.a -include config.mk
BUILD_DIR ?= build
SRC_DIR ?= src
TEST_DIR ?= test
INC_DIRS ?= include
LIB := $(BUILD_DIR)/$(LIB_FILENAME) LIB := $(BUILD_DIR)/$(LIB_FILENAME)
@ -23,15 +18,7 @@ BINS_TEST := $(OBJS_TEST:%.c.o=%)
TARGETS_TEST := $(BINS_TEST:%=test-%) TARGETS_TEST := $(BINS_TEST:%=test-%)
TARGETS_MEM_TEST := $(BINS_TEST:%=test-mem-%) TARGETS_MEM_TEST := $(BINS_TEST:%=test-mem-%)
INC_FLAGS := $(addprefix -I,$(INC_DIRS)) _CFLAGS := $(addprefix -I,$(INC_DIRS)) $(CFLAGS) -Wall -Wextra
# -MMD: generate a .d file for every source file. This file can be imported by
# make and makes make aware that a header file has been changed, ensuring an
# object file is also recompiled if only a header is changed.
# -MP: generate a dummy target for every header file (according to the docs it
# prevents some errors when removing header files)
CFLAGS ?= -MMD -MP -g
_CFLAGS := $(INC_FLAGS) $(CFLAGS) -Wall -Wextra
.PHONY: all .PHONY: all
all: lib all: lib

13
trie/config.mk 100644
View File

@ -0,0 +1,13 @@
LIB_FILENAME = libtrie.a
BUILD_DIR = build
SRC_DIR = src
TEST_DIR = test
INC_DIRS = include
# -MMD: generate a .d file for every source file. This file can be imported by
# make and makes make aware that a header file has been changed, ensuring an
# object file is also recompiled if only a header is changed.
# -MP: generate a dummy target for every header file (according to the docs it
# prevents some errors when removing header files)
CFLAGS = -MMD -MP -g