Makefile (5629B)
1 CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Isrc -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include 2 HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h src/nostr_bech32.h src/block.h src/str_block.h $(C_BINDINGS) 3 FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c 4 BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c 5 SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c src/block.c $(BOLT11_SRCS) $(FLATCC_SRCS) 6 LDS = $(OBJS) $(ARS) 7 OBJS = $(SRCS:.c=.o) 8 DEPS = $(OBJS) $(HEADERS) $(ARS) 9 ARS = deps/lmdb/liblmdb.a deps/secp256k1/.libs/libsecp256k1.a 10 LMDB_VER=0.9.31 11 FLATCC_VER=05dc16dc2b0316e61063bb1fc75426647badce48 12 PREFIX ?= /usr/local 13 SUBMODULES = deps/secp256k1 14 BINDINGS=src/bindings 15 C_BINDINGS_PROFILE=$(BINDINGS)/c/profile_builder.h $(BINDINGS)/c/profile_reader.h $(BINDINGS)/c/profile_verifier.h $(BINDINGS)/c/profile_json_parser.h 16 C_BINDINGS_META=$(BINDINGS)/c/meta_builder.h $(BINDINGS)/c/meta_reader.h $(BINDINGS)/c/meta_verifier.h $(BINDINGS)/c/meta_json_parser.h 17 C_BINDINGS_COMMON=$(BINDINGS)/c/flatbuffers_common_builder.h $(BINDINGS)/c/flatbuffers_common_reader.h 18 C_BINDINGS=$(C_BINDINGS_COMMON) $(C_BINDINGS_PROFILE) $(C_BINDINGS_META) 19 BIN=ndb 20 21 CHECKDATA=testdata/db/v0/data.mdb 22 23 all: $(BIN) lib bench 24 25 %.o: %.c $(HEADERS) 26 $(CC) $(CFLAGS) -c -o $@ $< 27 28 libnostrdb.a: $(OBJS) 29 ar rcs $@ $(OBJS) 30 31 lib: libnostrdb.a 32 33 ndb: ndb.c $(DEPS) 34 $(CC) $(CFLAGS) ndb.c $(LDS) -o $@ 35 36 bindings: bindings-swift bindings-rust bindings-c 37 38 check: test 39 rm -rf testdata/db/*.mdb 40 ./test 41 rm -rf testdata/db/*.mdb 42 43 clean: 44 rm -rf test bench bench-ingest bench-ingest-many $(OBJS) 45 46 distclean: clean 47 rm -rf deps 48 49 tags: 50 find . -name '*.c' -or -name '*.h' | xargs ctags 51 52 configurator: src/configurator.c 53 $(CC) $< -o $@ 54 55 src/config.h: configurator 56 ./configurator > $@ 57 58 bindings-c: $(C_BINDINGS) 59 60 src/bindings/%/.dir: 61 mkdir -p $(shell dirname $@) 62 touch $@ 63 64 src/bindings/c/%_builder.h: schemas/%.fbs $(BINDINGS)/c/.dir 65 flatcc --builder $< -o $(BINDINGS)/c 66 67 src/bindings/c/%_verifier.h bindings/c/%_reader.h: schemas/%.fbs $(BINDINGS)/c/.dir 68 flatcc --verifier -o $(BINDINGS)/c $< 69 70 src/bindings/c/flatbuffers_common_reader.h: $(BINDINGS)/c/.dir 71 flatcc --common_reader -o $(BINDINGS)/c 72 73 src/bindings/c/flatbuffers_common_builder.h: $(BINDINGS)/c/.dir 74 flatcc --common_builder -o $(BINDINGS)/c 75 76 src/bindings/c/%_json_parser.h: schemas/%.fbs $(BINDINGS)/c/.dir 77 flatcc --json-parser $< -o $(BINDINGS)/c 78 79 bindings-rust: $(BINDINGS)/rust/ndb_profile.rs $(BINDINGS)/rust/ndb_meta.rs 80 81 $(BINDINGS)/rust/ndb_profile.rs: schemas/profile.fbs $(BINDINGS)/rust 82 flatc --gen-json-emit --rust $< 83 @mv profile_generated.rs $@ 84 85 $(BINDINGS)/rust/ndb_meta.rs: schemas/meta.fbs $(BINDINGS)/swift 86 flatc --rust $< 87 @mv meta_generated.rs $@ 88 89 bindings-swift: $(BINDINGS)/swift/NdbProfile.swift $(BINDINGS)/swift/NdbMeta.swift 90 91 $(BINDINGS)/swift/NdbProfile.swift: schemas/profile.fbs $(BINDINGS)/swift 92 flatc --gen-json-emit --swift $< 93 @mv profile_generated.swift $@ 94 95 $(BINDINGS)/swift/NdbMeta.swift: schemas/meta.fbs $(BINDINGS)/swift 96 flatc --swift $< 97 @mv meta_generated.swift $@ 98 99 deps/.dir: 100 @mkdir -p deps 101 touch deps/.dir 102 103 deps/LMDB_$(LMDB_VER).tar.gz: deps/.dir 104 curl -L https://github.com/LMDB/lmdb/archive/refs/tags/LMDB_$(LMDB_VER).tar.gz -o $@ 105 106 deps/flatcc_$(FLATCC_VER).tar.gz: deps/.dir 107 curl -L https://github.com/jb55/flatcc/archive/$(FLATCC_VER).tar.gz -o $@ 108 109 #deps/flatcc/src/runtime/json_parser.c: deps/flatcc_$(FLATCC_VER).tar.gz deps/.dir 110 # tar xf $< 111 # rm -rf deps/flatcc 112 # mv flatcc-$(FLATCC_VER) deps/flatcc 113 # touch $@ 114 115 #deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir 116 # tar xf $< 117 # rm -rf deps/lmdb 118 # mv lmdb-LMDB_$(LMDB_VER)/libraries/liblmdb deps/lmdb 119 # rm -rf lmdb-LMDB_$(LMDB_VER) 120 # touch $@ 121 122 deps/secp256k1/.git: deps/.dir 123 @devtools/refresh-submodules.sh $(SUBMODULES) 124 125 deps/secp256k1/include/secp256k1.h: deps/secp256k1/.git 126 127 deps/secp256k1/configure: deps/secp256k1/.git 128 cd deps/secp256k1; \ 129 ./autogen.sh 130 131 deps/secp256k1/.libs/libsecp256k1.a: deps/secp256k1/config.log 132 cd deps/secp256k1; \ 133 make -j libsecp256k1.la 134 135 deps/secp256k1/config.log: deps/secp256k1/configure 136 cd deps/secp256k1; \ 137 ./configure --disable-shared --enable-module-ecdh --enable-module-schnorrsig --enable-module-extrakeys 138 139 deps/lmdb/liblmdb.a: deps/lmdb/lmdb.h 140 $(MAKE) -C deps/lmdb liblmdb.a 141 142 testdata/db/ndb-v0.tar.zst: 143 curl https://cdn.jb55.com/s/ndb-v0.tar.zst -o $@ 144 145 testdata/db/ndb-v0.tar: testdata/db/ndb-v0.tar.zst 146 zstd -d < $< > $@ 147 148 testdata/db/v0/data.mdb: testdata/db/ndb-v0.tar 149 tar xf $< 150 rm -rf testdata/db/v0 151 mv v0 testdata/db 152 153 testdata/many-events.json.zst: 154 curl https://cdn.jb55.com/s/many-events.json.zst -o $@ 155 156 testdata/many-events.json: testdata/many-events.json.zst 157 zstd -d $< 158 159 bench: bench-ingest-many.c $(DEPS) 160 $(CC) $(CFLAGS) $< $(LDS) -o $@ 161 162 perf.out: fake 163 perf script > $@ 164 165 perf.folded: perf.out 166 stackcollapse-perf.pl $< > $@ 167 168 ndb.svg: perf.folded 169 flamegraph.pl $< > $@ 170 171 flamegraph: ndb.svg 172 browser $< 173 174 run-bench: testdata/many-events.json bench 175 ./bench 176 177 testdata/db/.dir: 178 @mkdir -p testdata/db 179 touch testdata/db/.dir 180 181 test: test.c $(DEPS) testdata/db/.dir 182 $(CC) $(CFLAGS) test.c $(LDS) -o $@ 183 184 .PHONY: tags clean fake