Commit Graph

207 Commits

Author SHA1 Message Date
Filippo Valsorda a54eb56f33 Use CURDIR instead of PWD
PWD is set by the shell, not make, and might not match.

For example, this broke the build through Homebrew, because
PWD stays at the directory where brew is ran.
2020-03-07 20:53:13 -05:00
Rich Felker aacd84ed2c update cowpatch from upstream to fix regression on bash
upstream commit 1db812b0ca94d07ede9891883484f2a76dae8e23
2020-02-24 21:57:15 -05:00
Rich Felker 75e6c618ad add musl 1.2.0 and make it default 2020-02-21 23:52:34 -05:00
Rich Felker a69bac0464 use new cowpatch -I command rather than open-coding same thing in Makefile 2020-02-17 15:10:44 -05:00
Rich Felker 6b7083fa6a update cowpatch.sh from upstream
upstream commit b3a885f71ce31dff0c60dab6f5b6cb5ded4c9fb4
2020-02-17 15:08:10 -05:00
Rich Felker b49456e19a fix gcc 8+ static pie patches to make -static-pie pass -static to ld
previously this was missed because there's target-specific spec magic
for a few targets to do it, but many including arm don't have it.
without this, use of -static-pie produces broken binaries which lack
an interpreter but link to shared libraries on the targets affected.

use of -static -pie (preferred form) is not affected. gcc versions
prior to 8.x did not have -static-pie (because there was no upstream
static pie support) so this patch is only needed for 8+, and only to
prevent breakage if someone uses the -static-pie option instead of
-static with -pie.
2020-02-10 12:18:24 -05:00
Rich Felker d7f31bde7e pass --disable-assembly to gcc configure, for gmp
gmp does not build correctly with compilers that default to emitting
PIE/PIC, due to custom-preprocessed asm source files which have wrong
logic for determining if PIC-compatibility is needed. ideally this
would be patched in gmp, but I don't know how to do that, so for the
time being, just disable the asm.
2020-02-03 14:27:19 -05:00
Rich Felker 97b7d13f65 force cross compiler/cross compiling
now that config.guess knows how to detect musl, it's possible when
building on a musl-based system that $build will spuriously match
$target, preventing the desired behavior of building as a cross
compiler or as a cross-compiled native compiler.

run config.guess and config.sub from the litecross makefile to check
if $build is going to match $target, and if so, append junk to the
libc/abi part of the $build tuple so that it no longer matches.
2020-02-03 01:09:08 -05:00
Rich Felker 463cd3e669 pass --disable-bootstrap to gcc
this should be a nop since we're either building a cross compiler or
cross compiling, but due to recent gcc's config.guess detecting musl,
it's possible to spuriously get $build=$host=$target, and then the
dreaded bootstrap procedure runs and breaks the output.
2020-02-03 01:07:22 -05:00
Rich Felker 03b296f811 fix missing exec permissions on replaced config.sub 2020-02-02 23:35:52 -05:00
Rich Felker b3970874c3 add some more things you can turn off to config.mak.dist examples 2020-02-02 21:24:08 -05:00
Rich Felker a00f88f20e clarify that --enable-languages=c,c++ is default in config.mak.dist 2020-02-02 21:21:18 -05:00
Rich Felker 2954bf4b6d remove --disable-multilib from config.mak.dist example
this is now mandatory and always passed to configure
2020-02-02 21:19:25 -05:00
Rich Felker 59d9dff00c improve patch dependency rules
approach in commit 8a92c5230c only
worked for the "current version" of the packages configured with
GCC_VER, etc. now, all versions have proper dependencies so that it's
possible to test applicability of new patches just by running make
with the directory name.
2020-01-31 16:53:24 -05:00
Rich Felker 9515af5143 add binutils patches for pr22269
needed to fix static pie linking bugs on arm.
2020-01-31 16:33:42 -05:00
Rich Felker 3cfbdabfd6 add asound uapi patches for linux 4.19.90, headers-4.19.88
these are needed for time64 compatibility, and are backported from the
y2038-endgame kernel branch and squashed with non-uapi changes
removed.

