USE_REAL_CROSS = 1
include ../../Config.mk

UCLIBC_DEVEL_PREFIX		= $(FW_TOPDIR)/$(UCLIBC_DIR)/_install
LIBGCC				= $(shell $(CC) $(FW_CFLAGS) -print-libgcc-file-name)
WRAPPER_LIBGCC_DIR		= $(shell dirname $(LIBGCC))
WRAPPER_FIRMWARE_INSTALL_ROOT	= $(DESTDIR)
WRAPPER_FIRMWARE_INCLUDE_DIR	= $(FW_TOPDIR)/include
WRAPPER_GCC_TARGET_MACHINE	= $(shell $(CC) -dumpmachine)
GCC_VERSION			= $(shell $(CC) -dumpversion)
WRAPPER_CXX_INCLUDE_DIR		= $(DESTDIR)/include/c++/$(GCC_VERSION)
WRAPPER_GCC_INCLUDE_DIR		= $(shell $(CC) $(FW_CFLAGS) -print-file-name=include)
MULTI_DIR			= $(shell $(CROSS)gcc $(FW_CFLAGS) -print-multi-directory)
ifeq ($(MULTI_DIR),.)
WRAPPER_LIBGCC_S_SPEC		= -lgcc_s
else
WRAPPER_LIBGCC_S_SPEC		= -lgcc_s_$(MULTI_DIR)
endif
WRAPPER_GCC_BIN			= $(CROSS)gcc
WRAPPER_GXX_BIN			= $(CROSS)g++
WRAPPER_DYNAMIC_LINKER		= /lib/ld-uClibc.so.0
WRAPPER_PREFIX			= pp-wrapper-
INSTALL_PREFIX			= $(PP_BUILD_SYS_DIR)/_install

CPPFLAGS	= -D__UCLIBC_DEVEL_PREFIX__="\"$(UCLIBC_DEVEL_PREFIX)\"" \
		  -D__WRAPPER_LIBGCC_DIR__="\"$(WRAPPER_LIBGCC_DIR)\"" \
		  -D__WRAPPER_FIRMWARE_INSTALL_ROOT__="\"$(WRAPPER_FIRMWARE_INSTALL_ROOT)\"" \
		  -D__WRAPPER_FIRMWARE_INCLUDE_DIR__="\"$(WRAPPER_FIRMWARE_INCLUDE_DIR)\"" \
		  -D__WRAPPER_CXX_INCLUDE_DIR__="\"$(WRAPPER_CXX_INCLUDE_DIR)\"" \
		  -D__WRAPPER_GCC_INCLUDE_DIR__="\"$(WRAPPER_GCC_INCLUDE_DIR)\"" \
		  -D__WRAPPER_LIBGCC_S_SPEC__="\"$(WRAPPER_LIBGCC_S_SPEC)\"" \
		  -D__WRAPPER_GCC_BIN__="\"$(WRAPPER_GCC_BIN)\"" \
		  -D__WRAPPER_GXX_BIN__="\"$(WRAPPER_GXX_BIN)\"" \
		  -D__WRAPPER_GCC_TARGET_MACHINE__="\"$(WRAPPER_GCC_TARGET_MACHINE)\"" \
		  -D__WRAPPER_DYNAMIC_LINKER__="\"$(WRAPPER_DYNAMIC_LINKER)\"" \
		  $(if $(USE_DISTCC),-D__WRAPPER_USE_DISTCC__,)
CFLAGS		= -Wall -W -Werror -O2 -fomit-frame-pointer
LDFLAGS		= -s
PROGS		= $(WRAPPER_PREFIX)gcc

all: $(PROGS)

$(WRAPPER_PREFIX)gcc: $(WRAPPER_PREFIX)gcc.c Makefile
	gcc $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -o $@ $<

install: all
	install -d $(INSTALL_PREFIX)/bin
	install -m 755 $(PROGS) $(INSTALL_PREFIX)/bin/
	for app in cc c++ g++; do \
	    rm -f $(INSTALL_PREFIX)/bin/$(WRAPPER_PREFIX)$$app;\
	    ln -s $(WRAPPER_PREFIX)gcc $(INSTALL_PREFIX)/bin/$(WRAPPER_PREFIX)$$app;\
	done
	for app in cc gcc c++ g++; do \
	    rm -f $(INSTALL_PREFIX)/bin/$(HOST_SYSTEM)-$$app;\
	    ln -s $(WRAPPER_PREFIX)gcc $(INSTALL_PREFIX)/bin/$(HOST_SYSTEM)-$$app;\
	done
	for app in addr2line ar as c++filt cpp ld nm objcopy objdump ranlib readelf size strings strip; do \
	    APPNAME=`which $(CROSS)$$app`; \
	    rm -f $(INSTALL_PREFIX)/bin/$(WRAPPER_PREFIX)$$app;\
	    rm -f $(INSTALL_PREFIX)/bin/$(HOST_SYSTEM)-$$app;\
	    ln -s $$APPNAME $(INSTALL_PREFIX)/bin/$(WRAPPER_PREFIX)$$app;\
	    ln -s $$APPNAME $(INSTALL_PREFIX)/bin/$(HOST_SYSTEM)-$$app;\
	done

clean:
	rm -f *.o $(PROGS)
