summaryrefslogtreecommitdiffstats
path: root/make/leaf.cfg
blob: a553943b13c8777ddeb786dadff1897b70268bf7 (plain) (blame)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#
#  $Id$
#
# make/leaf.cfg
#
#   Make(1) configuration file include'd by all leaf-node Makefiles
#

# get most stuff done

# include $(RTEMS_ROOT)/make/main.cfg

#
# list of all known managers
# This list is used, along with $(MANAGERS) (set by app makefile)
#   to build the list of *not wanted* drivers.
#
# ref: target compiler config file for usage
#

MANAGER_LIST=dpmem event io msg mp part region sem signal timer rtmon ext

# Convert *real* spellings in $(MANAGERS) (set
#   in application makefile) to their "correct" name.
# (I hate abbreviations :-)

MANAGERS := $(patsubst message,            msg,   $(MANAGERS))
MANAGERS := $(patsubst multi_processor,    mp,    $(MANAGERS))
MANAGERS := $(patsubst partition,          part,  $(MANAGERS))
MANAGERS := $(patsubst rate_monotonic,     rtmon, $(MANAGERS))
MANAGERS := $(patsubst semaphore,          sem,   $(MANAGERS))
MANAGERS := $(patsubst dual_ported_memory, dpmem, $(MANAGERS))
MANAGERS := $(patsubst extension,          ext,   $(MANAGERS))

# allow 'all' to mean all managers
MANAGERS := $(patsubst all, $(MANAGER_LIST), $(MANAGERS))

# and finally rip out duplicates
MANAGERS := $(sort $(MANAGERS))

# Pull in the desired compiler
# This is almost always the "target" compiler.
# But sometimes, you have to build something on the host.
# Allow for that by allowing individual Makefiles specify $(USE_HOST_COMPILER)
# This will not change $(ARCH) -- binaries will still be place as per target
ifeq (,$(USE_HOST_COMPILER))
   include ${CONFIG.$(TARGET_ARCH).CC}
else
   include $(CONFIG.$(HOST_ARCH).CC)
endif
ifeq (${DEPEND},$(wildcard ${DEPEND}))
include ${DEPEND}		     # pull in dependencies if they exist
endif

#
# Builtin targets for compilation variants
#
debug debug_install:
	$(MAKE) -f $(MAKEFILE) MAKEFILE=$(MAKEFILE) "ARCH=${TARGET_ARCH}-debug" \
      "CFLAGS_DEBUG=$(CFLAGS_DEBUG_V)" \
      "CFLAGS_OPTIMIZE=$(CFLAGS_DEBUG_OPTIMIZE_V)" \
      "LDFLAGS_DEBUG=$(LDFLAGS_DEBUG_V)" $(TARGET_VA)

profile profile_install:
	$(MAKE) -f $(MAKEFILE) \
      MAKEFILE=$(MAKEFILE) "ARCH=${TARGET_ARCH}-profile" \
      "CFLAGS_PROFILE=$(CFLAGS_PROFILE_V)" \
      "LDFLAGS_PROFILE=$(LDFLAGS_PROFILE_V)" $(TARGET_VA)

#
# VARIANT_VA will convert our ${ARCH} back into "" or "debug" or "profile".
#   Handy when one makefile wants to hop over into a peer's tree and
#   build something "the same" way.
#

VARIANT-$(TARGET_ARCH)-v =
VARIANT-$(TARGET_ARCH)-debug-v = debug
VARIANT-$(TARGET_ARCH)-profile-v = profile

VARIANT_VA = $(VARIANT-$(ARCH)-v)

#
# TARGET_VA will convert $@ (expected to be 'debug' or
#     'debug_install' or 'profile' etc.)
#   into "" or "install" as appropriate.
#   Used for variant recursion.
#

TARGET_debug_V = all
TARGET_profile_V = all

TARGET_debug_install_V = install
TARGET_profile_install_V = install

TARGET_VA = $(TARGET_$@_V)

#
# LIBSUFFIX_VA, will "index" into LIBSUFF-*-v macros and
#   convert our ${ARCH} back into .a or _g.a or _p.a based on debug or profile.
#   Useful for installing libraries.
#

LIBSUFFIX_$(TARGET_ARCH)_V=
LIBSUFFIX_$(TARGET_ARCH)-debug_V=_g
LIBSUFFIX_$(TARGET_ARCH)-profile_V=_p

