Current section

Files

Jump to
Raw

Makefile

MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables
.ONESHELL:
# configurables
CC ?= cc
CC := $(CC)
CFLAGS ?=
LDFLAGS ?=
# end configurables
BASE_CFLAGS := \
-std=c11 \
-isystem/usr/local/lib/erlang/usr/include \
-isystem/usr/lib/erlang/usr/include \
-O2 \
-fno-unwind-tables -fno-asynchronous-unwind-tables \
-fno-plt \
-fPIC \
-flto
WARNING_CFLAGS := \
-Wall -Wextra -Wvla -Wpedantic -Wconversion -Winline
BASE_LDFLAGS := -fPIC -flto -lzstd
DEPFLAGS = -MT $@ -MMD -MF c_out/$*.d
SOURCES := $(wildcard c_src/*.c)
HEADERS := $(wildcard c_src/*.h)
OBJECTS := $(SOURCES:%.c=c_out/%.o)
DEPFILES := $(SOURCES:%.c=c_out/%.d)
ALL_OBJECTS := $(OBJECTS)
all: c_out/ex_zstd_nif.so
c_out/ex_zstd_nif.so: $(ALL_OBJECTS)
mkdir -p $(@D)
$(CC) $(BASE_LDFLAGS) $(DEPFLAGS) $(LDFLAGS) \
-fPIC -shared -o $@ $(ALL_OBJECTS)
c_out/c_src/%.o: c_src/%.c
mkdir -p $(@D)
$(CC) $(BASE_CFLAGS) $(WARNING_CFLAGS) $(DEPFLAGS) $(CFLAGS) -c -o $@ $<
-include $(DEPFILES)
.PHONY: install
install: c_out/ex_zstd_nif.so
mkdir -p $(DESTDIR)
cp c_out/ex_zstd_nif.so $(DESTDIR)
.PHONY: format
format:
clang-format --style=file -i $(SOURCES) $(HEADERS)
.PHONY: lint
lint:
clang-tidy --fix $(SOURCES)
.PHONY: clean
clean:
rm -rf c_out
compile_commands.json:
bear -- $(MAKE) \
CC="$(CC)" \
CFLAGS="$(BASE_CFLAGS) $(WARNING_CFLAGS) $(CFLAGS)" \
LDFLAGS="$(BASE_LDFLAGS) $(LDFLAGS)" \
$(OBJECTS)