blob: 899e6576efe92246eecf97c6a748c71c45d0e280 [file] [log] [blame]
# Makefile.linux
YACC = bison -y
COMMON_CFLAGS = -Wall $(OPTFLAGS) $(REQFLAGS)
COMMON_CPPFLAGS = \
-include config.h \
-DBSD=1 -DSMALL -DSHELL \
-DGLOB_BROKEN -DFNMATCH_BROKEN -DIFS_BROKEN \
-DJOBS=0
CFLAGS = $(COMMON_CFLAGS)
CPPFLAGS = $(COMMON_CPPFLAGS)
CFLAGS_FOR_BUILD = $(HOST_CFLAGS) $(COMMON_CFLAGS)
CPPFLAGS_FOR_BUILD = $(COMMON_CPPFLAGS)
YFLAGS = -d
DEFS = -DHAVE_CONFIG_H
DEFAULT_INCLUDES = -I.
DEPDIR = .deps
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(CPPFLAGS) $(CFLAGS)
COMPILE_FOR_BUILD = \
$(HOST_CC) $(CPPFLAGS_FOR_BUILD) \
$(CFLAGS_FOR_BUILD)
YACCCOMPILE = $(YACC) $(YFLAGS)
PROG = sh
SRCS = alias.c arith_yylex.c cd.c error.c eval.c exec.c expand.c \
histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
mystring.c options.c parser.c redir.c show.c trap.c output.c \
bltin/printf.c system.c bltin/test.c bltin/times.c var.c
OBJ1 = builtins.o init.o nodes.o signames.o syntax.o
OBJ2 = alias.o arith.o arith_yylex.o cd.o \
error.o eval.o exec.o expand.o \
histedit.o input.o jobs.o \
mail.o main.o memalloc.o \
miscbltin.o mystring.o options.o \
parser.o redir.o show.o trap.o \
output.o printf.o system.o \
test.o times.o var.o
OBJS = $(OBJ1) $(OBJ2)
SRCROOT = ..
include ../MCONFIG
LIBS = $(KLIBC) $(LIBGCC)
HELPERS = mkinit mksyntax mknodes mksignames
BUILT_SOURCES = arith.h builtins.h nodes.h syntax.h token.h
CLEANFILES = \
$(BUILT_SOURCES) $(patsubst %.o,%.c,$(OBJ1)) \
arith.c $(HELPERS) builtins.def
all: $(PROG) $(PROG).shared
$(OBJS): $(BUILT_SOURCES)
$(PROG): $(OBJS) $(LIBS) $(CRT0)
$(LD) $(LDFLAGS) -o $@ $(CRT0) $(OBJS) $(LIBS)
cp -f $@ $@.g
$(STRIPCMD) $@
$(PROG).shared: $(OBJS) $(CRTSHARED) $(LIBSHARED) $(LIBGCC)
$(LD) $(LDFLAGS) -o $(PROG).shared $(EMAIN) $(CRTSHARED) $(OBJS) -R $(LIBSHARED) $(LIBGCC)
cp -f $@ $@.g
$(STRIPCMD) $@
$(CRT0) $(LIBS):
@echo '*** error: $@ not up to date' || exit 1
.c.o:
if $(COMPILE) -MT $@ -MD -MP -MF ".$*.Td" -c -o $@ $<; \
then mv -f ".$*.Td" ".$*.d"; else rm -f ".$*.Td"; exit 1; fi
printf.o: bltin/printf.c
if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -MT printf.o -MD -MP -MF ".printf.Td" -c -o printf.o `test -f 'bltin/printf.c' || echo '$(srcdir)/'`bltin/printf.c; \
then mv -f ".printf.Td" ".printf.d"; else rm -f ".printf.Td"; exit 1; fi
test.o: bltin/test.c
if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -MT test.o -MD -MP -MF ".test.Td" -c -o test.o `test -f 'bltin/test.c' || echo '$(srcdir)/'`bltin/test.c; \
then mv -f ".test.Td" ".test.d"; else rm -f ".test.Td"; exit 1; fi
times.o: bltin/times.c
if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -MT times.o -MD -MP -MF ".times.Td" -c -o times.o `test -f 'bltin/times.c' || echo '$(srcdir)/'`bltin/times.c; \
then mv -f ".times.Td" ".times.d"; else rm -f ".times.Td"; exit 1; fi
.y.c:
$(YACCCOMPILE) $<
if test -f y.tab.h; then \
to=`echo "$*_H" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|" \
y.tab.h >$*.ht; \
rm -f y.tab.h; \
if cmp -s $*.ht $*.h; then \
rm -f $*.ht ;\
else \
mv $*.ht $*.h; \
fi; \
fi
if test -f y.output; then \
mv y.output $*.output; \
fi
sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
rm -f y.tab.c
token.h: mktokens
sh $^
builtins.def: builtins.def.in config.h
$(COMPILE) -E -x c -o $@ $<
builtins.c builtins.h: mkbuiltins builtins.def
sh $^
init.c: mkinit $(SRCS)
./$^
nodes.c nodes.h: mknodes nodetypes nodes.c.pat
./$^
syntax.c syntax.h: mksyntax
./$^
signames.c: mksignames
./$^
$(HELPERS): %: %.c
$(COMPILE_FOR_BUILD) -o $@ $(CRT0) $< $(LIBS)
arith.h: arith.c
@if test ! -f $@; then \
rm -f arith.c; \
$(MAKE) arith.c; \
else :; fi
clean:
rm -f core $(CLEANFILES) $(OBJS)
rm -f $(PROG) $(PROG).g $(PROG).shared $(PROG).shared.g
spotless: clean
find . \( -name \*~ -o -name \*.orig -o -name \*.rej -o -name \*.o \) -not -type d -print0 | xargs -0rt rm -f
rm -f tags .*.d .*.Td
install: all
$(INSTALL_EXEC) sh.shared $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/sh
ifneq ($(wildcard .*.d),)
include $(wildcard .*.d)
endif