LDSO_ADDR = 62f00000
LDSO_ENTRY = "(0x$(LDSO_ADDR)+32)"

STRIP 	= -s
#CFLAGS  = -Wall -DDEBUG #-O2 -DTIMER
CFLAGS  = -Wall -O2 -fomit-frame-pointer
DEBUG_CFLAGS  = -Wall -DDEBUG_LIB -g

LDFLAGS = $(STRIP) -N
LDLIBS 	= -lm

STATIC_DIR = static
STATIC_OBJS = fixups.o fdprintf.o vsprintf.o ctype.o strerror.o \
              __load.o ld.so.o

ifndef RANLIB
RANLIB = ranlib
endif

ifdef QMAGIC
LDSO_LIBS = -qmagic
CFLAGS += -DLDSO_QMAGIC
LDFLAGS = $(STRIP) -Wl,-qmagic
endif

ALL	= ldconfig ldd ld.so testi testf libldso.a

all:	$(ALL)

install: all
	instldso.sh

ldconfig: ldconfig.o __load.o
	$(CC) -static $(CFLAGS) $(LDFLAGS) $^ -o $@

ldd:	ldd.o __load.o

testi:	testi.o __load.o

testf:	testf.o __load.o

ld.so: 	preld.o ld.so.o fixups.o fdprintf.o vsprintf.o ctype.o strerror.o
	$(LD) -static -o $@ -T $(LDSO_ADDR) $^ $(STRIP) -lc $(LDSO_LIBS)

ldd.o:	ldd.c
	$(CC) -c $(CFLAGS) -DLDSO_ADDR=$(LDSO_ENTRY) $< -o $@

__load.o: __load.c
	$(CC) -c $(CFLAGS) -DLDSO_ADDR=$(LDSO_ENTRY) $< -o $@

clean:
	rm -f $(ALL) *.o *~ core
	rm -f libldso.a $(STATIC_DIR)/*.o

$(STATIC_DIR)/%.o: %.c
	$(CC) -c $(DEBUG_CFLAGS) -o $@ $*.c

libldso.a::
	@[ -d $(STATIC_DIR) ] || mkdir $(STATIC_DIR)

libldso.a:: libldso.a($(STATIC_OBJS:%.o=$(STATIC_DIR)/%.o) preld.o)
	$(RANLIB) $@
