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