shithub: moonfish

Download patch

ref: e4ef04c293715e65cb66a5922596240ecb99a24b
parent: f192f6f5177fea95ce80978397fd86d9507c5538
author: zamfofex <zamfofex@twdb.moe>
date: Wed May 28 01:18:47 EDT 2025

simplify and improve makefile

--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,6 @@
 !/.gitignore
 !/README.md
 !/makefile
-!/GNUmakefile
 !/mkfile
 !/index.html
 !/.build.yml
--- a/GNUmakefile
+++ /dev/null
@@ -1,5 +1,0 @@
-# moonfish's license: 0BSD
-# copyright 2025 zamfofex
-
-include makefile
-src = $(filter %.c,$^)
--- a/README.md
+++ b/README.md
@@ -72,12 +72,19 @@
 compiling from source
 ---
 
-Compiling on UNIX (and clones) should be easy! Make sure you have GNU Make (or BSD Make) and a C compiler like GCC, then run the following command.
+Compiling on UNIX (and clones) should be easy! Make sure you have [POSIX Make] (like [GNU Make] or [BSD Make] or [PDP Make]) and a C compiler (like [GCC] or [Clang]), then run the following command.
 
 ~~~
 make moonfish
 ~~~
 
+[POSIX Make]: <https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html>
+[GNU Make]: <https://gnu.org/software/make/>
+[BSD Make]: <https://man.netbsd.org/make.1>
+[PDP Make]: <https://frippery.org/make/>
+[GCC]: <https://gnu.org/software/gcc/>
+[Clang]: <https://clang.llvm.org>
+
 Conversely, you may also invoke your compiler by hand. (Feel free to replace `cc` with your compiler of choice.)
 
 ~~~
@@ -94,6 +101,12 @@
 
 ~~~
 cc -O3 -Dmoonfish_no_threads -o moonfish chess.c search.c main.c -lm
+~~~
+
+Note: It’s also possible to pass arguments to the compiler when using Make by specifying `CFLAGS`:
+
+~~~
+make CFLAGS='-O3 -Dmoonfish_pthreads' moonfish
 ~~~
 
 using “analyse”
--- a/makefile
+++ b/makefile
@@ -1,37 +1,45 @@
 # moonfish's license: 0BSD
 # copyright 2025 zamfofex
 
-CFLAGS ?= -O3 -Wall -Wextra -Wpedantic
-PREFIX ?= /usr/local
-BINDIR ?= $(PREFIX)/bin
-RM ?= rm -f
-
-src = $(.ALLSRC:M*.c)
-tools = lichess analyse chat perft
-
+.POSIX:
 .PHONY: all check clean install
+.SUFFIXES:
+.SUFFIXES: .c .o
 
-all: moonfish lichess analyse chat
+CFLAGS = -O3 -Wall -Wextra -Wpedantic
+PREFIX = /usr/local
+BINDIR = $(PREFIX)/bin
+RM = rm -f
 
-moonfish $(tools):
-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(src) $(cflags) $(LIBS)
+# hack for BSD Make
+# (ideally, '$^' should be used directly instead)
+.ALLSRC ?= $^
 
-$(tools): moonfish.h tools/tools.h tools/utils.c chess.c
+tool_obj = tools/utils.o tools/https.o tools/pgn.o tools/lichess.o tools/analyse.o tools/chat.o tools/perft.o
+obj = chess.o search.o main.o
 
-moonfish: moonfish.h threads.h chess.c search.c main.c
-moonfish: cflags = -lm -pthread -latomic
+moonfish_libs = -lm -pthread -latomic
+lichess_libs = -pthread -ltls -lssl -lcrypto -lcjson
+analyse_libs = -pthread
+chat_libs = -ltls -lssl -lcrypto
 
-lichess: tools/lichess.c tools/https.c tools/https.h
-lichess: cflags = -pthread -ltls -lssl -lcrypto -lcjson
+all: moonfish lichess analyse chat
 
-analyse: tools/analyse.c tools/pgn.c
-analyse: cflags = -pthread
+moonfish: $(obj)
+lichess analyse chat perft: chess.o tools/utils.o
+lichess: tools/lichess.o tools/https.o
+analyse: tools/analyse.o tools/pgn.o
+chat: tools/chat.o tools/https.o
 
-chat: tools/chat.c tools/https.c tools/https.h
-chat: cflags = -ltls -lssl -lcrypto
+$(obj): moonfish.h
+$(tool_obj): moonfish.h tools/tools.h
+tools/https.o: tools/https.h
 
-perft: tools/perft.c
-perft: cflags =
+moonfish lichess analyse chat perft:
+	$(CC) $(LDFLAGS) -o $@ $(.ALLSRC) $($@_libs)
+
+.c.o:
+	$(CC) $(CFLAGS) -o $@ -c $<
 
 check: moonfish perft
 	scripts/check.sh
--- a/mkfile
+++ b/mkfile
@@ -3,11 +3,7 @@
 
 </$objtype/mkfile
 
-moonfish:
-	$LD $LDFLAGS -o $target $prereq
-lichess:
-	$LD $LDFLAGS -o $target $prereq
-chat:
+moonfish lichess chat:
 	$LD $LDFLAGS -o $target $prereq
 
 %.$O: %.c moonfish.h
--