# EPOS-- Makefile Definitions


# Supported software architectures
MODE_kernel	= kernel
MODE_builtin	= builtin
MODE_library	= library
MODE_linux	= linux

# Supported machines
MACH_PC		= pc
MACH_RCX	= rcx
MACH_Khomp	= khomp
MACH_IPAQ	= ipaq
MACH_LINUX	= linux
MACH_AT90S  	= at90s
MACH_AT86RF 	= at86rf

# Supported hardware architectures
ARCH_IA32	= ia32
ARCH_PPC32	= ppc32
ARCH_LANAI	= lanai
ARCH_ARM	= arm
ARCH_H8		= h8
ARCH_LINUX	= linux
ARCH_AVR8       = avr8

# Paths, prefixes and suffixes
INCLUDE		= $(EPOS)/include
SRC		= $(EPOS)/src
BIN		= $(EPOS)/bin
IMG		= $(EPOS)/img
LIB		= $(EPOS)/lib
CFG		= $(EPOS)/config
DOC		= $(EPOS)/doc
LSYSNAME	= system
LINITNAME	= init
LUTILNAME	= util
LIBSYS_IA32     = $(LIB)/lib$(LSYSNAME)_$(ARCH_IA32).a
LIBINIT_IA32    = $(LIB)/lib$(LINITNAME)_$(ARCH_IA32).a
LIBSYS_PPC32    = $(LIB)/lib$(LSYSNAME)_$(ARCH_PPC32).a
LIBINIT_PPC32   = $(LIB)/lib$(LINITNAME)_$(ARCH_PPC32).a
LIBSYS_LANAI    = $(LIB)/lib$(LSYSNAME)_$(ARCH_LANAI).a
LIBINIT_LANAI   = $(LIB)/lib$(LINITNAME)_$(ARCH_LANAI).a
LIBSYS_ARM      = $(LIB)/lib$(LSYSNAME)_$(ARCH_ARM).a
LIBINIT_ARM     = $(LIB)/lib$(LINITNAME)_$(ARCH_ARM).a
LIBSYS_H8       = $(LIB)/lib$(LSYSNAME)_$(ARCH_H8).a
LIBINIT_H8      = $(LIB)/lib$(LINITNAME)_$(ARCH_H8).a
LIBSYS_AVR8     = $(LIB)/lib$(LSYSNAME)_$(ARCH_AVR8).a
LIBINIT_AVR8    = $(LIB)/lib$(LINITNAME)_$(ARCH_AVR8).a
LIBSYS_LINUX    = $(LIB)/lib$(LSYSNAME)_$(ARCH_LINUX).a
LIBINIT_LINUX   = $(LIB)/lib$(LINITNAME)_$(ARCH_LINUX).a
LIBSYS		= $(LIB)/lib$(LSYSNAME)_$(ARCH).a
LIBINIT		= $(LIB)/lib$(LINITNAME)_$(ARCH).a
LIBUTIL		= $(LIB)/lib$(LUTILNAME)_$(ARCH).a
LSYS		= $(LSYSNAME)_$(ARCH)
LINIT		= $(LINITNAME)_$(ARCH)
LUTIL		= $(LUTILNAME)_$(ARCH)
DEFAULT_APP	= $(SRC)/loader/$(MACH)_loader.cc

# Boot memory map configuration
BOOT_ADDR	= $($(MACH)_BOOT_ADDR)
SETUP_ADDR	= $($(MACH)_SETUP_ADDR)
INIT_ADDR	= $($(MACH)_INIT_ADDR)
SYS_CODE_ADDR	= $($(MACH)_SYS_CODE_ADDR)
SYS_DATA_ADDR	= $($(MACH)_SYS_DATA_ADDR)

# Tools to adapt linux files
SED 		= sed

# Tools and flags to compile system tools
TCC		= /usr/local/ia32/gcc/bin/ia32-gcc -ansi -c
TCCFLAGS	= -m32 -Wall -O2 -I$(INCLUDE) $(CONF_FLAGS)

TCXX		= /usr/local/ia32/gcc/bin/ia32-g++ -c -ansi -fno-exceptions
TCXXFLAGS	= -m32 -Wall -O2 -I$(INCLUDE) $(CONF_FLAGS)

TCPP		= /usr/local/ia32/gcc/bin/ia32-gcc -E 
TCPPFLAGS	= -I$(INCLUDE) $(CONF_FLAGS)

TLD		= /usr/local/ia32/gcc/bin/ia32-gcc
TLDFLAGS	= -m32

# Tools and flags to compile applications
ACC			= eposcc -c -ansi -O2 $(CONF_FLAGS)
ACXX		= eposcc -c -ansi -O2 $(CONF_FLAGS)
AF77		= eposcc -c -ansi -O2 $(CONF_FLAGS)
ALD			= eposcc --$(MODE) $(LD_EXTRA_FLAGS)
ALDFLAGS	= 
AANL		= eposcc --analyze

# Tools and flags to compile the system
AR		= $(TOOLS_PREFIX)ar
ARFLAGS		= rcs

