aboutsummaryrefslogtreecommitdiff
path: root/build/bootstrap.make
blob: b845bbf18f65b2d9e6135bb01383acf6139f717e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# file      : build/bootstrap.make
# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
# license   : GNU GPL v3; see accompanying LICENSE file

project_name := odb

# First try to include the bundled bootstrap.make if it exist. If that
# fails, let make search for the external bootstrap.make.
#
build := build-0.3

-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make

ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),)
include $(build)/bootstrap.make
endif

def_goal := $(.DEFAULT_GOAL)

# Include C++ configuration. We need to know if we are using the generic
# C++ compiler in which case we need to compensate for missing dependency
# auto-generation (see below).
#
$(call include,$(bld_root)/cxx/configuration.make)

# Aliases
#
.PHONY: $(out_base)/       \
        $(out_base)/.dist  \
        $(out_base)/.clean

ifdef %interactive%

.PHONY: dist clean

dist:     $(out_base)/.dist
clean:    $(out_base)/.clean

endif

# Make sure the distribution prefix is set if the goal is dist.
#
ifneq ($(filter $(MAKECMDGOALS),dist),)
ifeq ($(dist_prefix),)
$(error dist_prefix is not set)
endif
endif

ifdef cxx_id

# It would be better to do these checks in the script once instead
# of for every makefile.
#
ifneq ($(MAKECMDGOALS),disfigure)

ifneq ($(cxx_id),gnu)
$(error only GNU g++ can be used to build the ODB compiler)
endif

$(call include,$(bld_root)/cxx/gnu/configuration.make)

ifdef cxx_gnu
ifeq ($(shell $(cxx_gnu) -print-file-name=plugin),plugin)
$(error $(cxx_gnu) does not support plugins)
endif
endif
endif # disfigure

define include-dep
$(call -include,$1)
endef

endif

# If we don't have dependency auto-generation then we need to manually
# make sure that generated files are generated before C++ file are
# compiler. To do this we make the object files ($2) depend in order-
# only on generated files ($3).
#
ifeq ($(cxx_id),generic)

define include-dep
$(if $2,$(eval $2: | $3))
endef

else

define include-dep
$(call -include,$1)
endef

endif

# Don't include dependency info for certain targets.
#
ifneq ($(filter $(MAKECMDGOALS),clean disfigure dist),)
include-dep =
endif


.DEFAULT_GOAL := $(def_goal)