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