#
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

##########################################################################################
#
# Workhorse makefile for creating ONE cross compiler
# Needs either to be from BUILD -> BUILD OR have
# BUILD -> HOST prebuilt
#
# NOTE: There is a bug here. We don't limit the
# PATH when building BUILD -> BUILD, which means that
# if you configure after you've once build the BUILD->BUILD
# compiler THAT one will be picked up as the compiler for itself.
# This is not so great, especially if you did a partial delete
# of the target tree.
#
# Fix this...
#

$(info TARGET=$(TARGET))
$(info HOST=$(HOST))
$(info BUILD=$(BUILD))

ARCH := $(word 1,$(subst -, ,$(TARGET)))

##########################################################################################
# Define external dependencies

# Latest that could be made to work.
gcc_ver := gcc-4.8.2
binutils_ver := binutils-2.24
ccache_ver := ccache-3.1.9
mpfr_ver := mpfr-3.0.1
gmp_ver := gmp-4.3.2
mpc_ver := mpc-1.0.1

GCC := http://ftp.gnu.org/pub/gnu/gcc/$(gcc_ver)/$(gcc_ver).tar.bz2
BINUTILS := http://ftp.gnu.org/pub/gnu/binutils/$(binutils_ver).tar.bz2
CCACHE := http://samba.org/ftp/ccache/$(ccache_ver).tar.gz
MPFR := http://www.mpfr.org/${mpfr_ver}/${mpfr_ver}.tar.bz2
GMP := http://ftp.gnu.org/pub/gnu/gmp/${gmp_ver}.tar.bz2
MPC := http://www.multiprecision.org/mpc/download/${mpc_ver}.tar.gz

# RPMs in OEL5.5
LINUX_VERSION := OEL5.5
RPM_LIST := \
    kernel-headers \
    glibc-2 glibc-headers glibc-devel \
    cups-libs cups-devel \
    libX11 libX11-devel \
    xorg-x11-proto-devel \
    alsa-lib alsa-lib-devel \
    libXext libXext-devel \
    libXtst libXtst-devel \
    libXrender libXrender-devel \
    freetype freetype-devel \
    libXt libXt-devel \
    libSM libSM-devel \
    libICE libICE-devel \
    libXi libXi-devel \
    libXdmcp libXdmcp-devel \
    libXau libXau-devel \
    libgcc


ifeq ($(ARCH),x86_64)
  RPM_DIR ?= $(RPM_DIR_x86_64)
  RPM_ARCHS := x86_64
  ifeq ($(BUILD),$(HOST))
    ifeq ($(TARGET),$(HOST))
      # When building the native compiler for x86_64, enable mixed mode.
      RPM_ARCHS += i386 i686
    endif
  endif
else
  RPM_DIR ?= $(RPM_DIR_i686)
  RPM_ARCHS := i386 i686
endif

# Sort to remove duplicates
RPM_FILE_LIST := $(sort $(foreach a,$(RPM_ARCHS),$(wildcard $(patsubst %,$(RPM_DIR)/%*$a.rpm,$(RPM_LIST)))))

ifeq ($(RPM_FILE_LIST),)
  $(error Found no RPMs, RPM_DIR must point to list of directories to search for RPMs)
endif

##########################################################################################
# Define common directories and files

# Ensure we have 32-bit libs also for x64. We enable mixed-mode.
ifeq (x86_64,$(ARCH))
  LIBDIRS := lib64 lib
  CFLAGS_lib := -m32
else
  LIBDIRS := lib
endif

# Define directories
RESULT := $(OUTPUT_ROOT)/result
BUILDDIR := $(OUTPUT_ROOT)/$(HOST)/$(TARGET)
PREFIX := $(RESULT)/$(HOST)
TARGETDIR := $(PREFIX)/$(TARGET)
SYSROOT := $(TARGETDIR)/sysroot
DOWNLOAD := $(OUTPUT_ROOT)/download
SRCDIR := $(OUTPUT_ROOT)/src

# Marker file for unpacking rpms
rpms := $(SYSROOT)/rpms_unpacked

# Need to patch libs that are linker scripts to use non-absolute paths
libs := $(SYSROOT)/libs_patched

##########################################################################################
# Unpack source packages

