Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
Precompiled headers were broken because they weren't compiled with
the same -fPIC setting as the rest of the code. Fix by just making
everything use -fPIC.
|
|
|
|
Resolves #549
|
|
|
|
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
|
|
Before this patch, I don't think it was possible to change (say)
CFLAGS as part of running the make command. Nor did setting them when
running configure do anything. Getting this right is a little fiddly:
for example, see Automake's approach at [1] ("AM_CFLAGS" and friends).
This patch adds an "mcppbs-" prefix, and sets things up properly for
CFLAGS, CPPFLAGS, CXXFLAGS and LDFLAGS. Note that the bulk of the
patch is either the auto-generated configure script or the ax_*.m4
files vendored in from the autoconf archive (needed to handle
--export-dynamic correctly without trashing settings from the user
running configure).
What's supposed to happen is as follows:
- Base compilation flags that should apply to everything (standard
optimisation flags, warning flags etc.) are defined in
Makefile.in.
- When the user runs configure, they can set compilation flags on
the command line. These end up as environment variables in the
shell script.
- Compilation flags that can only be decided when we run
configure (this is currently just whether we support
-Wl,--export-dynamic) are appended to the configure-time LDFLAGS
environment variable.
- At the end of the configure script, these environment variables
are spliced into Makefile.in to fill out the corresponding
@<varname>@ entries.
- When running make, the user might again override compilation
flags. These will get appended to the flags found so far.
As a concrete example:
mkdir build
cd build
../configure CXXFLAGS='-O3'
make CXXFLAGS='-O0'
will result in c++ compile commands that look like this:
g++ -MMD -MP \
-DPREFIX=\"/usr/local\" -Wall -Wno-unused -g -O2 -std=c++11 \
-O3 \
-O0 \
-I. -I.. -I../fesvr -I../riscv -I../dummy_rocc -I../softfloat \
-I../spike_main -fPIC -c ../fesvr/elfloader.cc
(I've added some newlines to wrap the long line).
Note that we have the base flags from Makefile.in (called
$(default-CXXFLAGS) there) first. Then we have the -O3 from the
configure command. Finally we have the -O0 from the Make command line.
And I can finally run "make CXXFLAGS='-O0 -g3'". Phew!
[1] https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
|
|
|
|
|
|
|
vector unit tests need identical floating library to generate golden
pattern
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
|
|
so can be built for one place and installed in another
|
|
|
|
|
|
|
|
|
|
Several people have raised the concern that dynamically linking the
built-in components of Spike causes more headaches than it's worth.
IIRC, the only reason we did this is to better support the
`--extension=libfoo.so` feature.
|
|
This has a tendency to blow up on other platforms.
|
|
Currently the DESTDIR variable is not used correctly which leads to
bogus RUNPATH entries.
https://www.gnu.org/prep/standards/html_node/DESTDIR.html
|
|
It seems that g++ 5.4 doesn't realize that it is building a precompiled
header unless you pass it -x c++-header.
|
|
They live in riscv-tests/debug now, since they also test gdb, and can be
used to test other targets besides spike.
|
|
|
|
|
|
|
|
|
|
It's not really a smoketest anymore.
|
|
The code compiles cleanly right now. Let's keep it that way.
|
|
|
|
|
|
The existing stuff all assumes you're writing your tests in C++.
|
|
|
|
Run it yourself if you modify configure.ac, and commit the configure script.
|
|
The actual Spike package consists of a whole bunch of libraries. This
installs a pkg-config file for each generated library, and a meta
pkg-config file (riscv-spike.pc) that links in all the other Spike
libraries except dummy_rocc (which I figure isn't interesting).
This allows me to package and install spike, and then use that package
to build an extension library (so I don't have to fork Spike for my
own ISA extension).
|
|
DESTDIR is a common make idiom. As per the GNU coding standards
https://www.gnu.org/prep/standards/html_node/DESTDIR.html
"DESTDIR is a variable prepended to each installed target file, like
this:
$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
The DESTDIR variable is specified by the user on the make command
line as an absolute file name. For example:
make DESTDIR=/tmp/stage install
DESTDIR should be supported only in the install* and uninstall*
targets, as those are the only targets where it is useful.
If your installation step would normally install /usr/local/bin/foo
and /usr/local/lib/libfoo.a, then an installation invoked as in the
example above would install /tmp/stage/usr/local/bin/foo and
/tmp/stage/usr/local/lib/libfoo.a instead."
The current Makefile.in uses DESTDIR, but has a slightly non-standard
behavior: the target install location doesn't include "$prefix". This
breaks package managers, because stuff ends up getting installed to
the wrong location.
Unfortunately the only way I can think of to fix this involves
silently changing the behavior of DESTDIR. Hopefully nobody is using
it...?
[port of 8a2088b59162fe16c16d26ddc1cfcaaaa8c4156f in riscv-fesvr]
|
|
|
|
|
|
|
|
In particular, precompiled headers ideally won't depend on any.
|
|
|
|
This manifested as a spurious compile warning when using make -j.
|
|
on os x, clang needs different flags than gcc to generate and use precompiled headers
|
|
|
|
|
|
|
|
|
|
|
|
We now use a heavily unrolled loop as the software I$, which allows the
host machine's branch target prediction to associate target PCs with
unique-ish host PCs.
|
|
|
|
|
|
|