Commit graph

302 commits

Author SHA1 Message Date
Mike Frysinger
a449d2c294 sim: mips: add igen recursive dep
Make sure the igen tool exists before trying to compile the mips
subdir.  This happens to work when mips has a subconfigure, but
hits a race condition when that is removed.
2022-12-24 21:39:09 -05:00
Mike Frysinger
3bef0f032c sim: igen: drop move-if-changed usage
Now that igen itself has this logic, drop these custom build rules
to greatly simplify.
2022-12-24 21:35:54 -05:00
Mike Frysinger
d455df988a sim: mips: move fpu bitsize defines to top-level configure
This drops support for the --enable-sim-float configure option,
but it's not clear anyone ever actually used that.  Eventually
we'll want this to be a runtime option anyways.
2022-12-21 22:27:12 -05:00
Mike Frysinger
19b11256a5 sim: mips: move bitsize defines to top-level configure
Since the msb value is always defined as the wordsize-1, stop
hardcoding that value directly, and use a CPP value instead.
2022-12-21 22:27:12 -05:00
Mike Frysinger
2d5700ad4e sim: mips: move subtarget defines to top-level configure
We want to kill off mips/configure entirely.  Move this small part
out now to get started.
2022-12-21 22:27:11 -05:00
Mike Frysinger
f4ac230605 sim: hw-config.h: move generation to top-level
In order to compile arch objects from the top-level, we need to
generate the hw-config.h header, so move that logic up to the top
level first.
2022-12-21 22:21:25 -05:00
Mike Frysinger
3d04211786 sim: build: hoist lists of hw devices up
We need these in the top-level to generate libsim.a, but also in the
subdirs to generate hw-config.h.  Move it to the local.mk, and pass
it down when running recursive make.  This avoids duplication, and
makes it available to both.  We can simplify this once we move the
various steps up to the top-level too.
2022-12-21 22:21:25 -05:00
Mike Frysinger
d47ea1b9c1 sim: build: hoist lists of common objects up
In order to create libsim.a in the common dir, we need the list of
objects for each target.  To avoid duplicating the list with the
recursive make in each port, pass it down as a variable.  This is
a temporary hack until the top-level creates libsim.a for ports.
2022-12-21 22:21:25 -05:00
Mike Frysinger
ee3314c436 sim: ppc: move spreg.[ch] files to the source tree
Simplify the build by moving the generation of these files from
build-time (via dgen.c that we have to compile & execute on the
build system) to maintainer/release mode (via spreg-gen.py that
we only ever execute when the spreg table actually changes).  It
speeds up the build process and makes it easier for us to reason
about & review changes to the code generator.

The tool is renamed from "dgen" because it's hardcoded to only
generated spreg files.  It isn't a generalized tool for creating
lookup tables.
2022-12-20 21:05:43 -05:00
Mike Frysinger
897fc27b25 sim: v850: rename v850.dc to align with other ports
Other arches use the .dc extension for the instruction decode table.
2022-11-11 01:42:29 +07:00
Mike Frysinger
871aa3b9ee sim: v850: drop subdir configure logic
We've been using this only to set the default word size to 32.  We
can easily move this into the makefile via a -D compiler flag and
clean up the build logic quite a bit.
2022-11-07 23:26:07 +07:00
Mike Frysinger
4cf83930c1 sim: mn10300: drop subdir configure logic
We've been using this only to set the default word size to 32.  We
can easily move this into the makefile via a -D compiler flag and
clean up the build logic quite a bit.
2022-11-07 23:25:48 +07:00
Mike Frysinger
763b20abcb sim: or1k: drop subdir configure logic
We've been using this only to set the default word size to 32.  We
can easily move this into the makefile via a -D compiler flag and
clean up the build logic quite a bit.
2022-11-07 23:25:27 +07:00
Mike Frysinger
ee79c7df30 sim: bpf: drop subdir configure logic
We've been using this only to set the default word size to 64.  We
can easily move this into the makefile via a -D compiler flag and
clean up the build logic quite a bit.
2022-11-07 23:25:01 +07:00
Mike Frysinger
1787fcc45a sim: riscv: drop subdir configure logic
We've been using this only to set the default word size to 32-vs-64
based on the $target.  We can easily merge this with the top-level
configure script to clean things up a bit.
2022-11-07 23:24:46 +07:00
Mike Frysinger
23912acd40 sim: .gdbinit: generate for all arch subdirs
This was being skipped for ports that had a recursive configure,
but we want it for them too.
2022-11-07 21:52:47 +07:00
Mike Frysinger
2ba09f42f1 sim: build: add a proper var for enabled arches
The install code was using $SUBDIRS to track all enabled arches.  This
works, but isn't great if we want to add a subdir that isn't an arch
port, or as we merge the subdirs into the top-level.  Create a new var
explicitly to track the list of enabled arches instead.
2022-11-07 21:51:11 +07:00
Mike Frysinger
93e0ec910a sim: build: respect AM_MAKEFLAGS when entering subdirs
This doesn't matter right now, but it will as we add more flags to
the recursive make step to pass state down.
2022-11-06 21:48:42 +07:00
Mike Frysinger
1e5482d568 sim: build: stop passing down SIM_PRIMARY_TARGET
This was needed when the install step was run in subdirs, but now
that we process that entirely in the top-level, we don't need to
pass this down, so drop it.
2022-11-06 21:44:58 +07:00
Mike Frysinger
c95bd9111e sim: use libtool to install programs
Now that we use libtool to link, we have to use it to install instead
of keeping the manual logic so we don't install wrapper shell scripts.
2022-11-05 20:28:14 +07:00
Mike Frysinger
e5f7bc2935 sim: bfin: move linux-fixed-code.h to top-level 2022-11-05 20:02:15 +07:00
Mike Frysinger
c0c25232da sim: run: move linking into top-level
Automake will run each subdir individually before moving on to the next
one.  This means that the linking phase, a single threaded process, will
not run in parallel with anything else.  When we have to link ~32 ports,
that's 32 link steps that don't take advantage of parallel systems.  On
my really old 4-core system, this cuts a multi-target build from ~60 sec
to ~30 sec.  We eventually want to move all compile+link steps to this
common dir anyways, so might as well move linking now for a nice speedup.