# Generate downloading + unpacking of sources.
define Download
  $(1)_DIR = $(abspath $(SRCDIR)/$(basename $(basename $(notdir $($(1))))))
  $(1)_CFG = $$($(1)_DIR)/configure
  $(1)_FILE = $(DOWNLOAD)/$(notdir $($(1)))

  $$($(1)_CFG) : $$($(1)_FILE)
	mkdir -p $$(SRCDIR)
	tar -C $$(SRCDIR) -x$$(if $$(findstring .gz, $$<),z,j)f $$<
	$$(foreach p,$$(abspath $$(wildcard $$(notdir $$($(1)_DIR)).patch)), \
	  echo PATCHING $$(p) ; \
	  patch -d $$($(1)_DIR) -p1 -i $$(p) ; \
	)
	touch $$@

  $$($(1)_FILE) :
	wget -P $(DOWNLOAD) $$($(1))
endef

# Download and unpack all source packages
$(foreach p,GCC BINUTILS CCACHE MPFR GMP MPC,$(eval $(call Download,$(p))))

##########################################################################################
# Unpack RPMS

# Note. For building linux you should install rpm2cpio.
define unrpm
  $(SYSROOT)/$(notdir $(1)).unpacked \
    : $(1)
  $$(rpms) : $(SYSROOT)/$(notdir $(1)).unpacked
endef

%.unpacked :
	$(info Unpacking target rpms and libraries from $<)
	@(mkdir -p $(@D); \
	cd $(@D); \
	rpm2cpio $< | \
	    cpio --extract --make-directories \
	        -f \
	        "./usr/share/doc/*" \
	        "./usr/share/man/*" \
	        "./usr/X11R6/man/*" \
	        "*/X11/locale/*" \
	    || die ; )
	touch $@

$(foreach p,$(RPM_FILE_LIST),$(eval $(call unrpm,$(p))))

##########################################################################################

# Note: MUST create a <sysroot>/usr/lib even if not really needed.
# gcc will use a path relative to it to resolve lib64. (x86_64).
# we're creating multi-lib compiler with 32bit libc as well, so we should
# have it anyway, but just to make sure...
# Patch libc.so and libpthread.so to force linking against libraries in sysroot
# and not the ones installed on the build machine.
$(libs) : $(rpms)
	@echo Patching libc and pthreads
	@(for f in `find $(SYSROOT) -name libc.so -o -name libpthread.so`; do \
	  (cat $$f | sed -e 's|/usr/lib64/||g' \
	      -e 's|/usr/lib/||g' \
	      -e 's|/lib64/||g' \
	      -e 's|/lib/||g' ) > $$f.tmp ; \
	  mv $$f.tmp $$f ; \
	done)
	@mkdir -p $(SYSROOT)/usr/lib
	@touch $@

##########################################################################################

# Define marker files for each source package to be compiled
$(foreach t,binutils mpfr gmp mpc gcc ccache,$(eval $(t) = $(TARGETDIR)/$($(t)_ver).done))

##########################################################################################

# Default base config
CONFIG = --target=$(TARGET) \
    --host=$(HOST) --build=$(BUILD) \
    --prefix=$(PREFIX)

PATHEXT = $(RESULT)/$(BUILD)/bin:

PATHPRE = PATH=$(PATHEXT)$(PATH)
BUILDPAR = -j16

# Default commands to when making
MAKECMD =
INSTALLCMD = install


declare_tools = CC$(1)=$(2)gcc LD$(1)=$(2)ld AR$(1)=$(2)ar AS$(1)=$(2)as RANLIB$(1)=$(2)ranlib CXX$(1)=$(2)g++ OBJDUMP$(1)=$(2)objdump

ifeq ($(HOST),$(BUILD))
  ifeq ($(HOST),$(TARGET))
    TOOLS = $(call declare_tools,_FOR_TARGET,)
  endif
endif

TOOLS ?= $(call declare_tools,_FOR_TARGET,$(TARGET)-)

##########################################################################################

