# Helper for writing application Makefiles
#
# Those apps should include this directly.
#
# Other than providing defaults for things like AKAROS_ROOT, the main thing
# this does is set the cross compiler.  You can override some things with a
# Makelocal.
#
# The calling environment must have AKAROS_ROOT and AKAROS_XCC_ROOT set.
#
# Exports CROSS_COMPILE, ARCH, KBUILD_VERBOSE, Q, MAKEFLAGS, AKAROS_ROOT,
# AKAROS_XCC_ROOT, AKAROS_PREFIX, AKAROS_SYSROOT, MAKE_JOBS, FIRST_KFS_PATH,
# KFS_ROOT

# Do not print "Entering directory ...";
MAKEFLAGS += --no-print-directory

# Overrides
-include Makelocal

ifndef AKAROS_ROOT
    $(error AKAROS_ROOT is empty!  You must set it!)
endif
ifndef AKAROS_XCC_ROOT
    $(error AKAROS_XCC_ROOT is empty!  You must set it!)
endif

FIRST_KFS_PATH ?= $(AKAROS_ROOT)/kern/kfs
KFS_ROOT = $(FIRST_KFS_PATH)

# To put more focus on warnings, be less verbose as default
# Use 'make V=1' to see the full commands
# Yanked this from the top-level.  It might work with V=1 from there too.
# Interestingly enough, V=1 gets passed to busybox, which also uses Kbuild,
# allowing us to control it's verbosity too.
ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE ?= $(V)
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif
ifeq ($(KBUILD_VERBOSE),1)
  Q ?=
else
  Q ?= @
endif


# CC prefix detection.  If we're called from the top-level Makefile, CC will be
# set.

# So that valid-arches aren't the default goal
.DEFAULT_GOAL = all
# Helper target, so users can say make x86_64 and get ARCH=x86_64
valid-arches := riscv x86_64
PHONY += $(valid-arches)
$(valid-arches):
	$(MAKE) ARCH=$@

ifeq ($(CROSS_COMPILE),)
    # ARCH will only be set if they called make (valid-arches) directly.
    ifneq ($(ARCH),)
        ifeq ($(filter $(valid-arches), $(ARCH)),)
            $(error ARCH $(ARCH) invalid, must be one of: $(valid-arches))
        endif
    else
        ARCH := x86_64
    endif
    CROSS_COMPILE := $(ARCH)-ucb-akaros-
endif

# strip the trailing - from CROSS_COMPILE
AKAROS_PREFIX = $(shell x=$(CROSS_COMPILE); echo $${x%?})
AKAROS_SYSROOT = $(AKAROS_XCC_ROOT)/$(AKAROS_PREFIX)/sysroot/