with just these patches applied the kernel will not build since
changes at the source level are also needed. but it is not practical
to backport source changes to an old kernel, and even if it were, it
would not make sense to include irrelevant changes that need rebasing
in a patchset intended only for the purpose of uapi header
installation.
2020-01-30 22:11:51 -05:00
Rich Felker 6a73704be3 re-add archscripts removal patch for linux 4.19.90
forward-ported from the now-removed 4.4.10 patch, needed to fix #8,
spurious dependency on host elf.h header. I checked x86 and mips which
seem to be the only archs with archscripts rules, and these rules have
nothing to do with building headers, so omitting them should still be
safe.
2020-01-30 22:09:15 -05:00
Rich Felker 1645ae3476 remove support for old linux headers
these can no longer be supported since they are incompatible with
time64.
2020-01-30 22:08:34 -05:00
Rich Felker 19568178bd fix wrong ac_cv_prog_lex_root value
the value should only be the root, not including the .c suffix. as
noted in commit 2d0015f547 which added
this, the result is not actually used, so it doesn't matter that it's
wrong, but the wrong value produces spurious error output in configure
logs.
2020-01-29 23:06:02 -05:00
Rich Felker 03d6d755c7 add patch fixing gcc pr93402 (wrong codegen)
affects all gcc versions 6.x and later. same patch works for all.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93402
2020-01-23 19:38:39 -05:00
Rich Felker de5dc219d8 add safety in make rules involving rm -rf
error out if there are any slashes in the name that will later be
passed to rm -rf since these are implicit rules and could
theoretically get instantiated in unintended ways.
2020-01-23 13:22:12 -05:00
Rich Felker eb979cc08b remove old patched source dir before trying to rename new one over it 2020-01-23 13:18:17 -05:00
Rich Felker 1be04b50ec move config.sub dependency to patched source trees instead of orig ones
this was overlooked when cowpatch was introduced.
2020-01-22 17:26:56 -05:00
Rich Felker 8a92c5230c add dependencies on patches for patched/patchable source trees 2020-01-22 17:25:53 -05:00
Travis Cross a226f5f416 Fix initialization of CoW source trees
As part of creating a CoW source tree, we symlink all top-level paths
from the original directory.  In commit ebf93035c, we removed a shell
glob used for this and replaced it with an invocation of `find`.

However, our invocation of `find ... -exec sh -c '... $@ ...' {} \+`
is causing the first path in every directory to be skipped, breaking
the build.  This is because arguments to `sh -c ...` begin with the
zeroth argument, while `$@` only returns the first argument onward.

