From 26691835175c6a643086cad2710daa5039457133 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Wed, 5 Nov 2014 22:26:33 -0600 Subject: [PATCH] Define segments and make other adjustments in makefile. At this point, hush can successfully build and run, although it doesn't work correctly. The main Makefile is now dedicated to the GNO build. There's now a separate makefile for building on modern systems with GCC/Clang. --- Makefile | 109 ++++++++++++++++++++++++++++++------------------- Makefile.gmake | 75 ++++++++++++++++++++++++++++++++++ build.gcc | 2 +- shell/hush.c | 8 ++++ 4 files changed, 152 insertions(+), 42 deletions(-) create mode 100644 Makefile.gmake diff --git a/Makefile b/Makefile index 2c67d4a06..35545eb06 100644 --- a/Makefile +++ b/Makefile @@ -1,65 +1,87 @@ -SRCS = \ - shell/hush.c \ +# 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 \ + shell/glob.c + +COREUTILS_SRC = \ coreutils/echo.c \ coreutils/test.c \ - coreutils/test.ptr.hack.c \ - libbb/xfuncs.printf.c \ - libbb/xfuncs.c \ - libbb/xgetcwd.c \ - libbb/getopt32.c \ - libbb/perror.msg.c \ - libbb/xatonum.c \ - libbb/signal.names.c \ - libbb/ptrtoglobals.c \ - libbb/error.retval.c \ - libbb/xfunc.die.c \ - libbb/safe.strncpy.c \ + coreutils/test.ptr.hack.c + +LIBBB_A_SRC = \ libbb/lineedit.c \ libbb/lineedptrhack.c \ - libbb/platform.c \ + libbb/appletlib.c \ + libbb/getopt32.c \ + libbb/error.retval.c \ libbb/endofname.c \ - libbb/signals.c \ - libbb/skip.whitespc.c \ - libbb/wfopen.c \ - libbb/verror.msg.c \ libbb/bb.strtonum.c \ - libbb/time.c \ - libbb/printable.str.c \ libbb/full.write.c \ libbb/bb.qsort.c \ - libbb/xrealloc.vec.c \ libbb/copyfd.c \ - libbb/read.key.c \ - libbb/unicode.c \ - libbb/safe.write.c \ - libbb/read.c \ - libbb/s.gethostname.c \ libbb/get.line.c \ libbb/conc.pathfile.c \ libbb/last.char.is.c \ - libbb/safe.poll.c \ - libbb/escape.seq.c \ libbb/cmp.str.array.c \ libbb/llist.c \ - libbb/parse.mode.c \ + libbb/escape.seq.c \ libbb/messages.c \ - libbb/appletlib.c \ libbb/bb.basename.c \ - libbb/mempcpy.c \ - libbb/vfork.and.run.c \ - libbb/poll.c -OBJS = $(SRCS:.c=.o) -ROOTS = $(SRCS:.c=.root) + libbb/mempcpy.c + +LIBBB_B_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/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) +OBJS = $(SRCS:.c=.a) +ROOT = $(MAIN_SRC:.c=.root) INCLUDES = -I include -I shell -I libbb DEFINES = -Dhush_main=main -DNDEBUG -OCC_FLAGS = -i -w -a0 +# 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. +OCC_FLAGS = -i -w -a0 -O8 +STACKSIZE = 20480 + # Add $(OCC_FLAGS) to CFLAGS on dmake CFLAGS = $(null, $(OCC_FLAGS)) @@ -68,9 +90,14 @@ PROG = hush $(PROG): $(OBJS) $(CC) $(OBJS) -o $@ -%.o: %.c - $(CC) $(INCLUDES) $(DEFINES) $(CFLAGS) -c $< -o $@ +%.a: %.c + $(CC) $(INCLUDES) $(DEFINES) $(CFLAGS) -c $< -o $@ \ + $(eq,$<,$(MAIN_SRC) -s$(STACKSIZE) -r) \ + $(!eq,$(SHELL_OTHER_SRC:s/$