| Commit message (Collapse) | Author | Age |
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
I am not interested in maintaining packages for Python < 3.7.
|
|
|
|
| |
This avoids an infinite recursion, accidentally introduced in b7ff7465401257e9b0814bb68937a494c58de538.
|
|\
| |
| | |
python3Minimal: disable optimizations
|
| |
| |
| |
| | |
No point for the bootstrapping.
|
| |
| |
| |
| |
| |
| | |
ofborg does not like fetching patches when the derivation is used during bootstrapping.
This reverts commit 480c8d199166b2f8cd20e6e245d8a019329ec466.
|
|\ \
| | |
| | |
| | | |
...for rust-packages (into staging)
|
| | |
| | |
| | |
| | |
| | | |
Co-authored-by: cole-h <cole.e.helbling@outlook.com>
Co-authored-by: asymmetric <lorenzo@mailbox.org>
|
| | |
| | |
| | |
| | | |
See also https://discourse.nixos.org/t/rust-build-speed-improvements/7225
|
| | |
| | |
| | |
| | | |
Needed since we store artifacts in `target/<arch>/<profile>`.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When running the default builder for Rust, the artifacts would be stored
in `target/<arch>/<profile>`, however the `install`-target expects the
default structure (`target/<profile>`) of `cargo`-builds.
When using the Makefile for building as well, the expected structure is
created instead.
|
| | |
| | |
| | |
| | |
| | | |
A lot of tests are using `debug_assert!` which isn't available in
release-mode.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
There are several tarballs (such as the `rust-lang/rust`-source) with a
`Cargo.toml` at root and several sub-packages (with their own Cargo.toml)
without using workspaces[1].
In such a case it's needed to move into a subdir to only build the
specified sub-package (e.g. `rustfmt` or `rsl`), however the artifacts
are at `/target` in the root-dir of the build environment. This breaks
the build since `buildRustPackage` searches for executables in `target`
(which is at the build-env's root) at the end of the `buildPhase`.
With the optional `buildAndTestSubdir`-argument, the builder moves into
the specified subdir using `pushd`/`popd` during `buildPhase` and
`checkPhase`.
Also moved the logic to find executables and libs to the end of the `buildPhase`
from a custom `postBuild`-hook to fix packages with custom `build`/`install`-procedures
such as `uutils-coreutils`.
[1] https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
|
| | | |
|
| |\ \
| | | |
| | | |
| | | | |
Hydra nixpkgs: ?compare=1586582
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
This is done by gathering all binaries to install before running the
checkPhase.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When running `cargo test --release`, the artifacts from `buildPhase`
will be reused here. Previously, most of the stuff had to be recompiled
without optimizations.
|
| |_|/
|/| |
| | |
| | | |
Needed to compile firefox 77. Taken from PR #89438.
|
|\ \ \
| | | |
| | | | |
cpython: Use optimizations, for a 25% speedup.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
I took a close look at how Debian builds the Python interpreter,
because I noticed it ran substantially faster than the one in nixpkgs
and I was curious why.
One thing that I found made a material difference in performance was
this pair of linker flags (passed to the compiler):
-Wl,-O1 -Wl,-Bsymbolic-functions
In other words, effectively the linker gets passed the flags:
-O1 -Bsymbolic-functions
Doing the same thing in nixpkgs turns out to make the interpreter
run about 6% faster, which is quite a big win for such an easy
change. So, let's apply it.
---
I had not known there was a `-O1` flag for the *linker*!
But indeed there is.
These flags are unrelated to "link-time optimization" (LTO), despite
the latter's name. LTO means doing classic compiler optimizations
on the actual code, at the linking step when it becomes possible to
do them with cross-object-file information. These two flags, by
contrast, cause the linker to make certain optimizations within the
scope of its job as the linker.
Documentation is here, though sparse:
https://sourceware.org/binutils/docs-2.31/ld/Options.html
The meaning of -O1 was explained in more detail in this LWN article:
https://lwn.net/Articles/192624/
Apparently it makes the resulting symbol table use a bigger hash
table, so the load factor is smaller and lookups are faster. Cool.
As for -Bsymbolic-functions, the documentation indicates that it's a
way of saving lookups through the symbol table entirely. There can
apparently be situations where it changes the behavior of a program,
specifically if the program relies on linker tricks to provide
customization features:
https://bugs.launchpad.net/ubuntu/+source/xfe/+bug/644645
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637184#35
But I'm pretty sure CPython doesn't permit that kind of trick: you
don't load a shared object that tries to redefine some symbol found
in the interpreter core.
The stronger reason I'm confident using -Bsymbolic-functions is
safe, though, is empirical. Both Debian and Ubuntu have been
shipping a Python built this way since forever -- it was introduced
for the Python 2.4 and 2.5 in Ubuntu "hardy", and Debian "lenny",
released in 2008 and 2009. In those 12 years they haven't seen a
need to drop this flag; and I've been unable to locate any reports
of trouble related to it, either on the Web in general or on the
Debian bug tracker. (There are reports of a handful of other
programs breaking with it, but not Python/CPython.) So that seems
like about as thorough testing as one could hope for.
---
As for the performance impact: I ran CPython upstream's preferred
benchmark suite, "pyperformance", in the same way as described in
the previous commit. On top of that commit's change, the results
across the 60 benchmarks in the suite are:
The median is 6% faster.
The middle half (aka interquartile range) is from 4% to 8% faster.
Out of 60 benchmarks, 3 come out slower, by 1-4%. At the other end,
5 are at least 10% faster, and one is 17% faster.
So, that's quite a material speedup! I don't know how big the
effect of these flags is for other software; but certainly CPython
tends to do plenty of dynamic linking, as that's how it loads
extension modules, which are ubiquitous in the stdlib as well as
popular third-party libraries. So perhaps that helps explain why
optimizing the dynamic linker has such an impact.
|
| | | |
| | | |
| | | |
| | | | |
In particular this will let us use patches that apply to configure.ac.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Without this flag, the configure script prints a warning at the end,
like this (reformatted):
If you want a release build with all stable optimizations active
(PGO, etc), please run ./configure --enable-optimizations
We're doing a build to distribute to people for day-to-day use,
doing things other than developing the Python interpreter. So
that's certainly a release build -- we're the target audience for
this recommendation.
---
And, trying it out, upstream isn't kidding! I ran the standard
benchmark suite that the CPython developers use for performance
work, "pyperformance". Following its usage instructions:
https://pyperformance.readthedocs.io/usage.html
I ran the whole suite, like so:
$ nix-shell -p ./result."$variant" --run '
cd $(mktemp -d); python -m venv venv; . venv/bin/activate
pip install pyperformance
pyperformance run -o ~/tmp/result.'"$variant"'.json
'
and then examined the results with commands like:
$ python -m pyperf compare_to --table -G \
~/tmp/result.{$before,$after}.json
Across all the benchmarks in the suite, the median speedup was 16%.
(Meaning 1.16x faster; 14% less time).
The middle half of them ranged from a 13% to a 22% speedup.
Each of the 60 benchmarks in the suite got faster, by speedups
ranging from 3% to 53%.
---
One reason this isn't just the default to begin with is that, until
recently, it made the build a lot slower. What it does is turn on
profile-guided optimization, which means first build for profiling,
then run some task to get a profile, then build again using the
profile. And, short of further customization, the task it would use
would be nearly the full test suite, which includes a lot of
expensive and slow tests, and can easily take half an hour to run.
Happily, in 2019 an upstream developer did the work to carefully
select a more appropriate set of tests to use for the profile:
https://github.com/python/cpython/commit/4e16a4a31
https://bugs.python.org/issue36044
This suite takes just 2 minutes to run. And the resulting final
build is actually slightly faster than with the much longer suite,
at least as measured by those standard "pyperformance" benchmarks.
That work went into the 3.8 release, but the same list works great
if used on older releases too.
So, start passing that --enable-optimizations flag; and backport
that good-for-PGO set of tests, so that we use it on all releases.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The ./configure script prints a warning when passed this flag,
starting with 3.7:
configure: WARNING: unrecognized options: --with-threads
The reason is that there's no longer such a thing as a build
without threads.
Eliminate the warning, by only passing the flag on the older releases
that accept it.
Upstream change and discussion:
https://github.com/python/cpython/commit/a6a4dc816
https://bugs.python.org/issue31370
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
https://www.ghostscript.com/doc/9.51/News.htm
https://www.ghostscript.com/doc/9.52/News.htm
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes https://nvd.nist.gov/vuln/detail/CVE-2020-12268
autoreconfHook was added because the build was failing on missing
install-sh.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Also:
- build from git
- enable cross compilation
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
See https://lists.gnu.org/archive/html/info-gnu/2020-05/msg00008.html
for release information
|
| | | |
| | | |
| | | |
| | | | |
https://github.com/gpg/libgpg-error/blob/libgpg-error-1.38/NEWS
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Patches from direct URLs on github are not stable (comment headers change w/
server settings), hence why we usually use `fetchpatch`. In lieu of that, vendor
the unstable patch.
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
"As usual lots of small fixes, across many utilities. Several qdisc now
have more parameters available. Devlink get most of the fixes." [0]
File changes (additions/removals):
+share/bash-completion/completions/devlink
+share/man/man8/devlink-dpipe.8.gz
+share/man/man8/tc-ct.8.gz
[0]: https://marc.info/?l=linux-netdev&m=159115579900638
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Note this also means python3Minimal is now also Python 3.8.
This reverts commit eb1369670b5a4e616ff0cf4100616479b1fa3064 and adds more.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The PR was accidentally merged into master instead of staging and thus reverted. Now, in staging, we can re-revert it.
This reverts commit 4df2f78ec72f6a8d2fe286cd34eb3acdfcac81f3.
|
|\ \ \ \ |
|
| |\ \ \ \ |
|
| | |\ \ \ \
| | | | | | |
| | | | | | | |
easyrpg-player: 0.6.1 -> 0.6.2
|
| | | | | | | |
|
| | |\ \ \ \ \
| | | | | | | |
| | | | | | | | |
wownero: 0.7.0 -> 0.8.0.0
|
| | | | | | | | |
|
| | |\ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
freerdp: 2.1.0 -> 2.1.1
|