Subversion Repositories HelenOS

Rev

Rev 2715 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#
# Copyright (c) 2005 Martin Decky
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# - Redistributions of source code must retain the above copyright
#   notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
#   notice, this list of conditions and the following disclaimer in the
#   documentation and/or other materials provided with the distribution.
# - The name of the author may not be used to endorse or promote products
#   derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

include ../../../version
include ../../Makefile.config

## Setup toolchain
#

LIBC_PREFIX = ../../lib/libc
SOFTINT_PREFIX = ../../lib/softint
include $(LIBC_PREFIX)/Makefile.toolchain

CFLAGS += \
    -DSHELL \
    -I. \
    -DNO_HISTORY \
    -DBSD=1 \
    -DSMALL \
    -D_GNU_SOURCE \
    -DGLOB_BROKEN \
    -D__COPYRIGHT\(x\)= \
    -D__RCSID\(x\)= 
#   -D_DIAGASSERT\(x\)= \
#   -DHETIO

LIBS = $(LIBC_PREFIX)/libc.a
DEFS += -DRELEASE=\"$(RELEASE)\"

ifdef REVISION
    DEFS += "-DREVISION=\"$(REVISION)\""
endif

ifdef TIMESTAMP
    DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif

## Sources
#

OUTPUT =    sh
SHSRCS =    \
    fake.c \
    alias.c \
    cd.c \
    bltin/echo.c \
    error.c \
    eval.c \
    exec.c \
    expand.c \
    hetio.c \
    histedit.c \
    input.c \
    jobs.c \
    mail.c \
    main.c \
    memalloc.c \
    miscbltin.c \
    mystring.c \
    options.c \
    output.c \
    parser.c \
    redir.c \
    show.c \
    setmode.c \
    bltin/test.c \
    bltin/times.c \
    trap.c \
    var.c 

GENSRCS = \
    builtins.c \
    init.c \
    nodes.c \
    syntax.c \
    signames.c 
#   lex.yy.c \
#   arith.c \
#   arith.h \

GENHEADERS = \
    token.h \
    nodes.h \
    syntax.h \
    builtins.h 

SOURCES = ${SHSRCS} ${GENSRCS}
SUBDIRS = tools

OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))

.PHONY: all clean depend disasm all-subdirs

all: all-subdirs $(OUTPUT) disasm

all-subdirs:
    for i in $(SUBDIRS); do \
        echo "make all in $$i..."; \
        make -C $$i all; \
    done

-include Makefile.depend

.ORDER: builtins.c builtins.h
builtins.c builtins.h: mkbuiltins builtins.def
    sh mkbuiltins shell.h builtins.def `pwd`

INIT_DEPS = alias.c eval.c exec.c input.c jobs.c options.c parser.c \
    redir.c trap.c var.c output.c
    
init.c: mkinit $(INIT_DEPS)
    ./mkinit $(INIT_DEPS)

signames.c: mksignames
    ./mksignames

nodes.c nodes.h: mknodes nodetypes nodes.c.pat
    ./mknodes ./nodetypes ./nodes.c.pat

syntax.c syntax.h: mksyntax
    ./mksyntax

#arith.c arith.h: arith.y
#   yacc -d arith.y
#   mv y.tab.h arith.h
#   mv y.tab.c arith.c

token.h: mktokens
    sh ./mktokens

clean:
    -rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
    -rm -f $(GENSRCS) $(GENHEADERS) $(OBJECTS) 
    for i in $(SUBDIRS); do \
        echo "make clean in $$i..."; \
        make -C $$i clean; \
    done

depend:
    $(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) $(GENHEADERS) > Makefile.depend

$(OUTPUT): $(GENSRCS) $(GENHEADERS) $(OBJECTS) $(LIBS)
    $(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map

disasm:
    $(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm

%.o: %.S
    $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@

%.o: %.s
    $(AS) $(AFLAGS) $< -o $@

%.o: %.c
    $(CC) $(DEFS) $(CFLAGS) -c $< -o $@