diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0df6b25 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +CC ?= cc +NUKLEAR_DIR ?= vendor +TARGET := kanji-deck + +CPPFLAGS := -D_POSIX_C_SOURCE=200809L -DNK_INCLUDE_DEFAULT_ALLOCATOR -DNK_BUTTON_TRIGGER_ON_RELEASE -Iinclude -isystem $(NUKLEAR_DIR) + +LDLIBS := -lX11 -lm +XFT_CFLAGS := $(shell pkg-config --cflags xft 2>/dev/null) +XFT_LIBS := $(shell pkg-config --libs xft 2>/dev/null) +ifneq ($(strip $(XFT_LIBS)),) +CPPFLAGS += -DNK_XLIB_USE_XFT $(XFT_CFLAGS) +LDLIBS += $(XFT_LIBS) +endif +C89FLAGS ?= -std=c89 -pedantic-errors -Wall -Wextra -Werror \ + -Wstrict-prototypes -Wmissing-prototypes -Wformat=2 \ + -Wformat-security -Wconversion -Wsign-conversion +LDFLAGS ?= + +APP_OBJECTS := src/main.o src/kd_deck.o src/kd_image.o src/nuklear_impl.o + +.PHONY: all clean check check-image check-deps + +all: $(TARGET) + +check-deps: + @test -f "$(NUKLEAR_DIR)/nuklear.h" || { \ + echo "Missing $(NUKLEAR_DIR)/nuklear.h; copy Nuklear's single header there." >&2; exit 1; } + @test -f "$(NUKLEAR_DIR)/nuklear_xlib.h" || { \ + echo "Missing $(NUKLEAR_DIR)/nuklear_xlib.h; copy demo/x11/nuklear_xlib.h there." >&2; exit 1; } + +$(APP_OBJECTS): | check-deps + +src/main.o: src/main.c include/kd_deck.h include/kd_image.h + $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ + +src/kd_deck.o: src/kd_deck.c include/kd_deck.h + $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ + +src/kd_image.o: src/kd_image.c include/kd_image.h + $(CC) $(CPPFLAGS) $(C89FLAGS) -c $< -o $@ + +src/nuklear_impl.o: src/nuklear_impl.c + $(CC) $(CPPFLAGS) -std=c89 -pedantic-errors -w -c $< -o $@ + +$(TARGET): $(APP_OBJECTS) + $(CC) $(LDFLAGS) $(APP_OBJECTS) -o $@ $(LDLIBS) + +check: tests/test_deck + ./tests/test_deck + +check-image: tests/test_image + @set -eu; temp=$$(mktemp -d); trap 'rm -rf "$$temp"' EXIT HUP INT TERM; \ + printf 'P3\n2 1\n255\n255 0 0 0 255 0\n' > "$$temp/p3.ppm"; \ + printf 'P6\n2 1\n255\n\377\000\000\000\377\000' > "$$temp/p6.ppm"; \ + if command -v xvfb-run >/dev/null 2>&1; then \ + xvfb-run -a ./tests/test_image "$$temp/p3.ppm" "$$temp/p6.ppm"; \ + else \ + ./tests/test_image "$$temp/p3.ppm" "$$temp/p6.ppm"; \ + fi + +tests/test_image: tests/test_image.c src/kd_image.c include/kd_image.h + $(CC) $(CPPFLAGS) $(C89FLAGS) tests/test_image.c src/kd_image.c -o $@ -lX11 + +tests/test_deck: tests/test_deck.c src/kd_deck.c include/kd_deck.h + $(CC) -D_POSIX_C_SOURCE=200809L -Iinclude $(C89FLAGS) \ + tests/test_deck.c src/kd_deck.c -o $@ + +clean: + rm -f $(TARGET) $(APP_OBJECTS) tests/test_deck tests/test_image |
