diff options
| -rw-r--r-- | GNUmakefile | 6 | ||||
| -rw-r--r-- | Makefile | 57 | ||||
| -rw-r--r-- | common.mk | 64 | ||||
| -rw-r--r-- | dged.nix | 2 | ||||
| -rw-r--r-- | flake.lock | 8 | ||||
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | linux.mk | 1 |
7 files changed, 89 insertions, 51 deletions
diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..706626d --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,6 @@ +# GNU-compatible makefile +include common.mk + +include $(UNAME_S).mk + +include $(DEPS) @@ -1,50 +1,15 @@ -.PHONY: default clean check run debug debug-tests +# BSD-compatible makefile -default: dged +.include "common.mk" -headers != find src/ -type f -name '*.h' -srcs != find src/ -type f -name '*.c' ! -name 'main.c' +.include "$(UNAME_S).mk" -test_headers != find test/ -type f -name '*.h' -test_srcs != find test/ -type f -name '*.c' +# in this case we need a separate depend target +depend: $(DEPS) + @: -objs-path = objs -objs = $(patsubst %.c,$(objs-path)/%.o, $(srcs)) -test_objs = $(patsubst %.c,$(objs-path)/test/%.o, $(test_srcs)) - -UNAME_S != uname -s - -CFLAGS = -Werror -g -std=c99 - -ifeq ($(UNAME_S),Linux) - DEFINES += -DLINUX -D_XOPEN_SOURCE=700 -endif - -$(objs-path)/test/%.o: %.c $(headers) - @mkdir -p $(dir $@) - $(CC) $(CFLAGS) $(DEFINES) -I ./src -I ./test -c $< -o $@ - -$(objs-path)/%.o: %.c $(headers) - @mkdir -p $(dir $@) - $(CC) $(CFLAGS) $(DEFINES) -I ./src -c $< -o $@ - -dged: $(objs) $(objs-path)/src/main.o - $(CC) $(LDFLAGS) $(objs) $(objs-path)/src/main.o -o dged - -run-tests: $(test_objs) $(objs) - $(CC) $(LDFLAGS) $(test_objs) $(objs) -o run-tests - -check: run-tests - ./run-tests - -run: dged - ./dged - -debug: dged - gdb ./dged - -debug-tests: run-tests - gdb ./run-tests - -clean: - rm -rf $(objs-path) dged run-tests +.if !(make(clean)) +. for o in ${DEPS} +. sinclude "$o" +. endfor +.endif diff --git a/common.mk b/common.mk new file mode 100644 index 0000000..fcc2cac --- /dev/null +++ b/common.mk @@ -0,0 +1,64 @@ +.POSIX: +.PHONY: default clean check run debug debug-tests + +default: dged + +SOURCES = src/binding.c src/buffer.c src/command.c src/display.c \ + src/keyboard.c src/minibuffer.c src/reactor.c src/text.c \ + src/utf8.c + +DGED_SOURCES = $(SOURCES) src/main.c +TEST_SOURCES = test/assert.c test/buffer.c test/text.c test/utf8.c test/main.c + +.SUFFIXES: +.SUFFIXES: .c .o .d + +UNAME_S != uname -s | tr '[:upper:]' '[:lower:]' + +CFLAGS = -Werror -g -std=c99 -I ./src + +# dependency generation +.c.d: + $(CC) -MM $(CFLAGS) -MT $*.o $< > $@ + @sed -i 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@ + +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +DEPS = $(DGED_SOURCES:.c=.d) $(TEST_SOURCES:.c=.d) +FILES += $(DEPS) + +OBJS = $(SOURCES:.c=.o) +FILES += $(DGED_SOURCES:.c=.o) + +dged: src/main.o libdged.a + $(CC) $(LDFLAGS) src/main.o libdged.a -o dged + +FILES += dged + +libdged.a: $(OBJS) + $(AR) -rc libdged.a $(OBJS) + +FILES += libdged.a + +TEST_OBJS = $(TEST_SOURCES:.c=.o) + +run-tests: $(TEST_OBJS) libdged.a + $(CC) $(LDFLAGS) $(TEST_OBJS) libdged.a -o run-tests + +FILES += $(TEST_OBJS) + +check: run-tests + ./run-tests + +run: dged + ./dged + +debug: dged + gdb ./dged + +debug-tests: run-tests + gdb ./run-tests + +clean: + rm -f $(FILES) @@ -1,6 +1,7 @@ { stdenv , clang-tools , gnumake +, bmake , pkg-config , tree-sitter , bear @@ -12,6 +13,7 @@ stdenv.mkDerivation { nativeBuildInputs = [ gnumake + bmake pkg-config clang-tools bear @@ -17,16 +17,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1667318659, - "narHash": "sha256-mRXqCdlnxPgm3Wk7mNAOanl7B3Q3U5scYTEiyYmNEOE=", + "lastModified": 1670372410, + "narHash": "sha256-BDiOUkuqgq5DP+E5xfTzIFYYyMb8DpSLYmeaOBeZ0vg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b3a8f7ed267e0a7ed100eb7d716c9137ff120fe3", + "rev": "5528350186a9e826588cee1329640899ca44a0cf", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-22.05", + "ref": "nixos-22.11", "type": "indirect" } }, @@ -1,7 +1,7 @@ { description = "An editor for datagubbar"; - inputs.nixpkgs.url = "nixpkgs/nixos-22.05"; + inputs.nixpkgs.url = "nixpkgs/nixos-22.11"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, nixpkgs, flake-utils }: diff --git a/linux.mk b/linux.mk new file mode 100644 index 0000000..3db7a1f --- /dev/null +++ b/linux.mk @@ -0,0 +1 @@ +CFLAGS += -DLINUX -D_XOPEN_SOURCE=700 |
