#
# Copyright 2017, Data61
# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
# ABN 41 687 119 230.
#
# This software may be distributed and modified according to the terms of
# the BSD 2-Clause license. Note that NO WARRANTY is provided.
# See "LICENSE_BSD2.txt" for details.
#
# @TAG(DATA61_BSD)
#

# This is a bit of a hacky wrapper around the original muslc Makefile, which has
# been renamed Makefile.muslc. This wrapper allows for bashing muslc into the
# greater seL4 build system, but still preserving the original Makefile (albeit renamed)
# to allow for ease of merging changes

all: build_muslc

ifeq (${CONFIG_USER_DEBUG_BUILD},y)
    ENABLE_DEBUG = --enable-debug
else
    ENABLE_DEBUG =
endif

ifeq (${CONFIG_ARCH_IA32},y)
    TARGET = i386
endif

ifeq (${CONFIG_ARCH_AARCH32},y)
    TARGET = arm
endif

ifeq (${CONFIG_ARCH_X86_64},y)
    TARGET = x86_64
endif

ifeq (${CONFIG_ARCH_AARCH64},y)
    TARGET = aarch64
endif

ifeq (${CONFIG_ARCH_RISCV},y)
    TARGET = riscv
endif

ifeq (${CONFIG_LINK_TIME_OPTIMISATIONS},y)
    CFLAGS += -flto
endif


CC = ${C_COMPILER}
CROSS_COMPILE = ${TOOLPREFIX}
CFLAGS += ${NK_CFLAGS}

export CC CROSS_COMPILE CFLAGS

configure_line := --srcdir=${SOURCE_DIR} --prefix=${STAGE_DIR} ${ENABLE_DEBUG} \
        --target=${TARGET} --enable-warnings --disable-shared --enable-static

build_muslc:
    # If the configure line changed and we've done a build (i.e. we have a makefile) then we should
    # do a clean as muslc does not rebuild in the same directory correctly if you change the target
    # or other major things
	[ "`cat configure_line 2>&1`" != "${configure_line}" ] && [ -e Makefile.muslc ] && \
		$(MAKE) CFLAGS="${CFLAGS}" CC="${CC}" CROSS_COMPILE="${CROSS_COMPILE}" -f Makefile.muslc clean || true

	# If the configure line did change (or we don't have one yet) then we also need to (re)run configure
	# Only print output if there's an error as configure is quite noisy
	# Also need to update the ARCH in the config.mak file configure generates
	[ "`cat configure_line 2>&1`" != "${configure_line}" ] && \
		${SOURCE_DIR}/configure ${configure_line} 2>&1 > config.log || cat config.log  && sed -ibak 's/^ARCH = \(.*\)/ARCH = \1_sel4/' config.mak || true
	# Store the current configuration
	echo "${configure_line}" > configure_line
	# Symlink in the correct Makefile as the configure script doesn't know that we renamed the muslc one
	[ -e Makefile.muslc ] || ln -s ${SOURCE_DIR}/Makefile.muslc Makefile.muslc
	$(MAKE) CFLAGS="${CFLAGS}" CC="${CC}" CROSS_COMPILE="${CROSS_COMPILE}" -f Makefile.muslc
	$(MAKE) CFLAGS="${CFLAGS}" CC="${CC}" CROSS_COMPILE="${CROSS_COMPILE}" -f Makefile.muslc install-libs install-headers
