summaryrefslogtreecommitdiff
path: root/util/nvmutil/Makefile
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-03-18 13:13:27 +0000
committerLeah Rowe <leah@libreboot.org>2026-03-18 13:37:06 +0000
commit27371af4bc6d3b1dfec6a498585769ccdb3b15f6 (patch)
tree97759cb4b95a11e42bef0f9df93b297fd19b0b96 /util/nvmutil/Makefile
parent722ed03179ec43d7b71f927f1a53579ccf5ebff8 (diff)
nvmutil: split nvmutil.c into multiple files
this is a big program now. act like it. Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/nvmutil/Makefile')
-rw-r--r--util/nvmutil/Makefile88
1 files changed, 73 insertions, 15 deletions
diff --git a/util/nvmutil/Makefile b/util/nvmutil/Makefile
index 6488ca43..6b4ee3c5 100644
--- a/util/nvmutil/Makefile
+++ b/util/nvmutil/Makefile
@@ -11,10 +11,8 @@ DESTDIR?=
PREFIX?=/usr/local
INSTALL?=install
-.SUFFIXES:
+.SUFFIXES: .c .o
-# maybe add -I. here when running make
-# e.g. make LDIR=-I.
LDIR?=
PORTABLE?=$(LDIR) $(CFLAGS)
@@ -22,24 +20,73 @@ WARN?=$(PORTABLE) -Wall -Wextra
STRICT?=$(WARN) -std=c90 -pedantic -Werror
HELLFLAGS?=$(STRICT) -Weverything
-# program name
PROG=nvmutil
-all: $(PROG)
+# source files
+
+SRCS = nvmutil.c state.c file.c string.c usage.c command.c num.c io.c \
+ checksum.c word.c
+
+# object files
+
+OBJS = $(SRCS:.c=.o)
+
+# default mode
+
+MODE?=portable
+
+# default mode, options
+
+CFLAGS_MODE=$(PORTABLE)
+CC_MODE=$(CC)
+
+# override modes (options)
-$(PROG): $(PROG).c
- $(CC) $(PORTABLE) $(PROG).c -o $(PROG) $(LDFLAGS)
+ifeq ($(MODE),warn)
+CFLAGS_MODE=$(WARN)
+endif
-warn: $(PROG).c
- $(CC) $(WARN) $(PROG).c -o $(PROG) $(LDFLAGS)
+ifeq ($(MODE),strict)
+CFLAGS_MODE=$(STRICT)
+endif
-strict: $(PROG).c
- $(CC) $(STRICT) $(PROG).c -o $(PROG) $(LDFLAGS)
+ifeq ($(MODE),hell)
+CFLAGS_MODE=$(HELLFLAGS)
+CC_MODE=$(HELLCC)
+endif
-# clang-only extreme warnings (not portable)
-hell: $(PROG).c
- $(HELLCC) $(HELLFLAGS) $(PROG).c -o $(PROG) $(LDFLAGS)
+# (rebuild on .h changes)
+# (commented for portability)
+#
+# CFLAGS_MODE += -MMD -MP
+# -include $(OBJS:.o=.d)
+#
+# likely more compatible,
+# on its own:
+# -include $(OBJS:.o=.d)
+#
+# i want this to build on
+# old make, so i'll leave
+# this blanked by default
+all: $(PROG)
+
+$(PROG): $(OBJS)
+ $(CC_MODE) $(OBJS) -o $(PROG) $(LDFLAGS)
+
+# generic rules
+
+# .c.o: is the old style (portable)
+# modern equivalent:
+# %.o: %.c
+#
+.c.o:
+ $(CC_MODE) $(CFLAGS_MODE) -c $< -o $@
+
+# -m in install is not portable
+# to old/other/weird versions.
+# use chmod directly.
+#
install: $(PROG)
$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin
$(INSTALL) $(PROG) $(DESTDIR)$(PREFIX)/bin/$(PROG)
@@ -49,8 +96,19 @@ uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/$(PROG)
clean:
- rm -f $(PROG)
+ rm -f $(PROG) $(OBJS) *.d
distclean: clean
+# easy commands
+
+warn:
+ $(MAKE) MODE=warn
+
+strict:
+ $(MAKE) MODE=strict
+
+hell:
+ $(MAKE) MODE=hell
+
.PHONY: all warn strict hell install uninstall clean distclean