diff --git a/Makefile b/Makefile index b7e7e5f..61b67de 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Copyright (c) 2023–2024 Emma Tebibyte -# Copyright (c) 2023 DTB +# Copyright (c) 2023–2024 DTB # Copyright (c) 2023 Sasha Koshka # SPDX-License-Identifier: FSFAP # @@ -10,19 +10,15 @@ .POSIX: .PRAGMA: posix_202x # future POSIX standard support à la pdpmake(1) -.PHONY: all -.PHONY: clean -.PHONY: install -.PHONY: test - PREFIX=/usr/local CC=cc RUSTC=rustc # to build, first run ./configure -include *.mk +include cc.mk rustc.mk +.PHONY: all all: dj false fop intcmp scrut str strcmp true build: @@ -30,6 +26,7 @@ build: # https://github.com/rust-lang/rust-bindgen/issues/2703 mkdir -p build/bin build/include build/lib build/o build/test +.PHONY: clean clean: rm -rf build/ dist/ @@ -38,10 +35,12 @@ dist: all cp build/bin/* dist/bin/ cp docs/*.1 dist/share/man/man1/ +.PHONY: install install: dist mkdir -p $(PREFIX) cp -r dist/* $(PREFIX)/ +.PHONY: test test: build tests/cc-compat.sh tests/posix-compat.sh @@ -61,27 +60,43 @@ libgetopt: src/getopt-rs/lib.rs $(RUSTC) $(RUSTCFLAGS) --crate-type=lib --crate-name=getopt \ -o build/o/libgetopt.rlib src/getopt-rs/lib.rs -dj: src/dj.c build - $(CC) $(CFLAGS) -o build/bin/dj src/dj.c +.PHONY: dj +dj: build/bin/dj +build/bin/dj: src/dj.c build + $(CC) $(CFLAGS) -o $@ src/dj.c -false: src/false.c build - $(CC) $(CFLAGS) -o build/bin/false src/false.c +.PHONY: false +false: build/bin/false +build/bin/false: src/false.c build + $(CC) $(CFLAGS) -o $@ src/false.c -fop: src/fop.rs build libgetopt sysexits +.PHONY: fop +fop: build/bin/fop +build/bin/fop: src/fop.rs build libgetopt sysexits $(RUSTC) $(RUSTFLAGS) --extern getopt=build/o/libgetopt.rlib \ - -o build/bin/fop src/fop.rs + -o $@ src/fop.rs -intcmp: src/intcmp.c build - $(CC) $(CFLAGS) -o build/bin/intcmp src/intcmp.c +.PHONY: intcmp +intcmp: build/bin/intcmp +build/bin/intcmp: src/intcmp.c build + $(CC) $(CFLAGS) -o $@ src/intcmp.c -scrut: src/scrut.c build - $(CC) $(CFLAGS) -o build/bin/scrut src/scrut.c +.PHONY: scrut +scrut: build/bin/scrut +build/bin/scrut: src/scrut.c build + $(CC) $(CFLAGS) -o $@ src/scrut.c -str: src/str.c build - $(CC) $(CFLAGS) -o build/bin/str src/str.c +.PHONY: str +str: build/bin/str +build/bin/str: src/str.c build + $(CC) $(CFLAGS) -o $@ src/str.c -strcmp: src/strcmp.c build - $(CC) $(CFLAGS) -o build/bin/strcmp src/strcmp.c +.PHONY: strcmp +strcmp: build/bin/strcmp +build/bin/strcmp: src/strcmp.c build + $(CC) $(CFLAGS) -o $@ src/strcmp.c -true: src/true.c build - $(CC) $(CFLAGS) -o build/bin/true src/true.c +.PHONY: true +true: build/bin/true +build/bin/true: src/true.c build + $(CC) $(CFLAGS) -o $@ src/true.c diff --git a/configure b/configure index eb1c8ae..c710afb 100755 --- a/configure +++ b/configure @@ -14,26 +14,30 @@ RUSTFLAGS='-Copt-level=z -Ccodegen-units=1 -Cpanic=abort -Clto=y \ -Cstrip=symbols -Ctarget-cpu=native \ --extern sysexits=build/o/libsysexits.rlib' -case "$@" in - clang) - CFLAGS="$CFLAGS -Wall" - ;; - clean) - rm *.mk || true - exit 0 - ;; - gcc) - CFLAGS="$CFLAGS -s -Wl,-z,noseparate-code,-z,nosectionheader -flto" - ;; - 'rustc +nightly') - RUSTFLAGS="+nightly -Zlocation-detail=none $RUSTFLAGS" - ;; - '') ;; - *) - printf 'Usage: %s [compiler]\n' "$0" - exit 64 # sysexits.h(3) EX_USAGE - ;; -esac +if [ "$1" = "clean" ]; then + rm *.mk || true + exit 0 +fi + +while test -n "$1"; do + case "$1" in + clang) + CFLAGS="$CFLAGS -Wall" + ;; + gcc) + CFLAGS="$CFLAGS -s -Wl,-z,noseparate-code,-z,nosectionheader -flto" + ;; + 'rustc +nightly') + RUSTFLAGS="+nightly -Zlocation-detail=none $RUSTFLAGS" + ;; + *) + printf 'Usage: %s [clean | compiler]\n' "$0" + exit 64 # sysexits.h(3) EX_USAGE + ;; + esac + + shift +done printf 'CFLAGS=%s\n' "$CFLAGS" >cc.mk printf 'RUSTFLAGS=%s\n' "$RUSTFLAGS" >rustc.mk