BINDIR = $(BUILDDIR)/bin
OBJDIR = $(BUILDDIR)/obj
+# targets
+BINS =
+ECLEAN =
+
#------------------------------------------------------------------------------
-# Build-Specific Macros
+# Ensure The Build Dir Exists
#------------------------------------------------------------------------------
-BINS = \
- $(BINDIR)/init \
- $(BINDIR)/getty \
- $(BINDIR)/login \
- $(BINDIR)/dmesg \
- $(BINDIR)/mount \
- $(BINDIR)/sh
-
-# load user-specific settings
--include config.mk
+$(BUILDDIR)/dummy:
+ mkdir -p $(BUILDDIR) $(BINDIR) $(OBJDIR) $(MKSH_OBJDIR)
+ touch $@
+-include $(BUILDDIR)/dummy
#------------------------------------------------------------------------------
-# Phony Targets
+# Build Rules
#------------------------------------------------------------------------------
-.PHONY: all dirs
-
-all: dirs $(BINS)
-
-dirs:
- mkdir -p $(BINDIR) $(OBJDIR) $(MKSH_OBJDIR)
-
-$(BINDIR)/init: source/init.c
- $(BUILD)
-
-$(BINDIR)/getty: source/getty.c
- $(BUILD)
-
-$(BINDIR)/login: source/login.c
- $(BUILD) -lcrypt
-
-$(BINDIR)/dmesg: source/dmesg.c
- $(BUILD)
+include source/Rules.mk
+include source/sh/Rules.mk
-$(BINDIR)/mount: source/mount.c
- $(BUILD)
+.PHONY: all $(BINS)
-include source/sh/Rules.mk
+all: $(BINS)
clean:
- $(RM) $(BINS) $(MKSH_OBJS)
+ $(RM) $(ECLEAN)
-# load dependency files
+# load dependency files if they exist
-include $(DEPS)
+# load user-specific settings if they exist
+-include config.mk
--- /dev/null
+SRC_SUBDIR = source
+SRC_BINS = init getty login dmesg mount
+BINS += $(SRC_BINS)
+ECLEAN += $(addprefix $(BINDIR)/, $(SRC_BINS))
+
+init: $(BINDIR)/init
+$(BINDIR)/init: $(SRC_SUBDIR)/init.c
+ $(BUILD)
+
+getty: $(BINDIR)/getty
+$(BINDIR)/getty: $(SRC_SUBDIR)/getty.c
+ $(BUILD)
+
+login: $(BINDIR)/login
+$(BINDIR)/login: $(SRC_SUBDIR)/login.c
+ $(BUILD) -lcrypt
+
+dmesg: $(BINDIR)/dmesg
+$(BINDIR)/dmesg: $(SRC_SUBDIR)/dmesg.c
+ $(BUILD)
+
+mount: $(BINDIR)/mount
+$(BINDIR)/mount: $(SRC_SUBDIR)/mount.c
+ $(BUILD)
+
-MKSH_BIN = sh
-MKSH_SUBDIR = source/sh
-MKSH_OBJDIR = $(OBJDIR)/sh
-MKSH_CCCMD = $(CC) $(CFLAGS) -I$(MKSH_SUBDIR) $(MKSH_DEFINES) -c -o $@ $^
-MKSH_LDCMD = $(CC) -o $@ $^
+MKSH_BIN = sh
+MKSH_SUBDIR = source/sh
+MKSH_OBJDIR = $(OBJDIR)/sh
+MKSH_CCCMD = $(CC) $(CFLAGS) -I$(MKSH_SUBDIR) $(MKSH_DEFINES) -c -o $@ $^
+MKSH_LDCMD = $(CC) -o $@ $^
+BINS += $(MKSH_BIN)
+ECLEAN += $(BINDIR)/$(MKSH_BIN) $(MKSH_OBJS)
MKSH_OBJS = \
$(MKSH_OBJDIR)/lalloc.o \
-DHAVE_SYS_SIGLIST_DECL=1 \
-DHAVE_PERSISTENT_HISTORY=1
+sh: $(BINDIR)/$(MKSH_BIN)
+
$(BINDIR)/$(MKSH_BIN): $(MKSH_OBJS)
$(MKSH_LDCMD)
$(MKSH_OBJDIR)/strlcpy.o: $(MKSH_SUBDIR)/strlcpy.c
$(MKSH_CCCMD)
-
-
-#-DMKSH_BUILDSH
-#-D_GNU_SOURCE
-#-DSETUID_CAN_FAIL_WITH_EAGAIN
-#-DHAVE_ATTRIBUTE_BOUNDED=0
-#-DHAVE_ATTRIBUTE_FORMAT=1
-#-DHAVE_ATTRIBUTE_NORETURN=1
-#-DHAVE_ATTRIBUTE_PURE=1
-#-DHAVE_ATTRIBUTE_UNUSED=1
-#-DHAVE_ATTRIBUTE_USED=1
-#-DHAVE_SYS_TIME_H=1
-#-DHAVE_TIME_H=1
-#-DHAVE_BOTH_TIME_H=1
-#-DHAVE_SYS_BSDTYPES_H=0
-#-DHAVE_SYS_FILE_H=1
-#-DHAVE_SYS_MKDEV_H=0
-#-DHAVE_SYS_MMAN_H=1
-#-DHAVE_SYS_PARAM_H=1
-#-DHAVE_SYS_RESOURCE_H=1
-#-DHAVE_SYS_SELECT_H=1
-#-DHAVE_SYS_SYSMACROS_H=1
-#-DHAVE_BSTRING_H=0
-#-DHAVE_GRP_H=1
-#-DHAVE_IO_H=0
-#-DHAVE_LIBGEN_H=1
-#-DHAVE_LIBUTIL_H=0
-#-DHAVE_PATHS_H=1
-#-DHAVE_STDINT_H=1
-#-DHAVE_STRINGS_H=1
-#-DHAVE_TERMIOS_H=1
-#-DHAVE_ULIMIT_H=1
-#-DHAVE_VALUES_H=1
-#-DHAVE_CAN_INTTYPES=1
-#-DHAVE_CAN_UCBINTS=1
-#-DHAVE_CAN_INT8TYPE=1
-#-DHAVE_CAN_UCBINT8=1
-#-DHAVE_RLIM_T=1
-#-DHAVE_SIG_T=1
-#-DHAVE_SYS_ERRLIST=1
-#-DHAVE_SYS_SIGNAME=0
-#-DHAVE_SYS_SIGLIST=1
-#-DHAVE_FLOCK=1
-#-DHAVE_LOCK_FCNTL=1
-#-DHAVE_GETRUSAGE=1
-#-DHAVE_GETSID=1
-#-DHAVE_GETTIMEOFDAY=1
-#-DHAVE_KILLPG=1
-#-DHAVE_MEMMOVE=1
-#-DHAVE_MKNOD=0
-#-DHAVE_MMAP=1
-#-DHAVE_NICE=1
-#-DHAVE_REVOKE=0
-#-DHAVE_SETLOCALE_CTYPE=1
-#-DHAVE_LANGINFO_CODESET=1
-#-DHAVE_SELECT=1
-#-DHAVE_SETRESUGID=1
-#-DHAVE_SETGROUPS=1
-#-DHAVE_STRERROR=0
-#-DHAVE_STRSIGNAL=0
-#-DHAVE_STRLCPY=0
-#-DHAVE_FLOCK_DECL=1
-#-DHAVE_REVOKE_DECL=1
-#-DHAVE_SYS_ERRLIST_DECL=1
-#-DHAVE_SYS_SIGLIST_DECL=1
-#-DHAVE_PERSISTENT_HISTORY=1
-#-DMKSH_BUILD_R=523