# Create a TARGET bfd + libiberty only.
# Configure one or two times depending on mulitlib arch.
# If multilib, the second should be 32-bit, and we resolve
# CFLAG_<name> to most likely -m32.
define mk_bfd
  $$(info Libs for $(1))
  $$(BUILDDIR)/$$(binutils_ver)-$(subst /,-,$(1))/Makefile \
      : CFLAGS += $$(CFLAGS_$(1))
  $$(BUILDDIR)/$$(binutils_ver)-$(subst /,-,$(1))/Makefile \
      : LIBDIRS = --libdir=$(TARGETDIR)/$(1)

  bfdlib += $$(TARGETDIR)/$$(binutils_ver)-$(subst /,-,$(1)).done
  bfdmakes += $$(BUILDDIR)/$$(binutils_ver)-$(subst /,-,$(1))/Makefile
endef

# Create one set of bfds etc for each multilib arch
$(foreach l,$(LIBDIRS),$(eval $(call mk_bfd,$(l))))

# Only build these two libs.
$(bfdlib) : MAKECMD = all-libiberty all-bfd
$(bfdlib) : INSTALLCMD = install-libiberty install-bfd

# Building targets libbfd + libiberty. HOST==TARGET, i.e not
# for a cross env.
$(bfdmakes) : CONFIG = --target=$(TARGET) \
    --host=$(TARGET) --build=$(BUILD) \
    --prefix=$(TARGETDIR) \
    --with-sysroot=$(SYSROOT) \
    $(LIBDIRS)

$(bfdmakes) : TOOLS = $(call declare_tools,_FOR_TARGET,$(TARGET)-) $(call declare_tools,,$(TARGET)-)

##########################################################################################

$(gcc) \
    $(binutils) \
    $(gmp) \
    $(mpfr) \
    $(mpc) \
    $(bfdmakes) \
    $(ccache) : ENVS += $(TOOLS)

# libdir to work around hateful bfd stuff installing into wrong dirs...
# ensure we have 64 bit bfd support in the HOST library. I.e our
# compiler on i686 will know 64 bit symbols, BUT later
# we build just the libs again for TARGET, then with whatever the arch
# wants.
$(BUILDDIR)/$(binutils_ver)/Makefile : CONFIG += --enable-64-bit-bfd --libdir=$(PREFIX)/$(word 1,$(LIBDIRS))

# Makefile creation. Simply run configure in build dir.
$(bfdmakes) \
$(BUILDDIR)/$(binutils_ver)/Makefile \
    : $(BINUTILS_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
	      $(BINUTILS_CFG) \
	      $(CONFIG) \
	      --with-sysroot=$(SYSROOT) \
	      --disable-nls \
	      --program-prefix=$(TARGET)- \
	      --enable-multilib \
	) > $(@D)/log.config 2>&1
	@echo 'done'