We use noinst_PROGRAMS instead of bin_PROGRAMS because we're taking care
of the install ourselves rather than letting automake process it.
2022-11-05 20:00:56 +07:00
Mike Frysinger
59d8576e4f sim: build: add uninstall support
This never worked before, but adding it to the common top-level dir
is pretty easy to do now that we're unified.
2022-11-05 16:26:15 +07:00
Mike Frysinger
63bf33ff90 sim: build: move install steps to the top-level
We still have to maintain custom install rules due to how we rename
arch-specific files with an arch prefix in their name, but we can at
least unify the logic in the common dir.
2022-11-05 16:26:08 +07:00
Mike Frysinger
cb9bdc02fd sim: cris: move rvdummy linking to top-level
This is only used by `make check`, so we can move it out of the
default build too.
2022-11-05 11:22:38 +07:00
Mike Frysinger
bfc96c1039 sim: build: add SIM_HW_CFLAGS to top-level build too
This matches what we do with targets already.
2022-11-05 10:33:37 +07:00
Mike Frysinger
682a2a82e4 sim: adjust sim_hw options style
We use uppercase for other variables, and are already turning it to
uppercase in the arch-subdir.mk, so convert it in the configure step.
2022-11-05 10:23:28 +07:00
Mike Frysinger
89cf99a910 sim: build: switch to bfd & opcodes libtool linker scripts
Now that we use libtool to link, we don't need to duplicate all the
libs that bfd itself uses.  This simplifies the configure & Makefile.
2022-11-04 07:42:31 +07:00
Mike Frysinger
a1af8f405c sim: move common flags to default AM_CPPFLAGS
Since all host files we compile use these settings, move them out of
libcommon.a and into the default AM_CPPFLAGS.  This has the effect of
dropping the custom per-target automake rules.  Currently it saves us
~150 lines, but since it's about ~8 lines per object, the overhead
will increase quite a bit as we merge more files into a single build.

This also changes the object output names, so we have to tweak the
rules that were pulling in the common objects when linking.
2022-11-03 12:55:19 +05:45
Mike Frysinger
46a1e1f20b sim: merge gnulib logic into the top-level
We aren't using this just yet, but we will, so make it available to
building of common sim files.
2022-11-03 12:53:49 +05:45
Mike Frysinger
fde7c6bf64 sim: split CPPFLAGS between build & host
In order to merge more common/ files into the top-level, we need to
add more host flags to CPPFLAGS, and that conflicts with our current
use with build-time tools.  So split them apart like we do with all
other build flags to avoid the issue.
2022-11-02 20:59:14 +05:45
Mike Frysinger
8f97b519fb sim: testsuite: improve parallel test processing
The current logic limits itself to a maxdepth of 4 when looking for
results.  This wouldn't be a problem if cris didn't have a testsuite
at a depth of 5 which we end up ignoring when summarizing.  Rather
than bump the number from 4 to 5, rework the code so that we gather
the exact set of tests that we tried to run.
2022-10-26 14:38:44 +05:45
Mike Frysinger
e60091e4d3 sim: testsuite: update ignored .exp files [PR sim/29596]
Now that we run `check/foo.exp` instead of `check/./foo.exp`,
update the config/ & lib/ exceptions to cover both paths.

