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
--
⑨