Export AKAROS_{SYSROOT,PREFIX} from tools/Makefrag
[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, AKAROS_XCC_ROOT, AKAROS_PREFIX, AKAROS_SYSROOT, MAKE_JOBS,
12 # FIRST_KFS_PATH, KFS_ROOT
13
14 # Do not:
15 # o  use make's built-in rules and variables
16 #    (this increases performance and avoids hard-to-debug behaviour);
17 # o  print "Entering directory ...";
18 MAKEFLAGS += -rR --no-print-directory
19
20 # Overrides
21 -include Makelocal
22 BUILDDIR ?= $(shell pwd)
23 AKAROS_ROOT ?= $(BUILDDIR)/../../..
24 MAKE_JOBS ?= 4
25 FIRST_KFS_PATH ?= $(AKAROS_ROOT)/kern/kfs
26 KFS_ROOT = $(FIRST_KFS_PATH)
27 AKAROS_XCC_ROOT ?= $(shell grep X86_64_INSTDIR $(AKAROS_ROOT)/tools/compilers/gcc-glibc/Makelocal | cut -f 3 -d' ')
28
29 # To put more focus on warnings, be less verbose as default
30 # Use 'make V=1' to see the full commands
31 # Yanked this from the top-level.  It might work with V=1 from there too.
32 # Interestingly enough, V=1 gets passed to busybox, which also uses Kbuild,
33 # allowing us to control it's verbosity too.
34 ifeq ("$(origin V)", "command line")
35   KBUILD_VERBOSE ?= $(V)
36 endif
37 ifndef KBUILD_VERBOSE
38   KBUILD_VERBOSE = 0
39 endif
40 ifeq ($(KBUILD_VERBOSE),1)
41   Q ?=
42 else
43   Q ?= @
44 endif
45
46
47 # CC prefix detection.  If we're called from the top-level Makefile, CC will be
48 # set.
49
50 # So that valid-arches aren't the default goal
51 .DEFAULT_GOAL = all
52 # Helper target, so users can say make x86_64 and get ARCH=x86_64
53 valid-arches := riscv x86_64
54 PHONY += $(valid-arches)
55 $(valid-arches):
56         $(MAKE) ARCH=$@
57
58 ifeq ($(CROSS_COMPILE),)
59     # ARCH will only be set if they called make (valid-arches) directly.
60     ifneq ($(ARCH),)
61         ifeq ($(filter $(valid-arches), $(ARCH)),)
62             $(error ARCH $(ARCH) invalid, must be one of: $(valid-arches))
63         endif
64     else
65         ARCH := x86_64
66     endif
67     CROSS_COMPILE := $(ARCH)-ucb-akaros-
68 endif
69
70 # strip the trailing - from CROSS_COMPILE
71 AKAROS_PREFIX = $(shell x=$(CROSS_COMPILE); echo $${x%?})
72 AKAROS_SYSROOT = $(AKAROS_XCC_ROOT)/$(AKAROS_PREFIX)/sysroot/