BIN = sdar PREFIX ?= /usr SYS := $(shell uname -s) CPU := $(shell uname -m) ifeq ($(SYS),Linux) CFLAGS += -D_POSIX_C_SOURCE=200809L -D_DEFAULT_SOURCE endif LZ4SRC = sdar/lib/lz4/lz4.c LZ4OBJ = $(LZ4SRC:sdar/%.c=obj/%.o) BLAKE3SRC = sdar/lib/blake3/blake3.c \ sdar/lib/blake3/blake3_dispatch.c \ sdar/lib/blake3/blake3_portable.c BLAKE3FLAGS = -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 \ -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 ifeq ($(CPU),x86_64) BLAKE3SRC += $(wildcard sdar/lib/blake3/*_x86-64_unix.S) BLAKE3FLAGS := -DBLAKE3_NO_SSE2 endif ifeq ($(CPU),arm64) BLAKE3SRC += sdar/lib/blake3/blake3_neon.c BLAKE3FLAGS += -DBLAKE3_USE_NEON=1 endif BLAKE3OBJ = $(BLAKE3SRC:sdar/%.c=obj/%.o) BLAKE3OBJ := $(BLAKE3OBJ:sdar/%.S=obj/%.o) SCRYPTSRC = $(wildcard sdar/lib/scrypt/*.c) SCRYPTOBJ = $(SCRYPTSRC:sdar/%.c=obj/%.o) NACLSRC = $(wildcard sdar/lib/nacl/*.c) ifeq ($(CPU),x86_64) NACLSRC += $(wildcard sdar/lib/nacl/x86_64/*.[cS]) else NACLSRC += $(wildcard sdar/lib/nacl/generic/*.c) endif NACLOBJ = $(NACLSRC:sdar/%.c=obj/%.o) NACLOBJ := $(NACLOBJ:sdar/%.S=obj/%.o) V = @ SRC = $(wildcard sdar/*.c) OBJ = $(SRC:sdar/%.c=obj/%.o) SANFLAGS = -g -fsanitize=address,undefined LDFLAGS += $(SANFLAGS) CFLAGS += -fno-omit-frame-pointer -std=c11 -Wall -Wextra -pedantic CFLAGS += -DMMH_KEYSZ=32 -DMMH_VALSZ=16 -DMMH_HDRSZ=8 LIBFLAGS = -O3 -Isdar $(BLAKE3FLAGS) obj/$(BIN): $(OBJ) $(NACLOBJ) $(BLAKE3OBJ) $(SCRYPTOBJ) $(LZ4OBJ) @test -z "$(V)" || echo "ld $@" $(V)$(CC) $^ -o $@ $(LDFLAGS) obj/%.o: sdar/%.c @test -z "$(V)" || echo "cc $<" $(V)$(CC) $(CFLAGS) \ $(if $(findstring sdar/lib,$<),$(LIBFLAGS),$(SANFLAGS)) \ -c $< -o $@ obj/%.o: sdar/%.S @test -z "$(V)" || echo "as $<" $(V)$(CC) $(CFLAGS) \ $(if $(findstring sdar/lib,$<),$(LIBFLAGS),$(SANFLAGS)) \ -c $< -o $@ obj/timestamp: @mkdir -p obj @mkdir -p obj/lib/blake3 @mkdir -p obj/lib/scrypt @mkdir -p obj/lib/lz4 @mkdir -p obj/lib/nacl @mkdir -p obj/lib/nacl/x86_64 @mkdir -p obj/lib/nacl/generic @touch $@ $(OBJ) $(SCRYPTOBJ) $(LZ4OBJ) $(NACLOBJ) $(BLAKE3OBJ): obj/timestamp $(OBJ): sdar/all.h sdar/mmh.h $(OBJ) $(SCRYPTOBJ): sdar/lib/scrypt/scrypt.h $(OBJ) $(LZ4OBJ): sdar/lib/lz4/lz4.h $(OBJ) $(NACLOBJ): sdar/lib/nacl/nacl.h $(OBJ) $(BLAKE3OBJ): sdar/lib/blake3/blake3.h $(BLAKE3OBJ): sdar/lib/blake3/blake3_impl.h clean: rm -fr obj install: obj/$(BIN) cp obj/$(BIN) $(PREFIX)/bin cd memex && go build \ -ldflags '-X main.SdarPath=$(PREFIX)/bin/$(BIN)' \ -o $(PREFIX)/bin/memex .PHONY: clean install