### Setup

# Targets
ARCH_BUILD = i686-pc-linux-gnu
ARCH_CROSS = sh4-motorola-linux-gnu

# Toolchain stuff
toolchain_path = toolchain/st710x/1.1.2.work
root_dir       = /usr/local/motorola
DIST_DIR       = $(root_dir)/$(toolchain_path)
SYSROOT_DIR    = $(DIST_DIR)/$(ARCH_CROSS)/sys-root

# Directories
dirs       = binutils gcc glibc linux
strip_dirs = $(addprefix $(DIST_DIR)/,bin libexec $(ARCH_CROSS)/bin)
src_dir    = src

# Svn URL
svn_url = $(shell svn info 2> /dev/null | grep URL | cut -d' ' -f2)

# Tar files
bin_tar = $(subst /,_,$(toolchain_path)).tar.bz2
src_tar = $(if $(svn_url),$(subst .tar.bz2,.src.tar.bz2,$(bin_tar)),)

# Daily build
ifneq ($(DAILY_LOG_DIR),)
root_dir = $(CURDIR)
log = >> $(DAILY_LOG_DIR)/result_$(1).txt 2>&1
endif

# Environment
export ARCH_BUILD
export ARCH_CROSS
export DIST_DIR
export PATH := $(PATH):$(DIST_DIR)/bin
export SYSROOT_DIR

# ccache
CCACHE_DIR = /extra/ccache
ifneq ($(wildcard $(CCACHE_DIR)),)
export CCACHE_DIR
else
export CCACHE_DISABLE
endif

### Rules

all: $(bin_tar) $(src_tar)

clean: $(dirs)
	rm -f $(bin_tar) $(src_tar)

distclean:
	rm -rf $(DIST_DIR)

$(dirs):
	$(MAKE) -C $@ $(MAKECMDGOALS)

toolchain:
	$(MAKE) -C linux headers   $(call log,linux-headers)
	$(MAKE) -C binutils full   $(call log,binutils-full)
	$(MAKE) -C glibc headers   $(call log,glibc-headers)
	$(MAKE) -C gcc static      $(call log,gcc-static)
	$(MAKE) -C glibc full      $(call log,glibc-full)
	$(MAKE) -C gcc full        $(call log,gcc-full)
	$(MAKE) -C linux distclean $(call log,linux-distclean)
#	Strip the tree.
	for file in $$(find $(strip_dirs) -type f); do \
	    if file -b $$file | grep -q "^ELF"; then \
	        strip $$file -R .comment -R .note ; \
	    fi ; \
	done

$(bin_tar): toolchain
	tar cjf $@ -C $(root_dir) $(toolchain_path)

$(src_tar):
	rm -rf $(src_dir)
	svn -q export $(svn_url) $(src_dir)
	tar cjf $@ $(src_dir)
	rm -rf $(src_dir)

.PHONY: all clean distclean $(dirs) toolchain