LIB_VARIANT=$(LIBSUFFIX_$(ARCH)_V)
LIBSUFFIX_VA = $(LIB_VARIANT).a

get: $(SRCS) $(GET_ADDITIONS)

#
# Builtin clean and clobber rules
# Individual makefiles can add stuff via CLEAN_ADDITIONS and CLOBBER_ADDITIONS
# If desperate to save something, they can override CLEAN_OS, CLEAN_CC, etc.
#

clean:
	$(RM) -r a.out core mon.out gmon.out $(CLEAN_OS) $(CLEAN_CC)
	$(RM) -r $(CLEAN_PROTO) $(CLEAN_DEPEND) a.out
	$(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS) $(IMPORT_SOURCE)

clobber: clean
	-$(RCS_CLEAN)
	$(RM) .#*
	$(RM) -r $(CLOBBER_OS) $(CLOBBER_CC) $(CLOBBER_DEPEND)
	$(RM) -r $(CLOBBER_ADDITIONS) a.out

# Until RTEMS_CPU is removed from all the make configuration files,
# this will need to be here to transform hppa1.1 into hppa1_1 to
# make it a valid cpp symbol.  At some point in the near future,
# targopts.h should not define RTEMS_CPU.  As best I can tell,
# gcc cpp predefines eliminate the need for RTEMS_CPU_MODEL
# on some families but not on others.  For example, the i386
# family does not give us enough information from the predefines.
RTEMS_CPU_DEFINED=$(subst .,_,$(RTEMS_CPU))

# make the target dependent options file
$(ARCH)/targopts.h-tmp: FORCE
	@echo "/* target board dependent options file */"       >$@
	@echo "/* automatically generated -- DO NOT EDIT!! */" >>$@
	@echo                                                  >>$@
	@echo "#ifndef __TARGET_OPTIONS_h"                     >>$@
	@echo "#define __TARGET_OPTIONS_h"                     >>$@
	@echo                                                  >>$@
	@echo "#ifdef $(RTEMS_CPU_DEFINED)"                    >>$@
	@echo "#undef $(RTEMS_CPU_DEFINED)"                    >>$@
	@echo "#endif"                                         >>$@
	@echo "#define $(RTEMS_CPU_DEFINED) 1"                 >>$@
	@echo                                                  >>$@
	@echo "#ifdef $(RTEMS_CPU_MODEL)"                      >>$@
	@echo "#undef $(RTEMS_CPU_MODEL)"                      >>$@
	@echo "#endif"                                         >>$@
	@echo "#define $(RTEMS_CPU_MODEL) 1"                   >>$@
	@echo                                                  >>$@
	@echo "#ifdef $(RTEMS_BSP)"                            >>$@
	@echo "#undef $(RTEMS_BSP)"                            >>$@
	@echo "#endif"                                         >>$@
	@echo "#define $(RTEMS_BSP) 1"                         >>$@
	@echo                                                  >>$@
	@$(make-target-options)
ifeq (${RTEMS_USE_MACROS},yes)
	@echo "#define USE_MACROS 1"                           >>$@
else
	@echo "#define USE_INLINES 1"                          >>$@
endif
ifeq ($(RTEMS_HAS_MULTIPROCESSING),yes)
	@echo "#define RTEMS_MULTIPROCESSING 1"                >>$@
endif
ifeq ($(RTEMS_HAS_POSIX_API),yes)
	@echo "#define RTEMS_POSIX_API 1"                      >>$@
endif
ifeq ($(RTEMS_USE_NEWLIB),yes)
	@echo "#define RTEMS_NEWLIB 1"                         >>$@
	@echo "#define MALLOC_PROVIDED 1"                      >>$@
endif
	@echo                                                  >>$@
	@echo "#endif"                                         >>$@

ifeq ($(RTEMS_BSP),bare)
$(ARCH)/bsp_specs.tmp: FORCE
	cp $(RTEMS_ROOT)/c/src/lib/libbsp/$(RTEMS_BSP_FAMILY)/bsp_specs $@
else        
$(ARCH)/bsp_specs.tmp: FORCE
	cp $(RTEMS_ROOT)/c/src/lib/libbsp/$(RTEMS_CPU)/$(RTEMS_BSP_FAMILY)/bsp_specs $@
endif