2026-03-28 00:48:07 +01:00

73 lines
1.3 KiB
Makefile

MAKEFLAGS += -j16
CFLAGS=-Iinclude -std=c17 -pedantic-errors -Wall -Wextra -Wconversion
CXXFLAGS=-Iinclude -std=c++20 -pedantic-errors -Wall -Wextra -Wconversion
LDFLAGS=
# Some of the sussy stuff needs this
CFLAGS+=-Wno-strict-aliasing
ASAN=0
ifeq ($(ASAN),1)
CFLAGS += -fsanitize=address
CXXFLAGS += -fsanitize=address
endif
LTO=0
ifeq ($(ASAN),1)
CFLAGS += -flto=auto
CXXFLAGS += -flto=auto
endif
RELEASE=0
ifeq ($(RELEASE),1)
CFLAGS += -O3
CXXFLAGS += -O3
else
CFLAGS += -g -ggdb
CXXFLAGS += -g -ggdb
endif
build_dir = build
obj_dir = $(build_dir)/obj
lib_sources = \
src/collections.c \
src/json_value.c \
src/json_parse.c \
src/json_query.c \
src/json_stringify.c \
src/json_cpp.cpp
jq_sources = $(lib_sources) src/main.c
lib_target=$(build_dir)/libjson.a
jq_target=$(build_dir)/jq
all: $(lib_target) $(jq_target)
debug: $(jq_target)
# gdb -ex 'r' --args build/jq '.' data.json
gdb -ex 'r' --args $< '[11350].payload.issues.user' large-file-formatted.json
$(lib_target): $(lib_sources:%.c=$(obj_dir)/%.o)
ar rcs $@ $^
$(jq_target): $(jq_sources:%.c=$(obj_dir)/%.o)
gcc -o $@ $(CFLAGS) $(LDFLAGS) $^
$(obj_dir)/%.o: %.c
@mkdir -p $(dir $@)
gcc $< -c -o $@ -MMD -MP $(CFLAGS)
$(obj_dir)/%.o: %.cpp
@mkdir -p $(dir $@)
gcc $< -c -o $@ -MMD -MP $(CXXFLAGS)
clean:
rm -rf $(build_dir)
-include $(sources:%.c=$(obj_dir)/%.d)