Bug: https://sourceware.org/PR29596
2022-10-24 01:28:15 +05:45
Mike Frysinger
86ef36f655 sim: testsuite: tweak parallel find invocation [PR sim/29596]
Make sure we invoke runtest with the same exp filenames when running in
parallel as it will find when run single threaded.  When `runtest` finds
files itself, it will use paths like "aarch64/allinsn.exp".  When we run
`find .` with the %p option, it produces "./aarch64/allinsn.exp".  Switch
to %P to get "aarch64/allinsn.exp".

Bug: https://sourceware.org/PR29596
2022-10-24 00:58:49 +05:45
Tsukasa OI
d2d69057a2 sim/moxie: add custom directory stamp rule
Because sim/moxie/moxie-gdb.dtb is neither a program nor a library, automake
does not generate dirstamp file ($builddir/sim/moxie/.dirstamp) for it.

When maintainer mode is enabled, it tries to rebuild sim/moxie/moxie-gdb.dtb
but fails because there's no rules for automake-generated dirstamp file
which moxie-gdb.dtb depends.

This commit adds its own rule for the directory stamp (modified copy of the
automake output) and adds the directory stamp file to DISTCLEANFILES to
mimic automake-generated behavior (although "make distclean" does not work
when maintainer mode is enabled).
2022-10-11 11:22:14 +01:00
Fangrui Song
382fa97ce0 sim: Link ZSTD_LIBS
This fixes linker errors in a `../../configure --enable-targets
--enable-sim; make all-gdb` build.
2022-09-27 11:42:32 -07:00
Mike Frysinger
7cd7b0641b sim: add arch/.gdbinit stub scripts
Make it easy to load the common gdbinit script even when running in
the arch/ subdir instead of the top-level sim dir.
2022-03-28 23:10:34 -04:00
Mike Frysinger
216722984f sim: gdbinit: hoist setup to common code
This was left in subdirs because of the dynamic cgen usage.  However,
we can move this breakpoint call to runtime and let gdb detect whether
the symbol exists.
2022-02-21 13:57:33 -05:00
Hans-Peter Nilsson
dc4e1fde36 sim: Fix use of out-of-tree assembler and linker when testing
With commit 7a259895bb "sim: testsuite: expand arch specific
toolchain settings", trying to use out-of-tree ld and as at test-time
broke for the "primary target", like when testing a release-tarball.

Subsequent to that commit, all assembler tests without in-tree-built
tools FAIL, getting errors when trying to call
$(abs_builddir)/../gas/as-new.  But, that isn't the actual culprint;
it's actually it's its immediate predecessor, commit 8996c21067
"sim: testsuite: setup per-port toolchain settings for multitarget
build", which hardcodes in-tree-paths to those tools instead of
considering e.g. $(<X>_FOR_TARGET), the preferred overridable variable
for single-target builds, as set up by the toplevel Makefile.

