File:  [DragonFly] / src / bin / sh / Makefile
Revision 1.3: download - view: text, annotated - select for diffs
Mon Mar 22 20:57:25 2004 UTC (10 years ago) by dillon
Branches: MAIN
CVS tags: HEAD, DragonFly_Snap29Sep2004, DragonFly_Snap13Sep2004, DragonFly_1_0_REL, DragonFly_1_0_RC1, DragonFly_1_0A_REL
This represents a major update to the buildworld subsystem.

    Compartmentalize the bootstrap/buildtools, the cross-build setup,
    and the world stage.  /usr/obj/usr/src is now far more readable
    (e.g. /usr/obj/usr/src/{btools_i386,ctools_i386_i386,world_i386}).

    Use a completely private command path for the world stage of the build.
    The bootstrap/buildtools stage compiles all required system programs
    (like rm, ln, chmod, etc).   At the moment the build compiles everything
    it needs, but this can be augmented later to 'cp' the required binaries
    into btools_<arch> instead of building them, including potentially copying
    the compiler binaries so the ctools_<arch> build could use a private
    path too).

    The 'buildworld' target now properly removes all object modules for
    all major stages.  Several new targets have been added to reduce
    build times, the most useful of which is 'quickworld', which skips
    the btools and ctools stages (they must have already been built).

    sys.mk has been augmented to support .nx binaries and .no object
    modules, which are built using ${NXCC} and friends, which always uses
    the system's native compiler rather then potentially using the
    cross-build compiler, for generating helper programs during the build.
    This way we do not have to special-case building the helper programs in
    an earlier stage as FreeBSD does.

    Fix a bug in 'wmake', which simulates the buildworld environment for
    piecemeal compilation/testing.  It was not using /usr/src/share/mk.

    Add additional .ORDER: constraints to better support make -j N
    (incomplete).  Note that recent changes to the DragonFly scheduler make
    it more likely for buildworld to trip over parallel make races.

    TOOLS_PREFIX was used to generate cross-compiler directory targets
    for exec'd utility binaries and access to libraries and include
    files.  However, in the new compartmentalized breakdown the cross
    compiler's utility binaries will reside in ctools_* while the
    include files and libraries are expected to be installed and accessed
    in world_*.  Add a USRDATA_PREFIX which defaults to TOOLS_PREFIX to
    allow the cross compilation stage to separate the two entities.

#	@(#)Makefile	8.4 (Berkeley) 5/5/95
# $FreeBSD: src/bin/sh/Makefile,v 1.30.2.1 2001/12/15 10:05:18 knu Exp $
# $DragonFly: src/bin/sh/Makefile,v 1.3 2004/03/22 20:57:25 dillon Exp $

PROG=	sh
SHSRCS=	alias.c arith.y arith_lex.l cd.c echo.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 output.c parser.c printf.c redir.c show.c \
	test.c trap.c var.c
GENSRCS= builtins.c init.c nodes.c syntax.c
GENHDRS= builtins.h nodes.h syntax.h token.h y.tab.h
SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} y.tab.h

# MLINKS for Shell built in commands for which there are no userland
# utilities of the same name are handled with the associated manpage,
# builtin.1 in share/man/man1/.  

DPADD+= ${LIBL} ${LIBEDIT} ${LIBTERMCAP}
LDADD+= -ll -ledit -ltermcap

LFLAGS= -8	# 8-bit lex scanner for arithmetic
CFLAGS+=-DSHELL -I. -I${.CURDIR}
# for debug:
# CFLAGS+= -g -DDEBUG=2

.PATH:	${.CURDIR}/bltin \
	${.CURDIR}/../../usr.bin/printf \
	${.CURDIR}/../../bin/test

CLEANFILES+= mkinit.nx mkinit.no mknodes.nx mknodes.no \
	mksyntax.nx mksyntax.no
CLEANFILES+= ${GENSRCS} ${GENHDRS}

build-tools: mkinit.nx mknodes.nx mksyntax.nx

.ORDER: builtins.c builtins.h
builtins.c builtins.h: mkbuiltins builtins.def
	cd ${.CURDIR}; sh mkbuiltins ${.OBJDIR}

init.c: mkinit.nx alias.c eval.c exec.c input.c jobs.c options.c parser.c \
	redir.c trap.c var.c
	./mkinit.nx ${.ALLSRC:S/^mkinit.nx$//}

# XXX this is just to stop the default .c rule being used, so that the
# intermediate object has a fixed name.
# XXX we have a default .c rule, but no default .o rule.
.o:
	${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
mkinit.nx: mkinit.no
mknodes.nx: mknodes.no
mksyntax.nx: mksyntax.no

.ORDER: nodes.c nodes.h
nodes.c nodes.h: mknodes.nx nodetypes nodes.c.pat
	./mknodes.nx ${.CURDIR}/nodetypes ${.CURDIR}/nodes.c.pat

.ORDER: syntax.c syntax.h
syntax.c syntax.h: mksyntax.nx
	./mksyntax.nx

token.h: mktokens
	sh ${.CURDIR}/mktokens

.include <bsd.prog.mk>