AS		= $(TOOLS_PREFIX)as
ASFLAGS		= $(CC_EXTRA_FLAGS)

AWK	  	= awk
AWKFLAGS	= -f

CC		= $(TOOLS_PREFIX)gcc -ansi -c
CCFLAGS		= $(CC_EXTRA_FLAGS) -O2 -nostdinc -Wall -I$(INCLUDE) $(CONF_FLAGS)
CCLIB		= `$(CC) -print-file-name=`

CPP		= $(TOOLS_PREFIX)gcc -E
CPPFLAGS	= $(CC_EXTRA_FLAGS) -I$(INCLUDE) $(CONF_FLAGS)

CXX		= $(TOOLS_PREFIX)g++ -c --no-exceptions --no-rtti --no-use-cxa-atexit
CXXFLAGS	= $(CC_EXTRA_FLAGS) -O2 -nostdinc -Wall -I$(INCLUDE) $(CONF_FLAGS)

LD		= $(TOOLS_PREFIX)ld
LDFLAGS		= -L$(LIB) -Bstatic $(LD_EXTRA_FLAGS)

OBJCPY          = $(TOOLS_PREFIX)objcopy
OBJCPYFLAGS     =

MAKE		= make
MAKEALL		= make all
MAKEINSTALL	= make install
MAKECLEAN	= make -i clean
MAKETEST	= make test
MAKEPRINT	= make print
#MAKEFLAGS	= -r --no-print-directory -s
MAKEFLAGS	= -r 

MKBI		= epos-mkbi
MKBI_IMG	= $(IMG)/epos.img

DD		= dd

STRIP		= $(TOOLS_PREFIX)strip -R .note -R .comment

INSTALL		= cp

SHELL		= tcsh

PRINT		= a2ps -2 --medium=A4 --tabsize=8 --landscape --pretty-print=cpp --borders=off --header --left-footer --footer --right-footer

CLEAN		= rm -f
CLEANDIR	= rm -rf

RET2IRET	= sed -e 's/ret/iret/'

TOUCH		= touch


# Rules
lib%.o:		lib%.cc
		$(CXX) $(CXXFLAGS) $<

%_test.o:	%_test.cc
		$(ACXX) $(ACXXFLAGS) $<

%_test.o:	%_test.c
		$(ACC) $(ACCFLAGS) $<

%_test:		%_test.o
		$(ALD) $(ALDFLAGS) $< -o $@
		$(STRIP) $@ -o $(IMG)/$@
#		$(MKBI) $(MKBI_IMG) $(IMG)/$@

%.o:		%.cc
		$(CXX) $(CXXFLAGS) $<

%.o:		%.c
		$(CC) $(CCFLAGS) $<

%.s:		%.S
		$(CPP) $(CPPFLAGS) $< -o $@

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

%:		%.cc
		$(CXX) $(CXXFLAGS) $<
		$(LD) $(LDFLAGS) %@.o -o $@

%:		%.c
		$(CC) $(CCFLAGS) $<
		$(LD) $(LDFLAGS) %@.o -o $@

(%.o):		%.o
		$(AR) $(ARFLAGS) $@ $^

%.key:		%.cc
		$(EPOSANL) $< 

%.key:		%.c
		$(EPOSANL) $<

.PRECIOUS:	%.o


# Machine configuration generated by "epos-config"
MODE				:= $(MODE_builtin)
ARCH				:= $(ARCH_IA32)
MACH				:= $(MACH_PC)
APPLICATION			:= semaphore_test
TOOLS_PREFIX			:= /usr/local/ia32/gcc/bin/ia32-
CC_EXTRA_FLAGS			:= 
LD_EXTRA_FLAGS                  := 
$(MACH_PC)_BOOT_ADDR       	:= 0x00007c00
$(MACH_PC)_SETUP_ADDR      	:= 0x00100000
$(MACH_PC)_INIT_ADDR       	:= 0x00200000
$(MACH_PC)_SYS_CODE_ADDR	:= 0x1f700000
#0x1f700000, 0x1f740000
#0xaff00000, 0xaff40000
$(MACH_PC)_SYS_DATA_ADDR	:= 0x1f740000
$(MACH_PC)_APP_CODE_ADDR	:= 0x00008000
$(MACH_PC)_APP_DATA_ADDR	:= 0x00400000

MACH_CODE_NAME			:= .hash
MACH_DATA_NAME			:= .tdata
MACH_MEM_BASE       	:= 0x00000000
MACH_MEM_TOP			:= 0x02000000
MACH_BOOT_ADDR       	:= 0x00007c00
MACH_SETUP_ADDR      	:= 0x00100000
MACH_INIT_ADDR       	:= 0x00200000
MACH_SYS_CODE_ADDR	    := 0x1f700000
MACH_SYS_DATA_ADDR	    := 0x1f740000
MACH_APP_CODE_ADDR	    := 0x00008000
MACH_APP_DATA_ADDR	   	:= 0x00400000
MACH_BOOT_LENGTH_MIN   	:= 128
MACH_BOOT_LENGTH_MAX    := 512
CONF_FLAGS				:= -D __$(ARCH) -D __$(MACH)

