174 lines
5.5 KiB
Makefile
174 lines
5.5 KiB
Makefile
# *****************************************************************************
|
|
# * Copyright (c) 2004, 2008 IBM Corporation
|
|
# * All rights reserved.
|
|
# * This program and the accompanying materials
|
|
# * are made available under the terms of the BSD License
|
|
# * which accompanies this distribution, and is available at
|
|
# * http://www.opensource.org/licenses/bsd-license.php
|
|
# *
|
|
# * Contributors:
|
|
# * IBM Corporation - initial implementation
|
|
# ****************************************************************************/
|
|
|
|
# Before including this Makefile, you should specify the following variables
|
|
# in your Makefile:
|
|
# - INCLCMNDIR : Points to the common include directory
|
|
# - INCLCMNDIR : Points to the board specific include directory
|
|
# - SLOFCMNDIR : Points to the common SLOF directory
|
|
# - SLOFBRDDIR : Points to the board specific SLOF directory
|
|
# - LLFWCMNDIR : Points to the common LLFW directory
|
|
# - LLFWBRDDIR : Points to the board specific LLFW directory
|
|
|
|
# Set LLFW directories (should normally be set from parent Makefile):
|
|
TOPBRDDIR ?= $(shell cd .. && pwd)
|
|
LLFWBRDDIR ?= $(TOPBRDDIR)/llfw
|
|
LLFWCMNDIR ?= $(SLOFCMNDIR:%/slof=%/llfw)
|
|
INCLBRDDIR ?= $(TOPBRDDIR)/include
|
|
|
|
|
|
CPPFLAGS += -I. -I$(INCLCMNDIR) -I$(INCLBRDDIR) -I$(INCLCMNDIR)/$(CPUARCH)
|
|
CFLAGS += -DTARG=$(TARG) -static -std=gnu99 $(FLAG) $(CPUARCHDEF)
|
|
ASFLAGS = -Wa,-mpower4 -Wa,-mregnames $(FLAG) $(CPUARCHDEF)
|
|
|
|
LDFLAGS += -static -nostdlib -Wl,-q,-n
|
|
|
|
ifneq ($(TARG),unix)
|
|
CFLAGS += -nostdinc -fno-builtin
|
|
CPPFLAGS += -I$(LIBCMNDIR)/libc/include
|
|
SLOF_LIBS += $(LIBCMNDIR)/libc.a
|
|
endif
|
|
|
|
DICT = $(SLOFCMNDIR)/prim.in $(SLOFCMNDIR)/engine.in \
|
|
$(BOARD_SLOF_IN) $(SLOFCMNDIR)/$(TARG).in
|
|
|
|
# Source code files with automatic dependencies:
|
|
SLOF_BUILD_SRCS = paflof.c helpers.c allocator.c sbrk.c
|
|
|
|
SLOF_BUILD_OBJS = $(SLOF_BUILD_SRCS:%.c=%.o)
|
|
|
|
# Flags for pre-processing Forth code with CPP:
|
|
FPPFLAGS = -nostdinc -traditional-cpp -undef -P -C $(FLAG)
|
|
FPPINCLUDES ?= -I$(SLOFBRDDIR) -I$(SLOFCMNDIR)/fs
|
|
|
|
# Rules for pre-processing Forth code:
|
|
# - Use CPP for pre-processing #include directives
|
|
# - Use sed to strip all white spaces at the beginning of a line
|
|
# - Use sed to remove all lines that only contain a comment
|
|
# - Use sed to remove all empty lines from the file
|
|
%.fsi: %.fs
|
|
ifeq ($(V),1)
|
|
printf "\t[FPP]\t%s\n" `basename "$@"`
|
|
endif
|
|
rm -f $@
|
|
cpp $(FPPFLAGS) $(FPPINCLUDES) $< > $@.tmp
|
|
sed -e 's/^[ ]*//' < $@.tmp \
|
|
| sed -e '/^\\[ ]/d' \
|
|
| sed -e '/^([ ][^)]*[ ])[ ]*$$/d' \
|
|
| sed -e '/^$$/d' > $@
|
|
rm -f $@.tmp
|
|
|
|
|
|
OF.o: OF.fsi
|
|
$(LD) -o $@ -r -bbinary $<
|
|
|
|
|
|
dict.xt: $(DICT) $(SLOFCMNDIR)/ref.pl
|
|
cat $(DICT) | perl $(SLOFCMNDIR)/ref.pl -s $(CELLSIZE) > dict.xt
|
|
|
|
ifdef BOARD_SLOF_CODE
|
|
board.code: $(BOARD_SLOF_CODE)
|
|
cat $(BOARD_SLOF_CODE) > $@
|
|
else
|
|
board.code:
|
|
echo > $@
|
|
endif
|
|
|
|
paflof: $(SLOFCMNDIR)/OF.lds $(SLOFCMNDIR)/ofw.o $(SLOFCMNDIR)/entry.o romfs.o \
|
|
$(SLOF_BUILD_OBJS) version.o OF.o nvramlog.o $(LLFWBRDDIR)/board_io.o \
|
|
$(LLFWBRDDIR)/io_generic_lib.o $(SLOF_LIBS)
|
|
$(CC) -T$(SLOFCMNDIR)/OF.lds $(SLOFCMNDIR)/ofw.o version.o $(SLOF_BUILD_OBJS) \
|
|
$(SLOFCMNDIR)/entry.o romfs.o OF.o nvramlog.o $(LLFWBRDDIR)/board_io.o \
|
|
$(LLFWBRDDIR)/io_generic_lib.o $(LDFLAGS) $(SLOF_LIBS) -o $@
|
|
#save a copy of paflof before stripping
|
|
@cp $@ $@.unstripped
|
|
$(STRIP) --strip-unneeded $@
|
|
|
|
paflof.o: board.code dict.xt
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(SLOFCMNDIR)/paflof.c
|
|
|
|
helpers.o:
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(SLOFCMNDIR)/helpers.c
|
|
|
|
allocator.o:
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(SLOFCMNDIR)/allocator.c
|
|
|
|
sbrk.o:
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(SLOFCMNDIR)/sbrk.c
|
|
|
|
$(SLOFCMNDIR)/xvect.bin: $(SLOFCMNDIR)/lowmem.o
|
|
$(CC) $(LDFLAGS) -Wl,--oformat,binary -Ttext=0x100 -o xvect.bin.tmp $<
|
|
dd if=xvect.bin.tmp of=$(SLOFCMNDIR)/xvect.bin bs=256 skip=1 2>/dev/null
|
|
rm -f xvect.bin.tmp
|
|
|
|
romfs.o:
|
|
$(CC) $(CPPFLAGS) $(ASFLAGS) -c -o $@ $(LLFWCMNDIR)/romfs.S
|
|
|
|
nvramlog.o:
|
|
$(CC) $(CPPFLAGS) $(ASFLAGS) -c -o $@ $(LLFWCMNDIR)/nvramlog.S
|
|
|
|
checkpoint.o:
|
|
$(CC) $(CPPFLAGS) $(ASFLAGS) -c -o $@ $(LLFWCMNDIR)/checkpoint.S
|
|
|
|
$(LLFWBRDDIR)/board_io.o:
|
|
$(MAKE) -C $(LLFWBRDDIR) board_io.o
|
|
|
|
$(LLFWBRDDIR)/io_generic_lib.o:
|
|
$(MAKE) -C $(LLFWBRDDIR) io_generic_lib.o
|
|
|
|
default-font.o: $(SLOFCMNDIR)/default-font.c
|
|
$(CC) $(CPPFLAGS) $< -c -o default-font.o
|
|
|
|
$(SLOFBRDDIR)/default-font.bin: default-font.o
|
|
$(OBJCOPY) -Obinary default-font.o $@
|
|
|
|
.PHONY : create_OF.ffs clean_slof distclean_slof depend
|
|
|
|
|
|
# Create OF.ffs automatically from file list in OF_FFS_FILES variable.
|
|
# We have to use absolute path names there, so we have to use `pwd` to
|
|
# find them out:
|
|
create_OF_ffs:
|
|
rm -f OF.ffs
|
|
@for i in $(OF_FFS_FILES) ; do \
|
|
CURRENTDIR=`pwd` ; cd `dirname $$i` ; \
|
|
DIRNAME=`pwd` ; cd $$CURRENTDIR ; \
|
|
echo `basename $$i | sed -e s/\.fsi/\.fs/` \
|
|
$$DIRNAME/`basename $$i` 0 0 >> OF.ffs ; \
|
|
done
|
|
|
|
|
|
# Targets for cleaning up:
|
|
clean_slof:
|
|
rm -f $(SLOFCMNDIR)/*.o $(SLOFCMNDIR)/*.bin $(SLOFCMNDIR)/*.elf
|
|
rm -f dict.xt board.code paflof paflof.unstripped default-font.bin
|
|
rm -f $(filter %.fsi,$(OF_FFS_FILES))
|
|
|
|
distclean_slof: clean_slof
|
|
rm -f Makefile.dep
|
|
|
|
|
|
# Rules for creating the dependency file:
|
|
depend:
|
|
rm -f Makefile.dep
|
|
$(MAKE) Makefile.dep
|
|
|
|
Makefile.dep: Makefile $(SLOFCMNDIR)/Makefile.inc OF.fs
|
|
$(CC) -M -MG $(CPPFLAGS) $(CFLAGS) $(SLOF_BUILD_SRCS:%=$(SLOFCMNDIR)/%) > Makefile.dep
|
|
cpp -M -MG $(FPPFLAGS) $(FPPINCLUDES) -MT OF.fsi OF.fs >> Makefile.dep
|
|
for i in $(filter %.fsi,$(OF_FFS_FILES)) ; do \
|
|
cpp -M -MG $(FPPFLAGS) $(FPPINCLUDES) -MT $$i \
|
|
`echo $$i | sed -e 's/\.fsi/\.fs/'` >> Makefile.dep ; \
|
|
done
|
|
|
|
# Include dependency file if available:
|
|
-include Makefile.dep
|