Files
damus/nostrdb/Makefile
William Casarin e0a2dcf3db nostrdb/Inital embedded content parser
This adds some initial code for nostrdb content parsing.

We still need to write tests for encoding and decoding, so this is
likely not working yet.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-08-11 16:39:43 -07:00

173 lines
5.3 KiB
Makefile

CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Isrc -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include
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 $(C_BINDINGS)
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
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
SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c $(BOLT11_SRCS) $(FLATCC_SRCS)
LDS = $(OBJS) $(ARS)
OBJS = $(SRCS:.c=.o)
DEPS = $(OBJS) $(HEADERS) $(ARS)
ARS = deps/lmdb/liblmdb.a deps/secp256k1/.libs/libsecp256k1.a
LMDB_VER=0.9.31
FLATCC_VER=05dc16dc2b0316e61063bb1fc75426647badce48
PREFIX ?= /usr/local
SUBMODULES = deps/secp256k1
BINDINGS=src/bindings
C_BINDINGS_PROFILE=$(BINDINGS)/c/profile_builder.h $(BINDINGS)/c/profile_reader.h $(BINDINGS)/c/profile_verifier.h $(BINDINGS)/c/profile_json_parser.h
C_BINDINGS_META=$(BINDINGS)/c/meta_builder.h $(BINDINGS)/c/meta_reader.h $(BINDINGS)/c/meta_verifier.h $(BINDINGS)/c/meta_json_parser.h
C_BINDINGS_COMMON=$(BINDINGS)/c/flatbuffers_common_builder.h $(BINDINGS)/c/flatbuffers_common_reader.h
C_BINDINGS=$(C_BINDINGS_COMMON) $(C_BINDINGS_PROFILE) $(C_BINDINGS_META)
BIN=ndb
CHECKDATA=testdata/db/v0/data.mdb
all: $(BIN) lib bench
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c -o $@ $<
libnostrdb.a: $(OBJS)
ar rcs $@ $(OBJS)
lib: libnostrdb.a
ndb: ndb.c $(DEPS)
$(CC) $(CFLAGS) ndb.c $(LDS) -o $@
bindings: bindings-swift bindings-rust bindings-c
check: test
rm -rf testdata/db/*.mdb
./test
rm -rf testdata/db/*.mdb
clean:
rm -rf test bench bench-ingest bench-ingest-many $(OBJS)
distclean: clean
rm -rf deps
tags:
find . -name '*.c' -or -name '*.h' | xargs ctags
configurator: configurator.c
$(CC) $< -o $@
config.h: configurator
./configurator > $@
bindings-c: $(C_BINDINGS)
src/bindings/%/.dir:
mkdir -p $(shell dirname $@)
touch $@
src/bindings/c/%_builder.h: schemas/%.fbs $(BINDINGS)/c/.dir
flatcc --builder $< -o $(BINDINGS)/c
src/bindings/c/%_verifier.h bindings/c/%_reader.h: schemas/%.fbs $(BINDINGS)/c/.dir
flatcc --verifier -o $(BINDINGS)/c $<
src/bindings/c/flatbuffers_common_reader.h: $(BINDINGS)/c/.dir
flatcc --common_reader -o $(BINDINGS)/c
src/bindings/c/flatbuffers_common_builder.h: $(BINDINGS)/c/.dir
flatcc --common_builder -o $(BINDINGS)/c
src/bindings/c/%_json_parser.h: schemas/%.fbs $(BINDINGS)/c/.dir
flatcc --json-parser $< -o $(BINDINGS)/c
bindings-rust: $(BINDINGS)/rust/ndb_profile.rs $(BINDINGS)/rust/ndb_meta.rs
$(BINDINGS)/rust/ndb_profile.rs: schemas/profile.fbs $(BINDINGS)/rust
flatc --gen-json-emit --rust $<
@mv profile_generated.rs $@
$(BINDINGS)/rust/ndb_meta.rs: schemas/meta.fbs $(BINDINGS)/swift
flatc --rust $<
@mv meta_generated.rs $@
bindings-swift: $(BINDINGS)/swift/NdbProfile.swift $(BINDINGS)/swift/NdbMeta.swift
$(BINDINGS)/swift/NdbProfile.swift: schemas/profile.fbs $(BINDINGS)/swift
flatc --gen-json-emit --swift $<
@mv profile_generated.swift $@
$(BINDINGS)/swift/NdbMeta.swift: schemas/meta.fbs $(BINDINGS)/swift
flatc --swift $<
@mv meta_generated.swift $@
deps/.dir:
@mkdir -p deps
touch deps/.dir
deps/LMDB_$(LMDB_VER).tar.gz: deps/.dir
curl -L https://github.com/LMDB/lmdb/archive/refs/tags/LMDB_$(LMDB_VER).tar.gz -o $@
deps/flatcc_$(FLATCC_VER).tar.gz: deps/.dir
curl -L https://github.com/jb55/flatcc/archive/$(FLATCC_VER).tar.gz -o $@
#deps/flatcc/src/runtime/json_parser.c: deps/flatcc_$(FLATCC_VER).tar.gz deps/.dir
# tar xf $<
# rm -rf deps/flatcc
# mv flatcc-$(FLATCC_VER) deps/flatcc
# touch $@
deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir
tar xf $<
rm -rf deps/lmdb
mv lmdb-LMDB_$(LMDB_VER)/libraries/liblmdb deps/lmdb
rm -rf lmdb-LMDB_$(LMDB_VER)
touch $@
deps/secp256k1/.git: deps/.dir
@devtools/refresh-submodules.sh $(SUBMODULES)
deps/secp256k1/include/secp256k1.h: deps/secp256k1/.git
deps/secp256k1/configure: deps/secp256k1/.git
cd deps/secp256k1; \
./autogen.sh
deps/secp256k1/.libs/libsecp256k1.a: deps/secp256k1/config.log
cd deps/secp256k1; \
make -j libsecp256k1.la
deps/secp256k1/config.log: deps/secp256k1/configure
cd deps/secp256k1; \
./configure --disable-shared --enable-module-ecdh --enable-module-schnorrsig --enable-module-extrakeys
deps/lmdb/liblmdb.a: deps/lmdb/lmdb.h
$(MAKE) -C deps/lmdb liblmdb.a
testdata/db/ndb-v0.tar.zst:
curl https://cdn.jb55.com/s/ndb-v0.tar.zst -o $@
testdata/db/ndb-v0.tar: testdata/db/ndb-v0.tar.zst
zstd -d < $< > $@
testdata/db/v0/data.mdb: testdata/db/ndb-v0.tar
tar xf $<
rm -rf testdata/db/v0
mv v0 testdata/db
testdata/many-events.json.zst:
curl https://cdn.jb55.com/s/many-events.json.zst -o $@
testdata/many-events.json: testdata/many-events.json.zst
zstd -d $<
bench: bench-ingest-many.c $(DEPS)
$(CC) $(CFLAGS) $< $(LDS) -o $@
run-bench: testdata/many-events.json bench
./bench
testdata/db/.dir:
@mkdir -p testdata/db
touch testdata/db/.dir
test: test.c $(DEPS) testdata/db/.dir
$(CC) $(CFLAGS) test.c $(LDS) -o $@
.PHONY: tags clean