| 1 | # Makefile fragment for common parts of all simulators. |
| 2 | # Copyright (C) 1997 Free Software Foundation, Inc. |
| 3 | # Contributed by Cygnus Support. |
| 4 | |
| 5 | # This program is free software; you can redistribute it and/or modify |
| 6 | # it under the terms of the GNU General Public License as published by |
| 7 | # the Free Software Foundation; either version 2 of the License, or |
| 8 | # (at your option) any later version. |
| 9 | # |
| 10 | # This program is distributed in the hope that it will be useful, |
| 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | # GNU General Public License for more details. |
| 14 | # |
| 15 | # You should have received a copy of the GNU General Public License |
| 16 | # along with this program; if not, write to the Free Software |
| 17 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 18 | |
| 19 | # This Makefile fragment consists of two separate parts. |
| 20 | # They are merged into the final Makefile at points denoted by |
| 21 | # "## COMMON_PRE_CONFIG_FRAG" and "## COMMON_POST_CONFIG_FRAG". |
| 22 | # |
| 23 | # The target Makefile should look like: |
| 24 | # |
| 25 | #># Copyright blah blah |
| 26 | #> |
| 27 | #>## COMMON_PRE_CONFIG_FRAG |
| 28 | #> |
| 29 | #># Any overrides necessary for the SIM_FOO config vars. |
| 30 | #>SIM_FOO = ... |
| 31 | #> |
| 32 | #>## COMMON_POST_CONFIG_FRAG |
| 33 | #> |
| 34 | #># Rules to build target specific .o's. |
| 35 | |
| 36 | ## COMMON_PRE_CONFIG_FRAG |
| 37 | |
| 38 | VPATH = @srcdir@ |
| 39 | srcdir = @srcdir@ |
| 40 | srcroot = $(srcdir)/../.. |
| 41 | |
| 42 | prefix = @prefix@ |
| 43 | exec_prefix = @exec_prefix@ |
| 44 | |
| 45 | host_alias = @host_alias@ |
| 46 | target_alias = @target_alias@ |
| 47 | program_transform_name = @program_transform_name@ |
| 48 | bindir = @bindir@ |
| 49 | |
| 50 | libdir = @libdir@ |
| 51 | tooldir = $(libdir)/$(target_alias) |
| 52 | |
| 53 | datadir = @datadir@ |
| 54 | mandir = @mandir@ |
| 55 | man1dir = $(mandir)/man1 |
| 56 | infodir = @infodir@ |
| 57 | includedir = @includedir@ |
| 58 | |
| 59 | SHELL = /bin/sh |
| 60 | |
| 61 | INSTALL = @INSTALL@ |
| 62 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
| 63 | INSTALL_DATA = @INSTALL_DATA@ |
| 64 | |
| 65 | CC = @CC@ |
| 66 | CC_FOR_BUILD = @CC_FOR_BUILD@ |
| 67 | CFLAGS = @CFLAGS@ |
| 68 | SIM_BSWAP = @sim_bswap@ |
| 69 | SIM_CFLAGS = @sim_cflags@ |
| 70 | SIM_DEBUG = @sim_debug@ |
| 71 | SIM_TRACE = @sim_trace@ |
| 72 | |
| 73 | |
| 74 | HDEFINES = @HDEFINES@ |
| 75 | TDEFINES = |
| 76 | |
| 77 | AR = @AR@ |
| 78 | AR_FLAGS = rc |
| 79 | RANLIB = @RANLIB@ |
| 80 | MAKEINFO = makeinfo |
| 81 | |
| 82 | # Each simulator's Makefile.in defines one or more of these variables |
| 83 | # to override our settings as necessary. There is no need to define these |
| 84 | # in the simulator's Makefile.in if one is using the default value. In fact |
| 85 | # it's preferable not to. |
| 86 | |
| 87 | # List of object files, less common parts. |
| 88 | SIM_OBJS = |
| 89 | # List of extra dependencies. |
| 90 | # Generally this consists of simulator specific files included by sim-main.h. |
| 91 | SIM_EXTRA_DEPS = |
| 92 | # List of flags to always pass to $(CC). |
| 93 | SIM_EXTRA_CFLAGS = |
| 94 | # List of extra libraries to link with. |
| 95 | SIM_EXTRA_LIBS = |
| 96 | # List of extra program dependencies. |
| 97 | SIM_EXTRA_LIBDEPS = |
| 98 | # List of main object files for `run'. |
| 99 | SIM_RUN_OBJS = run.o |
| 100 | # Dependency of `all' to build any extra files. |
| 101 | SIM_EXTRA_ALL = |
| 102 | # Dependency of `install' to install any extra files. |
| 103 | SIM_EXTRA_INSTALL = |
| 104 | # Dependency of `clean' to clean any extra files. |
| 105 | SIM_EXTRA_CLEAN = |
| 106 | |
| 107 | ## End COMMON_PRE_CONFIG_FRAG |
| 108 | |
| 109 | ## COMMON_POST_CONFIG_FRAG |
| 110 | |
| 111 | CONFIG_CFLAGS = @DEFS@ $(SIM_CFLAGS) $(SIM_DEBUG) $(SIM_TRACE) $(SIM_BSWAP) \ |
| 112 | $(SIM_EXTRA_CFLAGS) $(HDEFINES) $(TDEFINES) |
| 113 | CSEARCH = -I. -I$(srcdir) -I../common -I$(srcdir)/../common \ |
| 114 | -I../../include -I$(srcroot)/include \ |
| 115 | -I../../bfd -I$(srcroot)/bfd \ |
| 116 | -I../../opcodes -I$(srcroot)/opcodes |
| 117 | ALL_CFLAGS = $(CONFIG_CFLAGS) $(CSEARCH) $(CFLAGS) |
| 118 | BUILD_CFLAGS = -g -O $(CSEARCH) |
| 119 | |
| 120 | LIBIBERTY_LIB = ../../libiberty/libiberty.a |
| 121 | BFD_LIB = ../../bfd/libbfd.a |
| 122 | OPCODES_LIB = ../../opcodes/libopcodes.a |
| 123 | CONFIG_LIBS = @LIBS@ |
| 124 | LIBDEPS = $(BFD_LIB) $(OPCODES_LIB) $(LIBIBERTY_LIB) \ |
| 125 | $(SIM_EXTRA_LIBDEPS) |
| 126 | EXTRA_LIBS = $(BFD_LIB) $(OPCODES_LIB) $(LIBIBERTY_LIB) \ |
| 127 | $(CONFIG_LIBS) $(SIM_EXTRA_LIBS) |
| 128 | |
| 129 | LIB_OBJS = callback.o targ-map.o $(SIM_OBJS) |
| 130 | |
| 131 | all: libsim.a run $(SIM_EXTRA_ALL) |
| 132 | |
| 133 | libsim.a: $(LIB_OBJS) |
| 134 | rm -f libsim.a |
| 135 | $(AR) $(ARFLAGS) libsim.a $(LIB_OBJS) |
| 136 | $(RANLIB) libsim.a |
| 137 | |
| 138 | run: $(SIM_RUN_OBJS) libsim.a $(LIBDEPS) |
| 139 | $(CC) $(ALL_CFLAGS) -o run \ |
| 140 | $(SIM_RUN_OBJS) libsim.a $(EXTRA_LIBS) |
| 141 | |
| 142 | run.o: $(srcdir)/../common/run.c config.h tconfig.h \ |
| 143 | $(srcroot)/include/callback.h |
| 144 | $(CC) -c $(srcdir)/../common/run.c $(ALL_CFLAGS) |
| 145 | |
| 146 | # FIXME: Ideally, callback.o and friends live in a library outside of |
| 147 | # both the gdb and simulator source trees (e.g. devo/remote. Not |
| 148 | # devo/libremote because this directory would contain more than just |
| 149 | # a library). |
| 150 | |
| 151 | callback.o: $(srcdir)/../common/callback.c config.h tconfig.h \ |
| 152 | $(srcroot)/include/callback.h targ-vals.h |
| 153 | $(CC) -c $(srcdir)/../common/callback.c $(ALL_CFLAGS) |
| 154 | |
| 155 | targ-map.o: targ-map.c targ-vals.h |
| 156 | |
| 157 | gentmap: Makefile $(srcdir)/../common/gentmap.c targ-vals.def |
| 158 | $(CC_FOR_BUILD) $(srcdir)/../common/gentmap.c -o gentmap $(BUILD_CFLAGS) |
| 159 | |
| 160 | targ-vals.h: gentmap |
| 161 | rm -f targ-vals.h |
| 162 | ./gentmap -h >targ-vals.h |
| 163 | |
| 164 | targ-map.c: gentmap |
| 165 | rm -f targ-map.c |
| 166 | ./gentmap -c >targ-map.c |
| 167 | |
| 168 | |
| 169 | # |
| 170 | # Rules for building sim-* components. Triggered by listing the corresponding |
| 171 | # .o file in the list of simulator targets. |
| 172 | # |
| 173 | |
| 174 | sim_main_headers = \ |
| 175 | sim-main.h \ |
| 176 | $(srcdir)/../common/sim-config.h \ |
| 177 | $(srcdir)/../common/sim-base.h \ |
| 178 | $(srcdir)/../common/sim-basics.h \ |
| 179 | $(srcdir)/../common/sim-trace.h \ |
| 180 | tconfig.h |
| 181 | |
| 182 | sim-assert_h = $(srcdir)/../common/sim-assert.h |
| 183 | sim-endian_h = $(srcdir)/../common/sim-endian.h |
| 184 | sim-n-endian_h = $(srcdir)/../common/sim-n-endian.h |
| 185 | sim-bits_h = $(srcdir)/../common/sim-bits.h |
| 186 | sim-config_h = $(srcdir)/../common/sim-config.h |
| 187 | sim-n-bits_h = $(srcdir)/../common/sim-n-bits.h |
| 188 | sim-core_h = $(srcdir)/../common/sim-core.h |
| 189 | sim-n-core_h = $(srcdir)/../common/sim-n-core.h |
| 190 | sim-events_h = $(srcdir)/../common/sim-events.h |
| 191 | sim-io_h = $(srcdir)/../common/sim-io.h |
| 192 | sim-n-io_h = $(srcdir)/../common/sim-n-io.h |
| 193 | |
| 194 | # FIXME: If this complicated way of building .o files from ../common is |
| 195 | # necessary, the reason should be documented here! |
| 196 | |
| 197 | BUILT_SRC_FROM_COMMON= \ |
| 198 | sim-endian.c \ |
| 199 | sim-inline.c \ |
| 200 | sim-bits.c \ |
| 201 | sim-events.c \ |
| 202 | sim-core.c \ |
| 203 | sim-config.c \ |
| 204 | sim-io.c |
| 205 | |
| 206 | sim-bits.o: sim-bits.c $(sim-bits_h) $(sim-n-bits_h) $(sim-assert_h) \ |
| 207 | $(SIM_EXTRA_DEPS) |
| 208 | sim-bits.c: $(srcdir)/../common/sim-bits.c |
| 209 | rm -f $@ tmp-$@ |
| 210 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 211 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 212 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 213 | |
| 214 | sim-config.o: sim-config.c $(sim-config_h) $(sim-nconfig_h) $(sim-assert_h) \ |
| 215 | $(SIM_EXTRA_DEPS) |
| 216 | sim-config.c: $(srcdir)/../common/sim-config.c |
| 217 | rm -f $@ tmp-$@ |
| 218 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 219 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 220 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 221 | |
| 222 | sim-core.o: sim-core.c $(sim-core_h) $(sim-n-core_h) \ |
| 223 | $(SIM_EXTRA_DEPS) |
| 224 | sim-core.c: $(srcdir)/../common/sim-core.c |
| 225 | rm -f $@ tmp-$@ |
| 226 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 227 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 228 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 229 | |
| 230 | sim-endian.o: sim-endian.c $(sim-endian_h) $(sim-n-endian_h) $(sim-assert_h) \ |
| 231 | $(SIM_EXTRA_DEPS) |
| 232 | sim-endian.c: $(srcdir)/../common/sim-endian.c |
| 233 | rm -f $@ tmp-$@ |
| 234 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 235 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 236 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 237 | |
| 238 | sim-events.o: sim-events.c $(sim-events_h) $(sim-assert_h) \ |
| 239 | $(SIM_EXTRA_DEPS) |
| 240 | sim-events.c: $(srcdir)/../common/sim-events.c |
| 241 | rm -f $@ tmp-$@ |
| 242 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 243 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 244 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 245 | |
| 246 | sim-inline.c: $(srcdir)/../common/sim-inline.c |
| 247 | rm -f $@ tmp-$@ |
| 248 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 249 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 250 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 251 | |
| 252 | sim-io.o: sim-io.c $(sim_main_headers) $(sim-io_h) $(sim-assert_h) \ |
| 253 | $(SIM_EXTRA_DEPS) |
| 254 | sim-io.c: $(srcdir)/../common/sim-io.c |
| 255 | rm -f $@ tmp-$@ |
| 256 | echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@ |
| 257 | cat $(srcdir)/../common/$@ >> tmp-$@ |
| 258 | $(srcdir)/../../move-if-change tmp-$@ $@ |
| 259 | |
| 260 | sim-options.o: $(srcdir)/../common/sim-options.c $(sim_main_headers) \ |
| 261 | $(srcdir)/../common/sim-options.h |
| 262 | $(CC) -c $(srcdir)/../common/sim-options.c $(ALL_CFLAGS) |
| 263 | |
| 264 | sim-trace.o: $(srcdir)/../common/sim-trace.c $(sim_main_headers) \ |
| 265 | $(srcdir)/../common/sim-io.h |
| 266 | $(CC) -c $(srcdir)/../common/sim-trace.c $(ALL_CFLAGS) |
| 267 | |
| 268 | sim-utils.o: $(srcdir)/../common/sim-utils.c $(sim_main_headers) \ |
| 269 | $(SIM_EXTRA_DEPS) |
| 270 | $(CC) -c $(srcdir)/../common/sim-utils.c $(ALL_CFLAGS) |
| 271 | |
| 272 | sim-load.o: $(srcdir)/../common/sim-load.c |
| 273 | $(CC) -c $(srcdir)/../common/sim-load.c $(ALL_CFLAGS) |
| 274 | |
| 275 | nrun.o: $(srcdir)/../common/nrun.c config.h tconfig.h \ |
| 276 | $(srcroot)/include/callback.h $(sim_main_headers) |
| 277 | $(CC) -c $(srcdir)/../common/nrun.c $(ALL_CFLAGS) |
| 278 | |
| 279 | install: install-common $(SIM_EXTRA_INSTALL) |
| 280 | |
| 281 | install-common: installdirs |
| 282 | n=`echo run | sed '$(program_transform_name)'`; \ |
| 283 | $(INSTALL_PROGRAM) run $(bindir)/$$n |
| 284 | |
| 285 | installdirs: |
| 286 | $(SHELL) $(srcdir)/../../mkinstalldirs $(bindir) |
| 287 | |
| 288 | check: |
| 289 | |
| 290 | info: |
| 291 | clean-info: |
| 292 | install-info: |
| 293 | |
| 294 | .NOEXPORT: |
| 295 | MAKEOVERRIDES= |
| 296 | |
| 297 | tags etags: TAGS |
| 298 | |
| 299 | TAGS: force |
| 300 | etags *.c *.h |
| 301 | |
| 302 | clean: $(SIM_EXTRA_CLEAN) |
| 303 | rm -f *.[oa] *~ core |
| 304 | rm -f run libsim.a |
| 305 | rm -f gentmap targ-map.c targ-vals.h |
| 306 | rm -f $(BUILT_SRC_FROM_COMMON) |
| 307 | |
| 308 | distclean mostlyclean maintainer-clean realclean: clean |
| 309 | rm -f TAGS |
| 310 | rm -f Makefile config.cache config.log config.status |
| 311 | rm -f tconfig.h config.h stamp-h |
| 312 | |
| 313 | .c.o: |
| 314 | $(CC) -c $(ALL_CFLAGS) $< |
| 315 | |
| 316 | # Dummy target to force execution of dependent targets. |
| 317 | force: |
| 318 | |
| 319 | Makefile: Makefile.in $(srcdir)/../common/Make-common.in config.status |
| 320 | CONFIG_HEADERS= $(SHELL) ./config.status |
| 321 | |
| 322 | config.status: configure |
| 323 | $(SHELL) ./config.status --recheck |
| 324 | |
| 325 | config.h: stamp-h ; @true |
| 326 | stamp-h: config.in config.status |
| 327 | CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status |
| 328 | |
| 329 | ## End COMMON_POST_CONFIG_FRAG |