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)