#
# Makefile
#
# Main makefile
#

# Include configuration rules
include MCONFIG

TESTS   = $(patsubst %.c,%,$(wildcard tests/*.c)) \
	  $(patsubst %.c,%.shared,$(wildcard tests/*.c))
LIBOBJS = vsnprintf.o snprintf.o vsprintf.o sprintf.o \
	  vsscanf.o sscanf.o ctypes.o \
	  strntoumax.o strntoimax.o \
	  atoi.o atol.o atoll.o \
	  strtol.o strtoll.o strtoul.o strtoull.o \
	  strtoimax.o strtoumax.o \
	  globals.o exitc.o atexit.o onexit.o \
	  execl.o execle.o execv.o execvpe.o execvp.o execlp.o execlpe.o \
	  fork.o wait.o wait3.o waitpid.o system.o setpgrp.o \
	  printf.o vprintf.o fprintf.o vfprintf.o perror.o \
	  fopen.o fread.o fread2.o fgetc.o fgets.o \
	  fwrite.o fwrite2.o fputc.o fputs.o puts.o \
	  sleep.o usleep.o raise.o abort.o assert.o alarm.o pause.o \
	  __signal.o signal.o bsd_signal.o siglist.o siglongjmp.o \
	  sigaction.o sigpending.o sigprocmask.o sigsuspend.o \
	  brk.o sbrk.o malloc.o realloc.o calloc.o mmap.o getpagesize.o \
	  memcpy.o memcmp.o memset.o memccpy.o memmem.o memswap.o \
	  memmove.o \
	  strcasecmp.o strncasecmp.o strndup.o strerror.o \
	  strcat.o strchr.o strcmp.o strcpy.o strdup.o strlen.o \
	  strncat.o strstr.o strncmp.o strncpy.o strrchr.o strspn.o \
	  strsep.o strtok.o \
	  gethostname.o getdomainname.o getcwd.o \
	  seteuid.o setegid.o setresuid.o setresgid.o \
	  getenv.o setenv.o unsetenv.o getopt.o readdir.o \
	  syslog.o closelog.o pty.o isatty.o reboot.o \
	  time.o utime.o fdatasync.o llseek.o select.o nice.o getpriority.o \
	  qsort.o lrand48.o srand48.o seed48.o \
	  inet/inet_ntoa.o inet/inet_aton.o inet/inet_addr.o \
	  inet/inet_ntop.o inet/inet_pton.o inet/bindresvport.o \
	  send.o recv.o
SOLIB   = libc.so
SOHASH  = klibc.so

CRT0    = crt0.o
LIB     = libc.a

all: tests $(CRT0) $(LIB) $(SOLIB) klibc.so

# Add any architecture-specific rules
include arch/$(ARCH)/Makefile.inc

tests: $(TESTS)

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

# This particular file uses a bunch of formats gcc don't know of, in order
# to test the full range of our vsnprintf() function.  This outputs a bunch
# of useless warnings unless we tell it not to.
tests/testvsnp.o : tests/testvsnp.c
	$(CC) $(CFLAGS) -Wno-format -c -o $@ $<

tests/% : tests/%.o $(LIB) $(CRT0)
	$(LD) $(LDFLAGS) -o $@ $(CRT0) $< $(LIB) $(LIBGCC)
	cp $@ $@.stripped
	$(STRIP) $@.stripped

tests/%.shared : tests/%.o interp.o $(SOLIB)
	$(LD) $(LDFLAGS) -o $@ -e main interp.o tests/$*.o -R $(SOLIB) $(LIBGCC)
	cp $@ $@.stripped
	$(STRIP) $@.stripped

$(LIB): __static_init.o $(LIBOBJS) $(ARCHOBJS) syscalls/static.obj socketcalls/static.obj
	rm -f $(LIB)
	$(AR) cq $(LIB) __static_init.o $(LIBOBJS) $(ARCHOBJS) syscalls/*.o socketcalls/*.o
	$(RANLIB) $(LIB)

$(SOLIB): $(CRT0) __shared_init.o $(LIBOBJS) $(ARCHOBJS) syscalls/static.obj socketcalls/static.obj
	$(LD) $(LDFLAGS) $(SHAREDFLAGS) -o $@ \
		$(CRT0) __shared_init.o $(LIBOBJS) $(ARCHOBJS) \
	        syscalls/*.o socketcalls/*.o \
		$(LIBGCC)

sha1hash: sha1hash.c
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $<

$(SOLIB).hash: $(SOLIB) sha1hash
	$(NM) $(SOLIB) | \
		egrep '^[0-9a-fA-F]+ [ADRTW] ' | sort | ./sha1hash > $@

$(SOHASH): $(SOLIB) $(SOLIB).hash
	cp -f $(SOLIB) $@
	$(STRIP) $@
	rm -f klibc-??????????????????????.so
	ln -f $@ klibc-`cat $(SOLIB).hash`.so

interp.o: interp.S $(SOLIB).hash
	$(CC) $(CFLAGS) -D__ASSEMBLY__ -DLIBDIR=\"$(SHLIBDIR)\" \
		-DSOHASH=\"`cat $(SOLIB).hash`\" \
		-c -o $@ $<

crt0.o: arch/$(ARCH)/crt0.o
	cp arch/$(ARCH)/crt0.o .

syscalls.dir: SYSCALLS syscalls.pl syscommon.h
	rm -rf syscalls
	mkdir syscalls
	$(PERL) syscalls.pl $(ARCH) SYSCALLS
	touch $@

socketcalls.dir: SOCKETCALLS socketcalls.pl socketcommon.h
	rm -rf socketcalls
	mkdir socketcalls
	$(PERL) socketcalls.pl $(ARCH) SOCKETCALLS
	touch $@

%/static.obj: %.dir
	$(MAKE) objects-$(basename $(notdir $@)) DIR=$*/

STATIC = $(addsuffix .o,$(basename $(wildcard $(DIR)*.[cS])))

objects-static: $(STATIC)
	touch $(DIR)static.obj

clean: archclean
	find . -type f -a \( -name \*.[isoa] -o -name \*.l[iso] \) -print0 | xargs -0rt rm -f
	rm -f *.a *.so *.hash *.syms *.stripped
	rm -f $(TESTS) tests/*.stripped
	rm -rf syscalls syscalls.dir
	rm -rf socketcalls socketcalls.dir
	rm -f sha1hash

spotless: clean
	find . \( -name \*~ -o -name '.*.d' \) -not -type d -print0 | \
		xargs -0rt rm -f

bitsize:
	@echo $(BITSIZE)

ifneq ($(wildcard $(DIR).*.d),)
include $(wildcard $(DIR).*.d)
endif
