summaryrefslogtreecommitdiff
path: root/Makefile
blob: 8080fa0defd37da00b0fefa42d790620f60f238a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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