# 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 set.
#
# Exports CROSS_COMPILE, ARCH, KBUILD_VERBOSE, Q, MAKEFLAGS, AKAROS_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

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

AKAROS_PREFIX = $(shell x86_64-ucb-akaros-gcc -dumpmachine)
AKAROS_SYSROOT = $(shell x86_64-ucb-akaros-gcc -print-sysroot)