Let's fix this by providing an explicit zeroth argument to `sh -c`.
2020-01-22 15:49:28 -05:00
Rich Felker 1e4e952ed2 bump default gcc version to 9.2.0 2020-01-22 01:13:14 -05:00
Rich Felker 8adcc4bec7 bump default binutils version to 2.33.1 2020-01-22 00:03:07 -05:00
Rich Felker 3d26f0cf02 add binutils 2.33.1
included are new or1k support patches that are not easily backported
to earlier versions.
2020-01-22 00:02:12 -05:00
Rich Felker ebf93035c6 make initialization of cow source trees robust
shell glob of ../$</* fails to catch filenames beginning with dot, and
the easy mitigations for that all produce bad results on non-match.
use find to do it robustly.
2020-01-21 23:49:56 -05:00
Rich Felker 49f489e5c6 remove support for non-latest versions in gcc 6 and 7 series 2020-01-21 19:39:04 -05:00
Rich Felker c7557051a5 integrate cowpatch for preservation of original source trees
this makes it far easier to iterate testing of patches, and sets the
stage for enforcing re-patching with makefile-level dependencies.

the pristine sources are kept in directories suffixed with ".orig",
and the unsuffixed directory now contains the result of running
cowpatch -- that is, a mix of symlinks to the original files, and
modified copies of the files/directories affected by patches.
2020-01-21 02:49:07 -05:00
Rich Felker 431a47af9e add gcc patch fixing libstdc++ futex use for time64 compatibility
this is not the cleanest fix but should at least make it non-broken.
2020-01-21 00:07:40 -05:00
Travis Cross 33fb24c113 Add license file and copyright notes
After discussion with Rich Felker and other contributors, it's clear
that we want to license this project under the MIT/Expat license.
However, we need to be clear that we're not claiming to license the
binary artifacts, as those retain the licenses of the upstream
projects.  Similarly, the patches, to the extent that there is any
copyright interest in them at all, retain the licenses from the
upstream projects.

We've added language in the README and in a new `COPYRIGHT` file to
make all of this clear.

Ref: #25 #30 #80
2020-01-19 17:09:33 -05:00
Rich Felker c9d96aeae7 work around gcc libstdc++ time64 incompatibility
with the default --enable-libstdcxx-time, libstdc++'s configure probes
for the existence of a clock_gettime syscall and sets up the time API
implementation to make direct syscalls, presumably as a workaround for
old glibc tucking away the clock_gettime function in librt, which in
turn depends on libpthread. this breaks since struct timespec does not
match the syscall's interface on 32-bit archs.

passing --enable-libstdcxx-time=rt forces different configure paths
that correctly use the public clock_gettime function and librt if
needed.

this issue should be patched in gcc rather than worked around via
configure options, but I'd rather wait to patch until I understand how
to fix it correctly and produce a patch that's acceptable to upstream
and distros.
2020-01-19 12:40:04 -05:00
Rich Felker 38e52db835 switch linux kernel headers to 4.19.88 by default
using slim headers-only version. this change is needed to support all
future versions of musl on 32-bit archs, since prior to 4.16 the
kernel headers had incompatibility with userspace time_t not matching
the kernel's old (32-bit) time_t. support for older headers will be
dropped entirely soon.
2019-12-18 14:29:07 -05:00
Rich Felker 5c7b663936 add support for linux 4.19 kernel headers
both 4.19.90 from official kernel tarball and 4.19.88 from the
sabotage-linux headers-only package are added. the latter should be
preferred unless you have a reason not to, as it's much smaller and
has some patches that improve interaction with musl.

support for all earlier kernel header versions will be dropped soon,
since everything prior to 4.16 has incompatibilities with 32-bit archs
moving to time64.
2019-12-18 14:23:28 -05:00
Rich Felker a6d3e6188d mention riscv64 target support in README.md 2019-11-19 13:31:33 -05:00
Rich Felker 52527c462f add patch fixing copy relocs issue on riscv
this is binutils issue 23825, but it's caused by gcc using local-exec
model rather than initial-exec model with the intent of making
binutils generate copy relocations. this is harmful, unnecessary, and
not presently supported by musl (and probably should never be). patch
taken from https://github.com/riscv/riscv-gcc/pull/118.
2019-11-19 08:50:58 -05:00
Andrew Chambers a9a3b3aee2 Remove absolute references to pwd in linux headers.
Some distributions don't have pwd at this path.
2019-11-10 20:26:27 -05:00
Rich Felker 90ecfe079b renumber latest gcc 8.3.0 patch so as not to duplicate numbering 2019-11-10 20:19:00 -05:00
Rich Felker 9e06392a64 add gcc 9.2.0 hash and patches
patches from Szabolcs Nagy's patchset, carried forward from 8.x with
minimal changes, with #0014 added from recent additions not reflected.
2019-11-10 20:13:42 -05:00
Rich Felker 6725d1e7e5 update default musl version to 1.1.24 2019-11-10 12:34:26 -05:00
Rich Felker cd7430c2ec add support for musl 1.1.23 and 1.1.24
omission at the time of releases was purely an oversight.
2019-11-10 12:33:53 -05:00
Rich Felker 02be46d639 add patches fixing ld bug linking arm tlsdesc relocs on 64-bit host
this is binutils issue #25062. without it, cross-ld crashes linking
arm programs using tlsdesc if the host is 64-bit.
2019-10-06 23:36:25 -04:00
Rich Felker 684cb17061 update arm static pie TLS relocs patch to upstream version, backport
commit c9ac08753a omitted a few changes,
resulting in spurious NONE-type relocs and possibly other problems.
update patches to match upstream fix.
2019-10-06 20:47:22 -04:00
Rich Felker c9ac08753a add binutils patch to fix broken arm LD/GD TLS relocs in static PIE
this is the same issue fixed for mips in 0004-mips-pie-tls.diff for
2.27, upstream in 2.32.
2019-10-02 10:44:20 -04:00
Rich Felker 5fd2126e13 add patches fixing broken libgcc multi-thread detection via weak refs
tested to apply successfully to all supported gcc versions except
possibly 4.2.1, for which it is not added yet.
2019-09-24 19:19:23 -04:00
rofl0r bda7102680 add support for sabotage-linux' kernel-headers tarballs
as maintained in https://github.com/sabotage-linux/kernel-headers .

downloading (and extracting) a 100+ MB kernel source tarball just for
the headers is extremely inefficient.
sabotage linux' kernel-headers tarball provides the same (including
musl compatibility fixes) in ~800 KB.

in order to use it, specify

LINUX_VER = headers-4.4.2-4

in your config.mak.

if LINUX_VER lacks the "headers-" prefix, the official source tarball
will be downloaded as usual.
2019-08-18 23:19:25 -04:00
Rich Felker d969dea983 make --disable-separate-code the default for binutils
the default is ordered such that user-provided config variables in
config.mak or on the make command line can still override it.

this is a dubious anti-ROP feature with high cost (file size, load
time, VMA count consumed per library), and historically was broken in
some binutils versions. the ones we use don't seem to be affected, but
it's better to have it off anyway.
2019-07-16 15:18:14 -04:00
Rich Felker b4a38f8ebe update default versions of gcc-dependency math libraries 2019-07-16 13:41:33 -04:00