view Makefile @ 118:6186160278c9

I should probably exit the program when it finishes..
author Jonathan Pevarnek <pevarnj@gmail.com>
date Thu, 16 Jun 2011 12:51:43 -0400
parents 32560561ccea
children 889c68a0036a
line wrap: on
line source

CROSS_COMPILE=s390x-linux-
AS=$(CROSS_COMPILE)as
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++
LD=$(CROSS_COMPILE)ld
AR=$(CROSS_COMPILE)ar
OBJCOPY=$(CROSS_COMPILE)objcopy

MAKEFLAGS += -rR --no-print-directory
CFLAGS=-g -fno-strict-aliasing -fno-builtin -nostdinc -nostdlib -Wall -m64 -I include/ -O2
CXXFLAGS=$(CFLAGS)
LDFLAGS=-m elf64_s390

OSBINS=shell
PROGBINS=hello ls echo dynamic

shell_OBJS=src/os/shell.o src/os/std.o src/os/fs.o src/os/string.o src/os/stdio.o src/os/scall.o src/os/heap.o src/os/memStack.o arch/arch.a
hello_OBJS=src/prog/hello.o src/prog/std.o src/prog/string.o
ls_OBJS=src/prog/ls.o
echo_OBJS=src/prog/echo.o src/prog/std.o src/prog/string.o
dynamic_OBJS=src/prog/dynamic.o src/prog/std.o src/prog/string.o src/prog/stack.o

sarpn_OBJS=src/sarpn.o src/std.o src/string.o src/prog/stack.o src/operations.o src/math.o arch/arch.a
testFS_OBJS=src/testFS.o src/std.o src/string.o src/os/fs.o arch/arch.a

ARCH_OBJS=arch/io.o arch/cons.o arch/ebcdic.o arch/fba.o arch/ioint.o \
	  arch/svc.o arch/svcint.o

.PHONY: all build clean tags

all: $(OSBINS) $(PROGBINS) loader.bin
	utility/fsGen.py $(PROGBINS) > hercules/curDisk.img
	@echo "Loader is `stat -c %s loader.bin` bytes"

clean:
	rm -f $(shell_OBJS)
	rm -f $(hello_OBJS)
	rm -f $(ls_OBJS)
	rm -f $(echo_OBJS)
	rm -f $(sarpn_OBJS)
	rm -f $(dynamic_OBJS)
	rm -f $(testFS_OBJS)
	rm -f $(ARCH_OBJS)
	rm -f $(OSBINS)
	rm -f $(PROGBINS)
	rm -f loader.bin ipl/*.o ipl/*.rto ipl/ipl_ccws.S cscope.out

tags:
	cscope -R -b
	ctags -R

shell: $(shell_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linker.script -o $@ $^
hello: $(hello_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linkerProg.script -o $@ $^
ls: $(ls_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linkerProg.script -o $@ $^
echo: $(echo_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linkerProg.script -o $@ $^
dynamic: $(dynamic_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linkerProg.script -o $@ $^

sarpn: $(sarpn_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linker.script -o $@ $^
testFS: $(testFS_OBJS)
	$(LD) $(LDFLAGS) -T scripts/linker.script -o $@ $^

arch/arch.a: $(ARCH_OBJS)
	$(AR) rc $@ $^

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

src/prog/%.o: src/prog/%.c
	$(CC) $(CFLAGS) -include include/system.h -c -o $@ $<
src/os/%.o: src/os/%.c
	$(CC) $(CFLAGS) -include include/system.h -c -o $@ $< -DOSLEVEL
%.o: %.c
	$(CC) $(CFLAGS) -include include/system.h -c -o $@ $<


%.o: %.cpp
	$(CXX) $(CXXFLAGS) -include include/system.h -c -o $@ $<

#
# IPL specific bits
#

.PRECIOUS: ipl/loader.o ipl/loader_c.o ipl/loader_asm.o ipl/setmode.o \
	ipl/ipl_ccws.o ipl/ipl.o

loader.bin: ipl/ipl.rto ipl/ipl_ccws.rto ipl/setmode.rto ipl/loader.rto
	cat $^ > $@
	( len=`stat -c %s "$@"`; dif=`expr $$len % 80`; if [ $$dif -ne 0 ]; then dif=`expr 80 - $$dif`; dd if=/dev/zero bs=1 count=$$dif 2> /dev/null >> "$@"; fi)

ipl/loader_asm.o: ipl/loader_asm.S
	$(AS) -m64 -o $@ $<

ipl/loader_c.o: ipl/loader.c
	$(CC) $(CFLAGS) -DBLOCK_SIZE=80 -c -o $@ $<

ipl/ipl_ccws.S: ipl/setmode.rto ipl/loader.rto
	bash scripts/gen_ccws.sh $@

ipl/loader.rto: ipl/loader.o
	$(OBJCOPY) -O binary -j .text -j .data -j .rodata $< $@

ipl/loader.o: ipl/loader_c.o ipl/loader_asm.o
	$(LD) -melf64_s390 -T ipl/linker.script -o $@ $^

ipl/%.rto: ipl/%.o
	$(OBJCOPY) -O binary -j .text $< $@

ipl/%.o: ipl/%.S
	$(AS) -m64 -o $@ $<

depend:
	makedepend -I include src/*.c

# DO NOT DELETE

src/sarpn.o: include/std.h include/die.h include/memHead.h include/string.h
src/sarpn.o: include/operations.h include/stack.h
src/testFS.o: include/std.h include/die.h include/memHead.h include/os/fs.h
src/testFS.o: include/error.h include/os/fsStructs.h