]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - pkgs/pseudo/universe/Makefile
Leverage dirdeps.mk by tweaking _DIRDEP_USE_LEVEL
[FreeBSD/FreeBSD.git] / pkgs / pseudo / universe / Makefile
1 # $FreeBSD$
2
3 # This target is "special".
4 #
5 # The actual work is done via another target;
6 # UNIVERSE_TARGET_RELDIR is used to identify it.
7 #
8 # We leverage dirdeps.mk to run a sub-make per
9 # MACHINE/ARCH to each build ${UNIVERSE_TARGET_RELDIR}
10 # in meta mode.
11 #
12 # We simply override the level at which dirdeps.mk normally does
13 # its thing, and give it a DIRDEPS list that corresponds to
14 # ${UNIVERSE_TARGET_RELDIR}.${TARGET_SPEC} for each TARGET_SPEC we
15 # want.
16 #
17 # This allows the computation of dependencies for each ${TARGET_SPEC}
18 # to happen in parallel - avoiding a very long startup time.
19 # We can even export each sub-make to a different machine if using a
20 # cluster.
21 #
22 # The above works fine so long as our sub-makes remain independent.
23 # That is; none of them  attempts to visit any directory for a machine
24 # other than the TARGET_SPEC we gave it.
25 # For example; to build some tool for the pseudo machine "host".
26 # To avoid that, our Makefile.depend lists all the hosttools we might
27 # need and these will thus be built before we launch the
28 # ${UNIVERSE_TARGET_RELDIR} sub-makes.
29 # Further we add a filter to skip any "host" dirdeps during those
30 # sub-makes.
31
32
33
34 # this is the RELDIR of the target we build
35 UNIVERSE_TARGET_RELDIR?= pkgs/pseudo/the-lot
36
37 # the list of machines
38 TARGET_MACHINE_LIST = i386 amd64
39 # some machines have more than one arch
40 TARGET_ARCHES_arm?=     arm armeb armv6 armv6hf
41
42 # avoid ../Makefile.inc defining this
43 all:
44
45 .include "../Makefile.inc"
46
47 .if ${.MAKE.LEVEL} > 0
48 # ok our prerequisites have been built
49 .if !defined(UNIVERSE_GUARD)
50 # just incase we end up back here, 
51 # we cannot rely on .MAKE.LEVEL as we normally would
52 UNIVERSE_GUARD=1
53 .export UNIVERSE_GUARD
54
55 # we want to re-use dirdeps
56 _DIRDEP_USE_LEVEL = ${.MAKE.LEVEL}
57
58 # we want our sub-makes to think they are level 0
59 # and we don't want failure of one to stop all.
60 DIRDEP_USE_ENV= \
61         MAKELEVEL=0 \
62         MAKE_JOB_ERROR_TOKEN=no
63
64
65 _target_specs:= ${TARGET_MACHINE_LIST:@m@${TARGET_ARCHES_$m:U$m:@a@$m,$a@}@:O:u}
66
67 DIRDEPS:= ${_target_specs:@t@${UNIVERSE_TARGET_RELDIR}.$t@}
68
69 all: dirdeps
70
71 .include <dirdeps.mk>
72 .endif
73 .endif