#
# Copyright (c) 2013, 2025, 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...
#

uppercase = $(shell echo $1 | tr a-z A-Z)

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

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

ifeq ($(TARGET), arm-linux-gnueabihf)
  ARCH=armhfp
endif

$(info ARCH=$(ARCH))

KERNEL_HEADERS_RPM := kernel-headers

ifeq ($(BASE_OS), OL)
  ifeq ($(ARCH), aarch64)
    BASE_URL := https://yum.oracle.com/repo/OracleLinux/OL7/6/base/$(ARCH)/
    LINUX_VERSION := OL7.6
    KERNEL_HEADERS_RPM := kernel-uek-headers
  else
    BASE_URL := https://yum.oracle.com/repo/OracleLinux/OL6/4/base/$(ARCH)/
    LINUX_VERSION := OL6.4
  endif
else ifeq ($(BASE_OS), Fedora)
  DEFAULT_OS_VERSION := 41
  ifeq ($(BASE_OS_VERSION), )
    BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
  endif
  ifeq ($(ARCH), riscv64)
    BASE_URL := http://fedora.riscv.rocks/repos-dist/f$(BASE_OS_VERSION)/latest/$(ARCH)/Packages/
  else
    LATEST_ARCHIVED_OS_VERSION := 35
    ifeq ($(filter x86_64 armhfp, $(ARCH)), )
      FEDORA_TYPE := fedora-secondary
    else
      FEDORA_TYPE := fedora/linux
    endif
    NOT_ARCHIVED := $(shell [ $(BASE_OS_VERSION) -gt $(LATEST_ARCHIVED_OS_VERSION) ] && echo true)
    ifeq ($(NOT_ARCHIVED),true)
      BASE_URL := https://dl.fedoraproject.org/pub/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
    else
      BASE_URL := https://archives.fedoraproject.org/pub/archive/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
    endif
  endif
  LINUX_VERSION := Fedora_$(BASE_OS_VERSION)
else
  $(error Unknown base OS $(BASE_OS))
endif

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

gcc_ver_only := 14.2.0
binutils_ver_only := 2.43
ccache_ver_only := 4.10.2
CCACHE_CMAKE_BASED := 1
mpfr_ver_only := 4.2.1
gmp_ver_only := 6.3.0
mpc_ver_only := 1.3.1
gdb_ver_only := 15.2

dependencies := gcc binutils ccache mpfr gmp mpc gdb

$(foreach dep,$(dependencies),$(eval $(dep)_ver := $(dep)-$($(dep)_ver_only)))

GCC := http://ftp.gnu.org/pub/gnu/gcc/$(gcc_ver)/$(gcc_ver).tar.xz
BINUTILS := http://ftp.gnu.org/pub/gnu/binutils/$(binutils_ver).tar.gz
CCACHE := https://github.com/ccache/ccache/releases/download/v$(ccache_ver_only)/$(ccache_ver).tar.xz
MPFR := https://www.mpfr.org/$(mpfr_ver)/$(mpfr_ver).tar.bz2
GMP := http://ftp.gnu.org/pub/gnu/gmp/$(gmp_ver).tar.bz2
MPC := http://ftp.gnu.org/pub/gnu/mpc/$(mpc_ver).tar.gz
GDB := http://ftp.gnu.org/gnu/gdb/$(gdb_ver).tar.xz

REQUIRED_MIN_MAKE_MAJOR_VERSION := 4
ifneq ($(REQUIRED_MIN_MAKE_MAJOR_VERSION),)
  MAKE_MAJOR_VERSION := $(word 1,$(subst ., ,$(MAKE_VERSION)))
  SUPPORTED_MAKE_VERSION := $(shell [ $(MAKE_MAJOR_VERSION) -ge $(REQUIRED_MIN_MAKE_MAJOR_VERSION) ] && echo true)
  ifneq ($(SUPPORTED_MAKE_VERSION),true)
    $(error "Make v$(MAKE_VERSION) is too old, must use v$(REQUIRED_MIN_MAKE_MAJOR_VERSION) or above")
  endif
endif

# RPMs used by all BASE_OS
RPM_LIST := \
    $(KERNEL_HEADERS_RPM) \
    glibc glibc-headers glibc-devel \
    cups-libs cups-devel \
    libX11 libX11-devel \
    libxcb xorg-x11-proto-devel \
    alsa-lib alsa-lib-devel \
    libXext libXext-devel \
    libXtst libXtst-devel \
    libXrender libXrender-devel \
    libXrandr libXrandr-devel \
    freetype freetype-devel \
    libXt libXt-devel \
    libSM libSM-devel \
    libICE libICE-devel \
    libXi libXi-devel \
    libXdmcp libXdmcp-devel \
    libXau libXau-devel \
    libgcc libxcrypt \
    zlib zlib-devel \
    libffi libffi-devel \
    fontconfig fontconfig-devel \
    systemtap-sdt-devel \
    #

