Extract busybox's make helpers
[akaros.git] / tools / Makefrag
1 # Helper for writing application Makefiles
2 #
3 # Those apps should include this directly and be located three directories down
4 # from the AKAROS_ROOT.
5 #
6 # Other than providing defaults for things like AKAROS_ROOT, the main thing
7 # this does is set the cross compiler.  You can override some things with a
8 # Makelocal.
9 #
10 # Exports CROSS_COMPILE, ARCH, KBUILD_VERBOSE, Q, MAKEFLAGS, BUILDDIR,
11 # AKAROS_ROOT, MAKE_JOBS FIRST_KFS_PATH, KFS_ROOT
12
13 # Do not:
14 # o  use make's built-in rules and variables
15 #    (this increases performance and avoids hard-to-debug behaviour);
16 # o  print "Entering directory ...";
17 MAKEFLAGS += -rR --no-print-directory
18
19 # Overrides
20 -include Makelocal
21 BUILDDIR ?= $(shell pwd)
22 AKAROS_ROOT ?= $(BUILDDIR)/../../..
23 MAKE_JOBS ?= 4
24 FIRST_KFS_PATH ?= $(AKAROS_ROOT)/kern/kfs
25 KFS_ROOT = $(FIRST_KFS_PATH)
26
27 # To put more focus on warnings, be less verbose as default
28 # Use 'make V=1' to see the full commands
29 # Yanked this from the top-level.  It might work with V=1 from there too.
30 # Interestingly enough, V=1 gets passed to busybox, which also uses Kbuild,
31 # allowing us to control it's verbosity too.
32 ifeq ("$(origin V)", "command line")
33   KBUILD_VERBOSE ?= $(V)
34 endif
35 ifndef KBUILD_VERBOSE
36   KBUILD_VERBOSE = 0
37 endif
38 ifeq ($(KBUILD_VERBOSE),1)
39   Q ?=
40 else
41   Q ?= @
42 endif
43
44
45 # CC prefix detection.  If we're called from the top-level Makefile, CC will be
46 # set.
47
48 # So that valid-arches aren't the default goal
49 .DEFAULT_GOAL = all
50 # Helper target, so users can say make x86_64 and get ARCH=x86_64
51 valid-arches := riscv x86_64
52 PHONY += $(valid-arches)
53 $(valid-arches):
54         $(MAKE) ARCH=$@
55
56 ifeq ($(CROSS_COMPILE),)
57     # ARCH will only be set if they called make (valid-arches) directly.
58     ifneq ($(ARCH),)
59         ifeq ($(filter $(valid-arches), $(ARCH)),)
60             $(error ARCH $(ARCH) invalid, must be one of: $(valid-arches))
61         endif
62     else
63         ARCH := x86_64
64     endif
65     CROSS_COMPILE := $(ARCH)-ucb-akaros-
66 endif