#
# Makefile for emulation library files..
#

SIZE=$(CROSS_COMPILE)size
NM=  $(CROSS_COMPILE)nm

.S.o:
	$(CC) -D__ASSEMBLY__ $(CFLAGS) -c $< -o $*.o

all:	emulib.o

# make sure that int_entry.o gets linked in first
OBJ = int_entry.o user.o

CFLAGS += -DEMULIB

emulib.o: emulib #link-r.ld
	@data_size="`$(SIZE) --format=sysv $< | grep ^.data | awk '{print $$2}'`"; \
	  bss_size="`$(SIZE) --format=sysv $< | grep ^.bss | awk '{print $$2}'`"; \
	  if [ $$bss_size -gt 0 -o $$data_size -gt 0 ]; then \
	    echo "ERROR: $<: data or bss size > 0"; \
	    exit 1; \
	  else \
	    true; \
	  fi
	cp $< emulib-s
	$(STRIP) emulib-s
	$(LD) $(EXTRA_LDFLAGS) -r \
	  -defsym _user_task_init=0x`$(NM) emulib | grep user_task_init | cut -f1 -d' '` \
	  -defsym emulib_start=0x`$(NM) emulib | grep -w enter_kernel_syscall | cut -f1 -d' '` \
	  -defsym emulib_end=0x`$(NM) emulib | grep _etext | cut -f1 -d' '` \
	  -T link-r.ld -o $@ emulib-s

# make sure that int_entry.o gets linked in first
emulib: $(OBJ)
	@textstart=`( echo '#define __ASSEMBLY__' ; \
	    echo '#define _LANGUAGE_ASSEMBLY' ; \
	    echo '#include "../include/config.h"' ; \
            echo EMULIB_CODE_ADDRESS ) \
            | $(CC) -E - | tail -1 | xargs echo 'printf "0x%x",' | perl -`; \
	  echo $(LD) $(EXTRA_LDFLAGS) -N -Ttext $$textstart -o $@ $^ \
	    $(L4_DIR)/lib/libl4.a; \
	  $(LD) $(EXTRA_LDFLAGS) -N -Ttext $$textstart -o $@ $^ \
	    $(L4_DIR)/lib/libl4.a

clean:
	rm -f *.o emulib-s emulib

include $(TOPDIR)/Rules.make
