hush/Makefile
Stephen Heumann 9320c1e704 Set things up so hush can be build with debug code turned on.
This involved breaking things up into more segments in debug mode, since the code is larger. I also had to remove some unused extern definitions, which were causing link errors when debug code was enabled.

To enable debug code, pass "DEBUG=1" to make or build.gs.
2014-11-06 11:42:17 -06:00

125 lines
3.0 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/lineedptrhack.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/ptrtoglobals.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
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)