blob: 5b430ea42ec8afd0ab36f5403b3554cf029a611d [file] [log] [blame]
# 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/