This commit calls GCC_TARGET_TOOL (a deceptive name; gcc-specific
features aren't used) from toplev/config/acx.m4, somewhat like calls
in toplev/configure.ac but without the NCN_STRICT_CHECK_TARGET_TOOLS
step, for each X to find a value for $(<X>_FOR_TARGET).  N.B.: in-tree
tools still override any ${target}-${tool} found in $PATH, i.e. only
previously broken builds are affected.

The variables $(<X>_FOR_TARGET) are usually overridden by the toplevel
Makefile to the same value or better, but has to be set here too, as
automake "wants" Makefiles to be self-contained (you get an error
pointing out that the variable may be empty).  If it hadn't been for
that, SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET would not be needed.
This detail should only (positively) affect users invoking "make
check" in sim/ instead of "make check-sim" (or "make check") at the
toplevel.  Now the output from "configure" matches the target tools
actually used by sim at test-time, for the "primary target".

Using $(CC) for "example-" targets CC_FOR_TARGET is not changed, as
that appears to be a deliberate special-case.

Note that all tools still have to be installed and present in
$PATH at configure-time to be properly used at test-time.

sim:
	* m4/sim_ac_toolchain.m4 (SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET):
	New defun.
	(SIM_TOOLCHAIN_VARS): Call it using AC_REQUIRE, and use variables
	AS_FOR_TARGET, LD_FOR_TARGET and CC_FOR_TARGET instead of hard-coded
	values.
	* Makefile.in, configure: Regenerate.
2022-02-14 23:51:07 +01:00
Joel Brobecker
4a94e36819 Automatic Copyright Year update after running gdb/copyright.py
This commit brings all the changes made by running gdb/copyright.py
as per GDB's Start of New Year Procedure.

For the avoidance of doubt, all changes in this commits were
performed by the script.
2022-01-01 19:13:23 +04:00
Mike Frysinger
de8a2781a5 sim: use ## for automake comments
The ## marker tells automake to not include the comment in its
generated output, so use that in most places where the comment
only makes sense in the inputs.
2021-12-09 01:40:28 -05:00
Mike Frysinger
94f5dfed74 sim: moxie: hoist dtb rules up to common builds
These rules don't depend on the target compiler settings, so hoist
the build logic up to the common builds for better parallelization.
2021-12-04 13:55:13 -05:00
Mike Frysinger
804de1faf4 sim: testsuite: support parallel execution
Break up the dejagnu logic so that we can parallelize the testsuite.
This takes a page from gcc & gdb where each .exp is run in isolation
instead of in serial.

For most targets, this doesn't make much of a difference as they only
have a single .exp.  A few (like cris & frv) have multiple .exp though
and will see a bit of a speed up.

The real gain is when testing a multitarget build.  This way we can
run all the targets in parallel and cut the execution time a bit.
On my system, it goes from ~155sec to ~100sec.

We can gain further speedups by splitting up some of the larger .exp
files into smaller groups.  We'll do that in a followup though.
2021-11-28 21:55:15 -05:00
Mike Frysinger
7a259895bb sim: testsuite: expand arch specific toolchain settings
Leverage the new per-port toolchain settings to initialize the env
for eeach set of tests.  This allows us to run all the tests in a
multitarget build if the user sets up the vars.  If they don't, we
can still skip all the tests.
2021-11-28 21:55:15 -05:00
Mike Frysinger
8996c21067 sim: testsuite: setup per-port toolchain settings for multitarget build
Gas does not support multitarget builds -- it still only supports
a single input & output format.  ld is a bit better, but requires
manual flags to select the right output.  This makes it impossible
to run the complete testsuite in a multitarget build.

To address this limitation, create a suite of FOR_TARGET variables
so these can be set to precompiled as & ld programs.  It requires
a bit of setup ahead of time, but it's a one-time cost, and makes
running the full testsuite at once much easier.
2021-11-28 21:55:15 -05:00
Mike Frysinger
6688220490 sim: unify syscall.o building
Now that we've unified all the syscall tables, this file does not rely
on any port-specific settings, so move it up to building as part of the
common step so we only do it once in a multibuild.
2021-11-28 13:24:04 -05:00
Mike Frysinger
64ae70dde5 sim: nltvals: pull target syscalls out into a dedicated source file
Like we just did for pulling out the errno map, pull out the syscall
maps into a dedicated common file.  Most newlib ports are using the
same syscall map, but not all, which means we have to do a bit more
work to migrate.

This commit adds the maps and switches the ports using the common
default syscall table over to it.  Ports using unique syscall tables
are still using the old targ-map.c logic.

Switching common ports over is easy by checking NL_TARGET, but the
ppc code needs a bit more cleanup here hence its larger diff.
2021-11-28 13:23:57 -05:00
Mike Frysinger
429a55b865 sim: testsuite: fix bits-gen EXEEXT handling
Add missing $(EXEEXT) to dependencies on bits-gen.  These are actually
build-only tools, but automake doesn't allow for build & host tools, so
the rules are re-using EXEEXT.
2021-11-26 20:41:44 -05:00
Mike Frysinger
e1e1ae6e9b sim: testsuite: fix objdir handling
The tests assume that the cwd is the objdir directory and write its
intermediates to there all the time.  When using runtest's --objdir
setting though, this puts the files in the wrong place.  This isn't
a big problem currently as we never change --objdir, but in order to
support parallel test execution, we're going to start setting that
option, so clean up the code ahead of time.

We also have to tweak some of the cris tests which were making
assumptions about the argv[0] value.
2021-11-26 19:27:21 -05:00
Mike Frysinger
ed939535e2 sim: install various doc files 2021-11-19 03:36:45 -05:00