mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 06:00:33 +03:00
Merge #211923: staging-next 2023-01-21
This commit is contained in:
commit
e4957a85c9
247 changed files with 5427 additions and 1309 deletions
|
@ -253,7 +253,7 @@ The propagated equivalent of `depsTargetTarget`. This is prefixed for the same r
|
|||
|
||||
#### `NIX_DEBUG` {#var-stdenv-NIX_DEBUG}
|
||||
|
||||
A natural number indicating how much information to log. If set to 1 or higher, `stdenv` will print moderate debugging information during the build. In particular, the `gcc` and `ld` wrapper scripts will print out the complete command line passed to the wrapped tools. If set to 6 or higher, the `stdenv` setup script will be run with `set -x` tracing. If set to 7 or higher, the `gcc` and `ld` wrapper scripts will also be run with `set -x` tracing.
|
||||
A number between 0 and 7 indicating how much information to log. If set to 1 or higher, `stdenv` will print moderate debugging information during the build. In particular, the `gcc` and `ld` wrapper scripts will print out the complete command line passed to the wrapped tools. If set to 6 or higher, the `stdenv` setup script will be run with `set -x` tracing. If set to 7 or higher, the `gcc` and `ld` wrapper scripts will also be run with `set -x` tracing.
|
||||
|
||||
### Attributes affecting build properties {#attributes-affecting-build-properties}
|
||||
|
||||
|
|
|
@ -82,8 +82,13 @@ rec {
|
|||
isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf muslabin32 muslabi64 ];
|
||||
isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
|
||||
|
||||
isEfi = map (family: { cpu.family = family; })
|
||||
[ "x86" "arm" "riscv" ];
|
||||
isEfi = [
|
||||
{ cpu = { family = "arm"; version = "6"; }; }
|
||||
{ cpu = { family = "arm"; version = "7"; }; }
|
||||
{ cpu = { family = "arm"; version = "8"; }; }
|
||||
{ cpu = { family = "riscv"; }; }
|
||||
{ cpu = { family = "x86"; }; }
|
||||
];
|
||||
};
|
||||
|
||||
matchAnyAttrs = patterns:
|
||||
|
|
|
@ -351,6 +351,12 @@
|
|||
relying on this should provide their own implementation.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Calling <literal>makeSetupHook</literal> without passing a
|
||||
<literal>name</literal> argument is deprecated.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Qt 5.12 and 5.14 have been removed, as the corresponding
|
||||
|
@ -413,6 +419,17 @@
|
|||
https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The iputils package, which is installed by default, no longer
|
||||
provides the <literal>ninfod</literal>,
|
||||
<literal>rarpd</literal> and <literal>rdisc</literal> tools.
|
||||
See
|
||||
<link xlink:href="https://github.com/iputils/iputils/releases/tag/20221126">upstream’s
|
||||
release notes</link> for more details and available
|
||||
replacements.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
<section xml:id="sec-release-23.05-notable-changes">
|
||||
|
|
|
@ -87,6 +87,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- The EC2 image module previously detected and activated swap-formatted instance store devices and partitions in stage-1 (initramfs). This behaviour has been removed. Users relying on this should provide their own implementation.
|
||||
|
||||
- Calling `makeSetupHook` without passing a `name` argument is deprecated.
|
||||
|
||||
- Qt 5.12 and 5.14 have been removed, as the corresponding branches have been EOL upstream for a long time. This affected under 10 packages in nixpkgs, largely unmaintained upstream as well, however, out-of-tree package expressions may need to be updated manually.
|
||||
|
||||
- The [services.wordpress.sites.<name>.plugins](#opt-services.wordpress.sites._name_.plugins) and [services.wordpress.sites.<name>.themes](#opt-services.wordpress.sites._name_.themes) options have been converted from sets to attribute sets to allow for consumers to specify explicit install paths via attribute name.
|
||||
|
@ -101,6 +103,11 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- .NET 5.0 was removed due to being end-of-life, use a newer, supported .NET version - https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
|
||||
|
||||
- The iputils package, which is installed by default, no longer provides the
|
||||
`ninfod`, `rarpd` and `rdisc` tools. See
|
||||
[upstream's release notes](https://github.com/iputils/iputils/releases/tag/20221126)
|
||||
for more details and available replacements.
|
||||
|
||||
## Other Notable Changes {#sec-release-23.05-notable-changes}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
|
|
@ -35,5 +35,20 @@
|
|||
}
|
||||
],
|
||||
"filter.properties": {},
|
||||
"stream.properties": {}
|
||||
"stream.properties": {},
|
||||
"alsa.properties": {},
|
||||
"alsa.rules": [
|
||||
{
|
||||
"matches": [
|
||||
{
|
||||
"application.process.binary": "resolve"
|
||||
}
|
||||
],
|
||||
"actions": {
|
||||
"update-props": {
|
||||
"alsa.buffer-bytes": 131072
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -58,6 +58,18 @@
|
|||
"node.passive": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"matches": [
|
||||
{
|
||||
"client.name": "Mixxx"
|
||||
}
|
||||
],
|
||||
"actions": {
|
||||
"update-props": {
|
||||
"jack.merge-monitor": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -71,6 +71,29 @@ in
|
|||
};
|
||||
description = lib.mdDoc "Set configuration for system-wide bluetooth (/etc/bluetooth/main.conf).";
|
||||
};
|
||||
|
||||
input = mkOption {
|
||||
type = cfgFmt.type;
|
||||
default = { };
|
||||
example = {
|
||||
General = {
|
||||
IdleTimeout = 30;
|
||||
ClassicBondedOnly = true;
|
||||
};
|
||||
};
|
||||
description = lib.mdDoc "Set configuration for the input service (/etc/bluetooth/input.conf).";
|
||||
};
|
||||
|
||||
network = mkOption {
|
||||
type = cfgFmt.type;
|
||||
default = { };
|
||||
example = {
|
||||
General = {
|
||||
DisableSecurity = true;
|
||||
};
|
||||
};
|
||||
description = lib.mdDoc "Set configuration for the network service (/etc/bluetooth/network.conf).";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -80,6 +103,10 @@ in
|
|||
environment.systemPackages = [ package ]
|
||||
++ optional cfg.hsphfpd.enable pkgs.hsphfpd;
|
||||
|
||||
environment.etc."bluetooth/input.conf".source =
|
||||
cfgFmt.generate "input.conf" cfg.input;
|
||||
environment.etc."bluetooth/network.conf".source =
|
||||
cfgFmt.generate "network.conf" cfg.network;
|
||||
environment.etc."bluetooth/main.conf".source =
|
||||
cfgFmt.generate "main.conf" (recursiveUpdate defaults cfg.settings);
|
||||
services.udev.packages = [ package ];
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "fluidsynth";
|
||||
version = "2.3.0";
|
||||
version = "2.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "FluidSynth";
|
||||
repo = "fluidsynth";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-7SuM7a8IIecAJ83QvJfUba/wArAEXywqL2HwVbeG8H4=";
|
||||
sha256 = "05lr9f0q4x1kvgfa3xrfmagpwvijv9m1s316aa9figqlkcc5vv4k";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ buildPackages.stdenv.cc pkg-config cmake ];
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
diff --git a/SConstruct b/SConstruct
|
||||
index 3ad4d9a..fb02365 100644
|
||||
--- a/SConstruct
|
||||
+++ b/SConstruct
|
||||
@@ -94,11 +94,8 @@ def CheckWiX(context):
|
||||
|
@ -16,13 +14,15 @@ index 3ad4d9a..fb02365 100644
|
|||
|
||||
def validate_spd_version(key,val,env):
|
||||
m=re.match(r"^\d+\.\d+",val)
|
||||
@@ -208,9 +205,9 @@ def create_base_env(user_vars):
|
||||
@@ -207,10 +204,10 @@ def create_base_env(user_vars):
|
||||
env_args["LIBS"]=[]
|
||||
env_args["package_name"]="RHVoice"
|
||||
env_args["CPPDEFINES"]=[("RHVOICE","1")]
|
||||
env=Environment(**env_args)
|
||||
- env=Environment(**env_args)
|
||||
- if env["dev"]:
|
||||
- env["prefix"]=os.path.abspath("local")
|
||||
- env["RPATH"]=env.Dir("$libdir").abspath
|
||||
+ env=Environment(ENV = os.environ, **env_args)
|
||||
+ env.PrependENVPath("PATH", os.environ["PATH"])
|
||||
+ env["ENV"]["PKG_CONFIG_PATH"]=os.environ["PKG_CONFIG_PATH"]
|
||||
+ env["RPATH"]=env.Dir("$libdir").abspath
|
||||
|
|
|
@ -22,26 +22,6 @@
|
|||
, zlib
|
||||
}:
|
||||
let
|
||||
libs = [
|
||||
alsa-lib
|
||||
bzip2
|
||||
fftw
|
||||
freeglut
|
||||
freetype
|
||||
glew
|
||||
libjack2
|
||||
libGL
|
||||
libGLU
|
||||
libjpeg
|
||||
liblo
|
||||
libpng
|
||||
libsndfile
|
||||
libtiff
|
||||
ode
|
||||
openal
|
||||
openssl
|
||||
zlib
|
||||
];
|
||||
racket = racket_7_9;
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
|
@ -77,7 +57,6 @@ stdenv.mkDerivation rec {
|
|||
"RacketPrefix=${racket}"
|
||||
"RacketInclude=${racket}/include/racket"
|
||||
"RacketLib=${racket}/lib/racket"
|
||||
"LIBPATH=${lib.makeLibraryPath libs}"
|
||||
"DESTDIR=build"
|
||||
];
|
||||
configurePhase = ''
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
diff --git a/SConstruct b/SConstruct
|
||||
index 32cb644..650333a 100644
|
||||
scons does not use os environment by default:
|
||||
https://scons.org/doc/2.1.0/HTML/scons-user/x1750.html
|
||||
|
||||
nixpkgs' cc-wrapper on the other hand relies on various NIX_* variables
|
||||
to be passed through like NIX_CFLAGS_COMPILE_BEFORE.
|
||||
|
||||
While at it ported to python3-style print().
|
||||
--- a/SConstruct
|
||||
+++ b/SConstruct
|
||||
@@ -6,7 +6,7 @@
|
||||
|
@ -11,16 +16,15 @@ index 32cb644..650333a 100644
|
|||
|
||||
MajorVersion = "0"
|
||||
MinorVersion = "19"
|
||||
@@ -225,13 +225,18 @@ if env['PLATFORM'] == 'posix':
|
||||
["asound", "alsa/asoundlib.h"],
|
||||
["openal", "AL/al.h"]]
|
||||
@@ -100,6 +100,7 @@ IncludePaths = [
|
||||
paranoid = ' -W -Wcast-qual -Wwrite-strings -Wcast-align -Wpointer-arith -Wconversion -Wredundant-decls -Wunreachable-code -Winline -Wlarger-than-256'
|
||||
|
||||
+env.Append(ENV={'PATH': ' ' + os.environ['PATH'], })
|
||||
+env.Append(LIBPATH=ARGUMENTS.get('LIBPATH', '').split(':'))
|
||||
+env.Append(CCFLAGS=' ' + os.environ.get('NIX_CFLAGS_COMPILE',''))
|
||||
+env.Append(CCFLAGS=' -DNULL=0')
|
||||
+
|
||||
################################################################################
|
||||
env = Environment(CCFLAGS = '-ggdb -pipe -Wall -O3 -ffast-math -Wno-unused -fPIC -pthread',
|
||||
+ ENV = os.environ,
|
||||
VERSION_NUM = FluxusVersion)
|
||||
env.MergeFlags(ARGUMENTS.get('CCFLAGS', '').split())
|
||||
env.MergeFlags(ARGUMENTS.get('LDFLAGS', '').split())
|
||||
@@ -229,9 +230,9 @@ if env['PLATFORM'] == 'posix':
|
||||
# Make sure we have these libraries availible
|
||||
|
||||
if not GetOption('clean'):
|
||||
|
@ -33,7 +37,7 @@ index 32cb644..650333a 100644
|
|||
# detect ode precision
|
||||
if not GetOption('clean'):
|
||||
try:
|
||||
@@ -240,27 +245,27 @@ if not GetOption('clean'):
|
||||
@@ -240,27 +241,27 @@ if not GetOption('clean'):
|
||||
if isinstance(ode_str[0], str):
|
||||
env.MergeFlags(ode_str[0])
|
||||
except:
|
||||
|
@ -65,7 +69,7 @@ index 32cb644..650333a 100644
|
|||
Exit(1)
|
||||
|
||||
if not conf.CheckFunc("dInitODE2"):
|
||||
@@ -334,7 +339,7 @@ if not GetOption('clean'):
|
||||
@@ -334,7 +335,7 @@ if not GetOption('clean'):
|
||||
])
|
||||
|
||||
if raco_status != 0:
|
||||
|
@ -74,7 +78,7 @@ index 32cb644..650333a 100644
|
|||
Exit(1)
|
||||
|
||||
|
||||
@@ -377,8 +382,8 @@ if not GetOption('clean') and static_modules:
|
||||
@@ -377,8 +378,8 @@ if not GetOption('clean') and static_modules:
|
||||
|
||||
app_env['LIBS'].remove("pthread")
|
||||
app_env['LIBS'].remove("dl")
|
||||
|
@ -85,7 +89,7 @@ index 32cb644..650333a 100644
|
|||
|
||||
# now go through the rest of the libs, removing them from
|
||||
# the environment at the same time
|
||||
@@ -425,7 +430,7 @@ SConscript(dirs = build_dirs,
|
||||
@@ -425,7 +426,7 @@ SConscript(dirs = build_dirs,
|
||||
if not GetOption('clean'):
|
||||
helpmap_status = subprocess.call(["racket", "makehelpmap.scm"], cwd="docs/helpmap")
|
||||
if helpmap_status != 0:
|
||||
|
|
|
@ -525,7 +525,7 @@ buildStdenv.mkDerivation ({
|
|||
fi
|
||||
|
||||
# Extract the debug info.
|
||||
header "separating debug info from $i (build ID $id)"
|
||||
echo "separating debug info from $i (build ID $id)"
|
||||
mkdir -p "$dst/''${id:0:2}"
|
||||
$OBJCOPY --only-keep-debug "$i" "$dst/''${id:0:2}/''${id:2}.debug"
|
||||
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "xterm";
|
||||
version = "377";
|
||||
version = "378";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
"ftp://ftp.invisible-island.net/xterm/${pname}-${version}.tgz"
|
||||
"https://invisible-mirror.net/archives/xterm/${pname}-${version}.tgz"
|
||||
];
|
||||
hash = "sha256-2xCP56Rdjtl+YEchtYRDtHNknmHiY2Mb+HWfhhipkLI=";
|
||||
hash = "sha256-ZJ37/V7dDtnkfPjk2VO0sNPDC8KAFm38T/0Ulz/sPpI=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
|
|
@ -28,7 +28,7 @@ assert sendEmailSupport -> perlSupport;
|
|||
assert svnSupport -> perlSupport;
|
||||
|
||||
let
|
||||
version = "2.39.0";
|
||||
version = "2.39.1";
|
||||
svn = subversionClient.override { perlBindings = perlSupport; };
|
||||
gitwebPerlLibs = with perlPackages; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ];
|
||||
in
|
||||
|
@ -41,7 +41,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
|
||||
src = fetchurl {
|
||||
url = "https://www.kernel.org/pub/software/scm/git/git-${version}.tar.xz";
|
||||
sha256 = "sha256-uhmbE/tamco97JF7C9c2vA61qd+Hc31DXt398Q1pJls=";
|
||||
sha256 = "sha256-QKOKCEezDDcbNYc7OvzxI4hd1B6j7Lv1EO+pfzzlwWE=";
|
||||
};
|
||||
|
||||
outputs = [ "out" ] ++ lib.optional withManual "doc";
|
||||
|
|
|
@ -321,6 +321,11 @@ stdenv.mkDerivation {
|
|||
&& !(stdenv.targetPlatform.useLLVM or false)
|
||||
&& gccForLibs != null) ''
|
||||
echo "--gcc-toolchain=${gccForLibs}" >> $out/nix-support/cc-cflags
|
||||
|
||||
# Pull in 'cc.out' target to get 'libstdc++fs.a'. It should be in
|
||||
# 'cc.lib'. But it's a gcc package bug.
|
||||
# TODO(trofi): remove once gcc is fixed to move libraries to .lib output.
|
||||
echo "-L${gccForLibs}/${optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}"}/lib" >> $out/nix-support/cc-ldflags
|
||||
''
|
||||
|
||||
##
|
||||
|
@ -338,11 +343,18 @@ stdenv.mkDerivation {
|
|||
# compile, because it uses "#include_next <limits.h>" to find the
|
||||
# limits.h file in ../includes-fixed. To remedy the problem,
|
||||
# another -idirafter is necessary to add that directory again.
|
||||
#
|
||||
# We use --sysroot=/nix/store/does/not/exist to drop embedded default
|
||||
# path to glibc headers gcc was built against. Without it -idirafter
|
||||
# only appends to the list and outdated glibc headers end up being
|
||||
# used. 'cc-cflags-before' is used to allow user's --sysroot= option
|
||||
# to override our default.
|
||||
+ optionalString (libc != null) (''
|
||||
touch "$out/nix-support/libc-cflags"
|
||||
touch "$out/nix-support/libc-ldflags"
|
||||
echo "-B${libc_lib}${libc.libdir or "/lib/"}" >> $out/nix-support/libc-crt1-cflags
|
||||
'' + optionalString (!(cc.langD or false)) ''
|
||||
echo "--sysroot=/nix/store/does/not/exist" >> $out/nix-support/cc-cflags-before
|
||||
echo "-idirafter ${libc_dev}${libc.incdir or "/include"}" >> $out/nix-support/libc-cflags
|
||||
'' + optionalString (isGNU && (!(cc.langD or false))) ''
|
||||
for dir in "${cc}"/lib/gcc/*/*/include-fixed; do
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source "$stdenv/setup"
|
||||
|
||||
header "exporting \`$url' (revision $rev) into \`$out'"
|
||||
echo "exporting \`$url' (revision $rev) into \`$out'"
|
||||
|
||||
# Perform a lightweight checkout so that we don't end up importing
|
||||
# all the repository's history.
|
||||
BZR_LOG=/dev/null bzr -Ossl.cert_reqs=none export -r "$rev" --format=dir "$out" "$url"
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -24,5 +24,3 @@ else
|
|||
fi
|
||||
(cd export && cvs -f -z0 -d "$cvsRoot" export $tag "$module")
|
||||
mv export/* $out
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -11,10 +11,8 @@ elif test -n "$context"; then
|
|||
tagflags="--context=$context"
|
||||
fi
|
||||
|
||||
header "getting $url $partial ${tagtext} into $out"
|
||||
echo "getting $url $partial ${tagtext} into $out"
|
||||
|
||||
darcs get --lazy $tagflags "$url" "$out"
|
||||
# remove metadata, because it can change
|
||||
rm -rf "$out/_darcs"
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source "${stdenv}/setup"
|
||||
header "exporting ${repository}/${imageName} (tag: ${tag}) into ${out}"
|
||||
echo "exporting ${repository}/${imageName} (tag: ${tag}) into ${out}"
|
||||
mkdir -p "${out}"
|
||||
|
||||
cat <<EOF > "${out}/compositeImage.sh"
|
||||
|
@ -26,4 +26,3 @@ ${gnutar}/bin/tar \
|
|||
-c "${manifest}" "${repositories}" -T "${imageFileStorePaths}"
|
||||
EOF
|
||||
chmod +x "${out}/compositeImage.sh"
|
||||
stopNest
|
||||
|
|
|
@ -36,7 +36,7 @@ stdenv.mkDerivation {
|
|||
inherit name;
|
||||
builder = writeText "${fetcher}-builder.sh" ''
|
||||
source "$stdenv/setup"
|
||||
header "${fetcher} exporting to $out"
|
||||
echo "${fetcher} exporting to $out"
|
||||
|
||||
declare -A creds
|
||||
|
||||
|
@ -49,7 +49,7 @@ stdenv.mkDerivation {
|
|||
fi
|
||||
|
||||
if [ -f "$dockerCredentialsFile" ]; then
|
||||
header "using credentials from $dockerCredentialsFile"
|
||||
echo "using credentials from $dockerCredentialsFile"
|
||||
|
||||
CREDSFILE=$(cat "$dockerCredentialsFile")
|
||||
creds[token]=$(${awk} -F'=' '/DOCKER_TOKEN/ {print $2}' <<< "$CREDSFILE" | head -n1)
|
||||
|
@ -77,8 +77,6 @@ stdenv.mkDerivation {
|
|||
${layerDigestFlag} \
|
||||
"${repository}/${imageName}" \
|
||||
"${tag}"
|
||||
|
||||
stopNest
|
||||
'';
|
||||
|
||||
buildInputs = [ haskellPackages.hocker ];
|
||||
|
|
|
@ -29,7 +29,7 @@ stdenv.mkDerivation {
|
|||
builder = writeScript "xpibuilder" ''
|
||||
source $stdenv/setup
|
||||
|
||||
header "firefox addon $name into $out"
|
||||
echo "firefox addon $name into $out"
|
||||
|
||||
UUID="${extid}"
|
||||
mkdir -p "$out/$UUID"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
header "Cloning Fossil $url [$rev] into $out"
|
||||
echo "Cloning Fossil $url [$rev] into $out"
|
||||
|
||||
# Fossil, bless its adorable little heart, wants to write global configuration
|
||||
# to $HOME/.fossil. AFAICT, there is no way to disable this functionality.
|
||||
|
@ -19,5 +19,3 @@ popd
|
|||
|
||||
# Just nuke the checkout file.
|
||||
rm $out/.fslckout
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
|
||||
header "exporting $url (rev $rev) into $out"
|
||||
echo "exporting $url (rev $rev) into $out"
|
||||
|
||||
$SHELL $fetcher --builder --url "$url" --out "$out" --rev "$rev" \
|
||||
${leaveDotGit:+--leave-dotGit} \
|
||||
|
@ -18,4 +18,3 @@ $SHELL $fetcher --builder --url "$url" --out "$out" --rev "$rev" \
|
|||
${branchName:+--branch-name "$branchName"}
|
||||
|
||||
runHook postFetch
|
||||
stopNest
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
header "getting $url${rev:+ ($rev)} into $out"
|
||||
echo "getting $url${rev:+ ($rev)} into $out"
|
||||
|
||||
hg clone --insecure "$url" hg-clone
|
||||
|
||||
hg archive -q$subrepoClause -y ${rev:+-r "$rev"} --cwd hg-clone $out
|
||||
rm -f $out/.hg_archival.txt
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -8,7 +8,7 @@ if ! [ -f "$cacheDB" ]; then
|
|||
mtn --db "$cacheDB" db init
|
||||
fi
|
||||
|
||||
header "getting revision $selector";
|
||||
echo "getting revision $selector";
|
||||
|
||||
done=;
|
||||
for source in $dbs; do
|
||||
|
@ -32,9 +32,7 @@ for source in $dbs; do
|
|||
fi;
|
||||
done;
|
||||
|
||||
stopNest;
|
||||
|
||||
header "checking out the revision $revision";
|
||||
echo "checking out the revision $revision";
|
||||
|
||||
if test -n "$done"; then
|
||||
mtn checkout --db "$cacheDB" -r "$revision" "$out" -b "${branch}"
|
||||
|
@ -43,10 +41,6 @@ else
|
|||
exit 1;
|
||||
fi;
|
||||
|
||||
stopNest
|
||||
|
||||
header "clearing _MTN in the output"
|
||||
echo "clearing _MTN in the output"
|
||||
|
||||
rm -rf "$out/_MTN"
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
|
||||
header "exporting $url (r$rev) into $out"
|
||||
echo "exporting $url (r$rev) into $out"
|
||||
|
||||
if test -n "$http_proxy"; then
|
||||
# Configure proxy
|
||||
|
@ -22,5 +22,3 @@ fi;
|
|||
svn export --trust-server-cert --non-interactive \
|
||||
${ignoreExternals:+--ignore-externals} ${ignoreKeywords:+--ignore-keywords} \
|
||||
-r "$rev" "$url" "$out"
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
|
||||
header "exporting $url (r$rev) into $out"
|
||||
echo "exporting $url (r$rev) into $out"
|
||||
|
||||
if test "$sshSupport"; then
|
||||
export SVN_SSH="$openssh/bin/ssh"
|
||||
|
@ -12,5 +12,3 @@ fi
|
|||
# whether the server is being spoofed --- only the cryptographic
|
||||
# hash of the output matters.
|
||||
expect -f $sshSubversion "$username" "$password" "$rev" "$url" $out
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -37,7 +37,7 @@ if [ -n "$downloadToTemp" ]; then downloadedFile="$TMPDIR/file"; fi
|
|||
tryDownload() {
|
||||
local url="$1"
|
||||
echo
|
||||
header "trying $url"
|
||||
echo "trying $url"
|
||||
local curlexit=18;
|
||||
|
||||
success=
|
||||
|
|
|
@ -46,14 +46,11 @@ stdenv.mkDerivation {
|
|||
strictDeps = true;
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
dontUnpack = true;
|
||||
|
||||
# Additional flags passed to pkg-config.
|
||||
addFlags = lib.optional stdenv.targetPlatform.isStatic "--static";
|
||||
|
||||
unpackPhase = ''
|
||||
src=$PWD
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin $out/nix-support
|
||||
|
|
|
@ -43,9 +43,8 @@ vmTools.runInLinuxImage (stdenv.mkDerivation (
|
|||
[ ! -f /etc/lsb-release ] || (source /etc/lsb-release; echo "OS release: $DISTRIB_DESCRIPTION")
|
||||
echo "System/kernel: $(uname -a)"
|
||||
if test -e /etc/debian_version; then echo "Debian release: $(cat /etc/debian_version)"; fi
|
||||
header "installed Debian packages"
|
||||
echo "installed Debian packages"
|
||||
dpkg-query --list
|
||||
stopNest
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
|
@ -73,11 +72,10 @@ vmTools.runInLinuxImage (stdenv.mkDerivation (
|
|||
[ "$(echo $out/debs/*.deb)" != "" ]
|
||||
|
||||
for i in $out/debs/*.deb; do
|
||||
header "Generated DEB package: $i"
|
||||
echo "Generated DEB package: $i"
|
||||
dpkg-deb --info "$i"
|
||||
pkgName=$(dpkg-deb -W "$i" | awk '{print $1}')
|
||||
echo "file deb $i" >> $out/nix-support/hydra-build-products
|
||||
stopNest
|
||||
done
|
||||
dpkg -i $out/debs/*.deb
|
||||
|
||||
|
|
|
@ -74,10 +74,9 @@ stdenv.mkDerivation (
|
|||
if test -n "$succeedOnFailure"; then
|
||||
if test -n "$keepBuildDirectory"; then
|
||||
KEEPBUILDDIR="$out/`basename $TMPDIR`"
|
||||
header "Copying build directory to $KEEPBUILDDIR"
|
||||
echo "Copying build directory to $KEEPBUILDDIR"
|
||||
mkdir -p $KEEPBUILDDIR
|
||||
cp -R "$TMPDIR/"* $KEEPBUILDDIR
|
||||
stopNest
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
|
|
|
@ -64,10 +64,9 @@ stdenv.mkDerivation (
|
|||
if test -n "$succeedOnFailure"; then
|
||||
if test -n "$keepBuildDirectory"; then
|
||||
KEEPBUILDDIR="$out/`basename $TMPDIR`"
|
||||
header "Copying build directory to $KEEPBUILDDIR"
|
||||
echo "Copying build directory to $KEEPBUILDDIR"
|
||||
mkdir -p $KEEPBUILDDIR
|
||||
cp -R "$TMPDIR/"* $KEEPBUILDDIR
|
||||
stopNest
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
|
|
|
@ -13,7 +13,7 @@ auditTmpdir() {
|
|||
local dir="$1"
|
||||
[ -e "$dir" ] || return 0
|
||||
|
||||
header "checking for references to $TMPDIR/ in $dir..."
|
||||
echo "checking for references to $TMPDIR/ in $dir..."
|
||||
|
||||
local i
|
||||
find "$dir" -type f -print0 | while IFS= read -r -d $'\0' i; do
|
||||
|
@ -36,6 +36,4 @@ auditTmpdir() {
|
|||
fi
|
||||
|
||||
done
|
||||
|
||||
stopNest
|
||||
}
|
||||
|
|
|
@ -131,7 +131,14 @@ def populate_cache(initial: List[Path], recursive: bool =False) -> None:
|
|||
if not path.is_file():
|
||||
continue
|
||||
|
||||
# As an optimisation, resolve the symlinks here, as the target is unique
|
||||
# XXX: (layus, 2022-07-25) is this really an optimisation in all cases ?
|
||||
# It could make the rpath bigger or break the fragile precedence of $out.
|
||||
resolved = path.resolve()
|
||||
# Do not use resolved paths when names do not match
|
||||
if resolved.name != path.name:
|
||||
resolved = path
|
||||
|
||||
try:
|
||||
with open_elf(path) as elf:
|
||||
osabi = get_osabi(elf)
|
||||
|
|
|
@ -6,12 +6,11 @@ fixupOutputHooks+=('if [ -z "$dontCanonicalizeJars" -a -e "$prefix" ]; then cano
|
|||
|
||||
canonicalizeJarsIn() {
|
||||
local dir="$1"
|
||||
header "canonicalizing jars in $dir"
|
||||
echo "canonicalizing jars in $dir"
|
||||
dir="$(realpath -sm -- "$dir")"
|
||||
while IFS= read -rd '' f; do
|
||||
canonicalizeJar "$f"
|
||||
done < <(find -- "$dir" -type f -name '*.jar' -print0)
|
||||
stopNest
|
||||
}
|
||||
|
||||
source @canonicalize_jar@
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "make-binary-wrapper-hook";
|
||||
|
||||
deps = [ dieHook ]
|
||||
# https://github.com/NixOS/nixpkgs/issues/148189
|
||||
++ lib.optional (stdenv.isDarwin && stdenv.isAarch64) cc;
|
||||
|
|
|
@ -6,8 +6,8 @@ postFixupHooks+=(_makeSymlinksRelative)
|
|||
_makeSymlinksRelative() {
|
||||
local symlinkTarget
|
||||
|
||||
if [ -n "${dontRewriteSymlinks-}" ]; then
|
||||
return 0
|
||||
if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
while IFS= read -r -d $'\0' f; do
|
||||
|
|
|
@ -4,16 +4,32 @@ preFixupHooks+=(_multioutDocs)
|
|||
preFixupHooks+=(_multioutDevs)
|
||||
postFixupHooks+=(_multioutPropagateDev)
|
||||
|
||||
# Assign the first string containing nonempty variable to the variable named $1
|
||||
# _assignFirst varName otherVarNames*
|
||||
#
|
||||
# Set the value of the variable named $varName to the first of otherVarNames
|
||||
# that refers to a non-empty variable name.
|
||||
#
|
||||
# If none of otherVarNames refers to a non-empty variable, the error message is
|
||||
# specific to this function's use case, which is setting up the output variables.
|
||||
_assignFirst() {
|
||||
local varName="$1"
|
||||
local REMOVE=REMOVE # slightly hacky - we allow REMOVE (i.e. not a variable name)
|
||||
shift
|
||||
while (( $# )); do
|
||||
if [ -n "${!1-}" ]; then eval "${varName}"="$1"; return; fi
|
||||
shift
|
||||
for var in "$@"; do
|
||||
if [ -n "${!var-}" ]; then eval "${varName}"="${var}"; return; fi
|
||||
done
|
||||
echo "Error: _assignFirst found no valid variant!"
|
||||
echo
|
||||
echo "error: _assignFirst: could not find a non-empty variable to assign to ${varName}."
|
||||
echo " The following variables were all unset or empty:"
|
||||
echo " $*"
|
||||
if [ -z "${out:-}" ]; then
|
||||
echo ' If you do not want an "out" output in your derivation, make sure to define'
|
||||
echo ' the other specific required outputs. This can be achieved by picking one'
|
||||
echo " of the above as an output."
|
||||
echo ' You do not have to remove "out" if you want to have a different default'
|
||||
echo ' output, because the first output is taken as a default.'
|
||||
echo
|
||||
fi
|
||||
return 1 # none found
|
||||
}
|
||||
|
||||
|
|
|
@ -100,8 +100,6 @@ patchShebangs() {
|
|||
fi
|
||||
fi
|
||||
done < <(find "$@" -type f -perm -0100 -print0)
|
||||
|
||||
stopNest
|
||||
}
|
||||
|
||||
patchShebangsAuto () {
|
||||
|
|
|
@ -53,7 +53,7 @@ EOF
|
|||
echo >&2 'initdb not found. Did you add postgresql to the nativeCheckInputs?'
|
||||
false
|
||||
fi
|
||||
header 'initializing postgresql'
|
||||
echo 'initializing postgresql'
|
||||
initdb -U postgres
|
||||
|
||||
# Move the socket
|
||||
|
@ -65,10 +65,10 @@ EOF
|
|||
echo "listen_addresses = ''" >>"$PGDATA/postgresql.conf"
|
||||
fi
|
||||
|
||||
header 'starting postgresql'
|
||||
echo 'starting postgresql'
|
||||
eval "${postgresqlStartCommands:-pg_ctl start}"
|
||||
|
||||
header 'setting up postgresql'
|
||||
echo 'setting up postgresql'
|
||||
eval "$postgresqlTestSetupCommands"
|
||||
|
||||
runHook postgresqlTestSetupPost
|
||||
|
@ -76,6 +76,6 @@ EOF
|
|||
}
|
||||
|
||||
postgresqlStop() {
|
||||
header 'stopping postgresql'
|
||||
echo 'stopping postgresql'
|
||||
pg_ctl stop
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ _separateDebugInfo() {
|
|||
fi
|
||||
|
||||
# Extract the debug info.
|
||||
header "separating debug info from $i (build ID $id)"
|
||||
echo "separating debug info from $i (build ID $id)"
|
||||
mkdir -p "$dst/${id:0:2}"
|
||||
|
||||
# This may fail, e.g. if the binary is for a different
|
||||
|
|
|
@ -36,7 +36,7 @@ _doStrip() {
|
|||
local -n ranlibCmd="${ranlibCmds[$i]}"
|
||||
|
||||
# `dontStrip` disables them all
|
||||
if [[ "${dontStrip-}" || "${flag-}" ]] || ! type -f "${stripCmd-}" 2>/dev/null
|
||||
if [[ "${dontStrip-}" || "${flag-}" ]] || ! type -f "${stripCmd-}" 2>/dev/null 1>&2
|
||||
then continue; fi
|
||||
|
||||
stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S}"
|
||||
|
|
|
@ -546,6 +546,7 @@ rec {
|
|||
* # writes a Linux-exclusive setup hook where @bash@ myscript.sh is substituted for the
|
||||
* # bash interpreter.
|
||||
* myhellohookSub = makeSetupHook {
|
||||
* name = "myscript-hook";
|
||||
* deps = [ hello ];
|
||||
* substitutions = { bash = "${pkgs.bash}/bin/bash"; };
|
||||
* meta.platforms = lib.platforms.linux;
|
||||
|
@ -553,13 +554,21 @@ rec {
|
|||
*
|
||||
* # setup hook with a package test
|
||||
* myhellohookTested = makeSetupHook {
|
||||
* name = "myscript-hook";
|
||||
* deps = [ hello ];
|
||||
* substitutions = { bash = "${pkgs.bash}/bin/bash"; };
|
||||
* meta.platforms = lib.platforms.linux;
|
||||
* passthru.tests.greeting = callPackage ./test { };
|
||||
* } ./myscript.sh;
|
||||
*/
|
||||
makeSetupHook = { name ? "hook", deps ? [], substitutions ? {}, meta ? {}, passthru ? {} }: script:
|
||||
makeSetupHook =
|
||||
{ name ? lib.warn "calling makeSetupHook without passing a name is deprecated." "hook"
|
||||
, deps ? []
|
||||
, substitutions ? {}
|
||||
, meta ? {}
|
||||
, passthru ? {}
|
||||
}:
|
||||
script:
|
||||
runCommand name
|
||||
(substitutions // {
|
||||
inherit meta;
|
||||
|
|
|
@ -527,9 +527,8 @@ rec {
|
|||
echo "System/kernel: $(uname -a)"
|
||||
if test -e /etc/fedora-release; then echo "Fedora release: $(cat /etc/fedora-release)"; fi
|
||||
if test -e /etc/SuSE-release; then echo "SUSE release: $(cat /etc/SuSE-release)"; fi
|
||||
header "installed RPM packages"
|
||||
echo "installed RPM packages"
|
||||
rpm -qa --qf "%{Name}-%{Version}-%{Release} (%{Arch}; %{Distribution}; %{Vendor})\n"
|
||||
stopNest
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
|
@ -559,9 +558,8 @@ rec {
|
|||
find $rpmout -name "*.rpm" -exec cp {} $out/$outDir \;
|
||||
|
||||
for i in $out/$outDir/*.rpm; do
|
||||
header "Generated RPM/SRPM: $i"
|
||||
echo "Generated RPM/SRPM: $i"
|
||||
rpm -qip $i
|
||||
stopNest
|
||||
done
|
||||
|
||||
eval "$postInstall"
|
||||
|
|
|
@ -25,7 +25,9 @@ makeScopeWithSplicing
|
|||
|
||||
mkXfceDerivation = callPackage ./mkXfceDerivation.nix { };
|
||||
|
||||
automakeAddFlags = pkgs.makeSetupHook { } ./automakeAddFlags.sh;
|
||||
automakeAddFlags = pkgs.makeSetupHook {
|
||||
name = "xfce-automake-add-flags-hook";
|
||||
} ./automakeAddFlags.sh;
|
||||
|
||||
#### CORE
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
|
||||
header "exporting egg ${eggName} (version $version) into $out"
|
||||
echo "exporting egg ${eggName} (version $version) into $out"
|
||||
|
||||
mkdir -p $out
|
||||
chicken-install -r "${eggName}:${version}"
|
||||
cp -r ${eggName}/* $out/
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
||||
source $stdenv/setup
|
||||
|
||||
header "exporting egg ${eggName} (version $version) into $out"
|
||||
echo "exporting egg ${eggName} (version $version) into $out"
|
||||
|
||||
mkdir -p $out
|
||||
CHICKEN_EGG_CACHE=. chicken-install -r "${eggName}:${version}"
|
||||
rm ${eggName}/{STATUS,TIMESTAMP}
|
||||
cp -r ${eggName}/* $out/
|
||||
|
||||
stopNest
|
||||
|
|
|
@ -151,6 +151,13 @@ stdenv.mkDerivation rec {
|
|||
git
|
||||
];
|
||||
|
||||
# Workaround cc-wrapper's --sysroot= value for `staging-next`: it
|
||||
# breaks library lookup via RUNPATH:
|
||||
# ld: warning: libm.so.6, needed by ./generated/linux/release/64/lib.so, not found (try using -rpath or -rpath-link)
|
||||
# ld: /build/druntime/generated/linux/release/64/libdruntime.so: undefined reference to `log10@GLIBC_2.2.5'
|
||||
# TODO(trofi): remove the workaround once cc-wrapper is fixed.
|
||||
NIX_CFLAGS_COMPILE = [ "--sysroot=/" ];
|
||||
|
||||
buildInputs = [
|
||||
curl
|
||||
tzdata
|
||||
|
|
|
@ -51,8 +51,14 @@ let majorVersion = "10";
|
|||
|
||||
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
|
||||
|
||||
patches = [ ]
|
||||
++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
patches = [
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv.patch
|
||||
/* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied
|
||||
|
@ -222,6 +228,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -51,8 +51,14 @@ let majorVersion = "11";
|
|||
|
||||
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
|
||||
|
||||
patches =
|
||||
optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
patches = [
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv.patch
|
||||
/* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied
|
||||
|
@ -228,6 +234,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -270,6 +270,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -227,6 +227,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -247,6 +247,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -64,6 +64,13 @@ let majorVersion = "6";
|
|||
|
||||
patches = optionals (!stdenv.targetPlatform.isRedox) [
|
||||
../use-source-date-epoch.patch ./0001-Fix-build-for-glibc-2.31.patch
|
||||
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
++ optional langAda ../gnat-cflags.patch
|
||||
|
@ -258,6 +265,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -56,6 +56,13 @@ let majorVersion = "7";
|
|||
./gcc8-asan-glibc-2.34.patch
|
||||
|
||||
./0001-Fix-build-for-glibc-2.31.patch
|
||||
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
]
|
||||
++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optionals targetPlatform.isNetBSD [
|
||||
|
@ -226,6 +233,7 @@ stdenv.mkDerivation ({
|
|||
;
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -46,8 +46,14 @@ let majorVersion = "8";
|
|||
|
||||
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
|
||||
|
||||
patches =
|
||||
optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
patches = [
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional targetPlatform.isNetBSD ../libstdc++-netbsd-ctypes.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
/* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied
|
||||
|
@ -206,6 +212,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -55,9 +55,14 @@ let majorVersion = "9";
|
|||
|
||||
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
|
||||
|
||||
patches =
|
||||
[ ]
|
||||
++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
patches = [
|
||||
# Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||
(fetchurl {
|
||||
name = "fix-bug-80431.patch";
|
||||
url = "https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=de31f5445b12fd9ab9969dc536d821fe6f0edad0";
|
||||
sha256 = "0sd52c898msqg7m316zp0ryyj7l326cjcn2y19dcxqp15r74qj0g";
|
||||
})
|
||||
] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
|
||||
++ optional targetPlatform.isNetBSD ../libstdc++-netbsd-ctypes.patch
|
||||
++ optional noSysDirs ../no-sys-dirs.patch
|
||||
++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv-gcc9.patch
|
||||
|
@ -221,6 +226,7 @@ stdenv.mkDerivation ({
|
|||
};
|
||||
|
||||
targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
|
||||
targetPlatformConfig = targetPlatform.config;
|
||||
|
||||
buildFlags = optional
|
||||
(targetPlatform == hostPlatform && hostPlatform == buildPlatform)
|
||||
|
|
|
@ -203,6 +203,17 @@ preInstall() {
|
|||
ln -s lib "$out/${targetConfig}/lib32"
|
||||
ln -s lib "${!outputLib}/${targetConfig}/lib32"
|
||||
fi
|
||||
|
||||
# cc-wrappers uses --sysroot=/nix/store/does/not/exist as a way to
|
||||
# drop default sysheaders search path. Unfortunately that switches
|
||||
# clang++ into searching libraries in gcc in cross-compiler paths:
|
||||
# from ${!outputLib}/lib (native)
|
||||
# to ${!outputLib}/${targetPlatformConfig}/lib
|
||||
# We create the symlink to make both native and cross paths
|
||||
# available even if the toolchain is not the cross-compiler.
|
||||
if [ ! -e ${!outputLib}/${targetPlatformConfig} ] ; then
|
||||
ln -s . ${!outputLib}/${targetPlatformConfig}
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
@ -240,25 +251,6 @@ postInstall() {
|
|||
# More dependencies with the previous gcc or some libs (gccbug stores the build command line)
|
||||
rm -rf $out/bin/gccbug
|
||||
|
||||
if [[ buildConfig == *"linux"* ]]; then
|
||||
# Take out the bootstrap-tools from the rpath, as it's not needed at all having $out
|
||||
for i in $(find "$out"/libexec/gcc/*/*/* -type f -a \! -name '*.la'); do
|
||||
PREV_RPATH=`patchelf --print-rpath "$i"`
|
||||
NEW_RPATH=`echo "$PREV_RPATH" | sed 's,:[^:]*bootstrap-tools/lib,,g'`
|
||||
patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ targetConfig == *"linux"* ]]; then
|
||||
# For some reason, when building for linux on darwin, the libs retain
|
||||
# RPATH to $out.
|
||||
for i in "$lib"/"$targetConfig"/lib/{libtsan,libasan,libubsan}.so.*.*.*; do
|
||||
PREV_RPATH=`patchelf --print-rpath "$i"`
|
||||
NEW_RPATH=`echo "$PREV_RPATH" | sed "s,:${out}[^:]*,,g"`
|
||||
patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK
|
||||
done
|
||||
fi
|
||||
|
||||
if type "install_name_tool"; then
|
||||
for i in "${!outputLib}"/lib/*.*.dylib "${!outputLib}"/lib/*.so.[0-9]; do
|
||||
install_name_tool -id "$i" "$i" || true
|
||||
|
|
|
@ -46,11 +46,11 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "go";
|
||||
version = "1.19.4";
|
||||
version = "1.19.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://go.dev/dl/go${version}.src.tar.gz";
|
||||
sha256 = "sha256-7adNtKxJSACj5m7nhOSVv7ubjlNd+SSosBsagCi382g=";
|
||||
sha256 = "sha256-jkhujoWigfxc4/C+3FudLb9idtfbCyXT7ANPMT2gN18=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
{ lib, writeShellApplication, cargo, cargo-auditable }:
|
||||
{ lib, writeShellScriptBin, cargo, cargo-auditable }:
|
||||
|
||||
(writeShellApplication {
|
||||
name = "cargo";
|
||||
runtimeInputs = [ cargo cargo-auditable ];
|
||||
text = ''
|
||||
CARGO_AUDITABLE_IGNORE_UNSUPPORTED=1 cargo auditable "$@"
|
||||
'';
|
||||
}) // {
|
||||
(writeShellScriptBin "cargo" ''
|
||||
export PATH="${lib.makeBinPath [ cargo cargo-auditable ]}:$PATH"
|
||||
CARGO_AUDITABLE_IGNORE_UNSUPPORTED=1 exec cargo auditable "$@"
|
||||
'') // {
|
||||
meta = cargo-auditable.meta // {
|
||||
mainProgram = "cargo";
|
||||
};
|
||||
|
|
686
pkgs/development/compilers/swift/compiler/default.nix
Normal file
686
pkgs/development/compilers/swift/compiler/default.nix
Normal file
|
@ -0,0 +1,686 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, cmake
|
||||
, coreutils
|
||||
, gnugrep
|
||||
, perl
|
||||
, ninja
|
||||
, pkg-config
|
||||
, clang
|
||||
, bintools
|
||||
, python3
|
||||
, git
|
||||
, fetchpatch
|
||||
, makeWrapper
|
||||
, gnumake
|
||||
, file
|
||||
, runCommand
|
||||
, writeShellScriptBin
|
||||
# For lldb
|
||||
, libedit
|
||||
, ncurses
|
||||
, swig
|
||||
, libxml2
|
||||
# Linux-specific
|
||||
, glibc
|
||||
, libuuid
|
||||
# Darwin-specific
|
||||
, substituteAll
|
||||
, fixDarwinDylibNames
|
||||
, runCommandLocal
|
||||
, xcbuild
|
||||
, cctools # libtool
|
||||
, sigtool
|
||||
, DarwinTools
|
||||
, CoreServices
|
||||
, Foundation
|
||||
, Combine
|
||||
, MacOSX-SDK
|
||||
, CLTools_Executables
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
inherit (stdenv) hostPlatform targetPlatform;
|
||||
|
||||
sources = callPackage ../sources.nix { };
|
||||
|
||||
# Tools invoked by swift at run-time.
|
||||
runtimeDeps = lib.optionals stdenv.isDarwin [
|
||||
# libtool is used for static linking. This is part of cctools, but adding
|
||||
# that as a build input puts an unwrapped linker in PATH, and breaks
|
||||
# builds. This small derivation exposes just libtool.
|
||||
# NOTE: The same applies to swift-driver, but that is currently always
|
||||
# invoked via the old `swift` / `swiftc`. May change in the future.
|
||||
(runCommandLocal "libtool" { } ''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${cctools}/bin/libtool $out/bin/libtool
|
||||
'')
|
||||
];
|
||||
|
||||
# There are apparently multiple naming conventions on Darwin. Swift uses the
|
||||
# xcrun naming convention. See `configure_sdk_darwin` calls in CMake files.
|
||||
swiftOs = if targetPlatform.isDarwin
|
||||
then {
|
||||
"macos" = "macosx";
|
||||
"ios" = "iphoneos";
|
||||
#iphonesimulator
|
||||
#appletvos
|
||||
#appletvsimulator
|
||||
#watchos
|
||||
#watchsimulator
|
||||
}.${targetPlatform.darwinPlatform}
|
||||
or (throw "Cannot build Swift for target Darwin platform '${targetPlatform.darwinPlatform}'")
|
||||
else targetPlatform.parsed.kernel.name;
|
||||
|
||||
# Apple Silicon uses a different CPU name in the target triple.
|
||||
swiftArch = if stdenv.isDarwin && stdenv.isAarch64 then "arm64"
|
||||
else targetPlatform.parsed.cpu.name;
|
||||
|
||||
# On Darwin, a `.swiftmodule` is a subdirectory in `lib/swift/<OS>`,
|
||||
# containing binaries for supported archs. On other platforms, binaries are
|
||||
# installed to `lib/swift/<OS>/<ARCH>`. Note that our setup-hook also adds
|
||||
# `lib/swift` for convenience.
|
||||
swiftLibSubdir = "lib/swift/${swiftOs}";
|
||||
swiftModuleSubdir = if hostPlatform.isDarwin
|
||||
then "lib/swift/${swiftOs}"
|
||||
else "lib/swift/${swiftOs}/${swiftArch}";
|
||||
|
||||
# And then there's also a separate subtree for statically linked modules.
|
||||
toStaticSubdir = lib.replaceStrings [ "/swift/" ] [ "/swift_static/" ];
|
||||
swiftStaticLibSubdir = toStaticSubdir swiftLibSubdir;
|
||||
swiftStaticModuleSubdir = toStaticSubdir swiftModuleSubdir;
|
||||
|
||||
# This matches _SWIFT_DEFAULT_COMPONENTS, with specific components disabled.
|
||||
swiftInstallComponents = [
|
||||
"autolink-driver"
|
||||
"compiler"
|
||||
# "clang-builtin-headers"
|
||||
"stdlib"
|
||||
"sdk-overlay"
|
||||
"parser-lib"
|
||||
"static-mirror-lib"
|
||||
"editor-integration"
|
||||
# "tools"
|
||||
# "testsuite-tools"
|
||||
"toolchain-tools"
|
||||
"toolchain-dev-tools"
|
||||
"license"
|
||||
(if stdenv.isDarwin then "sourcekit-xpc-service" else "sourcekit-inproc")
|
||||
"swift-remote-mirror"
|
||||
"swift-remote-mirror-headers"
|
||||
];
|
||||
|
||||
# Build a tool used during the build to create a custom clang wrapper, with
|
||||
# which we wrap the clang produced by the swift build.
|
||||
#
|
||||
# This is used in a `POST_BUILD` for the CMake target, so we rename the
|
||||
# actual clang to clang-unwrapped, then put the wrapper in place.
|
||||
#
|
||||
# We replace the `exec ...` command with `exec -a "$0"` in order to
|
||||
# preserve $0 for clang. This is because, unlike Nix, we don't have
|
||||
# separate wrappers for clang/clang++, and clang uses $0 to detect C++.
|
||||
#
|
||||
# Similarly, the C++ detection in the wrapper itself also won't work for us,
|
||||
# so we base it on $0 as well.
|
||||
makeClangWrapper = writeShellScriptBin "nix-swift-make-clang-wrapper" ''
|
||||
set -euo pipefail
|
||||
|
||||
targetFile="$1"
|
||||
unwrappedClang="$targetFile-unwrapped"
|
||||
|
||||
mv "$targetFile" "$unwrappedClang"
|
||||
sed < '${clang}/bin/clang' > "$targetFile" \
|
||||
-e 's|^\s*exec|exec -a "$0"|g' \
|
||||
-e 's|^\[\[ "${clang.cc}/bin/clang" = \*++ ]]|[[ "$0" = *++ ]]|' \
|
||||
-e "s|${clang.cc}/bin/clang|$unwrappedClang|g"
|
||||
chmod a+x "$targetFile"
|
||||
'';
|
||||
|
||||
# Create a tool used during the build to create a custom swift wrapper for
|
||||
# each of the swift executables produced by the build.
|
||||
#
|
||||
# The build produces several `swift-frontend` executables during
|
||||
# bootstrapping. Each of these has numerous aliases via symlinks, and the
|
||||
# executable uses $0 to detect what tool is called.
|
||||
wrapperParams = {
|
||||
inherit bintools;
|
||||
default_cc_wrapper = clang; # Instead of `@out@` in the original.
|
||||
coreutils_bin = lib.getBin coreutils;
|
||||
gnugrep_bin = gnugrep;
|
||||
suffixSalt = lib.replaceStrings ["-" "."] ["_" "_"] targetPlatform.config;
|
||||
use_response_file_by_default = 1;
|
||||
swiftDriver = "";
|
||||
# NOTE: @prog@ needs to be filled elsewhere.
|
||||
};
|
||||
swiftWrapper = runCommand "swift-wrapper.sh" wrapperParams ''
|
||||
substituteAll '${../wrapper/wrapper.sh}' "$out"
|
||||
'';
|
||||
makeSwiftcWrapper = writeShellScriptBin "nix-swift-make-swift-wrapper" ''
|
||||
set -euo pipefail
|
||||
|
||||
targetFile="$1"
|
||||
unwrappedSwift="$targetFile-unwrapped"
|
||||
|
||||
mv "$targetFile" "$unwrappedSwift"
|
||||
sed < '${swiftWrapper}' > "$targetFile" \
|
||||
-e "s|@prog@|'$unwrappedSwift'|g" \
|
||||
-e 's|exec "$prog"|exec -a "$0" "$prog"|g'
|
||||
chmod a+x "$targetFile"
|
||||
'';
|
||||
|
||||
# On Darwin, we need to use BOOTSTRAPPING-WITH-HOSTLIBS because of ABI
|
||||
# stability, and have to provide the definitions for the system stdlib.
|
||||
appleSwiftCore = stdenv.mkDerivation {
|
||||
name = "apple-swift-core";
|
||||
dontUnpack = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib/swift
|
||||
cp -r \
|
||||
"${MacOSX-SDK}/usr/lib/swift/Swift.swiftmodule" \
|
||||
"${MacOSX-SDK}/usr/lib/swift/libswiftCore.tbd" \
|
||||
$out/lib/swift/
|
||||
'';
|
||||
};
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
pname = "swift";
|
||||
inherit (sources) version;
|
||||
|
||||
outputs = [ "out" "lib" "dev" "doc" "man" ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
git
|
||||
ninja
|
||||
perl # pod2man
|
||||
pkg-config
|
||||
python3
|
||||
makeWrapper
|
||||
makeClangWrapper
|
||||
makeSwiftcWrapper
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
xcbuild
|
||||
sigtool # codesign
|
||||
DarwinTools # sw_vers
|
||||
fixDarwinDylibNames
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
# For lldb
|
||||
python3
|
||||
swig
|
||||
libxml2
|
||||
]
|
||||
++ lib.optionals stdenv.isLinux [
|
||||
libuuid
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
CoreServices
|
||||
Foundation
|
||||
Combine
|
||||
];
|
||||
|
||||
# This is a partial reimplementation of our setup hook. Because we reuse
|
||||
# the Swift wrapper for the Swift build itself, we need to do some of the
|
||||
# same preparation.
|
||||
postHook = ''
|
||||
for pkg in "''${pkgsHostTarget[@]}" '${clang.libc}'; do
|
||||
for subdir in ${swiftModuleSubdir} ${swiftStaticModuleSubdir} lib/swift; do
|
||||
if [[ -d "$pkg/$subdir" ]]; then
|
||||
export NIX_SWIFTFLAGS_COMPILE+=" -I $pkg/$subdir"
|
||||
fi
|
||||
done
|
||||
for subdir in ${swiftLibSubdir} ${swiftStaticLibSubdir} lib/swift; do
|
||||
if [[ -d "$pkg/$subdir" ]]; then
|
||||
export NIX_LDFLAGS+=" -L $pkg/$subdir"
|
||||
fi
|
||||
done
|
||||
done
|
||||
'';
|
||||
|
||||
# We invoke cmakeConfigurePhase multiple times, but only need this once.
|
||||
dontFixCmake = true;
|
||||
# We setup custom build directories.
|
||||
dontUseCmakeBuildDir = true;
|
||||
|
||||
unpackPhase = let
|
||||
copySource = repo: "cp -r ${sources.${repo}} ${repo}";
|
||||
in ''
|
||||
mkdir src
|
||||
cd src
|
||||
|
||||
${copySource "swift-cmark"}
|
||||
${copySource "llvm-project"}
|
||||
${copySource "swift"}
|
||||
${copySource "swift-experimental-string-processing"}
|
||||
${lib.optionalString
|
||||
(!stdenv.isDarwin)
|
||||
(copySource "swift-corelibs-libdispatch")}
|
||||
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
patchPhase = ''
|
||||
# Just patch all the things for now, we can focus this later.
|
||||
# TODO: eliminate use of env.
|
||||
find -type f -print0 | xargs -0 sed -i \
|
||||
${lib.optionalString stdenv.isDarwin
|
||||
"-e 's|/usr/libexec/PlistBuddy|${xcbuild}/bin/PlistBuddy|g'"} \
|
||||
-e 's|/usr/bin/env|${coreutils}/bin/env|g' \
|
||||
-e 's|/usr/bin/make|${gnumake}/bin/make|g' \
|
||||
-e 's|/bin/mkdir|${coreutils}/bin/mkdir|g' \
|
||||
-e 's|/bin/cp|${coreutils}/bin/cp|g' \
|
||||
-e 's|/usr/bin/file|${file}/bin/file|g'
|
||||
|
||||
patch -p1 -d swift -i ${./patches/swift-wrap.patch}
|
||||
patch -p1 -d swift -i ${./patches/swift-nix-resource-root.patch}
|
||||
patch -p1 -d swift -i ${./patches/swift-linux-fix-linking.patch}
|
||||
patch -p1 -d swift -i ${substituteAll {
|
||||
src = ./patches/swift-darwin-plistbuddy-workaround.patch;
|
||||
inherit swiftArch;
|
||||
}}
|
||||
patch -p1 -d swift -i ${substituteAll {
|
||||
src = ./patches/swift-prevent-sdk-dirs-warning.patch;
|
||||
inherit (builtins) storeDir;
|
||||
}}
|
||||
substituteInPlace swift/cmake/modules/SwiftConfigureSDK.cmake \
|
||||
--replace '/usr/include' "${stdenv.cc.libc_dev}/include"
|
||||
|
||||
# This patch needs to know the lib output location, so must be substituted
|
||||
# in the same derivation as the compiler.
|
||||
storeDir="${builtins.storeDir}" \
|
||||
substituteAll ${./patches/swift-separate-lib.patch} $TMPDIR/swift-separate-lib.patch
|
||||
patch -p1 -d swift -i $TMPDIR/swift-separate-lib.patch
|
||||
|
||||
patch -p1 -d llvm-project/llvm -i ${./patches/llvm-module-cache.patch}
|
||||
|
||||
patch -p1 -d llvm-project/clang -i ${./patches/clang-toolchain-dir.patch}
|
||||
patch -p1 -d llvm-project/clang -i ${./patches/clang-wrap.patch}
|
||||
patch -p1 -d llvm-project/clang -i ${../../llvm/14/clang/purity.patch}
|
||||
patch -p2 -d llvm-project/clang -i ${fetchpatch {
|
||||
name = "clang-cmake-fix-interpreter.patch";
|
||||
url = "https://github.com/llvm/llvm-project/commit/b5eaf500f2441eff2277ea2973878fb1f171fd0a.patch";
|
||||
sha256 = "1rma1al0rbm3s3ql6bnvbcighp74lri1lcrwbyacgdqp80fgw1b6";
|
||||
}}
|
||||
|
||||
${lib.optionalString stdenv.isLinux ''
|
||||
substituteInPlace llvm-project/clang/lib/Driver/ToolChains/Linux.cpp \
|
||||
--replace 'SysRoot + "/lib' '"${glibc}/lib" "' \
|
||||
--replace 'SysRoot + "/usr/lib' '"${glibc}/lib" "' \
|
||||
--replace 'LibDir = "lib";' 'LibDir = "${glibc}/lib";' \
|
||||
--replace 'LibDir = "lib64";' 'LibDir = "${glibc}/lib";' \
|
||||
--replace 'LibDir = X32 ? "libx32" : "lib64";' 'LibDir = "${glibc}/lib";'
|
||||
|
||||
# uuid.h is not part of glibc, but of libuuid.
|
||||
sed -i 's|''${GLIBC_INCLUDE_PATH}/uuid/uuid.h|${libuuid.dev}/include/uuid/uuid.h|' \
|
||||
swift/stdlib/public/Platform/glibc.modulemap.gyb
|
||||
''}
|
||||
|
||||
# Remove tests for cross compilation, which we don't currently support.
|
||||
rm swift/test/Interop/Cxx/class/constructors-copy-irgen.swift
|
||||
rm swift/test/Interop/Cxx/class/constructors-irgen.swift
|
||||
|
||||
# TODO: consider fixing and re-adding. This test fails due to a non-standard "install_prefix".
|
||||
rm swift/validation-test/Python/build_swift.swift
|
||||
|
||||
# We cannot handle the SDK location being in "Weird Location" due to Nix isolation.
|
||||
rm swift/test/DebugInfo/compiler-flags.swift
|
||||
|
||||
# TODO: Fix issue with ld.gold invoked from script finding crtbeginS.o and crtendS.o.
|
||||
rm swift/test/IRGen/ELF-remove-autolink-section.swift
|
||||
|
||||
# The following two tests fail because we use don't use the bundled libicu:
|
||||
# [SOURCE_DIR/utils/build-script] ERROR: can't find source directory for libicu (tried /build/src/icu)
|
||||
rm swift/validation-test/BuildSystem/default_build_still_performs_epilogue_opts_after_split.test
|
||||
rm swift/validation-test/BuildSystem/test_early_swift_driver_and_infer.swift
|
||||
|
||||
# TODO: This test fails for some unknown reason
|
||||
rm swift/test/Serialization/restrict-swiftmodule-to-revision.swift
|
||||
|
||||
# This test was flaky in ofborg, see #186476
|
||||
rm swift/test/AutoDiff/compiler_crashers_fixed/sr14290-missing-debug-scopes-in-pullback-trampoline.swift
|
||||
|
||||
patchShebangs .
|
||||
|
||||
${lib.optionalString (!stdenv.isDarwin) ''
|
||||
# NOTE: This interferes with ABI stability on Darwin, which uses the system
|
||||
# libraries in the hardcoded path /usr/lib/swift.
|
||||
fixCmakeFiles .
|
||||
''}
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
export SWIFT_SOURCE_ROOT="$PWD"
|
||||
mkdir -p ../build
|
||||
cd ../build
|
||||
export SWIFT_BUILD_ROOT="$PWD"
|
||||
|
||||
# Most builds set a target, but LLDB doesn't. Harmless on non-Darwin.
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.15
|
||||
'';
|
||||
|
||||
# These steps are derived from doing a normal build with.
|
||||
#
|
||||
# ./swift/utils/build-toolchain test --dry-run
|
||||
#
|
||||
# But dealing with the custom Python build system is far more trouble than
|
||||
# simply invoking CMake directly. Few variables it passes to CMake are
|
||||
# actually required or non-default.
|
||||
#
|
||||
# Using CMake directly also allows us to split up the already large build,
|
||||
# and package Swift components separately.
|
||||
#
|
||||
# Besides `--dry-run`, another good way to compare build changes between
|
||||
# Swift releases is to diff the scripts:
|
||||
#
|
||||
# git diff swift-5.6.3-RELEASE..swift-5.7-RELEASE -- utils/build*
|
||||
#
|
||||
buildPhase = ''
|
||||
# Helper to build a subdirectory.
|
||||
#
|
||||
# Always reset cmakeFlags before calling this. The cmakeConfigurePhase
|
||||
# amends flags and would otherwise keep expanding it.
|
||||
function buildProject() {
|
||||
mkdir -p $SWIFT_BUILD_ROOT/$1
|
||||
cd $SWIFT_BUILD_ROOT/$1
|
||||
|
||||
cmakeDir=$SWIFT_SOURCE_ROOT/''${2-$1}
|
||||
cmakeConfigurePhase
|
||||
|
||||
ninjaBuildPhase
|
||||
}
|
||||
|
||||
cmakeFlags="-GNinja"
|
||||
buildProject swift-cmark
|
||||
|
||||
# Some notes:
|
||||
# - The Swift build just needs Clang.
|
||||
# - We can further reduce targets to just our targetPlatform.
|
||||
cmakeFlags="
|
||||
-GNinja
|
||||
-DLLVM_ENABLE_PROJECTS=clang
|
||||
-DLLVM_TARGETS_TO_BUILD=${{
|
||||
"x86_64" = "X86";
|
||||
"aarch64" = "AArch64";
|
||||
}.${targetPlatform.parsed.cpu.name}}
|
||||
"
|
||||
buildProject llvm llvm-project/llvm
|
||||
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
# Add appleSwiftCore to the search paths. We can't simply add it to
|
||||
# buildInputs, because it is potentially an older stdlib than the one we're
|
||||
# building. We have to remove it again after the main Swift build, or later
|
||||
# build steps may fail. (Specific case: Concurrency backdeploy uses the
|
||||
# Sendable protocol, which appears to not be present in the macOS 11 SDK.)
|
||||
OLD_NIX_SWIFTFLAGS_COMPILE="$NIX_SWIFTFLAGS_COMPILE"
|
||||
OLD_NIX_LDFLAGS="$NIX_LDFLAGS"
|
||||
export NIX_SWIFTFLAGS_COMPILE+=" -I ${appleSwiftCore}/lib/swift"
|
||||
export NIX_LDFLAGS+=" -L ${appleSwiftCore}/lib/swift"
|
||||
'' + ''
|
||||
|
||||
# Some notes:
|
||||
# - BOOTSTRAPPING_MODE defaults to OFF in CMake, but is enabled in standard
|
||||
# builds, so we enable it as well. On Darwin, we have to use the system
|
||||
# Swift libs because of ABI-stability, but this may be trouble if the
|
||||
# builder is an older macOS.
|
||||
# - Experimental features are OFF by default in CMake, but some are
|
||||
# required to build the stdlib.
|
||||
# - SWIFT_STDLIB_ENABLE_OBJC_INTEROP is set explicitely because its check
|
||||
# is buggy. (Uses SWIFT_HOST_VARIANT_SDK before initialized.)
|
||||
# Fixed in: https://github.com/apple/swift/commit/84083afef1de5931904d5c815d53856cdb3fb232
|
||||
cmakeFlags="
|
||||
-GNinja
|
||||
-DBOOTSTRAPPING_MODE=BOOTSTRAPPING${lib.optionalString stdenv.isDarwin "-WITH-HOSTLIBS"}
|
||||
-DSWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY=ON
|
||||
-DLLVM_DIR=$SWIFT_BUILD_ROOT/llvm/lib/cmake/llvm
|
||||
-DClang_DIR=$SWIFT_BUILD_ROOT/llvm/lib/cmake/clang
|
||||
-DSWIFT_PATH_TO_CMARK_SOURCE=$SWIFT_SOURCE_ROOT/swift-cmark
|
||||
-DSWIFT_PATH_TO_CMARK_BUILD=$SWIFT_BUILD_ROOT/swift-cmark
|
||||
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=$SWIFT_SOURCE_ROOT/swift-corelibs-libdispatch
|
||||
-DEXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR=$SWIFT_SOURCE_ROOT/swift-experimental-string-processing
|
||||
-DSWIFT_INSTALL_COMPONENTS=${lib.concatStringsSep ";" swiftInstallComponents}
|
||||
-DSWIFT_STDLIB_ENABLE_OBJC_INTEROP=${if stdenv.isDarwin then "ON" else "OFF"}
|
||||
"
|
||||
buildProject swift
|
||||
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
# Restore search paths to remove appleSwiftCore.
|
||||
export NIX_SWIFTFLAGS_COMPILE="$OLD_NIX_SWIFTFLAGS_COMPILE"
|
||||
export NIX_LDFLAGS="$OLD_NIX_LDFLAGS"
|
||||
'' + ''
|
||||
|
||||
# These are based on flags in `utils/build-script-impl`.
|
||||
#
|
||||
# LLDB_USE_SYSTEM_DEBUGSERVER=ON disables the debugserver build on Darwin,
|
||||
# which requires a special signature.
|
||||
#
|
||||
# CMAKE_BUILD_WITH_INSTALL_NAME_DIR ensures we don't use rpath on Darwin.
|
||||
#
|
||||
# NOTE: On Darwin, we only want ncurses in the linker search path, because
|
||||
# headers are part of libsystem. Adding its headers to the search path
|
||||
# causes strange mixing and errors. Note that libedit propagates ncurses,
|
||||
# so we add both manually here, instead of relying on setup hooks.
|
||||
# TODO: Find a better way to prevent this conflict.
|
||||
cmakeFlags="
|
||||
-GNinja
|
||||
-DLLDB_SWIFTC=$SWIFT_BUILD_ROOT/swift/bin/swiftc
|
||||
-DLLDB_SWIFT_LIBS=$SWIFT_BUILD_ROOT/swift/lib/swift
|
||||
-DLLVM_DIR=$SWIFT_BUILD_ROOT/llvm/lib/cmake/llvm
|
||||
-DClang_DIR=$SWIFT_BUILD_ROOT/llvm/lib/cmake/clang
|
||||
-DSwift_DIR=$SWIFT_BUILD_ROOT/swift/lib/cmake/swift
|
||||
-DLLDB_ENABLE_CURSES=ON
|
||||
-DLLDB_ENABLE_LIBEDIT=ON
|
||||
-DLLDB_ENABLE_PYTHON=ON
|
||||
-DLLDB_ENABLE_LZMA=OFF
|
||||
-DLLDB_ENABLE_LUA=OFF
|
||||
-DLLDB_INCLUDE_TESTS=OFF
|
||||
-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON
|
||||
${lib.optionalString stdenv.isDarwin ''
|
||||
-DLLDB_USE_SYSTEM_DEBUGSERVER=ON
|
||||
''}
|
||||
-DLibEdit_INCLUDE_DIRS=${libedit.dev}/include
|
||||
-DLibEdit_LIBRARIES=${libedit}/lib/libedit${stdenv.hostPlatform.extensions.sharedLibrary}
|
||||
-DCURSES_INCLUDE_DIRS=${if stdenv.isDarwin then "/var/empty" else ncurses.dev}/include
|
||||
-DCURSES_LIBRARIES=${ncurses}/lib/libncurses${stdenv.hostPlatform.extensions.sharedLibrary}
|
||||
-DPANEL_LIBRARIES=${ncurses}/lib/libpanel${stdenv.hostPlatform.extensions.sharedLibrary}
|
||||
";
|
||||
buildProject lldb llvm-project/lldb
|
||||
|
||||
${lib.optionalString stdenv.isDarwin ''
|
||||
# Need to do a standalone build of concurrency for Darwin back deployment.
|
||||
# Based on: utils/swift_build_support/swift_build_support/products/backdeployconcurrency.py
|
||||
cmakeFlags="
|
||||
-GNinja
|
||||
-DCMAKE_Swift_COMPILER=$SWIFT_BUILD_ROOT/swift/bin/swiftc
|
||||
|
||||
-DTOOLCHAIN_DIR=/var/empty
|
||||
-DSWIFT_NATIVE_LLVM_TOOLS_PATH=${stdenv.cc}/bin
|
||||
-DSWIFT_NATIVE_CLANG_TOOLS_PATH=${stdenv.cc}/bin
|
||||
-DSWIFT_NATIVE_SWIFT_TOOLS_PATH=$SWIFT_BUILD_ROOT/swift/bin
|
||||
|
||||
-DCMAKE_CROSSCOMPILING=ON
|
||||
|
||||
-DBUILD_SWIFT_CONCURRENCY_BACK_DEPLOYMENT_LIBRARIES=ON
|
||||
-DSWIFT_INCLUDE_TOOLS=OFF
|
||||
-DSWIFT_BUILD_STDLIB_EXTRA_TOOLCHAIN_CONTENT=OFF
|
||||
-DSWIFT_BUILD_TEST_SUPPORT_MODULES=OFF
|
||||
-DSWIFT_BUILD_STDLIB=OFF
|
||||
-DSWIFT_BUILD_DYNAMIC_STDLIB=OFF
|
||||
-DSWIFT_BUILD_STATIC_STDLIB=OFF
|
||||
-DSWIFT_BUILD_REMOTE_MIRROR=OFF
|
||||
-DSWIFT_BUILD_SDK_OVERLAY=OFF
|
||||
-DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=OFF
|
||||
-DSWIFT_BUILD_STATIC_SDK_OVERLAY=OFF
|
||||
-DSWIFT_INCLUDE_TESTS=OFF
|
||||
-DSWIFT_BUILD_PERF_TESTSUITE=OFF
|
||||
|
||||
-DSWIFT_HOST_VARIANT_ARCH=${swiftArch}
|
||||
-DBUILD_STANDALONE=ON
|
||||
|
||||
-DSWIFT_INSTALL_COMPONENTS=back-deployment
|
||||
|
||||
-DSWIFT_SDKS=${{
|
||||
"macos" = "OSX";
|
||||
"ios" = "IOS";
|
||||
#IOS_SIMULATOR
|
||||
#TVOS
|
||||
#TVOS_SIMULATOR
|
||||
#WATCHOS
|
||||
#WATCHOS_SIMULATOR
|
||||
}.${targetPlatform.darwinPlatform}}
|
||||
|
||||
-DLLVM_DIR=$SWIFT_BUILD_ROOT/llvm/lib/cmake/llvm
|
||||
|
||||
-DSWIFT_DEST_ROOT=$out
|
||||
-DSWIFT_HOST_VARIANT_SDK=OSX
|
||||
|
||||
-DSWIFT_DARWIN_DEPLOYMENT_VERSION_OSX=10.15
|
||||
-DSWIFT_DARWIN_DEPLOYMENT_VERSION_IOS=13.0
|
||||
-DSWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST=13.0
|
||||
-DSWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS=13.0
|
||||
-DSWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS=6.0
|
||||
"
|
||||
|
||||
# This depends on the special Clang build specific to the Swift branch.
|
||||
# We also need to call a specific Ninja target.
|
||||
export CC=$SWIFT_BUILD_ROOT/llvm/bin/clang
|
||||
export CXX=$SWIFT_BUILD_ROOT/llvm/bin/clang++
|
||||
ninjaFlags="back-deployment"
|
||||
|
||||
buildProject swift-concurrency-backdeploy swift
|
||||
|
||||
export CC=$NIX_CC/bin/clang
|
||||
export CXX=$NIX_CC/bin/clang++
|
||||
unset ninjaFlags
|
||||
''}
|
||||
'';
|
||||
|
||||
# TODO: ~50 failing tests on x86_64-linux. Other platforms not checked.
|
||||
doCheck = false;
|
||||
nativeCheckInputs = [ file ];
|
||||
# TODO: consider using stress-tester and integration-test.
|
||||
checkPhase = ''
|
||||
cd $SWIFT_BUILD_ROOT/swift
|
||||
checkTarget=check-swift-all
|
||||
ninjaCheckPhase
|
||||
unset checkTarget
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
# Undo the clang and swift wrapping we did for the build.
|
||||
# (This happened via patches to cmake files.)
|
||||
cd $SWIFT_BUILD_ROOT
|
||||
mv llvm/bin/clang-14{-unwrapped,}
|
||||
mv swift/bin/swift-frontend{-unwrapped,}
|
||||
|
||||
mkdir $out $lib
|
||||
|
||||
# Install clang binaries only. We hide these with the wrapper, so they are
|
||||
# for private use by Swift only.
|
||||
cd $SWIFT_BUILD_ROOT/llvm
|
||||
installTargets=install-clang
|
||||
ninjaInstallPhase
|
||||
unset installTargets
|
||||
|
||||
# LLDB is also a private install.
|
||||
cd $SWIFT_BUILD_ROOT/lldb
|
||||
ninjaInstallPhase
|
||||
|
||||
cd $SWIFT_BUILD_ROOT/swift
|
||||
ninjaInstallPhase
|
||||
|
||||
${lib.optionalString stdenv.isDarwin ''
|
||||
cd $SWIFT_BUILD_ROOT/swift-concurrency-backdeploy
|
||||
installTargets=install-back-deployment
|
||||
ninjaInstallPhase
|
||||
unset installTargets
|
||||
''}
|
||||
|
||||
# Separate $lib output here, because specific logic follows.
|
||||
# Only move the dynamic run-time parts, to keep $lib small. Every Swift
|
||||
# build will depend on it.
|
||||
moveToOutput "lib/swift" "$lib"
|
||||
moveToOutput "lib/libswiftDemangle.*" "$lib"
|
||||
|
||||
# This link is here because various tools (swiftpm) check for stdlib
|
||||
# relative to the swift compiler. It's fine if this is for build-time
|
||||
# stuff, but we should patch all cases were it would end up in an output.
|
||||
ln -s $lib/lib/swift $out/lib/swift
|
||||
|
||||
# Swift has a separate resource root from Clang, but locates the Clang
|
||||
# resource root via subdir or symlink. Provide a default here, but we also
|
||||
# patch Swift to prefer NIX_CC if set.
|
||||
ln -s ${clang}/resource-root $lib/lib/swift/clang
|
||||
|
||||
${lib.optionalString stdenv.isDarwin ''
|
||||
# Install required library for ObjC interop.
|
||||
# TODO: Is there no source code for this available?
|
||||
cp -r ${CLTools_Executables}/usr/lib/arc $out/lib/arc
|
||||
''}
|
||||
'';
|
||||
|
||||
preFixup = lib.optionalString stdenv.isLinux ''
|
||||
# This is cheesy, but helps the patchelf hook remove /build from RPATH.
|
||||
cd $SWIFT_BUILD_ROOT/..
|
||||
mv build buildx
|
||||
'';
|
||||
|
||||
postFixup = lib.optionalString stdenv.isDarwin ''
|
||||
# These libraries need to use the system install name. The official SDK
|
||||
# does the same (as opposed to using rpath). Presumably, they are part of
|
||||
# the stable ABI. Not using the system libraries at run-time is known to
|
||||
# cause ObjC class conflicts and segfaults.
|
||||
declare -A systemLibs=(
|
||||
[libswiftCore.dylib]=1
|
||||
[libswiftDarwin.dylib]=1
|
||||
[libswiftSwiftOnoneSupport.dylib]=1
|
||||
[libswift_Concurrency.dylib]=1
|
||||
)
|
||||
|
||||
for systemLib in "''${!systemLibs[@]}"; do
|
||||
install_name_tool -id /usr/lib/swift/$systemLib $lib/${swiftLibSubdir}/$systemLib
|
||||
done
|
||||
|
||||
for file in $out/bin/swift-frontend $lib/${swiftLibSubdir}/*.dylib; do
|
||||
changeArgs=""
|
||||
for dylib in $(otool -L $file | awk '{ print $1 }'); do
|
||||
if [[ ''${systemLibs["$(basename $dylib)"]} ]]; then
|
||||
changeArgs+=" -change $dylib /usr/lib/swift/$(basename $dylib)"
|
||||
elif [[ "$dylib" = */bootstrapping1/* ]]; then
|
||||
changeArgs+=" -change $dylib $lib/lib/swift/$(basename $dylib)"
|
||||
fi
|
||||
done
|
||||
if [[ -n "$changeArgs" ]]; then
|
||||
install_name_tool $changeArgs $file
|
||||
fi
|
||||
done
|
||||
|
||||
wrapProgram $out/bin/swift-frontend \
|
||||
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit
|
||||
swiftOs swiftArch
|
||||
swiftModuleSubdir swiftLibSubdir
|
||||
swiftStaticModuleSubdir swiftStaticLibSubdir;
|
||||
|
||||
# Internal attr for the wrapper.
|
||||
_wrapperParams = wrapperParams;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "The Swift Programming Language";
|
||||
homepage = "https://github.com/apple/swift";
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
license = lib.licenses.asl20;
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
# Swift doesn't support 32-bit Linux, unknown on other platforms.
|
||||
badPlatforms = lib.platforms.i686;
|
||||
timeout = 86400; # 24 hours.
|
||||
};
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
Wrap the clang produced during the build
|
||||
|
||||
--- a/tools/driver/CMakeLists.txt
|
||||
+++ b/tools/driver/CMakeLists.txt
|
||||
@@ -59,6 +59,13 @@ endif()
|
||||
|
||||
add_dependencies(clang clang-resource-headers)
|
||||
|
||||
+# Nix: wrap the clang build.
|
||||
+add_custom_command(
|
||||
+ TARGET clang POST_BUILD
|
||||
+ COMMAND nix-swift-make-clang-wrapper $<TARGET_FILE:clang>
|
||||
+ VERBATIM
|
||||
+)
|
||||
+
|
||||
if(NOT CLANG_LINKS_TO_CREATE)
|
||||
set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
|
||||
endif()
|
|
@ -0,0 +1,30 @@
|
|||
The compiler fails if LLVM modules are enabled and it cannot write its module
|
||||
cache. This patch detects and rejects the fake, non-existant $HOME used in Nix
|
||||
builds.
|
||||
|
||||
We could simply return false in `cache_directory`, but that completely disables
|
||||
module caching, and may unnecessarily slow down builds. Instead, let it use
|
||||
'/tmp/.cache'.
|
||||
|
||||
--- a/lib/Support/Unix/Path.inc
|
||||
+++ b/lib/Support/Unix/Path.inc
|
||||
@@ -1380,6 +1380,9 @@ bool user_config_directory(SmallVectorImpl<char> &result) {
|
||||
if (!home_directory(result)) {
|
||||
return false;
|
||||
}
|
||||
+ if (std::equal(result.begin(), result.end(), "/homeless-shelter")) {
|
||||
+ return false;
|
||||
+ }
|
||||
append(result, ".config");
|
||||
return true;
|
||||
}
|
||||
@@ -1401,6 +1404,9 @@ bool cache_directory(SmallVectorImpl<char> &result) {
|
||||
if (!home_directory(result)) {
|
||||
return false;
|
||||
}
|
||||
+ if (std::equal(result.begin(), result.end(), "/homeless-shelter")) {
|
||||
+ system_temp_directory(true/*ErasedOnReboot*/, result);
|
||||
+ }
|
||||
append(result, ".cache");
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
CMake tries to read a list field from SDKSettings.plist, but the output of
|
||||
facebook/xcbuild PlistBuddy is incompatible with Apple's.
|
||||
|
||||
Simply set the supported architectures to the one target architecture we're
|
||||
building for.
|
||||
|
||||
--- a/cmake/modules/SwiftConfigureSDK.cmake
|
||||
+++ b/cmake/modules/SwiftConfigureSDK.cmake
|
||||
@@ -189,7 +189,7 @@ macro(configure_sdk_darwin
|
||||
endif()
|
||||
|
||||
# Remove any architectures not supported by the SDK.
|
||||
- remove_sdk_unsupported_archs(${name} ${xcrun_name} ${SWIFT_SDK_${prefix}_PATH} SWIFT_SDK_${prefix}_ARCHITECTURES)
|
||||
+ set(SWIFT_SDK_${prefix}_ARCHITECTURES "@swiftArch@")
|
||||
|
||||
list_intersect(
|
||||
"${SWIFT_DARWIN_MODULE_ARCHS}" # lhs
|
|
@ -0,0 +1,21 @@
|
|||
--- a/lib/Driver/ToolChains.cpp
|
||||
+++ b/lib/Driver/ToolChains.cpp
|
||||
@@ -1475,7 +1475,17 @@ const char *ToolChain::getClangLinkerDriver(
|
||||
|
||||
// If there is a linker driver in the toolchain folder, use that instead.
|
||||
if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {toolchainPath}))
|
||||
- LinkerDriver = Args.MakeArgString(tool.get());
|
||||
+ return Args.MakeArgString(tool.get());
|
||||
+ }
|
||||
+
|
||||
+ // For Nix, prefer linking using the wrapped system clang, instead of using
|
||||
+ // the unwrapped clang packaged with swift. The latter is unable to link, but
|
||||
+ // we still want to use it for other purposes (clang importer).
|
||||
+ if (auto nixCC = llvm::sys::Process::GetEnv("NIX_CC")) {
|
||||
+ llvm::SmallString<128> binDir(nixCC.getValue());
|
||||
+ llvm::sys::path::append(binDir, "bin");
|
||||
+ if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {binDir.str()}))
|
||||
+ return Args.MakeArgString(tool.get());
|
||||
}
|
||||
|
||||
return LinkerDriver;
|
|
@ -0,0 +1,67 @@
|
|||
Swift normally looks for the Clang resource dir in a subdir/symlink of its own
|
||||
resource dir. We provide a symlink to the Swift build-time Clang as a default
|
||||
there, but we also here patch two checks to try locate it via NIX_CC.
|
||||
|
||||
The first (ClangImporter.cpp) happens when Swift code imports C modules. The
|
||||
second (ToolChains.cpp) happens when Swift is used to link the final product.
|
||||
|
||||
--- a/lib/ClangImporter/ClangImporter.cpp
|
||||
+++ b/lib/ClangImporter/ClangImporter.cpp
|
||||
@@ -68,6 +68,7 @@
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Memory.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
+#include "llvm/Support/Process.h"
|
||||
#include "llvm/Support/YAMLParser.h"
|
||||
#include "llvm/Support/YAMLTraits.h"
|
||||
#include <algorithm>
|
||||
@@ -809,6 +810,17 @@ importer::addCommonInvocationArguments(
|
||||
|
||||
const std::string &overrideResourceDir = importerOpts.OverrideResourceDir;
|
||||
if (overrideResourceDir.empty()) {
|
||||
+ // Prefer the Clang resource directory from NIX_CC, to allow swapping in a
|
||||
+ // different stdenv.
|
||||
+ // TODO: Figure out how to provide a user override for this. Probably a
|
||||
+ // niche use case, though, and for now a user can unset NIX_CC to work
|
||||
+ // around it if necessary.
|
||||
+ if (auto nixCC = llvm::sys::Process::GetEnv("NIX_CC")) {
|
||||
+ llvm::SmallString<128> resourceDir(nixCC.getValue());
|
||||
+ llvm::sys::path::append(resourceDir, "resource-root");
|
||||
+ invocationArgStrs.push_back("-resource-dir");
|
||||
+ invocationArgStrs.push_back(std::string(resourceDir.str()));
|
||||
+ } else {
|
||||
llvm::SmallString<128> resourceDir(searchPathOpts.RuntimeResourcePath);
|
||||
|
||||
// Adjust the path to refer to our copy of the Clang resource directory
|
||||
@@ -824,6 +836,7 @@ importer::addCommonInvocationArguments(
|
||||
// Set the Clang resource directory to the path we computed.
|
||||
invocationArgStrs.push_back("-resource-dir");
|
||||
invocationArgStrs.push_back(std::string(resourceDir.str()));
|
||||
+ } // nixCC
|
||||
} else {
|
||||
invocationArgStrs.push_back("-resource-dir");
|
||||
invocationArgStrs.push_back(overrideResourceDir);
|
||||
--- a/lib/Driver/ToolChains.cpp
|
||||
+++ b/lib/Driver/ToolChains.cpp
|
||||
@@ -1372,10 +1372,20 @@ void ToolChain::getClangLibraryPath(const ArgList &Args,
|
||||
SmallString<128> &LibPath) const {
|
||||
const llvm::Triple &T = getTriple();
|
||||
|
||||
+ // Nix: We provide a `clang` symlink in the default Swift resource root, but
|
||||
+ // prefer detecting the Clang resource root via NIX_CC, to allow swapping in
|
||||
+ // a different stdenv. However, always honor a user-provided `-resource-dir`.
|
||||
+ auto nixCC = llvm::sys::Process::GetEnv("NIX_CC");
|
||||
+ if (nixCC && !Args.hasArgNoClaim(options::OPT_resource_dir)) {
|
||||
+ LibPath.assign(nixCC.getValue());
|
||||
+ llvm::sys::path::append(LibPath, "resource-root");
|
||||
+ } else {
|
||||
getResourceDirPath(LibPath, Args, /*Shared=*/true);
|
||||
// Remove platform name.
|
||||
llvm::sys::path::remove_filename(LibPath);
|
||||
- llvm::sys::path::append(LibPath, "clang", "lib",
|
||||
+ llvm::sys::path::append(LibPath, "clang");
|
||||
+ } // nixCC
|
||||
+ llvm::sys::path::append(LibPath, "lib",
|
||||
T.isOSDarwin() ? "darwin"
|
||||
: getPlatformNameForTriple(T));
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
Prevents a user-visible warning on every compilation:
|
||||
|
||||
ld: warning: directory not found for option '-L.../MacOSX11.0.sdk/usr/lib/swift'
|
||||
|
||||
--- a/lib/Driver/ToolChains.cpp
|
||||
+++ b/lib/Driver/ToolChains.cpp
|
||||
@@ -1455,9 +1455,11 @@ void ToolChain::getRuntimeLibraryPaths(SmallVectorImpl<std::string> &runtimeLibP
|
||||
runtimeLibPaths.push_back(std::string(scratchPath.str()));
|
||||
}
|
||||
|
||||
+ if (!SDKPath.startswith("@storeDir@")) {
|
||||
scratchPath = SDKPath;
|
||||
llvm::sys::path::append(scratchPath, "usr", "lib", "swift");
|
||||
runtimeLibPaths.push_back(std::string(scratchPath.str()));
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--- a/lib/Frontend/CompilerInvocation.cpp
|
||||
+++ b/lib/Frontend/CompilerInvocation.cpp
|
||||
@@ -185,7 +185,9 @@ static void updateRuntimeLibraryPaths(SearchPathOptions &SearchPathOpts,
|
||||
RuntimeLibraryImportPaths.push_back(std::string(LibPath.str()));
|
||||
}
|
||||
|
||||
- LibPath = SearchPathOpts.getSDKPath();
|
||||
+ auto SDKPath = SearchPathOpts.getSDKPath();
|
||||
+ if (!SDKPath.startswith("@storeDir@")) {
|
||||
+ LibPath = SDKPath;
|
||||
llvm::sys::path::append(LibPath, "usr", "lib", "swift");
|
||||
if (!Triple.isOSDarwin()) {
|
||||
// Use the non-architecture suffixed form with directory-layout
|
||||
@@ -200,6 +202,7 @@ static void updateRuntimeLibraryPaths(SearchPathOptions &SearchPathOpts,
|
||||
llvm::sys::path::append(LibPath, swift::getMajorArchitectureName(Triple));
|
||||
}
|
||||
RuntimeLibraryImportPaths.push_back(std::string(LibPath.str()));
|
||||
+ }
|
||||
}
|
||||
SearchPathOpts.setRuntimeLibraryImportPaths(RuntimeLibraryImportPaths);
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
Patch paths to use the separate 'lib' output. One of the things this patch
|
||||
fixes is the output of `swift -frontend -print-target-info`, which swiftpm uses
|
||||
to set rpath on Linux.
|
||||
|
||||
The check if the executable path starts with 'out' is necessary for
|
||||
bootstrapping, or the compiler will fail when run from the build directory.
|
||||
|
||||
--- a/lib/Frontend/CompilerInvocation.cpp
|
||||
+++ b/lib/Frontend/CompilerInvocation.cpp
|
||||
@@ -49,11 +49,16 @@ swift::CompilerInvocation::CompilerInvocation() {
|
||||
void CompilerInvocation::computeRuntimeResourcePathFromExecutablePath(
|
||||
StringRef mainExecutablePath, bool shared,
|
||||
llvm::SmallVectorImpl<char> &runtimeResourcePath) {
|
||||
+ if (mainExecutablePath.startswith("@storeDir@")) {
|
||||
+ auto libPath = StringRef("@lib@");
|
||||
+ runtimeResourcePath.append(libPath.begin(), libPath.end());
|
||||
+ } else {
|
||||
runtimeResourcePath.append(mainExecutablePath.begin(),
|
||||
mainExecutablePath.end());
|
||||
|
||||
llvm::sys::path::remove_filename(runtimeResourcePath); // Remove /swift
|
||||
llvm::sys::path::remove_filename(runtimeResourcePath); // Remove /bin
|
||||
+ }
|
||||
appendSwiftLibDir(runtimeResourcePath, shared);
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
Wrap the swift compiler produced during the build
|
||||
|
||||
--- a/tools/driver/CMakeLists.txt
|
||||
+++ b/tools/driver/CMakeLists.txt
|
||||
@@ -16,6 +16,13 @@ if(${LIBSWIFT_BUILD_MODE} MATCHES "BOOTSTRAPPING.*")
|
||||
swiftDriverTool
|
||||
libswiftStub)
|
||||
|
||||
+ # Nix: wrap the swift build.
|
||||
+ add_custom_command(
|
||||
+ TARGET swift-frontend-bootstrapping0 POST_BUILD
|
||||
+ COMMAND nix-swift-make-swift-wrapper $<TARGET_FILE:swift-frontend-bootstrapping0>
|
||||
+ VERBATIM
|
||||
+ )
|
||||
+
|
||||
swift_create_post_build_symlink(swift-frontend-bootstrapping0
|
||||
SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
DESTINATION "swiftc${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
@@ -34,6 +41,13 @@ if(${LIBSWIFT_BUILD_MODE} MATCHES "BOOTSTRAPPING.*")
|
||||
swiftDriverTool
|
||||
libswift-bootstrapping1)
|
||||
|
||||
+ # Nix: wrap the swift build.
|
||||
+ add_custom_command(
|
||||
+ TARGET swift-frontend-bootstrapping1 POST_BUILD
|
||||
+ COMMAND nix-swift-make-swift-wrapper $<TARGET_FILE:swift-frontend-bootstrapping1>
|
||||
+ VERBATIM
|
||||
+ )
|
||||
+
|
||||
swift_create_post_build_symlink(swift-frontend-bootstrapping1
|
||||
SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
DESTINATION "swiftc${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
@@ -50,6 +64,13 @@ target_link_libraries(swift-frontend
|
||||
swiftDriverTool
|
||||
libswift)
|
||||
|
||||
+# Nix: wrap the swift build.
|
||||
+add_custom_command(
|
||||
+ TARGET swift-frontend POST_BUILD
|
||||
+ COMMAND nix-swift-make-swift-wrapper $<TARGET_FILE:swift-frontend>
|
||||
+ VERBATIM
|
||||
+)
|
||||
+
|
||||
# Create a `swift-driver` executable adjacent to the `swift-frontend` executable
|
||||
# to ensure that `swiftc` forwards to the standalone driver when invoked.
|
||||
swift_create_early_driver_copies(swift-frontend)
|
|
@ -1,475 +1,101 @@
|
|||
{ lib, stdenv
|
||||
, cmake
|
||||
, coreutils
|
||||
, glibc
|
||||
, gccForLibs
|
||||
, which
|
||||
, perl
|
||||
, libedit
|
||||
, ninja
|
||||
, pkg-config
|
||||
, sqlite
|
||||
, libxml2
|
||||
, clang_13
|
||||
, python3
|
||||
, ncurses
|
||||
, libuuid
|
||||
, libxcrypt
|
||||
, icu
|
||||
, libgcc
|
||||
, libblocksruntime
|
||||
, curl
|
||||
, rsync
|
||||
, git
|
||||
, libgit2
|
||||
, fetchFromGitHub
|
||||
, makeWrapper
|
||||
, gnumake
|
||||
, file
|
||||
{ lib
|
||||
, pkgs
|
||||
, newScope
|
||||
, darwin
|
||||
, llvmPackages_latest
|
||||
, overrideCC
|
||||
}:
|
||||
|
||||
let
|
||||
# The Swift toolchain script builds projects with separate repos. By convention, some of them share
|
||||
# the same version with the main Swift compiler project per release. We fetch these with
|
||||
# `fetchSwiftRelease`. The rest have their own versions locked to each Swift release, as defined in the
|
||||
# Swift compiler repo:
|
||||
# utils/update_checkout/update_checkout-config.json.
|
||||
self = rec {
|
||||
|
||||
callPackage = newScope self;
|
||||
|
||||
# Current versions of Swift on Darwin require macOS SDK 10.15 at least.
|
||||
# Re-export this so we can rely on the minimum Swift SDK elsewhere.
|
||||
apple_sdk = pkgs.darwin.apple_sdk_11_0;
|
||||
|
||||
# Our current Clang on Darwin is v11, but we need at least v12. The
|
||||
# following applies the newer Clang with the same libc overrides as
|
||||
# `apple_sdk.stdenv`.
|
||||
#
|
||||
# ... among projects listed in that file, we provide our own:
|
||||
# - CMake
|
||||
# - ninja
|
||||
# - icu
|
||||
#
|
||||
# ... we'd like to include the following in the future:
|
||||
# - stress-tester
|
||||
# - integration-tests
|
||||
|
||||
versions = {
|
||||
swift = "5.6.2";
|
||||
yams = "4.0.2";
|
||||
argumentParser = "1.0.3";
|
||||
format = "release/5.6";
|
||||
crypto = "1.1.5";
|
||||
nio = "2.31.2";
|
||||
nio-ssl = "2.15.0";
|
||||
};
|
||||
|
||||
fetchAppleRepo = { repo, rev, sha256 }:
|
||||
fetchFromGitHub {
|
||||
owner = "apple";
|
||||
inherit repo rev sha256;
|
||||
name = "${repo}-${rev}-src";
|
||||
};
|
||||
|
||||
fetchSwiftRelease = { repo, sha256, fetchSubmodules ? false }:
|
||||
fetchFromGitHub {
|
||||
owner = "apple";
|
||||
inherit repo sha256 fetchSubmodules;
|
||||
rev = "swift-${versions.swift}-RELEASE";
|
||||
name = "${repo}-${versions.swift}-src";
|
||||
};
|
||||
|
||||
sources = {
|
||||
# Projects that share `versions.swift` for each release.
|
||||
|
||||
swift = fetchSwiftRelease {
|
||||
repo = "swift";
|
||||
sha256 = "sha256-wiRXAXWEksJuy+YQQ+B7tzr2iLkSVkgV6o+wIz7yKJA=";
|
||||
};
|
||||
cmark = fetchSwiftRelease {
|
||||
repo = "swift-cmark";
|
||||
sha256 = "sha256-f0BoTs4HYdx/aJ9HIGCWMalhl8PvClWD6R4QK3qSgAw=";
|
||||
};
|
||||
llbuild = fetchSwiftRelease {
|
||||
repo = "swift-llbuild";
|
||||
sha256 = "sha256-SQ6V0zVshIYMjayx+ZpYuLijgQ89tqRnPlXBPf2FYqM=";
|
||||
};
|
||||
driver = fetchSwiftRelease {
|
||||
repo = "swift-driver";
|
||||
sha256 = "sha256-D5/C4Rbv5KIsKpy6YbuMxGIGaQkn80PD4Cp0l6bPKzY=";
|
||||
};
|
||||
toolsSupportCore = fetchSwiftRelease {
|
||||
repo = "swift-tools-support-core";
|
||||
sha256 = "sha256-FbtQCq1sSlzrskCrgzD4iYuo5eGaXrAUUxoNX/BiOfg=";
|
||||
};
|
||||
swiftpm = fetchSwiftRelease {
|
||||
repo = "swift-package-manager";
|
||||
sha256 = "sha256-esO4Swz3UYngbVgxoV+fkhSC0AU3IaxVjWkgK/s3x68=";
|
||||
};
|
||||
syntax = fetchSwiftRelease {
|
||||
repo = "swift-syntax";
|
||||
sha256 = "sha256-C9FPCtq49BvKXtTWWeReYWNrU70pHzT2DhAv3NiTbPU=";
|
||||
};
|
||||
corelibsXctest = fetchSwiftRelease {
|
||||
repo = "swift-corelibs-xctest";
|
||||
sha256 = "sha256-0hizfnKJaUUA+jXuXzXWk72FmlSyc+UGEf7BTLdJrx4=";
|
||||
};
|
||||
corelibsFoundation = fetchSwiftRelease {
|
||||
repo = "swift-corelibs-foundation";
|
||||
sha256 = "sha256-8sCL8Ia6yb6bRsJZ52gUJH0jN3lwClM573G8jgUdEhw=";
|
||||
};
|
||||
corelibsLibdispatch = fetchSwiftRelease {
|
||||
repo = "swift-corelibs-libdispatch";
|
||||
sha256 = "sha256-1tIskUMnfblnvZaFDQPUMBfWTmBYG98s7rEww7PwZO8=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
indexstoreDb = fetchSwiftRelease {
|
||||
repo = "indexstore-db";
|
||||
sha256 = "sha256-/PO4eMiASZN3pjFjBQ1r8vYwGRn6xm3SWaB2HDZlkPs=";
|
||||
};
|
||||
sourcekitLsp = fetchSwiftRelease {
|
||||
repo = "sourcekit-lsp";
|
||||
sha256 = "sha256-ttgUC4ZHD3P/xLHllEbACtHVrJ6HXqeVWccXcoPMkts=";
|
||||
};
|
||||
llvmProject = fetchSwiftRelease {
|
||||
repo = "llvm-project";
|
||||
sha256 = "sha256-YVs3lKV2RlaovpYkdGO+vzypolrmXmbKBBP4+osNMYw=";
|
||||
};
|
||||
docc = fetchSwiftRelease {
|
||||
repo = "swift-docc";
|
||||
sha256 = "sha256-rWiaNamZoHTO1bKpubxuT7m1IBOl7amT5M71mNauilY=";
|
||||
};
|
||||
docc-render-artifact = fetchSwiftRelease {
|
||||
repo = "swift-docc-render-artifact";
|
||||
sha256 = "sha256-AX+rtDLhq8drk7N6/hoH3fQioudmmTCnEhR45bME8uU=";
|
||||
};
|
||||
docc-symbolkit = fetchSwiftRelease {
|
||||
repo = "swift-docc-symbolkit";
|
||||
sha256 = "sha256-Xy1TQ5ucDW+MnkeOvVznsATBmwcQ3p1x+ofQ22ofk+o=";
|
||||
};
|
||||
lmdb = fetchSwiftRelease {
|
||||
repo = "swift-lmdb";
|
||||
sha256 = "sha256-i2GkWRWq1W5j8rF4PiHwWgT4Dur5FCY2o44HvUU3vtQ=";
|
||||
};
|
||||
markdown = fetchSwiftRelease {
|
||||
repo = "swift-markdown";
|
||||
sha256 = "sha256-XtFSBiNHhmULjS4OqSpMgUetLu3peRg7l6HpjwVsTj8=";
|
||||
};
|
||||
|
||||
cmark-gfm = fetchAppleRepo {
|
||||
repo = "swift-cmark";
|
||||
rev = "swift-${versions.swift}-RELEASE-gfm";
|
||||
sha256 = "sha256-g28iKmMR2W0r1urf8Fk1HBxAp5OlonNYSVN3Ril66tQ=";
|
||||
};
|
||||
|
||||
# Projects that have their own versions during each release
|
||||
|
||||
argumentParser = fetchAppleRepo {
|
||||
repo = "swift-argument-parser";
|
||||
rev = "${versions.argumentParser}";
|
||||
sha256 = "sha256-vNqkuAwSZNCWvwe6E5BqbXQdIbmIia0dENmmSQ9P8Mo=";
|
||||
};
|
||||
format = fetchAppleRepo {
|
||||
repo = "swift-format";
|
||||
rev = "${versions.format}";
|
||||
sha256 = "sha256-1f5sIrv9IbPB7Vnahq1VwH8gT41dcjWldRwvVEaMdto=";
|
||||
};
|
||||
crypto = fetchAppleRepo {
|
||||
repo = "swift-crypto";
|
||||
rev = "${versions.crypto}";
|
||||
sha256 = "sha256-jwxXQuOF+CnpLMwTZ2z52Fgx2b97yWzXiPTx0Ye8KCQ=";
|
||||
};
|
||||
nio = fetchAppleRepo {
|
||||
repo = "swift-nio";
|
||||
rev = versions.nio;
|
||||
sha256 = "sha256-FscOA/S7on31QCR/MZFjg4ZB3FGJ+rdptZ6MRZJXexE=";
|
||||
};
|
||||
nio-ssl = fetchAppleRepo {
|
||||
repo = "swift-nio-ssl";
|
||||
rev = versions.nio-ssl;
|
||||
sha256 = "sha256-5QGkmkCOXhG3uOdf0bd3Fo1MFekB8/WcveBXGhtVZKo=";
|
||||
};
|
||||
yams = fetchFromGitHub {
|
||||
owner = "jpsim";
|
||||
repo = "Yams";
|
||||
rev = versions.yams;
|
||||
sha256 = "sha256-cTkCAwxxLc35laOon1ZXXV8eAxX02oDolJyPauhZado=";
|
||||
name = "Yams-${versions.yams}-src";
|
||||
};
|
||||
};
|
||||
|
||||
devInputs = [
|
||||
curl
|
||||
glibc
|
||||
icu
|
||||
libblocksruntime
|
||||
libedit
|
||||
libgcc
|
||||
libuuid
|
||||
libxcrypt
|
||||
libxml2
|
||||
ncurses
|
||||
sqlite
|
||||
];
|
||||
|
||||
python = (python3.withPackages (ps: [ps.six]));
|
||||
|
||||
cmakeFlags = [
|
||||
"-DGLIBC_INCLUDE_PATH=${stdenv.cc.libc.dev}/include"
|
||||
"-DC_INCLUDE_DIRS=${lib.makeSearchPathOutput "dev" "include" devInputs}:${libxml2.dev}/include/libxml2"
|
||||
"-DGCC_INSTALL_PREFIX=${gccForLibs}"
|
||||
];
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "swift";
|
||||
version = versions.swift;
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
git
|
||||
makeWrapper
|
||||
ninja
|
||||
perl
|
||||
pkg-config
|
||||
python
|
||||
rsync
|
||||
which
|
||||
];
|
||||
buildInputs = devInputs ++ [
|
||||
clang_13
|
||||
];
|
||||
|
||||
# TODO: Revisit what needs to be propagated and how.
|
||||
propagatedBuildInputs = [
|
||||
libgcc
|
||||
libgit2
|
||||
python
|
||||
];
|
||||
propagatedUserEnvPkgs = [ git pkg-config ];
|
||||
|
||||
hardeningDisable = [ "format" ]; # for LLDB
|
||||
|
||||
unpackPhase = ''
|
||||
mkdir src
|
||||
cd src
|
||||
export SWIFT_SOURCE_ROOT=$PWD
|
||||
|
||||
cp -r ${sources.swift} swift
|
||||
cp -r ${sources.cmark} cmark
|
||||
cp -r ${sources.llbuild} llbuild
|
||||
cp -r ${sources.argumentParser} swift-argument-parser
|
||||
cp -r ${sources.driver} swift-driver
|
||||
cp -r ${sources.toolsSupportCore} swift-tools-support-core
|
||||
cp -r ${sources.swiftpm} swiftpm
|
||||
cp -r ${sources.syntax} swift-syntax
|
||||
cp -r ${sources.corelibsXctest} swift-corelibs-xctest
|
||||
cp -r ${sources.corelibsFoundation} swift-corelibs-foundation
|
||||
cp -r ${sources.corelibsLibdispatch} swift-corelibs-libdispatch
|
||||
cp -r ${sources.yams} yams
|
||||
cp -r ${sources.indexstoreDb} indexstore-db
|
||||
cp -r ${sources.sourcekitLsp} sourcekit-lsp
|
||||
cp -r ${sources.format} swift-format
|
||||
cp -r ${sources.crypto} swift-crypto
|
||||
cp -r ${sources.llvmProject} llvm-project
|
||||
cp -r ${sources.cmark-gfm} swift-cmark-gfm
|
||||
cp -r ${sources.docc} swift-docc
|
||||
cp -r ${sources.docc-render-artifact} swift-docc-render-artifact
|
||||
cp -r ${sources.docc-symbolkit} swift-docc-symbolkit
|
||||
cp -r ${sources.lmdb} swift-lmdb
|
||||
cp -r ${sources.markdown} swift-markdown
|
||||
cp -r ${sources.nio} swift-nio
|
||||
cp -r ${sources.nio-ssl} swift-nio-ssl
|
||||
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
patchPhase = ''
|
||||
# Just patch all the things for now, we can focus this later.
|
||||
patchShebangs $SWIFT_SOURCE_ROOT
|
||||
|
||||
# TODO: eliminate use of env.
|
||||
find -type f -print0 | xargs -0 sed -i \
|
||||
-e 's|/usr/bin/env|${coreutils}/bin/env|g' \
|
||||
-e 's|/usr/bin/make|${gnumake}/bin/make|g' \
|
||||
-e 's|/bin/mkdir|${coreutils}/bin/mkdir|g' \
|
||||
-e 's|/bin/cp|${coreutils}/bin/cp|g' \
|
||||
-e 's|/usr/bin/file|${file}/bin/file|g'
|
||||
|
||||
# Build configuration patches.
|
||||
patch -p1 -d swift -i ${./patches/0001-build-presets-linux-don-t-require-using-Ninja.patch}
|
||||
patch -p1 -d swift -i ${./patches/0002-build-presets-linux-allow-custom-install-prefix.patch}
|
||||
patch -p1 -d swift -i ${./patches/0003-build-presets-linux-don-t-build-extra-libs.patch}
|
||||
patch -p1 -d swift -i ${./patches/0004-build-presets-linux-plumb-extra-cmake-options.patch}
|
||||
patch -p1 -d swift -i ${./patches/0007-build-presets-linux-os-stdlib.patch}
|
||||
substituteInPlace swift/cmake/modules/SwiftConfigureSDK.cmake \
|
||||
--replace '/usr/include' "${stdenv.cc.libc.dev}/include"
|
||||
sed -i swift/utils/build-presets.ini \
|
||||
-e 's/^test-installable-package$/# \0/' \
|
||||
-e 's/^test$/# \0/' \
|
||||
-e 's/^validation-test$/# \0/' \
|
||||
-e 's/^long-test$/# \0/' \
|
||||
-e 's/^stress-test$/# \0/' \
|
||||
-e 's/^test-optimized$/# \0/' \
|
||||
-e 's/^swift-install-components=autolink.*$/\0;editor-integration/'
|
||||
|
||||
# LLVM toolchain patches.
|
||||
patch -p1 -d llvm-project/clang -i ${./patches/0005-clang-toolchain-dir.patch}
|
||||
patch -p1 -d llvm-project/clang -i ${./patches/0006-clang-purity.patch}
|
||||
substituteInPlace llvm-project/clang/lib/Driver/ToolChains/Linux.cpp \
|
||||
--replace 'SysRoot + "/lib' '"${glibc}/lib" "' \
|
||||
--replace 'SysRoot + "/usr/lib' '"${glibc}/lib" "' \
|
||||
--replace 'LibDir = "lib";' 'LibDir = "${glibc}/lib";' \
|
||||
--replace 'LibDir = "lib64";' 'LibDir = "${glibc}/lib";' \
|
||||
--replace 'LibDir = X32 ? "libx32" : "lib64";' 'LibDir = "${glibc}/lib";'
|
||||
|
||||
# Substitute ncurses for curses in llbuild.
|
||||
sed -i 's/curses/ncurses/' llbuild/*/*/CMakeLists.txt
|
||||
sed -i 's/curses/ncurses/' llbuild/*/*/*/CMakeLists.txt
|
||||
|
||||
# uuid.h is not part of glibc, but of libuuid.
|
||||
sed -i 's|''${GLIBC_INCLUDE_PATH}/uuid/uuid.h|${libuuid.dev}/include/uuid/uuid.h|' swift/stdlib/public/Platform/glibc.modulemap.gyb
|
||||
|
||||
# Support library build script patches.
|
||||
PREFIX=''${out/#\/}
|
||||
substituteInPlace swift/utils/swift_build_support/swift_build_support/products/benchmarks.py \
|
||||
--replace \
|
||||
"'--toolchain', toolchain_path," \
|
||||
"'--toolchain', '/build/install/$PREFIX',"
|
||||
substituteInPlace swift/benchmark/scripts/build_script_helper.py \
|
||||
--replace \
|
||||
"swiftbuild_path = os.path.join(args.toolchain, \"usr\", \"bin\", \"swift-build\")" \
|
||||
"swiftbuild_path = os.path.join(args.toolchain, \"bin\", \"swift-build\")"
|
||||
substituteInPlace swift-corelibs-xctest/build_script.py \
|
||||
--replace usr "$PREFIX"
|
||||
|
||||
# Can be removed in later swift-docc versions, see
|
||||
# https://github.com/apple/swift-docc/commit/bff70b847008f91ac729cfd299a85481eef3f581
|
||||
substituteInPlace swift-docc/build-script-helper.py \
|
||||
--replace \
|
||||
"subprocess.check_output(cmd, env=env).strip(), 'docc')" \
|
||||
"subprocess.check_output(cmd, env=env).strip().decode(), 'docc')"
|
||||
|
||||
# Can be removed in later Swift versions, see
|
||||
# https://github.com/apple/swift/pull/58755
|
||||
substituteInPlace swift/utils/process-stats-dir.py \
|
||||
--replace \
|
||||
"type=argparse.FileType('wb', 0)," \
|
||||
"type=argparse.FileType('w', 0),"
|
||||
|
||||
# Apply Python 3 fix, see
|
||||
# https://github.com/apple/swift/commit/ec6bc595092974628b27b114a472e84162261bbd
|
||||
substituteInPlace swift/utils/swift_build_support/swift_build_support/productpipeline_list_builder.py \
|
||||
--replace \
|
||||
"filter(lambda x: x is not None, pipeline)" \
|
||||
"[p for p in pipeline if p is not None]"
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
cd ..
|
||||
|
||||
mkdir build install
|
||||
export SWIFT_BUILD_ROOT=$PWD/build
|
||||
export SWIFT_INSTALL_DIR=$PWD/install
|
||||
|
||||
export INSTALLABLE_PACKAGE=$PWD/swift.tar.gz
|
||||
export NIX_ENFORCE_PURITY=
|
||||
|
||||
cd $SWIFT_BUILD_ROOT
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
# Explicitly include C++ headers to prevent errors where stdlib.h is not found from cstdlib.
|
||||
export NIX_CFLAGS_COMPILE="$(< ${clang_13}/nix-support/libcxx-cxxflags) $NIX_CFLAGS_COMPILE"
|
||||
|
||||
# During the Swift build, a full local LLVM build is performed and the resulting clang is
|
||||
# invoked. This compiler is not using the Nix wrappers, so it needs some help to find things.
|
||||
export NIX_LDFLAGS_BEFORE="-rpath ${gccForLibs.lib}/lib -L${gccForLibs.lib}/lib $NIX_LDFLAGS_BEFORE"
|
||||
|
||||
# However, we want to use the wrapped compiler whenever possible.
|
||||
export CC="${clang_13}/bin/clang"
|
||||
|
||||
$SWIFT_SOURCE_ROOT/swift/utils/build-script \
|
||||
--preset=buildbot_linux \
|
||||
installable_package=$INSTALLABLE_PACKAGE \
|
||||
install_prefix=$out \
|
||||
install_destdir=$SWIFT_INSTALL_DIR \
|
||||
extra_cmake_options="${lib.concatStringsSep "," cmakeFlags}"
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
|
||||
nativeCheckInputs = [ file ];
|
||||
|
||||
checkPhase = ''
|
||||
# Remove compiler build system tests which fail due to our modified default build profile and
|
||||
# nixpkgs-provided version of CMake.
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/BuildSystem/infer_implies_install_all.test
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/BuildSystem/infer_dumps_deps_if_verbose_build.test
|
||||
|
||||
# This test apparently requires Python 2 (strings are assumed to be bytes-like), but the build
|
||||
# process overall now otherwise requires Python 3 (which is what we have updated to). A fix PR
|
||||
# has been submitted upstream.
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/SIL/verify_all_overlays.py
|
||||
|
||||
# TODO: consider fixing and re-adding. This test fails due to a non-standard "install_prefix".
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/Python/build_swift.swift
|
||||
|
||||
# We cannot handle the SDK location being in "Weird Location" due to Nix isolation.
|
||||
rm $SWIFT_SOURCE_ROOT/swift/test/DebugInfo/compiler-flags.swift
|
||||
|
||||
# TODO: Fix issue with ld.gold invoked from script finding crtbeginS.o and crtendS.o.
|
||||
rm $SWIFT_SOURCE_ROOT/swift/test/IRGen/ELF-remove-autolink-section.swift
|
||||
|
||||
# The following two tests fail because we use don't use the bundled libicu:
|
||||
# [SOURCE_DIR/utils/build-script] ERROR: can't find source directory for libicu (tried /build/src/icu)
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/BuildSystem/default_build_still_performs_epilogue_opts_after_split.test
|
||||
rm $SWIFT_SOURCE_ROOT/swift/validation-test/BuildSystem/test_early_swift_driver_and_infer.swift
|
||||
|
||||
# TODO: This test fails for some unknown reason
|
||||
rm $SWIFT_SOURCE_ROOT/swift/test/Serialization/restrict-swiftmodule-to-revision.swift
|
||||
|
||||
# This test was flaky in ofborg, see #186476
|
||||
rm $SWIFT_SOURCE_ROOT/swift/test/AutoDiff/compiler_crashers_fixed/sr14290-missing-debug-scopes-in-pullback-trampoline.swift
|
||||
|
||||
# TODO: consider using stress-tester and integration-test.
|
||||
|
||||
# Match the wrapped version of Swift to be installed.
|
||||
export LIBRARY_PATH=${lib.makeLibraryPath [icu libgcc libuuid]}:$l
|
||||
|
||||
checkTarget=check-swift-all-${stdenv.hostPlatform.parsed.kernel.name}-${stdenv.hostPlatform.parsed.cpu.name}
|
||||
ninjaFlags='-C buildbot_linux/swift-${stdenv.hostPlatform.parsed.kernel.name}-${stdenv.hostPlatform.parsed.cpu.name}'
|
||||
ninjaCheckPhase
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
|
||||
# Extract the generated tarball into the store.
|
||||
tar xf $INSTALLABLE_PACKAGE -C $out --strip-components=3 ''${out/#\/}
|
||||
find $out -type d -empty -delete
|
||||
|
||||
# Fix installation weirdness, also present in Apple’s official tarballs.
|
||||
mv $out/local/include/indexstore $out/include
|
||||
rmdir $out/local/include $out/local
|
||||
rm -r $out/bin/sdk-module-lists $out/bin/swift-api-checker.py
|
||||
|
||||
wrapProgram $out/bin/swift \
|
||||
--set CC $out/bin/clang \
|
||||
--suffix C_INCLUDE_PATH : $out/lib/swift/clang/include \
|
||||
--suffix CPLUS_INCLUDE_PATH : $out/lib/swift/clang/include \
|
||||
--suffix LIBRARY_PATH : ${lib.makeLibraryPath [icu libgcc libuuid]} \
|
||||
--suffix PATH : ${lib.makeBinPath [ stdenv.cc.bintools ]}
|
||||
|
||||
wrapProgram $out/bin/swiftc \
|
||||
--set CC $out/bin/clang \
|
||||
--suffix C_INCLUDE_PATH : $out/lib/swift/clang/include \
|
||||
--suffix CPLUS_INCLUDE_PATH : $out/lib/swift/clang/include \
|
||||
--suffix LIBRARY_PATH : ${lib.makeLibraryPath [icu libgcc libuuid]} \
|
||||
--suffix PATH : ${lib.makeBinPath [ stdenv.cc.bintools ]}
|
||||
'';
|
||||
|
||||
# Hack to avoid build and install directories in RPATHs.
|
||||
preFixup = "rm -rf $SWIFT_BUILD_ROOT $SWIFT_INSTALL_DIR";
|
||||
|
||||
meta = with lib; {
|
||||
description = "The Swift Programming Language";
|
||||
homepage = "https://github.com/apple/swift";
|
||||
maintainers = with maintainers; [ dtzWill trepetti dduan trundle ];
|
||||
license = licenses.asl20;
|
||||
# Swift doesn't support 32-bit Linux, unknown on other platforms.
|
||||
platforms = platforms.linux;
|
||||
badPlatforms = platforms.i686;
|
||||
timeout = 86400; # 24 hours.
|
||||
};
|
||||
# If 'latest' becomes an issue, recommend replacing it with v14, which is
|
||||
# currently closest to the official Swift builds.
|
||||
clang = if pkgs.stdenv.isDarwin
|
||||
then
|
||||
llvmPackages_latest.clang.override rec {
|
||||
libc = apple_sdk.Libsystem;
|
||||
bintools = pkgs.bintools.override { inherit libc; };
|
||||
}
|
||||
else
|
||||
llvmPackages_latest.clang;
|
||||
|
||||
# Overrides that create a useful environment for swift packages, allowing
|
||||
# packaging with `swiftPackages.callPackage`. These are similar to
|
||||
# `apple_sdk_11_0.callPackage`, with our clang on top.
|
||||
inherit (clang) bintools;
|
||||
stdenv = overrideCC pkgs.stdenv clang;
|
||||
darwin = pkgs.darwin.overrideScope (_: prev: {
|
||||
inherit apple_sdk;
|
||||
inherit (apple_sdk) Libsystem LibsystemCross libcharset libunwind objc4 configd IOKit Security;
|
||||
CF = apple_sdk.CoreFoundation;
|
||||
});
|
||||
xcodebuild = pkgs.xcbuild.override {
|
||||
inherit (apple_sdk.frameworks) CoreServices CoreGraphics ImageIO;
|
||||
inherit stdenv;
|
||||
sdkVer = "10.15";
|
||||
};
|
||||
xcbuild = xcodebuild;
|
||||
|
||||
swift-unwrapped = callPackage ./compiler {
|
||||
inherit (darwin) DarwinTools cctools sigtool;
|
||||
inherit (apple_sdk) MacOSX-SDK CLTools_Executables;
|
||||
inherit (apple_sdk.frameworks) CoreServices Foundation Combine;
|
||||
};
|
||||
|
||||
swiftNoSwiftDriver = callPackage ./wrapper {
|
||||
swift = swift-unwrapped;
|
||||
useSwiftDriver = false;
|
||||
};
|
||||
|
||||
Dispatch = if stdenv.isDarwin
|
||||
then null # part of libsystem
|
||||
else callPackage ./libdispatch { swift = swiftNoSwiftDriver; };
|
||||
|
||||
Foundation = if stdenv.isDarwin
|
||||
then apple_sdk.frameworks.Foundation
|
||||
else callPackage ./foundation { swift = swiftNoSwiftDriver; };
|
||||
|
||||
# TODO: Apple distributes a binary XCTest with Xcode, but it is not part of
|
||||
# CLTools (or SUS), so would have to figure out how to fetch it. The binary
|
||||
# version has several extra features, like a test runner and ObjC support.
|
||||
XCTest = callPackage ./xctest {
|
||||
inherit (darwin) DarwinTools;
|
||||
swift = swiftNoSwiftDriver;
|
||||
};
|
||||
|
||||
swiftpm = callPackage ./swiftpm {
|
||||
inherit (darwin) DarwinTools cctools;
|
||||
inherit (apple_sdk.frameworks) CryptoKit LocalAuthentication;
|
||||
swift = swiftNoSwiftDriver;
|
||||
};
|
||||
|
||||
swift-driver = callPackage ./swift-driver {
|
||||
swift = swiftNoSwiftDriver;
|
||||
};
|
||||
|
||||
swift = callPackage ./wrapper {
|
||||
swift = swift-unwrapped;
|
||||
};
|
||||
|
||||
sourcekit-lsp = callPackage ./sourcekit-lsp {
|
||||
inherit (apple_sdk.frameworks) CryptoKit LocalAuthentication;
|
||||
};
|
||||
|
||||
swift-docc = callPackage ./swift-docc {
|
||||
inherit (apple_sdk.frameworks) CryptoKit LocalAuthentication;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
in self
|
||||
|
|
61
pkgs/development/compilers/swift/foundation/default.nix
Normal file
61
pkgs/development/compilers/swift/foundation/default.nix
Normal file
|
@ -0,0 +1,61 @@
|
|||
# TODO: We already package the CoreFoundation component of Foundation in:
|
||||
# pkgs/os-specific/darwin/swift-corelibs/corefoundation.nix
|
||||
# This is separate because the CF build is completely different and part of
|
||||
# stdenv. Merging the two was kept outside of the scope of Swift work.
|
||||
|
||||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, cmake
|
||||
, ninja
|
||||
, swift
|
||||
, Dispatch
|
||||
, icu
|
||||
, libxml2
|
||||
, curl
|
||||
}:
|
||||
|
||||
let
|
||||
sources = callPackage ../sources.nix { };
|
||||
in stdenv.mkDerivation {
|
||||
pname = "swift-corelibs-foundation";
|
||||
|
||||
inherit (sources) version;
|
||||
src = sources.swift-corelibs-foundation;
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja swift ];
|
||||
buildInputs = [ icu libxml2 curl ];
|
||||
propagatedBuildInputs = [ Dispatch ];
|
||||
|
||||
preConfigure = ''
|
||||
# Fails to build with -D_FORTIFY_SOURCE.
|
||||
NIX_HARDENING_ENABLE=''${NIX_HARDENING_ENABLE/fortify/}
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
# Split up the output.
|
||||
mkdir $dev
|
||||
mv $out/lib/swift/${swift.swiftOs} $out/swiftlibs
|
||||
mv $out/lib/swift $dev/include
|
||||
mkdir $out/lib/swift
|
||||
mv $out/swiftlibs $out/lib/swift/${swift.swiftOs}
|
||||
|
||||
# Provide a CMake module. This is primarily used to glue together parts of
|
||||
# the Swift toolchain. Modifying the CMake config to do this for us is
|
||||
# otherwise more trouble.
|
||||
mkdir -p $dev/lib/cmake/Foundation
|
||||
export dylibExt="${stdenv.hostPlatform.extensions.sharedLibrary}"
|
||||
export swiftOs="${swift.swiftOs}"
|
||||
substituteAll ${./glue.cmake} $dev/lib/cmake/Foundation/FoundationConfig.cmake
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Core utilities, internationalization, and OS independence for Swift";
|
||||
homepage = "https://github.com/apple/swift-corelibs-foundation";
|
||||
platforms = lib.platforms.linux;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
}
|
8
pkgs/development/compilers/swift/foundation/glue.cmake
Normal file
8
pkgs/development/compilers/swift/foundation/glue.cmake
Normal file
|
@ -0,0 +1,8 @@
|
|||
add_library(Foundation SHARED IMPORTED)
|
||||
set_property(TARGET Foundation PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libFoundation@dylibExt@")
|
||||
|
||||
add_library(FoundationNetworking SHARED IMPORTED)
|
||||
set_property(TARGET FoundationNetworking PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libFoundationNetworking@dylibExt@")
|
||||
|
||||
add_library(FoundationXML SHARED IMPORTED)
|
||||
set_property(TARGET FoundationXML PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libFoundationXML@dylibExt@")
|
42
pkgs/development/compilers/swift/libdispatch/default.nix
Normal file
42
pkgs/development/compilers/swift/libdispatch/default.nix
Normal file
|
@ -0,0 +1,42 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, cmake
|
||||
, ninja
|
||||
, useSwift ? true, swift
|
||||
}:
|
||||
|
||||
let
|
||||
sources = callPackage ../sources.nix { };
|
||||
in stdenv.mkDerivation {
|
||||
pname = "swift-corelibs-libdispatch";
|
||||
|
||||
inherit (sources) version;
|
||||
src = sources.swift-corelibs-libdispatch;
|
||||
|
||||
outputs = [ "out" "dev" "man" ];
|
||||
|
||||
nativeBuildInputs = [ cmake ]
|
||||
++ lib.optionals useSwift [ ninja swift ];
|
||||
|
||||
patches = [ ./disable-swift-overlay.patch ];
|
||||
|
||||
cmakeFlags = lib.optional useSwift "-DENABLE_SWIFT=ON";
|
||||
|
||||
postInstall = ''
|
||||
# Provide a CMake module. This is primarily used to glue together parts of
|
||||
# the Swift toolchain. Modifying the CMake config to do this for us is
|
||||
# otherwise more trouble.
|
||||
mkdir -p $dev/lib/cmake/dispatch
|
||||
export dylibExt="${stdenv.hostPlatform.extensions.sharedLibrary}"
|
||||
substituteAll ${./glue.cmake} $dev/lib/cmake/dispatch/dispatchConfig.cmake
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Grand Central Dispatch";
|
||||
homepage = "https://github.com/apple/swift-corelibs-libdispatch";
|
||||
platforms = lib.platforms.linux;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ cmm dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
Enabling Swift support is normally intended for building an overlay for a
|
||||
Swift SDK, which changes the installation layout. Prevent this.
|
||||
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -287,7 +287,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
|
||||
add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:HAVE_CONFIG_H>)
|
||||
|
||||
|
||||
-if(ENABLE_SWIFT)
|
||||
+if(0)
|
||||
set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>" CACHE PATH "Path where the libraries will be installed")
|
||||
set(INSTALL_DISPATCH_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch")
|
||||
set(INSTALL_BLOCK_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime")
|
||||
--- a/man/CMakeLists.txt
|
||||
+++ b/man/CMakeLists.txt
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
# TODO(compnerd) add symlinks
|
||||
-if(NOT ENABLE_SWIFT)
|
||||
+if(1)
|
||||
install(FILES
|
||||
dispatch.3
|
||||
dispatch_after.3
|
||||
--- a/src/swift/CMakeLists.txt
|
||||
+++ b/src/swift/CMakeLists.txt
|
||||
@@ -47,7 +47,7 @@ get_swift_host_arch(swift_arch)
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftmodule
|
||||
${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftdoc
|
||||
- DESTINATION ${INSTALL_TARGET_DIR}/${swift_arch})
|
||||
+ DESTINATION ${INSTALL_TARGET_DIR}/swift)
|
||||
set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS swiftDispatch)
|
||||
install(TARGETS swiftDispatch
|
||||
EXPORT dispatchExports
|
5
pkgs/development/compilers/swift/libdispatch/glue.cmake
Normal file
5
pkgs/development/compilers/swift/libdispatch/glue.cmake
Normal file
|
@ -0,0 +1,5 @@
|
|||
add_library(dispatch SHARED IMPORTED)
|
||||
set_property(TARGET dispatch PROPERTY IMPORTED_LOCATION "@out@/lib/libdispatch@dylibExt@")
|
||||
|
||||
add_library(swiftDispatch SHARED IMPORTED)
|
||||
set_property(TARGET swiftDispatch PROPERTY IMPORTED_LOCATION "@out@/lib/libswiftDispatch@dylibExt@")
|
|
@ -1,13 +0,0 @@
|
|||
Don't build Ninja, we use our own.
|
||||
|
||||
--- a/utils/build-presets.ini
|
||||
+++ b/utils/build-presets.ini
|
||||
@@ -779,7 +779,7 @@ swiftpm
|
||||
|
||||
dash-dash
|
||||
|
||||
-build-ninja
|
||||
+# build-ninja
|
||||
install-llvm
|
||||
install-swift
|
||||
install-lldb
|
|
@ -1,13 +0,0 @@
|
|||
Use custom install prefix.
|
||||
|
||||
--- a/utils/build-presets.ini
|
||||
+++ b/utils/build-presets.ini
|
||||
@@ -788,7 +788,7 @@
|
||||
install-swiftpm
|
||||
install-xctest
|
||||
install-libicu
|
||||
-install-prefix=/usr
|
||||
+install-prefix=%(install_prefix)s
|
||||
install-libcxx
|
||||
install-sourcekit-lsp
|
||||
build-swift-static-stdlib
|
|
@ -1,23 +0,0 @@
|
|||
Disable targets, where we use Nix packages.
|
||||
|
||||
--- a/utils/build-presets.ini
|
||||
+++ b/utils/build-presets.ini
|
||||
@@ -818,8 +818,6 @@
|
||||
swiftpm
|
||||
swift-driver
|
||||
xctest
|
||||
-libicu
|
||||
-libcxx
|
||||
swiftdocc
|
||||
|
||||
# build-ninja
|
||||
@@ -830,9 +828,7 @@
|
||||
install-swiftpm
|
||||
install-swift-driver
|
||||
install-xctest
|
||||
-install-libicu
|
||||
install-prefix=%(install_prefix)s
|
||||
-install-libcxx
|
||||
install-sourcekit-lsp
|
||||
install-swiftdocc
|
||||
build-swift-static-stdlib
|
|
@ -1,13 +0,0 @@
|
|||
Plumb extra-cmake-options.
|
||||
|
||||
--- a/utils/build-presets.ini
|
||||
+++ b/utils/build-presets.ini
|
||||
@@ -812,6 +812,8 @@
|
||||
# Path to the .tar.gz package we would create.
|
||||
installable-package=%(installable_package)s
|
||||
|
||||
+extra-cmake-options=%(extra_cmake_options)s
|
||||
+
|
||||
[preset: buildbot_linux]
|
||||
mixin-preset=mixin_linux_installation
|
||||
build-subdir=buildbot_linux
|
|
@ -1,16 +0,0 @@
|
|||
Apply the "purity" patch (updated for 5.4.2).
|
||||
|
||||
--- a/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -488,11 +488,5 @@
|
||||
if (Args.hasArg(options::OPT_rdynamic))
|
||||
CmdArgs.push_back("-export-dynamic");
|
||||
-
|
||||
- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE) {
|
||||
- CmdArgs.push_back("-dynamic-linker");
|
||||
- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) +
|
||||
- ToolChain.getDynamicLinker(Args)));
|
||||
- }
|
||||
}
|
||||
|
||||
CmdArgs.push_back("-o");
|
|
@ -1,13 +0,0 @@
|
|||
Use os-stdlib in tests.
|
||||
|
||||
--- a/utils/build-presets.ini
|
||||
+++ b/utils/build-presets.ini
|
||||
@@ -872,7 +872,7 @@
|
||||
indexstore-db
|
||||
sourcekit-lsp
|
||||
swiftdocc
|
||||
-lit-args=-v --time-tests
|
||||
+lit-args=-v --time-tests --param use_os_stdlib
|
||||
|
||||
# rdar://problem/31454823
|
||||
lldb-test-swift-only
|
72
pkgs/development/compilers/swift/sourcekit-lsp/default.nix
Normal file
72
pkgs/development/compilers/swift/sourcekit-lsp/default.nix
Normal file
|
@ -0,0 +1,72 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, swift
|
||||
, swiftpm
|
||||
, swiftpm2nix
|
||||
, Foundation
|
||||
, XCTest
|
||||
, sqlite
|
||||
, ncurses
|
||||
, CryptoKit
|
||||
, LocalAuthentication
|
||||
}:
|
||||
let
|
||||
sources = callPackage ../sources.nix { };
|
||||
generated = swiftpm2nix.helpers ./generated;
|
||||
|
||||
# On Darwin, we only want ncurses in the linker search path, because headers
|
||||
# are part of libsystem. Adding its headers to the search path causes strange
|
||||
# mixing and errors.
|
||||
# TODO: Find a better way to prevent this conflict.
|
||||
ncursesInput = if stdenv.isDarwin then ncurses.out else ncurses;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "sourcekit-lsp";
|
||||
|
||||
inherit (sources) version;
|
||||
src = sources.sourcekit-lsp;
|
||||
|
||||
nativeBuildInputs = [ swift swiftpm ];
|
||||
buildInputs = [
|
||||
Foundation
|
||||
XCTest
|
||||
sqlite
|
||||
ncursesInput
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [ CryptoKit LocalAuthentication ];
|
||||
|
||||
configurePhase = generated.configure + ''
|
||||
swiftpmMakeMutable indexstore-db
|
||||
patch -p1 -d .build/checkouts/indexstore-db -i ${./patches/indexstore-db-macos-target.patch}
|
||||
|
||||
# This toggles a section specific to Xcode XCTest, which doesn't work on
|
||||
# Darwin, where we also use swift-corelibs-xctest.
|
||||
substituteInPlace Sources/LSPTestSupport/PerfTestCase.swift \
|
||||
--replace '#if os(macOS)' '#if false'
|
||||
|
||||
# Required to link with swift-corelibs-xctest on Darwin.
|
||||
export SWIFTTSC_MACOS_DEPLOYMENT_TARGET=10.12
|
||||
'';
|
||||
|
||||
# TODO: BuildServerBuildSystemTests fails
|
||||
#doCheck = true;
|
||||
|
||||
installPhase = ''
|
||||
binPath="$(swiftpmBinPath)"
|
||||
mkdir -p $out/bin
|
||||
cp $binPath/sourcekit-lsp $out/bin/
|
||||
'';
|
||||
|
||||
# Canary to verify output of our Swift toolchain does not depend on the Swift
|
||||
# compiler itself. (Only its 'lib' output.)
|
||||
disallowedRequisites = [ swift.swift ];
|
||||
|
||||
meta = {
|
||||
description = "Language Server Protocol implementation for Swift and C-based languages";
|
||||
homepage = "https://github.com/apple/sourcekit-lsp";
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
# This file was generated by swiftpm2nix.
|
||||
{
|
||||
workspaceStateFile = ./workspace-state.json;
|
||||
hashes = {
|
||||
"indexstore-db" = "005vvkrncgpryzrn0hzgsapflpyga0n7152b2b565wislpx90cwl";
|
||||
"swift-argument-parser" = "1jph9w7lk9nr20fsv2c8p4hisx3dda817fh7pybd0r0j1jwa9nmw";
|
||||
"swift-collections" = "0l0pv16zil3n7fac7mdf5qxklxr5rwiig5bixgca1ybq7arlnv7i";
|
||||
"swift-crypto" = "020b8q4ss2k7a65r5dgh59z40i6sn7ij1allxkh8c8a9d0jzn313";
|
||||
"swift-driver" = "0nblvs47kh2hl1l70rmrbablx4m5i27w8l3dfrv2h7zccqr8jl0a";
|
||||
"swift-llbuild" = "1bvqbj8ji72ilh3ah2mw411jwzbbjxjyasa6sg4b8da0kqia4021";
|
||||
"swift-package-manager" = "16qvk14f1l0hf5bphx6qk51nn9d36a2iw5v3sgkvmqi8h7l4kqg5";
|
||||
"swift-system" = "0402hkx2q2dv27gccnn8ma79ngvwiwzkhcv4zlcdldmy6cgi0px7";
|
||||
"swift-tools-support-core" = "1ryd5iyx5mfv8bhyq3bf08z7nv886chzzqnmwaj16r2cry9yml7c";
|
||||
"Yams" = "11abhcfkmqm3cmh7vp7rqzvxd1zj02j2866a2pp6v9m89456xb76";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,178 @@
|
|||
{
|
||||
"object": {
|
||||
"artifacts": [],
|
||||
"dependencies": [
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "indexstore-db",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/indexstore-db.git",
|
||||
"name": "IndexStoreDB"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "main",
|
||||
"revision": "2ff1c0491248cd958a2ac05da9aa613eb27a8eeb"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "indexstore-db"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-argument-parser",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-argument-parser.git",
|
||||
"name": "swift-argument-parser"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "e394bf350e38cb100b6bc4172834770ede1b7232",
|
||||
"version": "1.0.3"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-argument-parser"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-collections",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-collections.git",
|
||||
"name": "swift-collections"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "f504716c27d2e5d4144fa4794b12129301d17729",
|
||||
"version": "1.0.3"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-collections"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-crypto",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-crypto.git",
|
||||
"name": "swift-crypto"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "ddb07e896a2a8af79512543b1c7eb9797f8898a5",
|
||||
"version": "1.1.7"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-crypto"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-driver",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-driver.git",
|
||||
"name": "swift-driver"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "main",
|
||||
"revision": "6c71f58f89d65eb79f1f6b32a707ddc39cec5ad6"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-driver"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-llbuild",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-llbuild.git",
|
||||
"name": "llbuild"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "main",
|
||||
"revision": "d99c31577c60a247b065d29289a44fbdd141e2be"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-llbuild"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-package-manager",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-package-manager.git",
|
||||
"name": "SwiftPM"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "main",
|
||||
"revision": "f04ad469a6053d713c2fb854fbeb27ee3e6c9dee"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-package-manager"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-system",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-system.git",
|
||||
"name": "swift-system"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "836bc4557b74fe6d2660218d56e3ce96aff76574",
|
||||
"version": "1.1.1"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-system"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-tools-support-core",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-tools-support-core.git",
|
||||
"name": "swift-tools-support-core"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "main",
|
||||
"revision": "0220fc394f2ae820eeacd754fb2c7ce211e9979e"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-tools-support-core"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "yams",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/jpsim/Yams.git",
|
||||
"name": "Yams"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "01835dc202670b5bb90d07f3eae41867e9ed29f6",
|
||||
"version": "5.0.1"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "Yams"
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 5
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
Raise the deployment target of IndexStoreDB so it can link against our XCTest.
|
||||
|
||||
--- a/Package.swift
|
||||
+++ b/Package.swift
|
||||
@@ -4,6 +4,7 @@ import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "IndexStoreDB",
|
||||
+ platforms: [.macOS("10.12")],
|
||||
products: [
|
||||
.library(
|
||||
name: "IndexStoreDB",
|
33
pkgs/development/compilers/swift/sources.nix
Normal file
33
pkgs/development/compilers/swift/sources.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{ lib, fetchFromGitHub }:
|
||||
|
||||
let
|
||||
|
||||
# These packages are all part of the Swift toolchain, and have a single
|
||||
# upstream version that should match. We also list the hashes here so a basic
|
||||
# version upgrade touches only this file.
|
||||
version = "5.7";
|
||||
hashes = {
|
||||
llvm-project = "sha256-uW6dEAFaDOlHXnq8lFYxrKNLRPEukauZJxX4UCpWpIY=";
|
||||
sourcekit-lsp = "sha256-uA3a+kAqI+XFzkDFEJ8XuRTgfYqacEuTsOU289Im+0Y=";
|
||||
swift = "sha256-n8WVQYinAyIj4wmQnDhvPsH+t8ydANkGbjFJ6blfHOY=";
|
||||
swift-cmark = "sha256-f0BoTs4HYdx/aJ9HIGCWMalhl8PvClWD6R4QK3qSgAw=";
|
||||
swift-corelibs-foundation = "sha256-6XUSC6759dcG24YapWicjRzUnmVVe0QPSsLEw4sQNjI=";
|
||||
swift-corelibs-libdispatch = "sha256-1qbXiC1k9+T+L6liqXKg6EZXqem6KEEx8OctuL4Kb2o=";
|
||||
swift-corelibs-xctest = "sha256-qLUO9/3tkJWorDMEHgHd8VC3ovLLq/UWXJWMtb6CMN0=";
|
||||
swift-docc = "sha256-WlXJMAnrlVPCM+iCIhG0Gyho76BsC2yVBEpX3m/WiIQ=";
|
||||
swift-docc-render-artifact = "sha256-ttdurN/K7OX+I4577jG3YGeRs+GLUTc7BiiEZGmFD+s=";
|
||||
swift-driver = "sha256-sk7XWXYR1MGPEeVxA6eA/vxhN6Gq16iD1RHpVstL3zE=";
|
||||
swift-experimental-string-processing = "sha256-Ar9fQWi8bYSvGErrS0SWrxIxwEwCjsYIZcWweZ8bV28=";
|
||||
swift-package-manager = "sha256-MZah+/XfeK46YamxwuE3Kiv+u5bj7VmjEh6ztDF+0j4=";
|
||||
};
|
||||
|
||||
# Create fetch derivations.
|
||||
sources = lib.mapAttrs (repo: hash: fetchFromGitHub {
|
||||
owner = "apple";
|
||||
inherit repo;
|
||||
rev = "swift-${version}-RELEASE";
|
||||
name = "${repo}-${version}-src";
|
||||
hash = hashes.${repo};
|
||||
}) hashes;
|
||||
|
||||
in sources // { inherit version; }
|
53
pkgs/development/compilers/swift/swift-docc/default.nix
Normal file
53
pkgs/development/compilers/swift/swift-docc/default.nix
Normal file
|
@ -0,0 +1,53 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, swift
|
||||
, swiftpm
|
||||
, swiftpm2nix
|
||||
, Foundation
|
||||
, XCTest
|
||||
, CryptoKit
|
||||
, LocalAuthentication
|
||||
}:
|
||||
let
|
||||
sources = callPackage ../sources.nix { };
|
||||
generated = swiftpm2nix.helpers ./generated;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "swift-docc";
|
||||
|
||||
inherit (sources) version;
|
||||
src = sources.swift-docc;
|
||||
# TODO: We could build this from `apple/swift-docc-render` source, but that
|
||||
# repository is not tagged.
|
||||
renderArtifact = sources.swift-docc-render-artifact;
|
||||
|
||||
nativeBuildInputs = [ swift swiftpm ];
|
||||
buildInputs = [ Foundation XCTest ]
|
||||
++ lib.optionals stdenv.isDarwin [ CryptoKit LocalAuthentication ];
|
||||
|
||||
configurePhase = generated.configure;
|
||||
|
||||
# TODO: Tests depend on indexstore-db being provided by an existing Swift
|
||||
# toolchain. (ie. looks for `../lib/libIndexStore.so` relative to swiftc.
|
||||
#doCheck = true;
|
||||
|
||||
installPhase = ''
|
||||
binPath="$(swiftpmBinPath)"
|
||||
mkdir -p $out/bin $out/share/docc
|
||||
cp $binPath/docc $out/bin/
|
||||
ln -s $renderArtifact/dist $out/share/docc/render
|
||||
'';
|
||||
|
||||
# Canary to verify output of our Swift toolchain does not depend on the Swift
|
||||
# compiler itself. (Only its 'lib' output.)
|
||||
disallowedRequisites = [ swift.swift ];
|
||||
|
||||
meta = {
|
||||
description = "Documentation compiler for Swift";
|
||||
homepage = "https://github.com/apple/swift-docc";
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
# This file was generated by swiftpm2nix.
|
||||
{
|
||||
workspaceStateFile = ./workspace-state.json;
|
||||
hashes = {
|
||||
"swift-argument-parser" = "070gip241dgn3d0nxgwxva4vp6kbnf11g01q5yaq6kmflcmz58f2";
|
||||
"swift-cmark" = "0xfchdgls3070z16in8ks69y8fpiajmyk7lmp5h7ym7164isa6bb";
|
||||
"swift-crypto" = "0h054rq14jyg94aiymmp37vqz60a13dlczp5g09pln724j4ypv92";
|
||||
"swift-docc-plugin" = "11d6nhi139yzk1lxxrixsbgyj1bnvmh40wj30y725q83nqq49ljh";
|
||||
"swift-docc-symbolkit" = "14hb2wc09hisf2r2yny17z28z0m58cf4lnqaczad2x2hk4s1iayi";
|
||||
"swift-lmdb" = "1m5y6x2vs1wflcv2c57rx87gh12sy0hkwy5iy9inxmda2mcs8qcb";
|
||||
"swift-markdown" = "09270bfrwlp904cma29hsbhr1p25v8kwgvhcfi7lg2av7aaknd97";
|
||||
"swift-nio" = "04bvay94b34ynmlvgyl9a7f431l3cf8k2zr483spv8mvyh1hxiqn";
|
||||
"swift-nio-ssl" = "1ak4aldilmz0pnfgbwq1x4alr38nfyvx2pz7p2vi2plf82da80g5";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
{
|
||||
"object": {
|
||||
"artifacts": [],
|
||||
"dependencies": [
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-argument-parser",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-argument-parser",
|
||||
"name": "swift-argument-parser"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "d2930e8fcf9c33162b9fcc1d522bc975e2d4179b",
|
||||
"version": "1.0.1"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-argument-parser"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-cmark",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-cmark.git",
|
||||
"name": "cmark-gfm"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7-gfm",
|
||||
"revision": "792c1c3326327515ce9bf64c44196b7f4daab9a6"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-cmark"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-crypto",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-crypto.git",
|
||||
"name": "swift-crypto"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "9680b7251cd2be22caaed8f1468bd9e8915a62fb",
|
||||
"version": "1.1.2"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-crypto"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-docc-plugin",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-docc-plugin",
|
||||
"name": "SwiftDocCPlugin"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "3303b164430d9a7055ba484c8ead67a52f7b74f6",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-docc-plugin"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-docc-symbolkit",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-docc-symbolkit",
|
||||
"name": "SymbolKit"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7",
|
||||
"revision": "8682202025906dce29a8b04f9263f40ba87b89d8"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-docc-symbolkit"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-lmdb",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-lmdb.git",
|
||||
"name": "CLMDB"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7",
|
||||
"revision": "6ea45a7ebf6d8f72bd299dfcc3299e284bbb92ee"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-lmdb"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-markdown",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-markdown.git",
|
||||
"name": "swift-markdown"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7",
|
||||
"revision": "d6cd065a7e4b6c3fad615dcd39890e095a2f63a2"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-markdown"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-nio",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-nio.git",
|
||||
"name": "swift-nio"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "1d425b0851ffa2695d488cce1d68df2539f42500",
|
||||
"version": "2.31.2"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-nio"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-nio-ssl",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-nio-ssl.git",
|
||||
"name": "swift-nio-ssl"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "2e74773972bd6254c41ceeda827f229bccbf1c0f",
|
||||
"version": "2.15.0"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-nio-ssl"
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 5
|
||||
}
|
77
pkgs/development/compilers/swift/swift-driver/default.nix
Normal file
77
pkgs/development/compilers/swift/swift-driver/default.nix
Normal file
|
@ -0,0 +1,77 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, fetchpatch
|
||||
, swift
|
||||
, swiftpm
|
||||
, swiftpm2nix
|
||||
, Foundation
|
||||
, XCTest
|
||||
, sqlite
|
||||
, ncurses
|
||||
, substituteAll
|
||||
}:
|
||||
let
|
||||
sources = callPackage ../sources.nix { };
|
||||
generated = swiftpm2nix.helpers ./generated;
|
||||
|
||||
# On Darwin, we only want ncurses in the linker search path, because headers
|
||||
# are part of libsystem. Adding its headers to the search path causes strange
|
||||
# mixing and errors.
|
||||
# TODO: Find a better way to prevent this conflict.
|
||||
ncursesInput = if stdenv.isDarwin then ncurses.out else ncurses;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "swift-driver";
|
||||
|
||||
inherit (sources) version;
|
||||
src = sources.swift-driver;
|
||||
|
||||
nativeBuildInputs = [ swift swiftpm ];
|
||||
buildInputs = [
|
||||
Foundation
|
||||
XCTest
|
||||
sqlite
|
||||
ncursesInput
|
||||
];
|
||||
|
||||
patches = [
|
||||
./patches/nix-resource-root.patch
|
||||
./patches/disable-catalyst.patch
|
||||
./patches/linux-fix-linking.patch
|
||||
# TODO: Replace with branch patch once merged:
|
||||
# https://github.com/apple/swift-driver/pull/1197
|
||||
(fetchpatch {
|
||||
url = "https://github.com/apple/swift-driver/commit/d3ef9cdf4871a58eddec7ff0e28fe611130da3f9.patch";
|
||||
hash = "sha256-eVBaKN6uzj48ZnHtwGV0k5ChKjak1tDCyE+wTdyGq2c=";
|
||||
})
|
||||
# Prevent a warning about SDK directories we don't have.
|
||||
(substituteAll {
|
||||
src = ./patches/prevent-sdk-dirs-warnings.patch;
|
||||
inherit (builtins) storeDir;
|
||||
})
|
||||
];
|
||||
|
||||
configurePhase = generated.configure;
|
||||
|
||||
# TODO: Tests depend on indexstore-db being provided by an existing Swift
|
||||
# toolchain. (ie. looks for `../lib/libIndexStore.so` relative to swiftc.
|
||||
#doCheck = true;
|
||||
|
||||
# TODO: Darwin-specific installation includes more, but not sure why.
|
||||
installPhase = ''
|
||||
binPath="$(swiftpmBinPath)"
|
||||
mkdir -p $out/bin
|
||||
for executable in swift-driver swift-help swift-build-sdk-interfaces; do
|
||||
cp $binPath/$executable $out/bin/
|
||||
done
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Swift compiler driver";
|
||||
homepage = "https://github.com/apple/swift-driver";
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
# This file was generated by swiftpm2nix.
|
||||
{
|
||||
workspaceStateFile = ./workspace-state.json;
|
||||
hashes = {
|
||||
"swift-argument-parser" = "11did5snqj8chcbdbiyx84mpif940ls2pr1iikwivvfp63i248hm";
|
||||
"swift-llbuild" = "07zbp2dyfqd1bnyg7snpr9brn40jf22ivly5v10mql3hrg76a18h";
|
||||
"swift-system" = "0402hkx2q2dv27gccnn8ma79ngvwiwzkhcv4zlcdldmy6cgi0px7";
|
||||
"swift-tools-support-core" = "1vabl1z5sm2lrd75f5c781rkrq0liinpjvnrjr6i6r8cqrp0q5jb";
|
||||
"Yams" = "1893y13sis2aimi1a5kgkczbf06z4yig054xb565yg2xm13srb45";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"object": {
|
||||
"artifacts": [],
|
||||
"dependencies": [
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-argument-parser",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-argument-parser.git",
|
||||
"name": "swift-argument-parser"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "e1465042f195f374b94f915ba8ca49de24300a0d",
|
||||
"version": "1.0.2"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-argument-parser"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-llbuild",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-llbuild.git",
|
||||
"name": "llbuild"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7",
|
||||
"revision": "564424db5fdb62dcb5d863bdf7212500ef03a87b"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-llbuild"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-system",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-system.git",
|
||||
"name": "swift-system"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "836bc4557b74fe6d2660218d56e3ce96aff76574",
|
||||
"version": "1.1.1"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-system"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "swift-tools-support-core",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/apple/swift-tools-support-core.git",
|
||||
"name": "swift-tools-support-core"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"branch": "release/5.7",
|
||||
"revision": "afc0938503bac012f76ceb619d031f63edc4c5f7"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "swift-tools-support-core"
|
||||
},
|
||||
{
|
||||
"basedOn": null,
|
||||
"packageRef": {
|
||||
"identity": "yams",
|
||||
"kind": "remoteSourceControl",
|
||||
"location": "https://github.com/jpsim/Yams.git",
|
||||
"name": "Yams"
|
||||
},
|
||||
"state": {
|
||||
"checkoutState": {
|
||||
"revision": "9ff1cc9327586db4e0c8f46f064b6a82ec1566fa",
|
||||
"version": "4.0.6"
|
||||
},
|
||||
"name": "sourceControlCheckout"
|
||||
},
|
||||
"subpath": "Yams"
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 5
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
Tries to parse SDKSettings.plist looking for a Catalyst version map, but we
|
||||
don't currently support this.
|
||||
|
||||
--- a/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift
|
||||
+++ b/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift
|
||||
@@ -297,11 +297,7 @@ public final class DarwinToolchain: Toolchain {
|
||||
debugDescription: "Malformed version string")
|
||||
}
|
||||
self.version = version
|
||||
- if self.canonicalName.hasPrefix("macosx") {
|
||||
- self.versionMap = try keyedContainer.decode(VersionMap.self, forKey: .versionMap)
|
||||
- } else {
|
||||
self.versionMap = VersionMap()
|
||||
- }
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
--- a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
|
||||
+++ b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
|
||||
@@ -9,6 +9,7 @@
|
||||
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
+import Foundation
|
||||
import TSCBasic
|
||||
import SwiftOptions
|
||||
|
||||
@@ -116,7 +117,20 @@ extension GenericUnixToolchain {
|
||||
// just using `clang` and avoid a dependency on the C++ runtime.
|
||||
let clangTool: Tool =
|
||||
parsedOptions.hasArgument(.enableExperimentalCxxInterop) ? .clangxx : .clang
|
||||
- var clangPath = try getToolPath(clangTool)
|
||||
+
|
||||
+ // For Nix, prefer linking using the wrapped system clang, instead of using
|
||||
+ // the unwrapped clang packaged with swift. The latter is unable to link, but
|
||||
+ // we still want to use it for other purposes (clang importer).
|
||||
+ var clangPath: AbsolutePath
|
||||
+ let env = ProcessInfo.processInfo.environment
|
||||
+ if let nixCC = env["NIX_CC"],
|
||||
+ let binPath = try? AbsolutePath(validating: "\(nixCC)/bin"),
|
||||
+ let tool = lookupExecutablePath(filename: parsedOptions.hasArgument(.enableExperimentalCxxInterop)
|
||||
+ ? "clang++" : "clang",
|
||||
+ searchPaths: [binPath]) {
|
||||
+ clangPath = tool
|
||||
+ } else {
|
||||
+ clangPath = try getToolPath(clangTool)
|
||||
if let toolsDirPath = parsedOptions.getLastArgument(.toolsDirectory) {
|
||||
// FIXME: What if this isn't an absolute path?
|
||||
let toolsDir = try AbsolutePath(validating: toolsDirPath.asSingle)
|
||||
@@ -132,6 +146,7 @@ extension GenericUnixToolchain {
|
||||
commandLine.appendFlag("-B")
|
||||
commandLine.appendPath(toolsDir)
|
||||
}
|
||||
+ } // nixCC
|
||||
|
||||
// Executables on Linux get -pie
|
||||
if targetTriple.os == .linux && linkerOutputType == .executable {
|
|
@ -0,0 +1,28 @@
|
|||
Swift normally looks for the Clang resource dir in a subdir/symlink of its own
|
||||
resource dir. We provide a symlink to the Swift build-time Clang as a default
|
||||
there, but we also here patch a check to try locate it via NIX_CC.
|
||||
|
||||
--- a/Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift
|
||||
+++ b/Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift
|
||||
@@ -9,6 +9,7 @@
|
||||
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
+import Foundation
|
||||
import TSCBasic
|
||||
import SwiftOptions
|
||||
|
||||
@@ -24,6 +25,13 @@ extension Toolchain {
|
||||
for targetInfo: FrontendTargetInfo,
|
||||
parsedOptions: inout ParsedOptions
|
||||
) throws -> VirtualPath {
|
||||
+ let env = ProcessInfo.processInfo.environment
|
||||
+ if let nixCC = env["NIX_CC"] {
|
||||
+ return try VirtualPath(path: nixCC)
|
||||
+ .appending(components: "resource-root", "lib",
|
||||
+ targetInfo.target.triple.platformName(conflatingDarwin: true)!)
|
||||
+ }
|
||||
+
|
||||
return VirtualPath.lookup(targetInfo.runtimeResourcePath.path)
|
||||
.appending(components: "clang", "lib",
|
||||
targetInfo.target.triple.platformName(conflatingDarwin: true)!)
|
|
@ -0,0 +1,16 @@
|
|||
Prevents a user-visible warning on every compilation:
|
||||
|
||||
ld: warning: directory not found for option '-L.../MacOSX11.0.sdk/usr/lib/swift'
|
||||
|
||||
--- a/Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift
|
||||
+++ b/Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift
|
||||
@@ -50,7 +50,9 @@ extension Toolchain {
|
||||
result.append(sdkPath.appending(components: "System", "iOSSupport", "usr", "lib", "swift"))
|
||||
}
|
||||
|
||||
+ if sdkPath.absolutePath?.pathString.starts(with: "@storeDir@") == false {
|
||||
result.append(sdkPath.appending(components: "usr", "lib", "swift"))
|
||||
+ }
|
||||
}
|
||||
|
||||
return result
|
90
pkgs/development/compilers/swift/swiftpm/cmake-glue.nix
Normal file
90
pkgs/development/compilers/swift/swiftpm/cmake-glue.nix
Normal file
|
@ -0,0 +1,90 @@
|
|||
# SwiftPM dependencies are normally not installed using CMake, and only provide
|
||||
# CMake modules to link them together in a build tree. We have separate
|
||||
# derivations, so need a real install step. Here we provide our own minimal
|
||||
# CMake modules to install along with the build products.
|
||||
{ lib, stdenv, swift }:
|
||||
let
|
||||
|
||||
inherit (stdenv.hostPlatform) extensions;
|
||||
|
||||
# This file exports shell snippets for use in postInstall.
|
||||
mkInstallScript = module: template: ''
|
||||
mkdir -p $out/lib/cmake/${module}
|
||||
(
|
||||
export staticLibExt="${extensions.staticLibrary}"
|
||||
export sharedLibExt="${extensions.sharedLibrary}"
|
||||
export swiftOs="${swift.swiftOs}"
|
||||
substituteAll \
|
||||
${builtins.toFile "${module}Config.cmake" template} \
|
||||
$out/lib/cmake/${module}/${module}Config.cmake
|
||||
)
|
||||
'';
|
||||
|
||||
in lib.mapAttrs mkInstallScript {
|
||||
SwiftSystem = ''
|
||||
add_library(SwiftSystem::SystemPackage STATIC IMPORTED)
|
||||
set_property(TARGET SwiftSystem::SystemPackage PROPERTY IMPORTED_LOCATION "@out@/lib/swift_static/@swiftOs@/libSystemPackage@staticLibExt@")
|
||||
'';
|
||||
|
||||
SwiftCollections = ''
|
||||
add_library(SwiftCollections::Collections STATIC IMPORTED)
|
||||
set_property(TARGET SwiftCollections::Collections PROPERTY IMPORTED_LOCATION "@out@/lib/swift_static/@swiftOs@/libCollections@staticLibExt@")
|
||||
|
||||
add_library(SwiftCollections::DequeModule STATIC IMPORTED)
|
||||
set_property(TARGET SwiftCollections::DequeModule PROPERTY IMPORTED_LOCATION "@out@/lib/swift_static/@swiftOs@/libDequeModule@staticLibExt@")
|
||||
|
||||
add_library(SwiftCollections::OrderedCollections STATIC IMPORTED)
|
||||
set_property(TARGET SwiftCollections::OrderedCollections PROPERTY IMPORTED_LOCATION "@out@/lib/swift_static/@swiftOs@/libOrderedCollections@staticLibExt@")
|
||||
'';
|
||||
|
||||
TSC = ''
|
||||
add_library(TSCLibc SHARED IMPORTED)
|
||||
set_property(TARGET TSCLibc PROPERTY IMPORTED_LOCATION "@out@/lib/libTSCLibc@sharedLibExt@")
|
||||
|
||||
add_library(TSCBasic SHARED IMPORTED)
|
||||
set_property(TARGET TSCBasic PROPERTY IMPORTED_LOCATION "@out@/lib/libTSCBasic@sharedLibExt@")
|
||||
|
||||
add_library(TSCUtility SHARED IMPORTED)
|
||||
set_property(TARGET TSCUtility PROPERTY IMPORTED_LOCATION "@out@/lib/libTSCUtility@sharedLibExt@")
|
||||
'';
|
||||
|
||||
ArgumentParser = ''
|
||||
add_library(ArgumentParser SHARED IMPORTED)
|
||||
set_property(TARGET ArgumentParser PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libArgumentParser@sharedLibExt@")
|
||||
|
||||
add_library(ArgumentParserToolInfo SHARED IMPORTED)
|
||||
set_property(TARGET ArgumentParserToolInfo PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libArgumentParserToolInfo@sharedLibExt@")
|
||||
'';
|
||||
|
||||
Yams = ''
|
||||
add_library(CYaml SHARED IMPORTED)
|
||||
set_property(TARGET CYaml PROPERTY IMPORTED_LOCATION "@out@/lib/libCYaml@sharedLibExt@")
|
||||
|
||||
add_library(Yams SHARED IMPORTED)
|
||||
set_property(TARGET Yams PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libYams@sharedLibExt@")
|
||||
'';
|
||||
|
||||
LLBuild = ''
|
||||
add_library(libllbuild SHARED IMPORTED)
|
||||
set_property(TARGET libllbuild PROPERTY IMPORTED_LOCATION "@out@/lib/libllbuild@sharedLibExt@")
|
||||
|
||||
add_library(llbuildSwift SHARED IMPORTED)
|
||||
set_property(TARGET llbuildSwift PROPERTY IMPORTED_LOCATION "@out@/lib/swift/pm/llbuild/libllbuildSwift@sharedLibExt@")
|
||||
'';
|
||||
|
||||
SwiftDriver = ''
|
||||
add_library(SwiftDriver SHARED IMPORTED)
|
||||
set_property(TARGET SwiftDriver PROPERTY IMPORTED_LOCATION "@out@/lib/libSwiftDriver@sharedLibExt@")
|
||||
|
||||
add_library(SwiftDriverExecution SHARED IMPORTED)
|
||||
set_property(TARGET SwiftDriverExecution PROPERTY IMPORTED_LOCATION "@out@/lib/libSwiftDriverExecution@sharedLibExt@")
|
||||
|
||||
add_library(SwiftOptions SHARED IMPORTED)
|
||||
set_property(TARGET SwiftOptions PROPERTY IMPORTED_LOCATION "@out@/lib/libSwiftOptions@sharedLibExt@")
|
||||
'';
|
||||
|
||||
SwiftCrypto = ''
|
||||
add_library(Crypto SHARED IMPORTED)
|
||||
set_property(TARGET Crypto PROPERTY IMPORTED_LOCATION "@out@/lib/swift/@swiftOs@/libCrypto@sharedLibExt@")
|
||||
'';
|
||||
}
|
418
pkgs/development/compilers/swift/swiftpm/default.nix
Normal file
418
pkgs/development/compilers/swift/swiftpm/default.nix
Normal file
|
@ -0,0 +1,418 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, cmake
|
||||
, ninja
|
||||
, git
|
||||
, swift
|
||||
, swiftpm2nix
|
||||
, Foundation
|
||||
, XCTest
|
||||
, sqlite
|
||||
, ncurses
|
||||
, substituteAll
|
||||
, runCommandLocal
|
||||
, makeWrapper
|
||||
, DarwinTools # sw_vers
|
||||
, cctools # vtool
|
||||
, xcbuild
|
||||
, CryptoKit
|
||||
, LocalAuthentication
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
inherit (swift) swiftOs swiftModuleSubdir swiftStaticModuleSubdir;
|
||||
sharedLibraryExt = stdenv.hostPlatform.extensions.sharedLibrary;
|
||||
|
||||
sources = callPackage ../sources.nix { };
|
||||
generated = swiftpm2nix.helpers ./generated;
|
||||
cmakeGlue = callPackage ./cmake-glue.nix { };
|
||||
|
||||
# Common attributes for the bootstrap swiftpm and the final swiftpm.
|
||||
commonAttrs = {
|
||||
inherit (sources) version;
|
||||
src = sources.swift-package-manager;
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
# Required at run-time for the host platform to build package manifests.
|
||||
propagatedBuildInputs = [ Foundation ];
|
||||
patches = [
|
||||
./patches/cmake-disable-rpath.patch
|
||||
./patches/disable-sandbox.patch
|
||||
./patches/fix-clang-cxx.patch
|
||||
(substituteAll {
|
||||
src = ./patches/disable-xctest.patch;
|
||||
inherit (builtins) storeDir;
|
||||
})
|
||||
(substituteAll {
|
||||
src = ./patches/fix-stdlib-path.patch;
|
||||
inherit (builtins) storeDir;
|
||||
swiftLib = swift.swift.lib;
|
||||
})
|
||||
];
|
||||
postPatch = ''
|
||||
# The location of xcrun is hardcoded. We need PATH lookup instead.
|
||||
find Sources -name '*.swift' | xargs sed -i -e 's|/usr/bin/xcrun|xcrun|g'
|
||||
|
||||
# Patch the location where swiftpm looks for its API modules.
|
||||
substituteInPlace Sources/PackageModel/UserToolchain.swift \
|
||||
--replace \
|
||||
'librariesPath = applicationPath.parentDirectory' \
|
||||
"librariesPath = AbsolutePath(\"$out\")"
|
||||
'';
|
||||
};
|
||||
|
||||
# Tools invoked by swiftpm at run-time.
|
||||
runtimeDeps = [ git ]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
xcbuild.xcrun
|
||||
# vtool is used to determine a minimum deployment target. This is part of
|
||||
# cctools, but adding that as a build input puts an unwrapped linker in
|
||||
# PATH, and breaks builds. This small derivation exposes just vtool.
|
||||
(runCommandLocal "vtool" { } ''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${cctools}/bin/vtool $out/bin/vtool
|
||||
'')
|
||||
];
|
||||
|
||||
# Common attributes for the bootstrap derivations.
|
||||
mkBootstrapDerivation = attrs: stdenv.mkDerivation (attrs // {
|
||||
nativeBuildInputs = (attrs.nativeBuildInputs or [ ])
|
||||
++ [ cmake ninja swift ]
|
||||
++ lib.optionals stdenv.isDarwin [ DarwinTools ];
|
||||
|
||||
buildInputs = (attrs.buildInputs or [ ])
|
||||
++ [ Foundation ];
|
||||
|
||||
postPatch = (attrs.postPatch or "")
|
||||
+ lib.optionalString stdenv.isDarwin ''
|
||||
# On Darwin only, Swift uses arm64 as cpu arch.
|
||||
if [ -e cmake/modules/SwiftSupport.cmake ]; then
|
||||
substituteInPlace cmake/modules/SwiftSupport.cmake \
|
||||
--replace '"aarch64" PARENT_SCOPE' '"arm64" PARENT_SCOPE'
|
||||
fi
|
||||
'';
|
||||
|
||||
preConfigure = (attrs.preConfigure or "")
|
||||
+ ''
|
||||
# Builds often don't set a target, and our default minimum macOS deployment
|
||||
# target on x86_64-darwin is too low. Harmless on non-Darwin.
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.15.4
|
||||
'';
|
||||
|
||||
postInstall = (attrs.postInstall or "")
|
||||
+ lib.optionalString stdenv.isDarwin ''
|
||||
# The install name of libraries is incorrectly set to lib/ (via our
|
||||
# CMake setup hook) instead of lib/swift/. This'd be easily fixed by
|
||||
# fixDarwinDylibNames, but some builds create libraries that reference
|
||||
# eachother, and we also have to fix those references.
|
||||
dylibs="$(find $out/lib/swift* -name '*.dylib')"
|
||||
changes=""
|
||||
for dylib in $dylibs; do
|
||||
changes+=" -change $(otool -D $dylib | tail -n 1) $dylib"
|
||||
done
|
||||
for dylib in $dylibs; do
|
||||
install_name_tool -id $dylib $changes $dylib
|
||||
done
|
||||
'';
|
||||
|
||||
cmakeFlags = (attrs.cmakeFlags or [ ])
|
||||
++ [
|
||||
# Some builds link to libraries within the same build. Make sure these
|
||||
# create references to $out. None of our builds run their own products,
|
||||
# so we don't have to account for that scenario.
|
||||
"-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON"
|
||||
];
|
||||
});
|
||||
|
||||
# On Darwin, we only want ncurses in the linker search path, because headers
|
||||
# are part of libsystem. Adding its headers to the search path causes strange
|
||||
# mixing and errors.
|
||||
# TODO: Find a better way to prevent this conflict.
|
||||
ncursesInput = if stdenv.isDarwin then ncurses.out else ncurses;
|
||||
|
||||
# Derivations for bootstrapping dependencies using CMake.
|
||||
# This is based on the `swiftpm/Utilities/bootstrap` script.
|
||||
#
|
||||
# Some of the installation steps here are a bit hacky, because it seems like
|
||||
# these packages were not really meant to be installed using CMake. The
|
||||
# regular swiftpm bootstrap simply refers to the source and build
|
||||
# directories. The advantage of separate builds is that we can more easily
|
||||
# link libs together using existing Nixpkgs infra.
|
||||
#
|
||||
# In the end, we don't expose these derivations, and they only exist during
|
||||
# the bootstrap phase. The final swiftpm derivation does not depend on them.
|
||||
|
||||
swift-system = mkBootstrapDerivation {
|
||||
name = "swift-system";
|
||||
src = generated.sources.swift-system;
|
||||
|
||||
postInstall = cmakeGlue.SwiftSystem
|
||||
+ lib.optionalString (!stdenv.isDarwin) ''
|
||||
# The cmake rules apparently only use the Darwin install convention.
|
||||
# Fix up the installation so the module can be found on non-Darwin.
|
||||
mkdir -p $out/${swiftStaticModuleSubdir}
|
||||
mv $out/lib/swift_static/${swiftOs}/*.swiftmodule $out/${swiftStaticModuleSubdir}/
|
||||
'';
|
||||
};
|
||||
|
||||
swift-collections = mkBootstrapDerivation {
|
||||
name = "swift-collections";
|
||||
src = generated.sources.swift-collections;
|
||||
|
||||
postPatch = ''
|
||||
# Only builds static libs on Linux, but this installation difference is a
|
||||
# hassle. Because this installation is temporary for the bootstrap, may
|
||||
# as well build static libs everywhere.
|
||||
sed -i -e '/BUILD_SHARED_LIBS/d' CMakeLists.txt
|
||||
'';
|
||||
|
||||
postInstall = cmakeGlue.SwiftCollections
|
||||
+ lib.optionalString (!stdenv.isDarwin) ''
|
||||
# The cmake rules apparently only use the Darwin install convention.
|
||||
# Fix up the installation so the module can be found on non-Darwin.
|
||||
mkdir -p $out/${swiftStaticModuleSubdir}
|
||||
mv $out/lib/swift_static/${swiftOs}/*.swiftmodule $out/${swiftStaticModuleSubdir}/
|
||||
'';
|
||||
};
|
||||
|
||||
swift-tools-support-core = mkBootstrapDerivation {
|
||||
name = "swift-tools-support-core";
|
||||
src = generated.sources.swift-tools-support-core;
|
||||
|
||||
buildInputs = [
|
||||
swift-system
|
||||
sqlite
|
||||
];
|
||||
|
||||
postInstall = cmakeGlue.TSC + ''
|
||||
# Swift modules are not installed.
|
||||
mkdir -p $out/${swiftModuleSubdir}
|
||||
cp swift/*.swift{module,doc} $out/${swiftModuleSubdir}/
|
||||
|
||||
# Static libs are not installed.
|
||||
cp lib/*.a $out/lib/
|
||||
|
||||
# Headers are not installed.
|
||||
mkdir -p $out/include
|
||||
cp -r ../Sources/TSCclibc/include $out/include/TSC
|
||||
'';
|
||||
};
|
||||
|
||||
swift-argument-parser = mkBootstrapDerivation {
|
||||
name = "swift-argument-parser";
|
||||
src = generated.sources.swift-argument-parser;
|
||||
|
||||
buildInputs = [ ncursesInput sqlite ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DBUILD_TESTING=NO"
|
||||
"-DBUILD_EXAMPLES=NO"
|
||||
];
|
||||
|
||||
postInstall = cmakeGlue.ArgumentParser
|
||||
+ lib.optionalString stdenv.isLinux ''
|
||||
# Fix rpath so ArgumentParserToolInfo can be found.
|
||||
patchelf --add-rpath "$out/lib/swift/${swiftOs}" \
|
||||
$out/lib/swift/${swiftOs}/libArgumentParser.so
|
||||
'';
|
||||
};
|
||||
|
||||
Yams = mkBootstrapDerivation {
|
||||
name = "Yams";
|
||||
src = generated.sources.Yams;
|
||||
|
||||
# Conflicts with BUILD file on case-insensitive filesystems.
|
||||
cmakeBuildDir = "_build";
|
||||
|
||||
postInstall = cmakeGlue.Yams;
|
||||
};
|
||||
|
||||
llbuild = mkBootstrapDerivation {
|
||||
name = "llbuild";
|
||||
src = generated.sources.swift-llbuild;
|
||||
|
||||
nativeBuildInputs = lib.optional stdenv.isDarwin xcbuild;
|
||||
buildInputs = [ ncursesInput sqlite ];
|
||||
|
||||
patches = [
|
||||
./patches/llbuild-cmake-disable-rpath.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Substitute ncurses for curses.
|
||||
find . -name CMakeLists.txt | xargs sed -i -e 's/curses/ncurses/'
|
||||
|
||||
# Use absolute install names instead of rpath.
|
||||
substituteInPlace \
|
||||
products/libllbuild/CMakeLists.txt \
|
||||
products/llbuildSwift/CMakeLists.txt \
|
||||
--replace '@rpath' "$out/lib"
|
||||
|
||||
# This subdirectory is enabled for Darwin only, but requires ObjC XCTest
|
||||
# (and only Swift XCTest is open source).
|
||||
substituteInPlace perftests/CMakeLists.txt \
|
||||
--replace 'add_subdirectory(Xcode/' '#add_subdirectory(Xcode/'
|
||||
'';
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLBUILD_SUPPORT_BINDINGS=Swift"
|
||||
];
|
||||
|
||||
postInstall = cmakeGlue.LLBuild + ''
|
||||
# Install module map.
|
||||
cp ../products/libllbuild/include/module.modulemap $out/include
|
||||
|
||||
# Swift modules are not installed.
|
||||
mkdir -p $out/${swiftModuleSubdir}
|
||||
cp products/llbuildSwift/*.swift{module,doc} $out/${swiftModuleSubdir}/
|
||||
'';
|
||||
};
|
||||
|
||||
swift-driver = mkBootstrapDerivation {
|
||||
name = "swift-driver";
|
||||
src = generated.sources.swift-driver;
|
||||
|
||||
buildInputs = [
|
||||
Yams
|
||||
llbuild
|
||||
swift-system
|
||||
swift-argument-parser
|
||||
swift-tools-support-core
|
||||
];
|
||||
|
||||
postInstall = cmakeGlue.SwiftDriver + ''
|
||||
# Swift modules are not installed.
|
||||
mkdir -p $out/${swiftModuleSubdir}
|
||||
cp swift/*.swift{module,doc} $out/${swiftModuleSubdir}/
|
||||
'';
|
||||
};
|
||||
|
||||
swift-crypto = mkBootstrapDerivation {
|
||||
name = "swift-crypto";
|
||||
src = generated.sources.swift-crypto;
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace /usr/bin/ar $NIX_CC/bin/ar
|
||||
'';
|
||||
|
||||
postInstall = cmakeGlue.SwiftCrypto + ''
|
||||
# Static libs are not installed.
|
||||
cp lib/*.a $out/lib/
|
||||
|
||||
# Headers are not installed.
|
||||
cp -r ../Sources/CCryptoBoringSSL/include $out/include
|
||||
'';
|
||||
};
|
||||
|
||||
# Build a bootrapping swiftpm using CMake.
|
||||
swiftpm-bootstrap = mkBootstrapDerivation (commonAttrs // {
|
||||
pname = "swiftpm-bootstrap";
|
||||
|
||||
buildInputs = [
|
||||
llbuild
|
||||
swift-argument-parser
|
||||
swift-collections
|
||||
swift-crypto
|
||||
swift-driver
|
||||
swift-system
|
||||
swift-tools-support-core
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DUSE_CMAKE_INSTALL=ON"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
for program in $out/bin/swift-*; do
|
||||
wrapProgram $program --prefix PATH : ${lib.makeBinPath runtimeDeps}
|
||||
done
|
||||
'';
|
||||
});
|
||||
|
||||
# Build the final swiftpm with the bootstrapping swiftpm.
|
||||
in stdenv.mkDerivation (commonAttrs // {
|
||||
pname = "swiftpm";
|
||||
|
||||
nativeBuildInputs = commonAttrs.nativeBuildInputs ++ [
|
||||
swift
|
||||
swiftpm-bootstrap
|
||||
];
|
||||
buildInputs = [
|
||||
ncursesInput
|
||||
sqlite
|
||||
XCTest
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
CryptoKit
|
||||
LocalAuthentication
|
||||
];
|
||||
|
||||
configurePhase = generated.configure + ''
|
||||
# Functionality provided by Xcode XCTest, but not available in
|
||||
# swift-corelibs-xctest.
|
||||
swiftpmMakeMutable swift-tools-support-core
|
||||
substituteInPlace .build/checkouts/swift-tools-support-core/Sources/TSCTestSupport/XCTestCasePerf.swift \
|
||||
--replace 'canImport(Darwin)' 'false'
|
||||
|
||||
# Prevent a warning about SDK directories we don't have.
|
||||
swiftpmMakeMutable swift-driver
|
||||
patch -p1 -d .build/checkouts/swift-driver -i ${substituteAll {
|
||||
src = ../swift-driver/patches/prevent-sdk-dirs-warnings.patch;
|
||||
inherit (builtins) storeDir;
|
||||
}}
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
# Required to link with swift-corelibs-xctest on Darwin.
|
||||
export SWIFTTSC_MACOS_DEPLOYMENT_TARGET=10.12
|
||||
|
||||
TERM=dumb swift-build -c release
|
||||
'';
|
||||
|
||||
# TODO: Tests depend on indexstore-db being provided by an existing Swift
|
||||
# toolchain. (ie. looks for `../lib/libIndexStore.so` relative to swiftc.
|
||||
#doCheck = true;
|
||||
#checkPhase = ''
|
||||
# TERM=dumb swift-test -c release
|
||||
#'';
|
||||
|
||||
# The following is dervied from Utilities/bootstrap, see install_swiftpm.
|
||||
installPhase = ''
|
||||
binPath="$(swift-build --show-bin-path -c release)"
|
||||
|
||||
mkdir -p $out/bin $out/lib/swift
|
||||
|
||||
cp $binPath/swift-package $out/bin/
|
||||
wrapProgram $out/bin/swift-package \
|
||||
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
||||
for tool in swift-build swift-test swift-run swift-package-collection; do
|
||||
ln -s $out/bin/swift-package $out/bin/$tool
|
||||
done
|
||||
|
||||
installSwiftpmModule() {
|
||||
mkdir -p $out/lib/swift/pm/$2
|
||||
cp $binPath/lib$1${sharedLibraryExt} $out/lib/swift/pm/$2/
|
||||
|
||||
if [[ -f $binPath/$1.swiftinterface ]]; then
|
||||
cp $binPath/$1.swiftinterface $out/lib/swift/pm/$2/
|
||||
else
|
||||
cp -r $binPath/$1.swiftmodule $out/lib/swift/pm/$2/
|
||||
fi
|
||||
cp $binPath/$1.swiftdoc $out/lib/swift/pm/$2/
|
||||
}
|
||||
installSwiftpmModule PackageDescription ManifestAPI
|
||||
installSwiftpmModule PackagePlugin PluginAPI
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
meta = {
|
||||
description = "The Package Manager for the Swift Programming Language";
|
||||
homepage = "https://github.com/apple/swift-package-manager";
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
|
||||
};
|
||||
})
|
|
@ -0,0 +1,14 @@
|
|||
# This file was generated by swiftpm2nix.
|
||||
{
|
||||
workspaceStateFile = ./workspace-state.json;
|
||||
hashes = {
|
||||
"swift-argument-parser" = "1jph9w7lk9nr20fsv2c8p4hisx3dda817fh7pybd0r0j1jwa9nmw";
|
||||
"swift-collections" = "0l0pv16zil3n7fac7mdf5qxklxr5rwiig5bixgca1ybq7arlnv7i";
|
||||
"swift-crypto" = "020b8q4ss2k7a65r5dgh59z40i6sn7ij1allxkh8c8a9d0jzn313";
|
||||
"swift-driver" = "1lcb5wqragc74nd0fjnk47lyph9hs0i9cps1mplvp2i91yzjqk05";
|
||||
"swift-llbuild" = "07zbp2dyfqd1bnyg7snpr9brn40jf22ivly5v10mql3hrg76a18h";
|
||||
"swift-system" = "0402hkx2q2dv27gccnn8ma79ngvwiwzkhcv4zlcdldmy6cgi0px7";
|
||||
"swift-tools-support-core" = "1vabl1z5sm2lrd75f5c781rkrq0liinpjvnrjr6i6r8cqrp0q5jb";
|
||||
"Yams" = "1893y13sis2aimi1a5kgkczbf06z4yig054xb565yg2xm13srb45";
|
||||
};
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue