-LDFLAGS+=-O2 -g
-
-CC_VERSION=$(shell $(CC) -v 2>&1|grep -E '(gcc|clang) version')
-
-ifneq (,$(findstring gcc,$(CC_VERSION)))
- CFLAGS+=-Wno-unused-but-set-variable
-ifndef D
- CFLAGS+=-flto
- LDFLAGS+=-flto
-endif
+LDFLAGS+=$(CFLAGS) $(EXTRA_LDFLAGS)
+
+## Configure Tools
+PYTEST_ARGS?=
+PYTEST_CMD?=$(shell \
+ command -v pytest-3 \
+ || which pytest-3 \
+)
+PYTEST:=$(PYTEST_CMD) $(PYTEST_ARGS)
+
+RST2MAN_ARGS?=
+RST2MAN_CMD?=$(shell \
+ command -v rst2man \
+ || which rst2man \
+ || command -v rst2man.py \
+ || which rst2man.py \
+)
+RST2MAN:=$(RST2MAN_CMD) $(RST2MAN_ARGS)
+
+CARGO_ARGS=
+CARGO=cargo $(CARGO_ARGS)
+CARGO_PROFILE=release
+# CARGO_PROFILE=debug
+
+CARGO_BUILD_ARGS=--$(CARGO_PROFILE)
+CARGO_BUILD=$(CARGO) build $(CARGO_BUILD_ARGS)
+VERSION?=$(shell git describe --dirty=+ 2>/dev/null || echo v0.1-nogit)
+
+include Makefile.compiler
+
+CFLAGS+=$(call cc-disable-warning, unused-but-set-variable)
+CFLAGS+=$(call cc-disable-warning, stringop-overflow)
+CFLAGS+=$(call cc-disable-warning, zero-length-bounds)
+CFLAGS+=$(call cc-disable-warning, missing-braces)
+CFLAGS+=$(call cc-disable-warning, zero-length-array)
+CFLAGS+=$(call cc-disable-warning, shift-overflow)
+CFLAGS+=$(call cc-disable-warning, enum-conversion)
+
+PKGCONFIG_LIBS="blkid uuid liburcu libsodium zlib liblz4 libzstd libudev"
+ifdef BCACHEFS_FUSE
+ PKGCONFIG_LIBS+="fuse3 >= 3.7"
+ CFLAGS+=-DBCACHEFS_FUSE