CC = gcc
CFLAGS = -Wall -Wextra -Werror -pedantic -std=c11 -D_POSIX_C_SOURCE=200809L -I lib -I src
AR = ar
SRCS = src/trit.c src/lexer.c src/ast.c src/parser.c src/encoder.c src/encode_json.c src/encode_xml.c src/html_rules.c
OBJS = $(SRCS:.c=.o)
.PHONY: all clean test
UNAME := $(shell uname)
ifeq ($(UNAME),Darwin)
SHARED_LIB = libdtob.dylib
SHARED_FLAGS = -dynamiclib
else
SHARED_LIB = libdtob.so
SHARED_FLAGS = -shared
endif
BIN = bin
DTOB_BINS = $(BIN)/dtob $(BIN)/dtob-encode $(BIN)/dtob-represent
all: libdtob.a $(BIN) $(DTOB_BINS)
$(BIN):
mkdir -p $(BIN)
$(SHARED_LIB): $(SRCS)
$(CC) $(CFLAGS) $(SHARED_FLAGS) -fPIC -o $@ $^ -lm
libdtob.a: $(OBJS)
$(AR) rcs $@ $^
src/%.o: src/%.c src/dtob_internal.h lib/dtob.h
$(CC) $(CFLAGS) -c -o $@ $<
IO_SRCS = cli/io.c
$(BIN)/dtob: cli/main.c cli/memcache.c $(IO_SRCS) cli/cli.h libdtob.a
$(CC) $(CFLAGS) -I cli -o $@ cli/main.c cli/memcache.c $(IO_SRCS) -L. -ldtob -lm
$(BIN)/dtob-encode: cli/main_encode.c cli/typed_encode.c cli/greedy.c cli/http.c $(IO_SRCS) cli/cli.h libdtob.a
$(CC) $(CFLAGS) -I cli -o $@ cli/main_encode.c cli/typed_encode.c cli/greedy.c cli/http.c $(IO_SRCS) -L. -ldtob -lm -lcurl
$(BIN)/dtob-represent: cli/main_represent.c cli/represent.c cli/typed_encode.c $(IO_SRCS) cli/cli.h libdtob.a
$(CC) $(CFLAGS) -I cli -o $@ cli/main_represent.c cli/represent.c cli/typed_encode.c $(IO_SRCS) -L. -ldtob -lm
test: test_roundtrip test_raw test_types test_nesting
@echo "=== roundtrip ===" && ./test_roundtrip
@echo "=== raw ===" && ./test_raw
@echo "=== types ===" && ./test_types
@echo "=== nesting ===" && ./test_nesting
@echo "ALL TESTS PASSED"
test_roundtrip: test/test_roundtrip.c libdtob.a
$(CC) $(CFLAGS) -o $@ $< -L. -ldtob -lm
test_raw: test/test_raw.c libdtob.a
$(CC) $(CFLAGS) -o $@ $< -L. -ldtob -lm
test_types: test/test_types.c libdtob.a
$(CC) $(CFLAGS) -o $@ $< -L. -ldtob -lm
test_nesting: test/test_nesting.c libdtob.a
$(CC) $(CFLAGS) -o $@ $< -L. -ldtob -lm
clean:
rm -f src/*.o libdtob.a $(SHARED_LIB) test_roundtrip test_raw test_types test_nesting
rm -rf $(BIN)