Files
hush/Makefile
Stephen Heumann cae994bc22 Add an emulation of waitpid that should be better than the one in libc.
In particular, it will buffer information about children other than the one being waited for, so it isn't lost. It can also emulate a non-blocking wait by arranging to interrupt the wait with a signal.
2014-11-07 12:12:18 -06:00

124 lines
2.9 KiB
Makefile

# The *_SRC variables are used to define segments; see the "%.a" recipe.
# shell/hush.c is divided into segments as specified within the file itself.
MAIN_SRC = shell/hush.c
SHELL_OTHER_SRC = \
shell/match.c \
shell/math.c \
shell/random.c \
shell/shell.common.c \
shell/glob.c
COREUTILS_SRC = \
coreutils/echo.c \
coreutils/test.c \
coreutils/test.ptr.hack.c
LIBBB_A_SRC = \
libbb/lineedit.c
LIBBB_B_SRC = \
libbb/appletlib.c \
libbb/getopt32.c \
libbb/error.retval.c \
libbb/endofname.c \
libbb/bb.strtonum.c \
libbb/full.write.c \
libbb/bb.qsort.c \
libbb/copyfd.c \
libbb/get.line.c \
libbb/conc.pathfile.c \
libbb/last.char.is.c \
libbb/cmp.str.array.c \
libbb/llist.c \
libbb/escape.seq.c \
libbb/messages.c \
libbb/bb.basename.c \
libbb/mempcpy.c
LIBBB_C_SRC = \
libbb/perror.msg.c \
libbb/signal.names.c \
libbb/safe.strncpy.c \
libbb/platform.c \
libbb/signals.c \
libbb/printable.str.c \
libbb/read.key.c \
libbb/safe.write.c \
libbb/read.c \
libbb/s.gethostname.c \
libbb/safe.poll.c \
libbb/parse.mode.c \
libbb/poll.c
LIBBB_D_SRC = \
libbb/xfuncs.printf.c \
libbb/xfuncs.c \
libbb/xgetcwd.c \
libbb/xatonum.c \
libbb/xfunc.die.c \
libbb/skip.whitespc.c \
libbb/wfopen.c \
libbb/verror.msg.c \
libbb/time.c \
libbb/xrealloc.vec.c \
libbb/unicode.c \
libbb/vfork.and.run.c \
libbb/waitpid.emul.c
SRCS = $(MAIN_SRC) $(SHELL_OTHER_SRC) $(COREUTILS_SRC) $(LIBBB_A_SRC) \
$(LIBBB_B_SRC) $(LIBBB_C_SRC) $(LIBBB_D_SRC)
OBJS = $(SRCS:.c=.a)
ROOT = $(MAIN_SRC:.c=.root)
SHELL_OTHER_SEG = -SSHELLOTHER
COREUTILS_SEG = -SCOREUTILS_
LIBBB_A_SEG = -SLIBBB_A___
LIBBB_C_SEG = -SLIBBB_C___
# We need more separate segments in debug mode because the code is bigger.
.IF $(DEBUG)
LIBBB_B_SEG = -SLIBBB_B___
LIBBB_D_SEG = -SLIBBB_D___
.ELSE
LIBBB_B_SEG = -SLIBBB_A___
LIBBB_D_SEG = -SLIBBB_C___
.END
INCLUDES = -I include -I shell -I libbb
DEFINES = -Dhush_main=main -DNDEBUG
# Hack to effectively disable close_on_exec_on method for now.
# This will cause us to leak file descriptors. TODO: Fix.
DEFINES += -DF_SETFD=-1 -DFD_CLOEXEC=-1
# For correct handling of varargs methods and fork, we need
# optimize bit 3 set (no stack repair code).
# Optimize bit 6 breaks some standard-compliant varargs code,
# and bits 0, 4, and 5 have known bugs. Disable for now.
CFLAGS = -i -w -a0 -O8
STACKSIZE = 20480
.IF $(DEBUG)
CFLAGS += -g -DDEBUG
.END
PROG = hush
$(PROG): $(OBJS)
$(CC) $(OBJS) -o $@
%.a: %.c
$(CC) $(INCLUDES) $(DEFINES) $(CFLAGS) -c $< -o $@ \
$(eq,$<,$(MAIN_SRC) -s$(STACKSIZE) -r) \
$(!eq,$(SHELL_OTHER_SRC:s/$<//),$(SHELL_OTHER_SRC) $(SHELL_OTHER_SEG)) \
$(!eq,$(COREUTILS_SRC:s/$<//),$(COREUTILS_SRC) $(COREUTILS_SEG)) \
$(!eq,$(LIBBB_A_SRC:s/$<//),$(LIBBB_A_SRC) $(LIBBB_A_SEG)) \
$(!eq,$(LIBBB_B_SRC:s/$<//),$(LIBBB_B_SRC) $(LIBBB_B_SEG)) \
$(!eq,$(LIBBB_C_SRC:s/$<//),$(LIBBB_C_SRC) $(LIBBB_C_SEG)) \
$(!eq,$(LIBBB_D_SRC:s/$<//),$(LIBBB_D_SRC) $(LIBBB_D_SEG))
.PHONY: clean
clean:
$(RM) $(OBJS) $(ROOT) $(PROG)