From 9b25a6ba8cdb495295a103300aa59ca910f88498 Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sat, 24 Jun 2023 12:14:02 +0200 Subject: [PATCH] Makefile deps improved, improve Emacs dir locals. --- .gitignore | 1 + FENTESTS.txt | 6 ++ Makefile | 173 ++++++++++++++++++++++++-------------------------- dir-locals.el | 1 - make.deps | 17 ----- 5 files changed, 89 insertions(+), 109 deletions(-) delete mode 100644 dir-locals.el delete mode 100644 make.deps diff --git a/.gitignore b/.gitignore index 5a7c54e..078986c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ brchess /test/ /obj/ /lib/ +/.deps/ diff --git a/FENTESTS.txt b/FENTESTS.txt index 9fa230c..54d2b4a 100644 --- a/FENTESTS.txt +++ b/FENTESTS.txt @@ -22,3 +22,9 @@ k7/8/8/1p1p2pP/pPpPp3/P1PpPp2/NBNP1P2/KBB1B3 w - g6 0 1 # 2 Kings, W/B/ pawns on 7th for promotion k4n2/4P3/8/8/8/8/4p3/K4N2 w - - 0 1 + +# white castled, and can e.p. on c6 black can castle +# white is a pawn down +# white has 35 or 36 moves: P=11 + 1 e.p. N=6+3 B=5+5 R=1 Q=3 K=1 + 1 e.p. +# black has 32 or 33 moves: P=11 N=2+7 B=5 R=3 Q=3 K=1 + castle +rnbqk2r/pp1pbpp1/7p/2pPp3/4n3/3B1N2/PPP2PPP/RNBQ1RK1 w kq c6 0 7 diff --git a/Makefile b/Makefile index 665cf45..d81c506 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,6 @@ SHELL := /bin/bash CC := gcc BEAR := bear CCLSFILE := compile_commands.json -DEPFILE := make.deps BINDIR := ./bin SRCDIR := ./src @@ -33,132 +32,124 @@ SRC := $(wildcard $(SRCDIR)/*.c) INC := $(wildcard $(SRCDIR)/*.h) SRC_S := $(notdir $(SRC)) -.SECONDEXPANSION: -OBJ=$(addprefix $(OBJDIR)/,$(SRC_S:.c=.o)) BIN=fen piece move eval brchess -LIBS = -l$(LIB) -lreadline -lncurses +LIBS = -l$(LIB) -lreadline -lncurses CFLAGS += -std=gnu11 #CFLAGS += -O2 -CFLAGS += -g -CFLAGS += -Wall -CFLAGS += -Wextra -CFLAGS += -march=native -CFLAGS += -Wmissing-declarations +CFLAGS += -g +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -march=native +CFLAGS += -Wmissing-declarations ##################################### DEBUG flags -CFLAGS += -DDEBUG # global -CFLAGS += -DDEBUG_DEBUG # enable log() functions -CFLAGS += -DDEBUG_POOL # memory pools management -CFLAGS += -DDEBUG_FEN # FEN decoding -CFLAGS += -DDEBUG_MOVE # move generation -CFLAGS += -DDEBUG_EVAL # eval functions -CFLAGS += -DDEBUG_PIECE # piece list management -#CFLAGS += -DDEBUG_BITS # bits functions (take care !) - -#CFLAGS += -DDEBUG_EVAL # sleep 1 sec within main loop (SIGINTR test) -#CFLAGS += -DDEBUG_EVAL2 # eval 2 -#CFLAGS += -DDEBUG_EVAL3 # eval 3 -#CFLAGS += -DDEBUG_MEM # malloc +CPPFLAGS = -I$(INCDIR) +CPPFLAGS += -DDEBUG # global +CPPFLAGS += -DDEBUG_DEBUG # enable log() functions +CPPFLAGS += -DDEBUG_POOL # memory pools management +CPPFLAGS += -DDEBUG_FEN # FEN decoding +CPPFLAGS += -DDEBUG_MOVE # move generation +CPPFLAGS += -DDEBUG_EVAL # eval functions +CPPFLAGS += -DDEBUG_PIECE # piece list management ##################################### General targets -.PHONY: compile cflags all clean +.PHONY: compile cflags all clean cleanall -compile: lib $(OBJ) $(BIN) +compile: libs objects bin cflags: - @echo CFLAGS used: $(CFLAGS) + @echo CFLAGS: "$(CFLAGS)" + @echo CPPFLAGS: $(CPPFLAGS) + @echo DEPFLAGS: $(DEPFLAGS) + @echo LDFLAGS: $(LDFLAGS) all: clean compile -clean: - rm -rf $(OBJ) core $(BIN) +clean: cleanobj cleanbin -##################################### Generate and include dependencies -.PHONY: deps cleandeps $(DEPFILE) +cleanall: clean cleandeps cleanlib + +##################################### Dependencies +.PHONY: deps cleandeps + +DEPDIR := ./.deps +DEPFILES := $(addprefix $(DEPDIR)/,$(SRC_S:.c=.d)) +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d + +$(DEPFILES): + +include $(wildcard $(DEPFILES)) + +$(DEPDIR): + @echo creating $@ directory. + @mkdir -p $@ cleandeps: - rm -f $(DEPFILE) - -deps: $(DEPFILE) - -$(DEPFILE): $(SRC) $(INC) - @echo generating dependancies. - $(CC) -MM -MF $(DEPFILE) -I $(INCDIR) $(SRC) - #cp $@ $@.sav - sed -i "s|\(.*\.o\):|${OBJDIR}/\0:|" $@ - -include $(DEPFILE) + $(RM) -rf $(DEPDIR) ##################################### objects -.PHONY: obj +.SECONDEXPANSION: +OBJ=$(addprefix $(OBJDIR)/,$(SRC_S:.c=.o)) -obj: $(OBJ) -#$(OBJ): $(OBJDIR)/%.o: $(SRCDIR)/%.c -# @mkdir -p $(@D) -# $(CC) -c $(CFLAGS) -o $@ $< -$(OBJDIR)/%.o: $(SRCDIR)/%.c - echo SRC_S=$(SRC_S) - echo O=$(OBJ) - mkdir -p $(@D) - @echo compiling A=$@ I=$< - $(CC) -c $(CFLAGS) -I $(INCDIR) -o $@ $< +.PHONY: cleanobj + +objects: $(OBJ) + +cleanobj: + $(RM) -rf $(OBJDIR) + +$(OBJDIR): + @echo creating $@ directory. + @mkdir -p $@ + +$(OBJDIR)/%.o: $(SRCDIR)/%.c $(DEPDIR)/%.d | $(OBJDIR) $(DEPDIR) + @echo compiling $<. + @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEPFLAGS) -I $(INCDIR) -o $@ $< ##################################### binaries -#fen: CFLAGS+=-DBIN_$$@ -#$(BIN): $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c -# @echo compiling $@. -# @$(CC) -DBIN_$@ $(CFLAGS) $^ $(LIBS) -o $@ +.PHONY: bin cleanbin + +bin: $(BIN) + +cleanbin: + $(RM) -f $(BIN) # TODO: find a better dependancy graph $(BIN): $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c - @echo compiling $@. - @echo NEED_TO_CHANGE_THIS=$^ - $(CC) -DBIN_$@ $(CFLAGS) -I $(INCDIR) $^ $(LDFLAGS) $(LIBS) -o $@ - -#pool: CFLAGS+=-DPOOLBIN -#pool: $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c -# $(CC) $(CFLAGS) $^ -o $@ - -# piece: CFLAGS+=-DPIECEBIN -# piece: $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c -# $(CC) $(CFLAGS) $^ -o $@ - -# move: CFLAGS+=-DMOVEBIN -# move: $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c -# $(CC) $(CFLAGS) $^ -o $@ - -# debug: CFLAGS+=-DDEBUGBIN -# debug: $$(subst $(OBJDIR)/$$@.o,,$(OBJ)) $(SRCDIR)/$$@.c -# $(CC) $(CFLAGS) $^ -o $@ - -#.PHONY: bits -#bits2: src/bits.c -# $(CC) $(CFLAGS) -S $^ -o $@.s -# $(CC) $(CFLAGS) $^ -o $@ + @echo generating $@. + @#echo NEED_TO_CHANGE_THIS=$^ + @$(CC) -DBIN_$@ $(CFLAGS) -I $(INCDIR) $^ $(LDFLAGS) $(LIBS) -o $@ ##################################### br library -.PHONY: cleanlib lib +.PHONY: cleanlib libs -cleanlib: clean - @$(RM) -f $(SLIB) $(DLIB) $(LIBOBJ) +ARFLAGS = r -lib: $(DLIB) $(SLIB) +cleanlib: + $(RM) -rf $(LIBDIR) $(LIBOBJ) -$(SLIB): $(LIBOBJ) +$(LIBDIR): + @echo creating $@ directory. + @mkdir -p $@ + +libs: $(DLIB) $(SLIB) | $(LIBDIR) + +# remove default rule +%.o: %.c + +$(LIBSRCDIR)/%.o: $(LIBSRCDIR)/%.c + @echo compiling library $< "->" $@. + @$(CC) -c $(CPPFLAGS) $(CFLAGS) -I $(INCDIR) -o $@ $< + +$(SLIB): $(LIBOBJ) | $(LIBDIR) @echo building $@ static library. - @mkdir -p $(LIBDIR) @$(AR) $(ARFLAGS) -o $@ $^ $(DLIB): CFLAGS += -fPIC $(DLIB): LDFLAGS += -shared -$(DLIB): $(LIBOBJ) +$(DLIB): $(LIBOBJ) | $(LIBDIR) @echo building $@ shared library. - @mkdir -p $(LIBDIR) @$(CC) $(LDFLAGS) $^ -o $@ - -.c.o: - @echo compiling $<. - @$(CC) -c $(CFLAGS) $(LDFLAGS) -I $(INCDIR) -o $@ $< diff --git a/dir-locals.el b/dir-locals.el deleted file mode 100644 index f45a2ac..0000000 --- a/dir-locals.el +++ /dev/null @@ -1 +0,0 @@ -((c-mode . ((compile-command . "make -C ../build -j2 whatever")))) diff --git a/make.deps b/make.deps deleted file mode 100644 index f0f3f1d..0000000 --- a/make.deps +++ /dev/null @@ -1,17 +0,0 @@ -./obj/bits.o:: src/bits.c src/bits.h src/debug.h -./obj/bodichess.o:: src/bodichess.c src/chessdefs.h src/bits.h src/debug.h \ - src/board.h src/piece.h src/list.h src/pool.h src/move.h src/position.h \ - src/fen.h src/eval.h src/bodichess.h -./obj/debug.o:: src/debug.c src/debug.h -./obj/eval.o:: src/eval.c src/eval.h src/position.h src/chessdefs.h src/bits.h \ - src/debug.h src/board.h src/piece.h src/list.h src/pool.h -./obj/fen.o:: src/fen.c src/debug.h src/chessdefs.h src/bits.h src/position.h \ - src/board.h src/piece.h src/list.h src/pool.h src/fen.h -./obj/move.o:: src/move.c src/chessdefs.h src/bits.h src/debug.h src/board.h \ - src/piece.h src/list.h src/pool.h src/move.h src/position.h -./obj/piece.o:: src/piece.c src/chessdefs.h src/bits.h src/debug.h src/piece.h \ - src/list.h src/pool.h src/board.h src/position.h -./obj/pool.o:: src/pool.c src/list.h src/pool.h src/debug.h -./obj/position.o:: src/position.c src/chessdefs.h src/bits.h src/debug.h \ - src/position.h src/board.h src/piece.h src/list.h src/pool.h src/move.h \ - src/fen.h