################################################################################
# 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
BUILDDIR := $(OUTPUT_ROOT)/$(HOST)/$(TARGET)
TARGETDIR := $(PREFIX)/$(TARGET)
SYSROOT := $(TARGETDIR)/sysroot
DOWNLOAD := $(OUTPUT_ROOT)/download
DOWNLOAD_RPMS := $(DOWNLOAD)/rpms/$(TARGET)-$(LINUX_VERSION)
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

################################################################################
# Download RPMs
download-rpms:
	mkdir -p $(DOWNLOAD_RPMS)
        # Only run this if rpm dir is empty.
        ifeq ($(wildcard $(DOWNLOAD_RPMS)/*.rpm), )
	  cd $(DOWNLOAD_RPMS) && \
	      wget -r -np -nd $(patsubst %, -A "*%*.rpm", $(RPM_LIST)) $(BASE_URL)
        endif

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

# Generate downloading + unpacking of sources.
define Download
  # Allow override
  $(1)_DIRNAME ?= $(basename $(basename $(notdir $($(1)))))
  $(1)_DIR = $(abspath $(SRCDIR)/$$($(1)_DIRNAME))
  ifeq ($$($(1)_CMAKE_BASED),)
    $(1)_CFG = $$($(1)_DIR)/configure
    $(1)_SRC_MARKER = $$($(1)_DIR)/configure
    $(1)_CONFIG = $(CONFIG)
  else
    $(1)_CFG = cmake
    $(1)_SRC_MARKER = $$($(1)_DIR)/CMakeLists.txt
    $(1)_CONFIG = $$(CMAKE_CONFIG) $$($(1)_DIR)
  endif
  $(1)_FILE = $(DOWNLOAD)/$(notdir $($(1)))

  $$($(1)_SRC_MARKER) : $$($(1)_FILE)
	mkdir -p $$(SRCDIR)
	tar -C $$(SRCDIR) -xf $$<
	$$(foreach p,$$(abspath $$(wildcard patches/$$(ARCH)-$$(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 dep,$(dependencies),$(eval $(call Download,$(call uppercase,$(dep)))))

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

RPM_ARCHS := $(ARCH) noarch
ifeq ($(ARCH),x86_64)
  # Enable mixed mode.
  RPM_ARCHS += i386 i686
else ifeq ($(ARCH),i686)
  RPM_ARCHS += i386
else ifeq ($(ARCH), armhfp)
  RPM_ARCHS += armv7hl
endif

RPM_FILE_LIST := $(sort $(foreach a, $(RPM_ARCHS), \
  $(wildcard $(patsubst %,$(DOWNLOAD_RPMS)/%*$a.rpm,$(RPM_LIST))) \
))

# 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 $@

################################################################################
# Create links for ffi header files so that they become visible by default when using the
# devkit.
ifeq ($(ARCH), x86_64)
  $(SYSROOT)/usr/include/ffi.h: $(rpms)
	cd $(@D) && rm -f $(@F) && ln -s ../lib/libffi-*/include/$(@F) .

  $(SYSROOT)/usr/include/ffitarget.h: $(rpms)
	cd $(@D) && rm -f $(@F) && ln -s ../lib/libffi-*/include/$(@F) .

  SYSROOT_LINKS += $(SYSROOT)/usr/include/ffi.h $(SYSROOT)/usr/include/ffitarget.h
endif

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

# Define marker files for each source package to be compiled
$(foreach dep,$(dependencies),$(eval $(dep) = $(TARGETDIR)/$($(dep)_ver).done))

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

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

CMAKE_CONFIG = -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(PREFIX)

PATHEXT = $(PREFIX)/bin:

PATHPRE = PATH=$(PATHEXT)$(PATH)
NUM_CORES := $(shell cat /proc/cpuinfo | grep -c processor)
BUILDPAR = -j$(NUM_CORES)

# 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))

ifeq ($(filter $(ARCH), s390x riscv64 ppc64le), )
  # gold compiles but cannot link properly on s390x @ gcc 13.2 and Fedore 41
  # gold is not available for riscv64 and ppc64le,
  # and subsequent linking will fail if we try to enable it.
  LINKER_CONFIG := --enable-gold=default
endif

# Makefile creation. Simply run configure in build dir.
# Setting CFLAGS to -O2 generates a much faster ld.
$(bfdmakes) \
$(BUILDDIR)/$(binutils_ver)/Makefile \
    : $(BINUTILS_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="-O2 $(CFLAGS)" \
	      $(BINUTILS_CFG) \
	      $(CONFIG) \
	      $(LINKER_CONFIG) \
	      --with-sysroot=$(SYSROOT) \
	      --disable-nls \
	      --program-prefix=$(TARGET)- \
	      --enable-multilib \
	      --enable-threads \
	      --enable-plugins \
	) > $(@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

ifeq ($(ARCH), armhfp)
  $(BUILDDIR)/$(gcc_ver)/Makefile : CONFIG +=  --with-float=hard
endif

ifneq ($(filter riscv64 ppc64 ppc64le s390x, $(ARCH)), )
  # We only support 64-bit on these platforms anyway
  CONFIG += --disable-multilib
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) \
	      --with-debug-prefix-map=$(OUTPUT_ROOT)=devkit \
	      --enable-languages=c,c++ \
	      --enable-shared \
	      --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)

################################################################################
# Build gdb but only where host and target match
ifeq ($(HOST), $(TARGET))
  $(BUILDDIR)/$(gdb_ver)/Makefile: $(GDB_CFG)
	$(info Configuring $@. Log in $(@D)/log.config)
	mkdir -p $(@D)
	( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" $(GDB_CFG) \
	      $(CONFIG) \
	      --with-sysroot=$(SYSROOT) \
	      --with-mpfr=$(PREFIX) \
	      --with-gmp=$(PREFIX) \
	) > $(@D)/log.config 2>&1
	@echo 'done'

  $(gdb): $(gcc)
else
  $(BUILDDIR)/$(gdb_ver)/Makefile:
	$(info Faking $@, not used when cross-compiling)
	mkdir -p $(@D)
	echo "install:" > $@
	@echo 'done'
endif

################################################################################
# very straightforward. just build a ccache. it is only for host.
$(BUILDDIR)/$(ccache_ver)/Makefile \
    : $(CCACHE_SRC_MARKER)
	$(info Configuring $@. Log in $(@D)/log.config)
	@mkdir -p $(@D)
	@( \
	  cd $(@D) ; \
	  $(PATHPRE) $(ENVS) $(CCACHE_CFG) \
	      $(CCACHE_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 -fs $$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 -fs $(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
	@mkdir -p $(@D)
	@touch $@
	@echo 'done'

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

$(PREFIX)/devkit.info:
	@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/$(TARGET)/sysroot"' >> $@
	echo 'DEVKIT_EXTRA_PATH="$$DEVKIT_ROOT/bin"' >> $@

################################################################################
# Copy these makefiles into the root of the kit
$(PREFIX)/Makefile: ./Makefile
	rm -rf $@
	cp $< $@

$(PREFIX)/Tools.gmk: ./Tools.gmk
	rm -rf $@
	cp $< $@

$(PREFIX)/Tars.gmk: ./Tars.gmk
	rm -rf $@
	cp $< $@

THESE_MAKEFILES := $(PREFIX)/Makefile $(PREFIX)/Tools.gmk $(PREFIX)/Tars.gmk

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

ifeq ($(TARGET), $(HOST))
  # To build with dtrace support, the build needs access to the dtrace executable from the
  # sysroot. Generally we don't want to add binaries in the sysroot to the path, but
  # luckily this seems to execute well enough on a different host Linux distro, so symlink
  # it into the main bin dir.
  $(PREFIX)/bin/dtrace:
	@echo 'Creating dtrace soft link'
	ln -s ../$(HOST)/sysroot/usr/bin/dtrace $@

  $(PREFIX)/bin/%:
	@echo 'Creating missing $* soft link'
	ln -s $(TARGET)-$* $@

  missing-links := $(addprefix $(PREFIX)/bin/, \
      addr2line ar as c++ c++filt dwp elfedit g++ gcc gcc-$(gcc_ver_only) gprof ld ld.bfd \
      ld.gold nm objcopy objdump ranlib readelf size strings strip)
endif

# Add link to work around "plugin needed to handle lto object" (JDK-8344272)
$(PREFIX)/lib/bfd-plugins/liblto_plugin.so: $(PREFIX)/libexec/gcc/$(TARGET)/$(gcc_ver_only)/liblto_plugin.so
	@echo 'Creating missing $(@F) soft link'
	@mkdir -p $(@D)
	ln -s $$(realpath -s --relative-to=$(@D) $<) $@

missing-links += $(PREFIX)/lib/bfd-plugins/liblto_plugin.so

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

bfdlib : $(bfdlib)
binutils : $(binutils)
rpms : $(rpms)
libs : $(libs)
sysroot : rpms libs
gcc : sysroot $(gcc) $(gccpatch)
gdb : $(gdb)
all : binutils gcc bfdlib $(PREFIX)/devkit.info $(missing-links) $(SYSROOT_LINKS) \
    $(THESE_MAKEFILES) gdb

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

.PHONY : gcc all binutils bfdlib link_libs rpms libs sysroot