$(BUILDDIR)/$(mpfr_ver)/Makefile \
    : $(MPFR_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
	      $(MPFR_CFG) \
	      $(CONFIG) \
	      --program-prefix=$(TARGET)- \
	      --enable-shared=no \
	      --with-gmp=$(PREFIX) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

$(BUILDDIR)/$(gmp_ver)/Makefile \
    : $(GMP_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
	      $(GMP_CFG) \
	      --host=$(HOST) --build=$(BUILD) \
	      --prefix=$(PREFIX) \
	      --disable-nls \
	      --program-prefix=$(TARGET)- \
	      --enable-shared=no \
	      --with-mpfr=$(PREFIX) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

$(BUILDDIR)/$(mpc_ver)/Makefile \
    : $(MPC_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
	      $(MPC_CFG) \
	      $(CONFIG) \
	      --program-prefix=$(TARGET)- \
	      --enable-shared=no \
	      --with-mpfr=$(PREFIX) \
	      --with-gmp=$(PREFIX) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

# Only valid if glibc target -> linux
# proper destructor handling for c++
ifneq (,$(findstring linux,$(TARGET)))
  $(BUILDDIR)/$(gcc_ver)/Makefile : CONFIG += --enable-__cxa_atexit
endif

# Want:
# c,c++
# shared libs
# multilib (-m32/-m64 on x64)
# skip native language.
# and link and assemble with the binutils we created
# earlier, so --with-gnu*
$(BUILDDIR)/$(gcc_ver)/Makefile \
    : $(GCC_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) $(GCC_CFG) $(EXTRA_CFLAGS) \
	      $(CONFIG) \
	      --with-sysroot=$(SYSROOT) \
	      --enable-languages=c,c++ \
	      --enable-shared \
	      --enable-multilib \
	      --disable-nls \
	      --with-gnu-as \
	      --with-gnu-ld \
	      --with-mpfr=$(PREFIX) \
	      --with-gmp=$(PREFIX) \
	      --with-mpc=$(PREFIX) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

# need binutils for gcc
$(gcc) : $(binutils)

# as of 4.3 or so need these for doing config
$(BUILDDIR)/$(gcc_ver)/Makefile : $(gmp) $(mpfr) $(mpc)
$(mpfr) : $(gmp)
$(mpc) : $(gmp) $(mpfr)

##########################################################################################
# very straightforward. just build a ccache. it is only for host.
$(BUILDDIR)/$(ccache_ver)/Makefile \
    : $(CCACHE_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	@( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) $(CCACHE_CFG) \
	      $(CONFIG) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

gccpatch = $(TARGETDIR)/gcc-patched

##########################################################################################
# For some reason cpp is not created as a target-compiler
ifeq ($(HOST),$(TARGET))
  $(gccpatch) : $(gcc) link_libs
	@echo -n 'Creating compiler symlinks...'
	@for f in cpp; do \
	  if [ ! -e $(PREFIX)/bin/$(TARGET)-$$f ]; \
	  then \
	    cd $(PREFIX)/bin && \
	    ln -s $$f $(TARGET)-$$f ; \
	  fi \
	done
	@touch $@
	@echo 'done'

  ##########################################################################################
  # Ugly at best. Seems that when we compile host->host compiler, that are NOT
  # the BUILD compiler, the result will not try searching for libs in package root.
  # "Solve" this by create links from the target libdirs to where they are.
  link_libs:
	@echo -n 'Creating library symlinks...'
	@$(foreach l,$(LIBDIRS), \
	for f in `cd $(PREFIX)/$(l) && ls`; do \
	  if [ ! -e $(TARGETDIR)/$(l)/$$f ]; then \
	    mkdir -p $(TARGETDIR)/$(l) && \
	    cd $(TARGETDIR)/$(l)/ && \
	    ln -s $(if $(findstring /,$(l)),../,)../../$(l)/$$f $$f; \
	  fi \
	done;)
	@echo 'done'
else
  $(gccpatch) :
	@echo 'done'
endif

##########################################################################################
# Build in two steps.
# make <default>
# make install.
# Use path to our build hosts cross tools
# Always need to build cross tools for build host self.
$(TARGETDIR)/%.done : $(BUILDDIR)/%/Makefile
	$(info Building $(basename $@). Log in $(<D)/log.build)
	$(PATHPRE) $(ENVS) $(MAKE) $(BUILDPAR) -f $< -C $(<D) $(MAKECMD) $(MAKECMD.$(notdir $@)) > $(<D)/log.build 2>&1
	@echo -n 'installing...'
	$(PATHPRE) $(MAKE) $(INSTALLPAR) -f $< -C $(<D) $(INSTALLCMD) $(MAKECMD.$(notdir $@)) > $(<D)/log.install 2>&1
	@touch $@
	@echo 'done'

##########################################################################################

$(PREFIX)/devkit.info: FRC
	@echo 'Creating devkit.info in the root of the kit'
	rm -f $@
	touch $@
	echo '# This file describes to configure how to interpret the contents of this' >> $@
	echo '# devkit' >> $@
	echo '' >> $@
	echo 'DEVKIT_NAME="$(gcc_ver) - $(LINUX_VERSION)"' >> $@
	echo 'DEVKIT_TOOLCHAIN_PATH="$$DEVKIT_ROOT/bin"' >> $@
	echo 'DEVKIT_SYSROOT="$$DEVKIT_ROOT/$$host/sysroot"' >> $@

##########################################################################################

bfdlib : $(bfdlib)
binutils : $(binutils)
rpms : $(rpms)
libs : $(libs)
sysroot : rpms libs
gcc : sysroot $(gcc) $(gccpatch)
all : binutils gcc bfdlib $(PREFIX)/devkit.info

# this is only built for host. so separate.
ccache : $(ccache)

# Force target
FRC:

.PHONY : gcc all binutils bfdlib link_libs rpms libs sysroot
