mirror of
https://github.com/urbit/shrub.git
synced 2024-12-26 13:31:36 +03:00
build: rework all nix expressions to support hercules-ci builds
This also removes nixcrpkgs and OSX cross compilation in favour of compiling on the target. x86_64/musl targets are still supported on Linux. All sources are now managed via niv (see nix/sources.json) and Haskell package sets are provided/organised via IOHK's haskell.nix. Some effort has been made to expose similar top-level attributes for development, but in some cases there have been changes. Please see the comments in the top-level default.nix and ci.nix files for usage.
This commit is contained in:
parent
75404376ba
commit
ce3cbf0857
123
ci.nix
Normal file
123
ci.nix
Normal file
@ -0,0 +1,123 @@
|
||||
/* Examples
|
||||
|
||||
Perform the same evaluation that occurs on CI via:
|
||||
|
||||
$ NIX_PATH="" nix-instantiate ci.nix --arg supportedSystems '["x86_64-darwin"]'
|
||||
|
||||
Build the release tarball:
|
||||
|
||||
$ NIX_PATH="" nix-instantiate ci.nix -A darwin.tarball
|
||||
*/
|
||||
|
||||
{ supportedSystems ? [ "x86_64-linux" "x86_64-darwin" ] }:
|
||||
|
||||
let
|
||||
|
||||
inherit (import ./nix/default.nix { })
|
||||
lib recurseIntoAttrs haskell-nix callPackage;
|
||||
|
||||
# Local library import from derivation functions such as fetchGitHubLFS, etc.
|
||||
# upon which local package defintions are dependent.
|
||||
localLib = callPackage ./nix/lib { };
|
||||
|
||||
# The key with google storage bucket write permission,
|
||||
# deployed to ci via nixops `deployment.keys."service-account.json"`.
|
||||
serviceAccountKey = builtins.readFile ("/var/run/keys/service-account.json");
|
||||
|
||||
# Push a split output derivation containing "out" and "hash" outputs.
|
||||
pushObject = name: extension: drv:
|
||||
let
|
||||
# Use the sha256 for the object key suffix.
|
||||
sha256 = builtins.readFile (drv.hash + "/sha256");
|
||||
# Use md5 as an idempotency check for gsutil
|
||||
md5 = builtins.readFile (drv.hash + "/md5");
|
||||
in localLib.pushStorageObject {
|
||||
inherit serviceAccountKey md5;
|
||||
|
||||
bucket = "bootstrap.urbit.org";
|
||||
object = "ci/${name}-${sha256}.${extension}";
|
||||
name = "${name}.${extension}";
|
||||
file = drv.out;
|
||||
};
|
||||
|
||||
# Push a split output pill derivation containing "build" attribute with the
|
||||
# with the ".pill" file extension.
|
||||
pushPill = name: drv: pushObject name "pill" drv.build;
|
||||
|
||||
systems = lib.filterAttrs (_: v: builtins.elem v.system supportedSystems) {
|
||||
linux = {
|
||||
system = "x86_64-linux";
|
||||
crossSystem = lib.systems.examples.musl64;
|
||||
};
|
||||
|
||||
darwin = {
|
||||
system = "x86_64-darwin";
|
||||
crossSystem = null;
|
||||
};
|
||||
};
|
||||
|
||||
in localLib.dimension "system" systems (systemName:
|
||||
{ system, crossSystem }:
|
||||
let
|
||||
# Check the pinned haskell.nix hashes for correctness.
|
||||
checkMaterialization = true;
|
||||
|
||||
# Shared libraries/executables for the build (current) system.
|
||||
localPackages = import ./default.nix {
|
||||
inherit system checkMaterialization;
|
||||
|
||||
enableStatic = false;
|
||||
};
|
||||
|
||||
# Static libraries/executables for the host (cross) system.
|
||||
staticPackages = import ./default.nix {
|
||||
inherit system crossSystem checkMaterialization;
|
||||
|
||||
enableStatic = true;
|
||||
};
|
||||
|
||||
# Filter the stack project to only our locally declared packages.
|
||||
haskellPackages =
|
||||
haskell-nix.haskellLib.selectProjectPackages staticPackages.hs;
|
||||
|
||||
# The top-level set of attributes to build on ci.
|
||||
finalPackages = localPackages // {
|
||||
# Expose the nix-shell derivation as a sanity check.
|
||||
shell = import ./shell.nix;
|
||||
|
||||
# Replace the top-level urbit attribute with the static variant.
|
||||
urbit = staticPackages.urbit;
|
||||
|
||||
# Replace the top-level tarball attribute with the static variant.
|
||||
tarball = staticPackages.tarball;
|
||||
|
||||
# Replace the localPackages.hs attribute with the individual components
|
||||
# displayed as top-level attributes:
|
||||
#
|
||||
# <system>.hs.library.[...]
|
||||
# <system>.hs.tests.[...]
|
||||
# <system>.hs.bencharmks.[...]
|
||||
# ...
|
||||
hs = localLib.collectHaskellComponents haskellPackages;
|
||||
|
||||
# Push the tarball to the remote google storage bucket.
|
||||
release = let
|
||||
version = builtins.readFile ./pkg/urbit/version;
|
||||
name = "urbit-v${version}-${system}";
|
||||
in pushObject name "tar.gz" staticPackages.tarball;
|
||||
|
||||
# Replace top-level pill attributes with push to google storage variants.
|
||||
} // lib.optionalAttrs (system == "x86_64-linux") {
|
||||
ivory = pushPill "ivory" localPackages.ivory;
|
||||
brass = pushPill "brass" localPackages.brass;
|
||||
solid = pushPill "solid" localPackages.solid;
|
||||
|
||||
ivory-ropsten = pushPill "ivory-ropsten" localPackages.ivory-ropsten;
|
||||
brass-ropsten = pushPill "brass-ropsten" localPackages.brass-ropsten;
|
||||
};
|
||||
|
||||
# Filter derivations that have meta.platform missing the current system,
|
||||
# such as testFakeShip on darwin.
|
||||
platformFilter = localLib.platformFilterGeneric system;
|
||||
|
||||
in localLib.filterAttrsOnlyRecursive (_: v: platformFilter v) finalPackages)
|
164
default.nix
164
default.nix
@ -1,8 +1,164 @@
|
||||
/* Examples
|
||||
|
||||
Shared urbit and urbit-worker binaries:
|
||||
|
||||
$ nix-build -A urbit
|
||||
|
||||
Static urbit and urbit-worker binaries:
|
||||
|
||||
$ nix-build -A urbit --arg enableSatic true
|
||||
|
||||
Static urbit-king binary:
|
||||
|
||||
$ nix-build -A hs.urbit-king.components.exes.urbit-king --arg enableStatic true
|
||||
|
||||
Static release tarball:
|
||||
|
||||
$ nix-build -A tarball --arg enableStatic true
|
||||
|
||||
Build a pill:
|
||||
|
||||
$ nix-build -A ivory.build
|
||||
$ nix-build -A brass.build
|
||||
$ nix-build -A solid.build
|
||||
|
||||
Build a specific Haskell package from ./pkg/hs:
|
||||
|
||||
$ nix-build -A hs.urbit-noun.components.library
|
||||
$ nix-build -A hs.urbit-atom.components.benchmarks.urbit-atom-bench
|
||||
$ nix-build -A hs.urbit-atom.components.tests.urbit-atom-tests
|
||||
*/
|
||||
|
||||
# The build system where packages will be _built_.
|
||||
{ system ? builtins.currentSystem
|
||||
# The host system where packages will _run_.
|
||||
, crossSystem ? null
|
||||
# Additional sources.json overrides.
|
||||
, sources ? { }
|
||||
# Additional nixpkgs.config overrides.
|
||||
, config ? { }
|
||||
# Additional nixpkgs.overlays.
|
||||
, overlays ? [ ]
|
||||
# Overlays to apply to the last package set in cross compilation.
|
||||
, crossOverlays ? [ ]
|
||||
# Whether to use pkgs.pkgsStatic.* to obtain statically linked package
|
||||
# dependencies - ie. when building fully-static libraries or executables.
|
||||
, enableStatic ? crossSystem != null
|
||||
# Whether to check that the pinned hashes for haskell.nix are correct.
|
||||
# Set to false by default since it's a lot slower, but true for ci.
|
||||
, checkMaterialization ? false }:
|
||||
|
||||
let
|
||||
|
||||
pkgs = import ./nix/pkgs {};
|
||||
deps = import ./nix/deps {};
|
||||
pkgs = import ./nix/default.nix {
|
||||
inherit system crossSystem sources config overlays crossOverlays;
|
||||
};
|
||||
|
||||
in
|
||||
# Local library import from derivation functions such as fetchGitHubLFS, etc.
|
||||
# upon which local package defintions are dependent.
|
||||
localLib = pkgs.callPackage ./nix/lib { };
|
||||
|
||||
deps // pkgs
|
||||
# Utilise nixpkgs's top-level/static.nix overlay if required.
|
||||
hostPackages = if enableStatic then pkgs.pkgsStatic else pkgs;
|
||||
|
||||
# Enrich the global package set with our local functions and packages.
|
||||
callPackage =
|
||||
pkgs.lib.callPackageWith (hostPackages // localLib // localPackages);
|
||||
|
||||
# Local vendored packages defined in ./pkg.
|
||||
# For non-vendored nixpkgs specific package overrides, see ./nix/overlays.
|
||||
localPackages = {
|
||||
argon2u = callPackage ./nix/pkgs/argon2u { };
|
||||
|
||||
ca-bundle = callPackage ./nix/pkgs/ca-bundle { };
|
||||
|
||||
ed25519 = callPackage ./nix/pkgs/ed25519 { };
|
||||
|
||||
ent = callPackage ./nix/pkgs/ent { };
|
||||
|
||||
ge-additions = callPackage ./nix/pkgs/ge-additions { };
|
||||
|
||||
libaes_siv = callPackage ./nix/pkgs/libaes_siv { };
|
||||
|
||||
libscrypt = callPackage ./nix/pkgs/libscrypt { };
|
||||
|
||||
murmur3 = callPackage ./nix/pkgs/murmur3 { };
|
||||
|
||||
softfloat3 = callPackage ./nix/pkgs/softfloat3 { };
|
||||
|
||||
herb = callPackage ./nix/pkgs/herb { inherit (pkgs) python; };
|
||||
|
||||
arvo = callPackage ./nix/pkgs/arvo { };
|
||||
|
||||
ivory = callPackage ./nix/pkgs/pill/ivory.nix { };
|
||||
|
||||
brass = callPackage ./nix/pkgs/pill/brass.nix { };
|
||||
|
||||
solid = callPackage ./nix/pkgs/pill/solid.nix { };
|
||||
|
||||
urbit = callPackage ./nix/pkgs/urbit { inherit enableStatic; };
|
||||
|
||||
hs = callPackage ./nix/pkgs/hs {
|
||||
inherit (pkgs) haskell-nix;
|
||||
inherit checkMaterialization enableStatic;
|
||||
};
|
||||
};
|
||||
|
||||
# Additional top-level packages and attributes exposed for convenience.
|
||||
extraPackages = with localPackages; {
|
||||
# Expose packages we've local customisations for.
|
||||
inherit (hostPackages) libsigsegv;
|
||||
|
||||
urbit-debug = urbit.override { enableDebug = true; };
|
||||
urbit-tests = localLib.testFakeShip {
|
||||
inherit urbit herb;
|
||||
|
||||
pill = solid.lfs;
|
||||
};
|
||||
|
||||
ivory-ropsten = ivory.override { arvo = arvo.ropsten; };
|
||||
brass-ropsten = brass.override { arvo = arvo.ropsten; };
|
||||
|
||||
# FIXME: tarball binaries need executable permissions set?
|
||||
|
||||
# Create a .tar.gz of the primary binaries.
|
||||
tarball = localLib.makeReleaseTarball {
|
||||
name = "urbit-tarball";
|
||||
contents = {
|
||||
"urbit" = "${urbit}/bin/urbit";
|
||||
"urbit-worker" = "${urbit}/bin/urbit-worker";
|
||||
"urbit-king" =
|
||||
"${hs.urbit-king.components.exes.urbit-king}/bin/urbit-king";
|
||||
};
|
||||
};
|
||||
|
||||
# A convenience function for constructing a shell.nix for any of the
|
||||
# localPackage derivations by automatically propagating any dependencies such
|
||||
# as buildInputs to the nix-shell.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# let
|
||||
# pkgs = import ./default.nix { };
|
||||
# in pkgs.shellFor {
|
||||
# packages = ps: [
|
||||
# ps.urbit
|
||||
# ps.herb
|
||||
# ];
|
||||
# }
|
||||
#
|
||||
shellFor = { name, packages, ... }@attrs:
|
||||
pkgs.mkShell ({
|
||||
inputsFrom = packages localPackages;
|
||||
} // builtins.removeAttrs attrs [ "packages" ]);
|
||||
};
|
||||
|
||||
# Ensure that in the case of cross-compilation we're not statically linking
|
||||
# against glibc. This is typically a sign that crossSystem is misconfigured.
|
||||
checkPlatform =
|
||||
if enableStatic && hostPackages.stdenv.hostPlatform.libc == "glibc" then
|
||||
builtins.trace "warning: statically linking against glibc."
|
||||
else
|
||||
pkgs.lib.id;
|
||||
|
||||
in checkPlatform (localPackages // extraPackages)
|
||||
|
@ -1,22 +0,0 @@
|
||||
# All the non-release builds that should be cached in `cachix`.
|
||||
|
||||
let
|
||||
|
||||
pkgs = import ../pkgs {};
|
||||
deps = import ../deps {};
|
||||
|
||||
# Cache the result of cloning source repos.
|
||||
repos = {
|
||||
argon2-src = deps.argon2.src;
|
||||
ed25519-src = deps.ed25519.src;
|
||||
h2o-src = deps.h2o.src;
|
||||
murmur3-src = deps.murmur3.src;
|
||||
scrypt-src = deps.scrypt.src;
|
||||
secp256k1-src = deps.secp256k1.src;
|
||||
softfloat3-src = deps.softfloat3.src;
|
||||
uv-src = deps.uv.src;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
deps // pkgs // repos
|
@ -1,11 +0,0 @@
|
||||
let
|
||||
|
||||
util = import ./util.nix;
|
||||
nixcrpkgs = import ../nixcrpkgs.nix;
|
||||
release = import ../release.nix;
|
||||
all_releases = util.flattenSetPrefix release;
|
||||
crosstools = { inherit (nixcrpkgs.native) pkgconf; };
|
||||
|
||||
in
|
||||
|
||||
crosstools // all_releases
|
@ -1,7 +0,0 @@
|
||||
let
|
||||
ops = import ../ops/default.nix {};
|
||||
in
|
||||
{
|
||||
results = ops.test;
|
||||
fakebus = ops.bus;
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
# Some utility functions:
|
||||
|
||||
rec {
|
||||
|
||||
# The inverse of builtins.listToAttrs
|
||||
attrsToList = o:
|
||||
map (a: { name=a; value=builtins.getAttr a o; })
|
||||
(builtins.attrNames o);
|
||||
|
||||
# ∀o,x,y. produce o' such that o'.y == o.x.y (assuming no conflicts)
|
||||
flattenSet = o:
|
||||
builtins.foldl' (acc: v: acc // v) {}
|
||||
(builtins.attrValues o);
|
||||
|
||||
prefixSetAttrs = prefix: o:
|
||||
builtins.listToAttrs
|
||||
(map ({name, value}: { name=prefix + name; value=value; })
|
||||
(attrsToList o));
|
||||
|
||||
# ∀o,x,y. produce o' such that o'.x-y == o.x.y
|
||||
flattenSetPrefix = o:
|
||||
(builtins.foldl' (acc: o: acc // o) {}
|
||||
(map ({name, value}: prefixSetAttrs name value)
|
||||
(attrsToList o)));
|
||||
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
crossenv:
|
||||
|
||||
rec {
|
||||
argon2 = import ./deps/argon2/cross.nix { inherit crossenv; };
|
||||
murmur3 = import ./deps/murmur3/cross.nix { inherit crossenv; };
|
||||
uv = import ./deps/uv/cross.nix { inherit crossenv; };
|
||||
ed25519 = import ./deps/ed25519/cross.nix { inherit crossenv; };
|
||||
scrypt = import ./deps/scrypt/cross.nix { inherit crossenv; };
|
||||
softfloat3 = import ./deps/softfloat3/cross.nix { inherit crossenv; };
|
||||
secp256k1 = import ./deps/secp256k1/cross.nix { inherit crossenv; };
|
||||
h2o = import ./deps/h2o/cross.nix { inherit crossenv uv; };
|
||||
ivory-header = import ./deps/ivory-header/cross.nix { inherit crossenv; };
|
||||
ca-header = import ./deps/ca-header/cross.nix { inherit crossenv; };
|
||||
}
|
45
nix/default.nix
Normal file
45
nix/default.nix
Normal file
@ -0,0 +1,45 @@
|
||||
# The build system where packages will be _built_.
|
||||
{ system ? builtins.currentSystem
|
||||
# The host system where packages will _run_.
|
||||
, crossSystem ? null
|
||||
# Additional sources.json overrides.
|
||||
, sources ? { }
|
||||
# Additional nixpkgs.config overrides.
|
||||
, config ? { }
|
||||
# Additional nixpkgs.overlays.
|
||||
, overlays ? [ ]
|
||||
# Overlays to apply to the last package set in cross compilation.
|
||||
, crossOverlays ? [ ] }:
|
||||
|
||||
let
|
||||
|
||||
finalSources = import ./sources.nix { inherit pkgs; } // sources;
|
||||
|
||||
haskellNix = import finalSources."haskell.nix" {
|
||||
sourcesOverride = {
|
||||
hackage = finalSources."hackage.nix";
|
||||
stackage = finalSources."stackage.nix";
|
||||
};
|
||||
};
|
||||
|
||||
finalOverlays = [
|
||||
# Add top-level .sources attribute for other overlays to access niv sources.
|
||||
(_final: _prev: { sources = finalSources; })
|
||||
|
||||
# General unguarded (native) overrides for nixpkgs.
|
||||
(import ./overlays/native.nix)
|
||||
|
||||
# Specific overrides guarded by the host platform.
|
||||
(import ./overlays/musl.nix)
|
||||
] ++ haskellNix.overlays ++ overlays;
|
||||
|
||||
pkgs = import finalSources.nixpkgs {
|
||||
inherit system crossSystem crossOverlays;
|
||||
|
||||
config = haskellNix.config // config;
|
||||
overlays = finalOverlays;
|
||||
};
|
||||
|
||||
in pkgs // {
|
||||
pkgsStatic = pkgs.pkgsStatic.extend (import ./overlays/static.nix);
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
let
|
||||
|
||||
pkgs = import ./nixpkgs.nix;
|
||||
tlon = import ./pkgs { pkgs=pkgs; };
|
||||
deps = import ./deps { pkgs=pkgs; };
|
||||
|
||||
tools =
|
||||
with pkgs;
|
||||
[ cargo rustc meson ninja pkgconfig libtool gdb ];
|
||||
|
||||
libs =
|
||||
with pkgs;
|
||||
[ openssl curl gmp scrypt libsigsegv openssl zlib lmdb ];
|
||||
|
||||
osx =
|
||||
with pkgs;
|
||||
lib.optionals stdenv.isDarwin (
|
||||
with darwin.apple_sdk.frameworks;
|
||||
[ Cocoa CoreServices ]);
|
||||
|
||||
vendor =
|
||||
with deps;
|
||||
[ argon2 ed25519 h2o murmur3 scrypt secp256k1 softfloat3 uv ent ge-additions ivory-header ca-header ];
|
||||
|
||||
in
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "urbit-deps-env";
|
||||
env = pkgs.buildEnv { name = name; paths = buildInputs; };
|
||||
buildInputs = tools ++ libs ++ osx ++ vendor;
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cp -r $src ./src
|
||||
chmod -R a+w ./src
|
||||
cd ./src
|
||||
|
||||
sed -i 's|ar rcs|${AR} rcs|' Makefile
|
||||
|
||||
make libargon2.a -j4
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
cp libargon2.a $out/lib
|
||||
cp include/argon2.h $out/include
|
||||
cp ./src/blake2/*.h $out/include
|
@ -1,17 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "argon2-4da94";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CC = "${crossenv.host}-gcc";
|
||||
AR = "${crossenv.host}-ar";
|
||||
NO_THREADS = true;
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "argon2";
|
||||
rev = "4da94a611ee62bad87ab2b131ffda3bcc0723d9c";
|
||||
sha256 = "0bqq1hg367l4jkb6cqhxlblpvdbwz3l586qsfakwzfd9wdvnm3yc";
|
||||
};
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "argon2-4da94";
|
||||
builder = ./builder.sh;
|
||||
NO_THREADS = true;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "argon2";
|
||||
rev = "4da94a611ee62bad87ab2b131ffda3bcc0723d9c";
|
||||
sha256 = "0bqq1hg367l4jkb6cqhxlblpvdbwz3l586qsfakwzfd9wdvnm3yc";
|
||||
};
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
set -ex
|
||||
|
||||
cleanup () {
|
||||
echo "done"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
|
||||
if ! [ -f "$SSL_CERT_FILE" ]; then
|
||||
echo "$SSL_CERT_FILE doesn't exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p ./include
|
||||
|
||||
cat $SSL_CERT_FILE > include/ca-bundle.crt
|
||||
xxd -i include/ca-bundle.crt > ca-bundle.h
|
||||
|
||||
mkdir -p $out/include
|
||||
|
||||
mv ca-bundle.h $out/include
|
||||
rm -rf ./include
|
||||
|
||||
set +x
|
@ -1,8 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "ca-bundle.h";
|
||||
builder = ./builder.sh;
|
||||
native_inputs = with crossenv.nixpkgs; [ cacert xxd ];
|
||||
SSL_CERT_FILE = "${crossenv.nixpkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
name = "ca-bundle.h";
|
||||
builder = ./builder.sh;
|
||||
nativeBuildInputs = with pkgs; [ cacert xxd ];
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{ pkgs ? import ../nixpkgs.nix }:
|
||||
|
||||
rec {
|
||||
argon2 = import ./argon2 { inherit pkgs; };
|
||||
murmur3 = import ./murmur3 { inherit pkgs; };
|
||||
uv = import ./uv { inherit pkgs; };
|
||||
ed25519 = import ./ed25519 { inherit pkgs; };
|
||||
scrypt = import ./scrypt { inherit pkgs; };
|
||||
softfloat3 = import ./softfloat3 { inherit pkgs; };
|
||||
secp256k1 = import ./secp256k1 { inherit pkgs; };
|
||||
h2o = import ./h2o { inherit pkgs uv; };
|
||||
ivory-header = import ./ivory-header { inherit pkgs; };
|
||||
ca-header = import ./ca-header { inherit pkgs; };
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
sources=" \
|
||||
$src/src/add_scalar.c \
|
||||
$src/src/seed.c \
|
||||
$src/src/verify.c \
|
||||
$src/src/add_scalar.c \
|
||||
$src/src/sha512.c \
|
||||
$src/src/ge.c \
|
||||
$src/src/fe.c \
|
||||
$src/src/keypair.c \
|
||||
$src/src/sign.c \
|
||||
$src/src/sc.c \
|
||||
$src/src/key_exchange.c \
|
||||
"
|
||||
|
||||
CFLAGS="-O3 -Wall -I$src/src"
|
||||
|
||||
for fn in $sources
|
||||
do echo $CC $CFLAGS -c $fn -o $(basename $fn).o
|
||||
$CC -O3 -Wall -I$src/src -c $fn -o $(basename $fn).o
|
||||
done
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
|
||||
$AR rcs $out/lib/libed25519.a *.o
|
||||
echo $AR rcs $out/lib/libed25519.a *.o
|
||||
|
||||
cp $src/src/*.h $out/include
|
@ -1,16 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "ed25519-76385";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CC = "${crossenv.host}-gcc";
|
||||
AR = "${crossenv.host}-ar";
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "ed25519";
|
||||
rev = "76385f2ebbbc9580a9c236952d68d11d73a6135c";
|
||||
sha256 = "0s1spif4s9lgcwcny3fl2fvpbw6acqn3s8r6qxnrmkd9icgyw4cp";
|
||||
};
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "ed25519-76385";
|
||||
builder = ./builder.sh;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "ed25519";
|
||||
rev = "76385f2ebbbc9580a9c236952d68d11d73a6135c";
|
||||
sha256 = "0s1spif4s9lgcwcny3fl2fvpbw6acqn3s8r6qxnrmkd9icgyw4cp";
|
||||
};
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
sources=" \
|
||||
deps/cloexec/cloexec.c \
|
||||
deps/libgkc/gkc.c \
|
||||
deps/libyrmcds/close.c \
|
||||
deps/libyrmcds/connect.c \
|
||||
deps/libyrmcds/recv.c \
|
||||
deps/libyrmcds/send.c \
|
||||
deps/libyrmcds/send_text.c \
|
||||
deps/libyrmcds/socket.c \
|
||||
deps/libyrmcds/strerror.c \
|
||||
deps/libyrmcds/text_mode.c \
|
||||
deps/picohttpparser/picohttpparser.c \
|
||||
lib/common/cache.c \
|
||||
lib/common/file.c \
|
||||
lib/common/filecache.c \
|
||||
lib/common/hostinfo.c \
|
||||
lib/common/http1client.c \
|
||||
lib/common/memcached.c \
|
||||
lib/common/memory.c \
|
||||
lib/common/multithread.c \
|
||||
lib/common/serverutil.c \
|
||||
lib/common/socket.c \
|
||||
lib/common/socketpool.c \
|
||||
lib/common/string.c \
|
||||
lib/common/time.c \
|
||||
lib/common/timeout.c \
|
||||
lib/common/url.c \
|
||||
lib/core/config.c \
|
||||
lib/core/configurator.c \
|
||||
lib/core/context.c \
|
||||
lib/core/headers.c \
|
||||
lib/core/logconf.c \
|
||||
lib/core/proxy.c \
|
||||
lib/core/request.c \
|
||||
lib/core/token.c \
|
||||
lib/core/util.c \
|
||||
lib/handler/access_log.c \
|
||||
lib/handler/chunked.c \
|
||||
lib/handler/compress.c \
|
||||
lib/handler/compress/gzip.c \
|
||||
lib/handler/errordoc.c \
|
||||
lib/handler/expires.c \
|
||||
lib/handler/fastcgi.c \
|
||||
lib/handler/file.c \
|
||||
lib/handler/headers.c \
|
||||
lib/handler/mimemap.c \
|
||||
lib/handler/proxy.c \
|
||||
lib/handler/redirect.c \
|
||||
lib/handler/reproxy.c \
|
||||
lib/handler/throttle_resp.c \
|
||||
lib/handler/status.c \
|
||||
lib/handler/headers_util.c \
|
||||
lib/handler/status/events.c \
|
||||
lib/handler/status/requests.c \
|
||||
lib/handler/http2_debug_state.c \
|
||||
lib/handler/status/durations.c \
|
||||
lib/handler/configurator/access_log.c \
|
||||
lib/handler/configurator/compress.c \
|
||||
lib/handler/configurator/errordoc.c \
|
||||
lib/handler/configurator/expires.c \
|
||||
lib/handler/configurator/fastcgi.c \
|
||||
lib/handler/configurator/file.c \
|
||||
lib/handler/configurator/headers.c \
|
||||
lib/handler/configurator/proxy.c \
|
||||
lib/handler/configurator/redirect.c \
|
||||
lib/handler/configurator/reproxy.c \
|
||||
lib/handler/configurator/throttle_resp.c \
|
||||
lib/handler/configurator/status.c \
|
||||
lib/handler/configurator/http2_debug_state.c \
|
||||
lib/handler/configurator/headers_util.c \
|
||||
lib/http1.c \
|
||||
lib/tunnel.c \
|
||||
lib/http2/cache_digests.c \
|
||||
lib/http2/casper.c \
|
||||
lib/http2/connection.c \
|
||||
lib/http2/frame.c \
|
||||
lib/http2/hpack.c \
|
||||
lib/http2/scheduler.c \
|
||||
lib/http2/stream.c \
|
||||
lib/http2/http2_debug_state.c \
|
||||
"
|
||||
|
||||
CFLAGS=" \
|
||||
-O3 \
|
||||
-Wall -Wno-unused-value -Wno-unused-function \
|
||||
-I$src/include \
|
||||
-I$src/deps/cloexec \
|
||||
-I$src/deps/brotli/enc \
|
||||
-I$src/deps/golombset \
|
||||
-I$src/deps/libgkc \
|
||||
-I$src/deps/libyrmcds \
|
||||
-I$src/deps/klib \
|
||||
-I$src/deps/neverbleed \
|
||||
-I$src/deps/picohttpparser \
|
||||
-I$src/deps/picotest \
|
||||
-I$src/deps/yaml/include \
|
||||
-I$src/deps/yoml
|
||||
"
|
||||
|
||||
for s in $sources
|
||||
do cc $CFLAGS -c $src/$s -o $(sed 's|/|_|g; s/.c$/.o/' <<< $s)
|
||||
done
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
ar rcs $out/lib/libh2o.a *.o
|
||||
cp -r $src/include/* $out/include
|
||||
cp $src/deps/picohttpparser/picohttpparser.h $out/include
|
@ -1,17 +0,0 @@
|
||||
{ crossenv, uv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
inherit (crossenv) openssl zlib;
|
||||
inherit uv;
|
||||
|
||||
name = "h2o-0ed9a";
|
||||
cross_inputs = [ uv crossenv.openssl crossenv.zlib ];
|
||||
builder = ./cross.sh;
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "h2o";
|
||||
rev = "0ed9ac70757a16ec45f91b8a347850d9699c3fb1";
|
||||
sha256 = "16b5zbwdq371hhqga76dh7x4c0qr3xb5ah9r8hnm6rip460p6xpm";
|
||||
};
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cp -r $src src
|
||||
chmod -R u+w src
|
||||
cd src
|
||||
|
||||
cmake-cross . \
|
||||
-DZLIB_LIBRARY=$zlib/lib/libz.a \
|
||||
-DZLIB_INCLUDE_DIR=$zlib/include \
|
||||
-DCMAKE_INSTALL_PREFIX=$out \
|
||||
-DBUILD_SHARED_LIBS=off \
|
||||
-DWITH_MRUBY=off \
|
||||
-DWITH_BUNDLED_SSL=off \
|
||||
-DWITH_PICOTLS=on
|
||||
|
||||
make libh2o
|
||||
|
||||
mkdir -p $out/{lib,lib/pkgconfig,include}
|
||||
|
||||
cp ./libh2o.a $out/lib
|
||||
|
||||
cp ./libh2o.pc $out/lib/pkgconfig
|
||||
|
||||
cp -r include/* $out/include
|
||||
|
||||
cp deps/picohttpparser/picohttpparser.h $out/include
|
@ -1,13 +0,0 @@
|
||||
{ pkgs, uv }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "h2o-0ed9a";
|
||||
buildInputs = [ uv pkgs.openssl pkgs.zlib ];
|
||||
builder = ./builder.sh;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "h2o";
|
||||
rev = "0ed9ac70757a16ec45f91b8a347850d9699c3fb1";
|
||||
sha256 = "16b5zbwdq371hhqga76dh7x4c0qr3xb5ah9r8hnm6rip460p6xpm";
|
||||
};
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
set -e
|
||||
|
||||
if ! [ -f "$IVORY" ]; then
|
||||
echo "$IVORY doesn't exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# heuristics to confirm the ivory pill is valid
|
||||
#
|
||||
|
||||
# first 7 bytes != "version" (start of an lfs pointer)
|
||||
#
|
||||
if [ "$(head -c 7 "$IVORY")" = "version" ]; then
|
||||
echo "$IVORY is an LFS pointer (it starts with 'version')"
|
||||
echo "to fix, run: git lfs install"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# greater than 10KB
|
||||
#
|
||||
if ! [ $(du -k "$IVORY" | cut -f1) -gt 10 ]; then
|
||||
echo "$IVORY is less than 10KB"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cat $IVORY > u3_Ivory.pill
|
||||
xxd -i u3_Ivory.pill > ivory.h
|
||||
|
||||
mkdir -p $out/include
|
||||
|
||||
mv ivory.h $out/include
|
||||
rm u3_Ivory.pill
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
crossenv,
|
||||
ivory ? ../../../bin/ivory.pill
|
||||
}:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "ivory.h";
|
||||
builder = ./builder.sh;
|
||||
native_inputs = with crossenv.nixpkgs; [ xxd ];
|
||||
IVORY = ivory;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
ivory ? ../../../bin/ivory.pill
|
||||
}:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
name = "ivory.h";
|
||||
builder = ./builder.sh;
|
||||
nativeBuildInputs = with pkgs; [ xxd ];
|
||||
IVORY = ivory;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
echo $CC -fPIC -O3 -o murmur3.o -c $src/murmur3.c
|
||||
$CC -fPIC -O3 -o murmur3.o -c $src/murmur3.c
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
|
||||
echo $AR rcs $out/lib/libmurmur3.a murmur3.o
|
||||
$AR rcs $out/lib/libmurmur3.a murmur3.o
|
||||
|
||||
cp $src/murmur3.h $out/include
|
@ -1,16 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "murmur3-71a75";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CC = "${crossenv.host}-gcc";
|
||||
AR = "${crossenv.host}-ar";
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "murmur3";
|
||||
rev = "71a75d57ca4e7ca0f7fc2fd84abd93595b0624ca";
|
||||
sha256 = "0k7jq2nb4ad9ajkr6wc4w2yy2f2hkwm3nkbj2pklqgwsg6flxzwg";
|
||||
};
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "murmur3-71a75";
|
||||
builder = ./builder.sh;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "murmur3";
|
||||
rev = "71a75d57ca4e7ca0f7fc2fd84abd93595b0624ca";
|
||||
sha256 = "0k7jq2nb4ad9ajkr6wc4w2yy2f2hkwm3nkbj2pklqgwsg6flxzwg";
|
||||
};
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
sources=" \
|
||||
crypto_scrypt-check \
|
||||
crypto_scrypt-hash \
|
||||
crypto_scrypt-hexconvert \
|
||||
crypto_scrypt-nosse \
|
||||
crypto-mcf \
|
||||
crypto-scrypt-saltgen \
|
||||
slowequals \
|
||||
sha256 \
|
||||
b64 \
|
||||
"
|
||||
|
||||
CFLAGS="-I$src -Wall -ffast-math -O3 -D_FORTIFY_SOURCE=2 -fstack-protector"
|
||||
|
||||
for s in $sources
|
||||
do echo $CC $CFLAGS -c $src/$s.c -o $s.o
|
||||
$CC $CFLAGS -c $src/$s.c -o $s.o
|
||||
done
|
||||
|
||||
echo $AR rcs libscrypt.a *.o
|
||||
$AR rcs libscrypt.a *.o
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
cp libscrypt.a $out/lib
|
||||
cp $src/*.h $out/include
|
@ -1,16 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "scrypt-02969";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CC = "${crossenv.host}-gcc";
|
||||
AR = "${crossenv.host}-ar";
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "libscrypt";
|
||||
rev = "029693ff1cbe4f69d3a2da87d0f4f034f92cc0c2";
|
||||
sha256 = "17pcxypzjmmrvacw45cacvibm6mlr9ip30hy30l1appsnywx679n";
|
||||
};
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "scrypt-02969";
|
||||
builder = ./builder.sh;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "libscrypt";
|
||||
rev = "029693ff1cbe4f69d3a2da87d0f4f034f92cc0c2";
|
||||
sha256 = "17pcxypzjmmrvacw45cacvibm6mlr9ip30hy30l1appsnywx679n";
|
||||
};
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cp -r $src ./src
|
||||
chmod -R u+w ./src
|
||||
cd src
|
||||
|
||||
libtoolize
|
||||
bash ./autogen.sh
|
||||
bash ./configure --prefix=$out --host=$host $configureFlags
|
||||
make
|
||||
make install
|
@ -1,25 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "secp256k1-b4e87";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CFLAGS = "-fPIC";
|
||||
|
||||
configureFlags = [
|
||||
"--disable-shared"
|
||||
"--enable-module-recovery"
|
||||
];
|
||||
|
||||
cross_inputs = [ crossenv.libgmp ];
|
||||
native_inputs =
|
||||
with crossenv.nixpkgs;
|
||||
[ autoconf automake libtool m4 ];
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "bitcoin-core";
|
||||
repo = "secp256k1";
|
||||
rev = "e34ceb333b1c0e6f4115ecbb80c632ac1042fa49";
|
||||
sha256 = "0as78s179hcr3ysk3fw98k5wzabgnwri7vkkc17wg31lyz6ids6c";
|
||||
};
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "secp256k1-b4e87";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CFLAGS = "-fPIC";
|
||||
|
||||
configureFlags = [
|
||||
"--disable-shared"
|
||||
"--enable-module-recovery"
|
||||
];
|
||||
|
||||
buildInputs = [ pkgs.gmp ];
|
||||
nativeBuildInputs =
|
||||
with pkgs;
|
||||
[ autoconf automake libtool m4 ];
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "bitcoin-core";
|
||||
repo = "secp256k1";
|
||||
rev = "e34ceb333b1c0e6f4115ecbb80c632ac1042fa49";
|
||||
sha256 = "0as78s179hcr3ysk3fw98k5wzabgnwri7vkkc17wg31lyz6ids6c";
|
||||
};
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cp -r $src $TMP/$name
|
||||
chmod -R u+w $TMP/$name
|
||||
cd $TMP/$name
|
||||
|
||||
cd ./build/Linux-386-SSE2-GCC
|
||||
sed -i 's|gcc|$(CC)|' Makefile
|
||||
sed -i 's/ar crs/$(AR) crs/' Makefile
|
||||
|
||||
make -j4
|
||||
|
||||
mkdir -p $out/{lib,include}
|
||||
cp $src/source/include/*.h $out/include
|
||||
cp softfloat.a $out/lib/libsoftfloat3.a
|
@ -1,16 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "softfloat3-ec4c7";
|
||||
builder = ./builder.sh;
|
||||
|
||||
CC = "${crossenv.host}-gcc";
|
||||
AR = "${crossenv.host}-ar";
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "berkeley-softfloat-3";
|
||||
rev = "ec4c7e31b32e07aad80e52f65ff46ac6d6aad986";
|
||||
sha256 = "1lz4bazbf7lns1xh8aam19c814a4n4czq5xsq5rmi9sgqw910339";
|
||||
};
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "softfloat3-ec4c7";
|
||||
builder = ./builder.sh;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "berkeley-softfloat-3";
|
||||
rev = "ec4c7e31b32e07aad80e52f65ff46ac6d6aad986";
|
||||
sha256 = "1lz4bazbf7lns1xh8aam19c814a4n4czq5xsq5rmi9sgqw910339";
|
||||
};
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cp -r $src ./src
|
||||
chmod -R a+w ./src
|
||||
cd ./src
|
||||
|
||||
LIBTOOLIZE=libtoolize ./autogen.sh
|
||||
bash ./configure --prefix=$out --host=$host $configureFlags
|
||||
make install
|
@ -1,17 +0,0 @@
|
||||
{ crossenv }:
|
||||
|
||||
crossenv.make_derivation rec {
|
||||
name = "uv-64294";
|
||||
native_inputs = with crossenv.nixpkgs; [ autoconf automake libtool m4 ];
|
||||
builder = ./builder.sh;
|
||||
|
||||
configureFlags = [ "--disable-shared" ];
|
||||
CFLAGS = "-fPIC";
|
||||
|
||||
src = crossenv.nixpkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "libuv";
|
||||
rev = "6429495dc9a80aaf1c243038b381451f12bc7dcf";
|
||||
sha256 = "07m2m4v9mds0wihzjxjwswwfj3rnk2ycr3vgwfcrvnb5xjz7rs15";
|
||||
};
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
{ pkgs }:
|
||||
|
||||
let
|
||||
|
||||
osx =
|
||||
with pkgs;
|
||||
lib.optionals stdenv.isDarwin (
|
||||
with darwin.apple_sdk.frameworks;
|
||||
[ Cocoa CoreServices ]);
|
||||
|
||||
in
|
||||
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
name = "uv-64294";
|
||||
buildInputs = osx ++ (with pkgs; [ autoconf automake libtool m4 ]);
|
||||
builder = ./builder.sh;
|
||||
|
||||
CFLAGS = "-fPIC";
|
||||
configureFlags = [ "--disable-shared" ];
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "urbit";
|
||||
repo = "libuv";
|
||||
rev = "6429495dc9a80aaf1c243038b381451f12bc7dcf";
|
||||
sha256 = "07m2m4v9mds0wihzjxjwswwfj3rnk2ycr3vgwfcrvnb5xjz7rs15";
|
||||
};
|
||||
}
|
57
nix/lib/boot-fake-ship.nix
Normal file
57
nix/lib/boot-fake-ship.nix
Normal file
@ -0,0 +1,57 @@
|
||||
{ stdenvNoCC, cacert }:
|
||||
|
||||
{ urbit, herb, arvo ? null, pill, ship }:
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "fake-${ship}";
|
||||
|
||||
buildInputs = [ cacert urbit herb ];
|
||||
|
||||
phases = [ "buildPhase" "installPhase " ];
|
||||
|
||||
buildPhase = ''
|
||||
set -xeuo pipefail
|
||||
|
||||
if ! [ -f "$SSL_CERT_FILE" ]; then
|
||||
header "$SSL_CERT_FILE doesn't exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ARVO=${if arvo == null then "" else arvo}
|
||||
PILL=${pill}
|
||||
SHIP=${ship}
|
||||
|
||||
if [ -z "$ARVO" ]; then
|
||||
urbit -d -F "$SHIP" -B "$PILL" ./pier
|
||||
else
|
||||
urbit -d -F "$SHIP" -A "$ARVO" -B "$PILL" ./pier
|
||||
fi
|
||||
|
||||
cleanup () {
|
||||
if [ -f ./pier/.vere.lock ]; then
|
||||
kill $(< ./pier/.vere.lock) || true
|
||||
fi
|
||||
|
||||
set +x
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
check () {
|
||||
[ 3 -eq "$(herb ./pier -d 3)" ]
|
||||
}
|
||||
|
||||
if check && sleep 10 && check; then
|
||||
header "boot success"
|
||||
herb ./pier -p hood -d '+hood/exit'
|
||||
else
|
||||
header "boot failure"
|
||||
kill $(< ./pier/.vere.lock) || true
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mv ./pier $out
|
||||
'';
|
||||
}
|
81
nix/lib/default.nix
Normal file
81
nix/lib/default.nix
Normal file
@ -0,0 +1,81 @@
|
||||
{ lib, recurseIntoAttrs, haskell-nix, callPackage }:
|
||||
|
||||
let
|
||||
|
||||
# Fetchers + Import from derivations (IFDs)
|
||||
fetchers = {
|
||||
bootFakeShip = callPackage ./boot-fake-ship.nix { };
|
||||
|
||||
testFakeShip = callPackage ./test-fake-ship.nix { };
|
||||
|
||||
fetchGitHubLFS = callPackage ./fetch-github-lfs.nix { };
|
||||
|
||||
makeReleaseTarball = callPackage ./make-release-tarball.nix { };
|
||||
|
||||
pushStorageObject = callPackage ./push-storage-object.nix { };
|
||||
};
|
||||
|
||||
in fetchers // rec {
|
||||
# Library functions
|
||||
|
||||
inherit (import ./dimension.nix) dimension;
|
||||
|
||||
# A filter for removing packages that aren't supported on the current platform
|
||||
# according to 'meta.platforms'.
|
||||
platformFilterGeneric = system:
|
||||
# This needs to use the correct nixpkgs version so all the systems line up
|
||||
let
|
||||
platform = lib.systems.elaborate { inherit system; };
|
||||
# Can't just default to [] for platforms, since no meta.platforms
|
||||
# means "all platforms" not "no platforms"
|
||||
in drv:
|
||||
if drv ? meta && drv.meta ? platforms then
|
||||
lib.any (lib.meta.platformMatch platform) drv.meta.platforms
|
||||
else
|
||||
true;
|
||||
|
||||
# Keep derivations and attrsets with 'recurseForDerivations'.
|
||||
# This ensures that we match the derivations that Hercules will see.
|
||||
filterDerivations = filterAttrsOnlyRecursive
|
||||
(n: attrs: lib.isDerivation attrs || attrs.recurseForDerivations or false);
|
||||
|
||||
# A version of 'filterAttrsRecursive' that doesn't recurse into derivations.
|
||||
# This prevents us from going into an infinite loop with the 'out' attribute
|
||||
# on derivations.
|
||||
filterAttrsOnlyRecursive = pred: set:
|
||||
lib.listToAttrs (lib.concatMap (name:
|
||||
let v = set.${name};
|
||||
in if pred name v then
|
||||
[
|
||||
(lib.nameValuePair name
|
||||
(if builtins.isAttrs v && !lib.isDerivation v then
|
||||
filterAttrsOnlyRecursive pred v
|
||||
else
|
||||
v))
|
||||
]
|
||||
else
|
||||
[ ]) (builtins.attrNames set));
|
||||
|
||||
collectHaskellComponents = packages:
|
||||
let
|
||||
|
||||
# These functions pull out from the Haskell package set either all the
|
||||
# components of a particular type, or all the checks.
|
||||
|
||||
collectChecks = _: ps:
|
||||
recurseIntoAttrs (builtins.mapAttrs (_: p: p.checks) ps);
|
||||
|
||||
collectComponents = type: ps:
|
||||
haskell-nix.haskellLib.collectComponents' type ps;
|
||||
|
||||
# This computes the Haskell package set sliced by component type
|
||||
in recurseIntoAttrs (dimension "haskell" {
|
||||
# These names must match the subcomponent: components.<name>.<...>
|
||||
"library" = collectComponents;
|
||||
"tests" = collectComponents;
|
||||
"benchmarks" = collectComponents;
|
||||
"exes" = collectComponents;
|
||||
"checks" = collectChecks;
|
||||
} # Apply the selector to the Haskell package set
|
||||
(type: selector: (selector type) packages));
|
||||
}
|
110
nix/lib/dimension.nix
Normal file
110
nix/lib/dimension.nix
Normal file
@ -0,0 +1,110 @@
|
||||
# From https://github.com/input-output-hk/plutus/blob/99f3a16cdf20e9e78a6105a097956a3773466b14/nix/dimension.nix
|
||||
{
|
||||
/* dimension: name -> attrs -> function -> attrs
|
||||
where
|
||||
function: keyText -> value -> attrsOf package
|
||||
|
||||
WARNING: Attribute names must not contain periods (".").
|
||||
See https://github.com/NixOS/nix/issues/3088
|
||||
|
||||
NOTE: The dimension name will be picked up by agent and web ui soon.
|
||||
|
||||
Specifies a dimension of the build matrix. For example
|
||||
|
||||
dimension "Example" {
|
||||
withP = { p = true; }
|
||||
withoutP = { p = false; }
|
||||
} (key: # either "withP" or "withoutP"
|
||||
{ p }: # either p = true or p = false
|
||||
myProject p
|
||||
)
|
||||
|
||||
evaluates roughly to
|
||||
|
||||
{
|
||||
withP = myProject true;
|
||||
withoutP = myProject false;
|
||||
}
|
||||
|
||||
Use nested calls for multiple dimensions.
|
||||
|
||||
Example:
|
||||
|
||||
dimension "System" {
|
||||
"x86_64-linux" = {};
|
||||
# ...
|
||||
}: (system: {}:
|
||||
|
||||
dimension "Nixpkgs release" (
|
||||
{
|
||||
"nixpkgs-19_03".nixpkgs = someSource
|
||||
} // optionalAttrs (system != "...") {
|
||||
"nixpkgs-unstable".nixpkgs = someOtherSource
|
||||
}
|
||||
) (_key: { nixpkgs }:
|
||||
|
||||
myProject system nixpkgs
|
||||
|
||||
)
|
||||
)
|
||||
|
||||
evaluates roughly to
|
||||
|
||||
{
|
||||
x86_64-linux.nixpkgs-19_03 = myProject "x86_64-linux" someSource;
|
||||
x86_64-linux.nixpkgs-unstable = myProject "x86_64-linux" someOtherSource;
|
||||
...
|
||||
}
|
||||
|
||||
If you need to make references across attributes, you can do so by binding
|
||||
the result. Wherever you write
|
||||
|
||||
dimension "My dimension" {} (key: value: f1 key value)
|
||||
|
||||
You can also write
|
||||
|
||||
let
|
||||
myDimension = dimension "My dimension" {} (key: value: f2 key value myDimension)
|
||||
in
|
||||
myDimension
|
||||
|
||||
This example builds a single test runner to reuse across releases:
|
||||
|
||||
let
|
||||
overlay =
|
||||
testRunnerPkgs: self: super: {
|
||||
# ...
|
||||
};
|
||||
myProject =
|
||||
{ nixpkgs,
|
||||
pkgs ? import nixpkgs { overlays = [ overlay ]; },
|
||||
testRunnerPkgs ? pkgs
|
||||
}: pkgs;
|
||||
in
|
||||
|
||||
let
|
||||
latest = "nixpkgs-19_03";
|
||||
releases =
|
||||
dimension "Nixpkgs release"
|
||||
{
|
||||
nixpkgs-18_09.nixpkgs = someSource
|
||||
nixpkgs-19_03.nixpkgs = someOtherSource
|
||||
}
|
||||
(_key: { nixpkgs }:
|
||||
|
||||
myProject {
|
||||
inherit nixpkgs;
|
||||
testRunnerPkgs = releases."${latest}";
|
||||
}
|
||||
|
||||
);
|
||||
in releases;
|
||||
*/
|
||||
dimension = name: attrs: f:
|
||||
builtins.mapAttrs (k: v:
|
||||
let o = f k v;
|
||||
in o // { recurseForDerivations = o.recurseForDerivations or true; })
|
||||
attrs // {
|
||||
meta.dimension.name = name;
|
||||
};
|
||||
}
|
107
nix/lib/fetch-github-lfs.nix
Normal file
107
nix/lib/fetch-github-lfs.nix
Normal file
@ -0,0 +1,107 @@
|
||||
{ lib, stdenvNoCC, runCommandLocal, cacert, curl, jq }:
|
||||
|
||||
{ src
|
||||
# `name` shouldn't use `baseNameOf` otherwise we'll
|
||||
# get `is not allowed to refer to a store path` errors.
|
||||
, name ? baseNameOf src, owner ? "urbit", repo ? "urbit"
|
||||
, preferLocalBuild ? true }:
|
||||
|
||||
assert builtins.isPath src;
|
||||
|
||||
let
|
||||
|
||||
# Parse the first 7 characters of the supplied `src` path for the required
|
||||
# `version` key as defined by the lfs specification:
|
||||
# https://github.com/git-lfs/git-lfs/blob/master/docs/spec.md
|
||||
#
|
||||
# If `version` exists we assume we're dealing with a lfs pointer and parse
|
||||
# the `oid` and `size` from the pointer and write these into a JSON object.
|
||||
#
|
||||
# If the first 7 characters are unrecognised we assume the path is a binary
|
||||
# file and set both `oid` and `size` to `null`.
|
||||
#
|
||||
# The `oid` and `size` are then JSON decoded into an expression to use
|
||||
# as the fixed-output derivation's `sha256 = oid`, and to form a download
|
||||
# operation payload to request the actual lfs blob's real url.
|
||||
pointer = builtins.fromJSON (builtins.readFile
|
||||
(runCommandLocal "lfs-pointer-${name}" { } ''
|
||||
oid="null"
|
||||
size="null"
|
||||
|
||||
if [[ "$(head -c 7 "${src}")" != "version" ]]; then
|
||||
header "lfs ${src} is a binary blob, skipping"
|
||||
else
|
||||
header "reading lfs pointer from ${src}"
|
||||
|
||||
contents=($(awk '{print $2}' "${src}"))
|
||||
oid="''${contents[1]#sha256:}"
|
||||
size="''${contents[2]}"
|
||||
fi
|
||||
|
||||
cat <<EOF > "$out"
|
||||
{"oid": "$oid", "size": $size}
|
||||
EOF
|
||||
''));
|
||||
|
||||
downloadUrl =
|
||||
"https://github.com/${owner}/${repo}.git/info/lfs/objects/batch";
|
||||
|
||||
# Encode `oid` and `size` into a download operation per:
|
||||
# https://github.com/git-lfs/git-lfs/blob/master/docs/api/batch.md
|
||||
#
|
||||
# This is done using toJSON to avoid bash quotation issuthe configurationes.
|
||||
downloadPayload = builtins.toJSON {
|
||||
operation = "download";
|
||||
objects = [ pointer ];
|
||||
};
|
||||
|
||||
# Define a fixed-output derivation using the lfs pointer's `oid` as the
|
||||
# expected sha256 output hash, if `oid` is not null.
|
||||
#
|
||||
|
||||
# 1. Request the actual url of the binary file from the lfs batch api.
|
||||
# 2. Download the binary file contents to `$out`.
|
||||
download = stdenvNoCC.mkDerivation {
|
||||
name = "lfs-blob-${name}";
|
||||
nativeBuildInputs = [ curl jq ];
|
||||
phases = [ "installPhase" ];
|
||||
installPhase = ''
|
||||
curl=(
|
||||
curl
|
||||
--location
|
||||
--max-redirs 20
|
||||
--retry 3
|
||||
--disable-epsv
|
||||
--cookie-jar cookies
|
||||
$NIX_CURL_FLAGS
|
||||
)
|
||||
|
||||
header "reading lfs metadata from ${downloadUrl}"
|
||||
|
||||
href=$("''${curl[@]}" \
|
||||
-d '${downloadPayload}' \
|
||||
-H 'Accept: application/vnd.git-lfs+json' \
|
||||
'${downloadUrl}' \
|
||||
| jq -r '.objects[0].actions.download.href')
|
||||
|
||||
header "download lfs data from remote"
|
||||
|
||||
# Pozor/Achtung: the href contains credential and signature information,
|
||||
# so we avoid echoing it to stdout/err.
|
||||
"''${curl[@]}" -s --output "$out" "$href"
|
||||
'';
|
||||
|
||||
impureEnvVars = stdenvNoCC.lib.fetchers.proxyImpureEnvVars;
|
||||
|
||||
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
|
||||
outputHashAlgo = "sha256";
|
||||
outputHashMode = "flat";
|
||||
outputHash = pointer.oid;
|
||||
|
||||
inherit preferLocalBuild;
|
||||
};
|
||||
|
||||
# If `pointer.oid` is null then supplied the `src` must be a binary
|
||||
# blob and can be returned directly.
|
||||
in if pointer.oid == null || pointer.size == null then src else download
|
37
nix/lib/make-release-tarball.nix
Normal file
37
nix/lib/make-release-tarball.nix
Normal file
@ -0,0 +1,37 @@
|
||||
{ lib, stdenvNoCC, coreutils }:
|
||||
|
||||
{ name, contents # { target = source, ... }
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
transforms = builtins.concatStringsSep " " (lib.mapAttrsToList
|
||||
(target: source: ''--transform "s,${source},${target},"'') contents);
|
||||
|
||||
sources = builtins.concatStringsSep " "
|
||||
(lib.mapAttrsToList (_target: source: "${source}") contents);
|
||||
|
||||
in stdenvNoCC.mkDerivation {
|
||||
name = "${name}.tar.gz";
|
||||
outputs = [ "out" "hash" ];
|
||||
nativeBuildInputs = [ coreutils ];
|
||||
phases = [ "buildPhase" "hashPhase" ];
|
||||
|
||||
buildPhase = ''
|
||||
tar vczf $out \
|
||||
--owner=0 --group=0 --mode=u+rw,uga+r \
|
||||
--absolute-names \
|
||||
--hard-dereference \
|
||||
${transforms} \
|
||||
${sources}
|
||||
'';
|
||||
|
||||
hashPhase = ''
|
||||
mkdir $hash
|
||||
|
||||
md5sum $out | awk '{printf $1}' > $hash/md5
|
||||
sha256sum $out | awk '{printf $1}' > $hash/sha256
|
||||
'';
|
||||
|
||||
preferLocalBuild = true;
|
||||
}
|
64
nix/lib/push-storage-object.nix
Normal file
64
nix/lib/push-storage-object.nix
Normal file
@ -0,0 +1,64 @@
|
||||
{ lib, stdenvNoCC, coreutils, google-cloud-sdk, xxd }:
|
||||
|
||||
# Somewhat annoyingly due to needing to use Google Storage's Content-MD5
|
||||
# to ensure a fixed output derivation - we need an md5sum of the file to
|
||||
# upload. This is in additional to any sha256sum you might want to actually
|
||||
# name the object key under.
|
||||
|
||||
{ bucket, object, name, file, md5, serviceAccountKey, preferLocalBuild ? true }:
|
||||
|
||||
assert lib.asserts.assertMsg (builtins.isString serviceAccountKey)
|
||||
"`serviceAccountKey` must contain the JSON contents of a service-account key";
|
||||
|
||||
let
|
||||
|
||||
uri = "gs://${bucket}/${lib.removePrefix "/" object}";
|
||||
|
||||
in stdenvNoCC.mkDerivation {
|
||||
name = "push-${lib.strings.sanitizeDerivationName name}";
|
||||
|
||||
nativeBuildInputs = [ coreutils google-cloud-sdk xxd ];
|
||||
|
||||
phases = [ "installPhase" ];
|
||||
|
||||
installPhase = ''
|
||||
set -euo pipefail
|
||||
|
||||
export HOME="."
|
||||
|
||||
gcloud auth activate-service-account --key-file=- <<< '${serviceAccountKey}'
|
||||
|
||||
local_md5=$(echo -n '${md5}' | xxd -r -p | base64)
|
||||
remote_md5=
|
||||
|
||||
stat_uri() {
|
||||
header "retrieving md5 for ${uri}"
|
||||
|
||||
remote_md5=$(gsutil stat '${uri}' \
|
||||
| sed -n -e '/Hash (md5):/{s/.*: *//p}' \
|
||||
| base64 -d \
|
||||
| xxd -p)
|
||||
}
|
||||
|
||||
if ! stat_uri; then
|
||||
header "copying ${file} to ${uri}"
|
||||
|
||||
gsutil cp '${file}' '${uri}'
|
||||
|
||||
if ! stat_uri; then
|
||||
echo "failed calculating remote uri md5" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# This is the same format as md5sum (double space separator) and
|
||||
# is used as the outputHash to ensure a fixed output derivation.
|
||||
echo -n "$remote_md5 ${uri}" > $out
|
||||
'';
|
||||
|
||||
outputHashAlgo = "sha256";
|
||||
outputHashMode = "flat";
|
||||
outputHash = builtins.hashString "sha256" "${md5} ${uri}";
|
||||
|
||||
inherit preferLocalBuild;
|
||||
}
|
104
nix/lib/test-fake-ship.nix
Normal file
104
nix/lib/test-fake-ship.nix
Normal file
@ -0,0 +1,104 @@
|
||||
{ stdenvNoCC, cacert }:
|
||||
|
||||
{ urbit, herb, arvo ? null, pill, ship ? "bus" }:
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "test-${ship}";
|
||||
|
||||
buildInputs = [ cacert urbit herb ];
|
||||
|
||||
phases = [ "buildPhase" "installPhase " ];
|
||||
|
||||
buildPhase = ''
|
||||
set -xeuo pipefail
|
||||
|
||||
if ! [ -f "$SSL_CERT_FILE" ]; then
|
||||
header "$SSL_CERT_FILE doesn't exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ARVO=${if arvo == null then "" else arvo}
|
||||
PILL=${pill}
|
||||
SHIP=${ship}
|
||||
|
||||
if [ -z "$ARVO" ]; then
|
||||
urbit -d -F $SHIP -B $PILL ./pier 2> urbit-output
|
||||
else
|
||||
urbit -d -F $SHIP -A $ARVO -B $PILL ./pier 2> urbit-output
|
||||
fi
|
||||
|
||||
tail -f urbit-output >&2 &
|
||||
tailproc=$!
|
||||
|
||||
cleanup () {
|
||||
if [ -e ./pier/.vere.lock ]; then
|
||||
kill $(< ./pier/.vere.lock) || true
|
||||
fi
|
||||
|
||||
kill "$tailproc" || true
|
||||
|
||||
set +x
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
herb ./pier -p hood -d '+hood/mass'
|
||||
|
||||
# Run the unit tests and then print scrollback
|
||||
herb ./pier -d '~& ~ ~& %test-unit-start ~'
|
||||
herb ./pier -d '####-test %/tests'
|
||||
herb ./pier -d '~& ~ ~& %test-unit-end ~'
|
||||
|
||||
# Start and run the test app
|
||||
herb ./pier -p hood -d '+hood/start %test'
|
||||
|
||||
herb ./pier -d '~& ~ ~& %test-agents-start ~'
|
||||
herb ./pier -p test -d '%agents'
|
||||
herb ./pier -d '~& ~ ~& %test-agents-end ~'
|
||||
|
||||
herb ./pier -d '~& ~ ~& %test-generators-start ~'
|
||||
herb ./pier -p test -d '%generators'
|
||||
herb ./pier -d '~& ~ ~& %test-generators-end ~'
|
||||
|
||||
herb ./pier -d '~& ~ ~& %test-marks-start ~'
|
||||
herb ./pier -p test -d '%marks'
|
||||
herb ./pier -d '~& ~ ~& %test-marks-end ~'
|
||||
|
||||
# Compact the loom, comparing memory use before and after
|
||||
herb ./pier -p hood -d '+hood/mass'
|
||||
|
||||
herb ./pier -d '~& ~ ~& %pack-start ~'
|
||||
herb ./pier -p hood -d '+hood/pack'
|
||||
herb ./pier -d '~& ~ ~& %pack-end ~'
|
||||
|
||||
herb ./pier -p hood -d '+hood/mass'
|
||||
herb ./pier -p hood -d '+hood/exit'
|
||||
|
||||
# Collect output
|
||||
cp urbit-output test-output-unit
|
||||
cp urbit-output test-output-agents
|
||||
cp urbit-output test-output-generators
|
||||
cp urbit-output test-output-marks
|
||||
|
||||
rm urbit-output
|
||||
|
||||
sed -i '0,/test-unit-start/d' test-output-unit
|
||||
sed -i '/test-unit-end/,$d' test-output-unit
|
||||
|
||||
sed -i '0,/test-agents-start/d' test-output-agents
|
||||
sed -i '/test-agents-end/,$d' test-output-agents
|
||||
|
||||
sed -i '0,/test-generators-start/d' test-output-generators
|
||||
sed -i '/test-generators-end/,$d' test-output-generators
|
||||
|
||||
sed -i '0,/test-marks-start/d' test-output-marks
|
||||
sed -i '/test-marks-end/,$d' test-output-marks
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r test-output-* $out/
|
||||
'';
|
||||
|
||||
meta = { platforms = [ "x86_64-linux" ]; };
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
let
|
||||
|
||||
nixpkgs = import ./nixpkgs.nix;
|
||||
|
||||
osx_sdk = builtins.fetchurl {
|
||||
sha256 = "89aa34dfe5bcbc7d53d3c55a84b35ac810ecfbcdd16a64c9667992b0c36c60c4";
|
||||
url = "https://github.com/phracker/MacOSX-SDKs/releases/download/10.13/MacOSX10.11.sdk.tar.xz";
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
import ./nixcrpkgs/top.nix { inherit osx_sdk nixpkgs; }
|
4
nix/nixcrpkgs/.gitignore
vendored
4
nix/nixcrpkgs/.gitignore
vendored
@ -1,4 +0,0 @@
|
||||
/result*
|
||||
/support/results
|
||||
macos/MacOSX10.12.sdk.tar.xz
|
||||
macos/MacOSX10.13.sdk.tar.xz
|
@ -1,31 +0,0 @@
|
||||
Copyright (c) 2003-2017 Eelco Dolstra and the Nixpkgs/NixOS contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
======================================================================
|
||||
|
||||
Note: the license above does not apply to the packages built by the
|
||||
Nix Packages collection, merely to the package descriptions (i.e., Nix
|
||||
expressions, build scripts, etc.). Also, the license does not apply
|
||||
to some of the binaries used for bootstrapping Nixpkgs (e.g.,
|
||||
pkgs/stdenv/linux/tools/bash). It also might not apply to patches
|
||||
included in Nixpkgs, which may be derivative works of the packages to
|
||||
which they apply. The aforementioned artifacts are all covered by the
|
||||
licenses of the respective packages.
|
@ -1,25 +0,0 @@
|
||||
Copyright (c) 2017 Pololu Corporation. For more information, see
|
||||
|
||||
http://www.pololu.com/
|
||||
http://forum.pololu.com/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
@ -1,175 +0,0 @@
|
||||
# nixcrpkgs
|
||||
|
||||
[www.pololu.com](https://www.pololu.com/)
|
||||
|
||||
*nixcrpkgs* is a collection of tools for cross-compiling statically-linked,
|
||||
standalone software applications. With nixcrpkgs, you can specify what
|
||||
platforms you want to target, what libraries and build tools you depend on, and
|
||||
the commands that build your software. When you build your software, nixcrpkgs
|
||||
will automatically take care of building or retrieving everything you need,
|
||||
including cross-compilers and libraries.
|
||||
|
||||
nixcrpkgs primarily consists of *Nix expressions*, which are recipes for
|
||||
building software with [Nix, the purely functional package
|
||||
manager][nix]. These recipes build on top of the [Nix
|
||||
Packages collection (Nixpkgs)][nixpkgs].
|
||||
|
||||
## Features
|
||||
|
||||
- Supported target platforms:
|
||||
- Windows (32-bit or 64-bit) using [mingw-w64](https://mingw-w64.org/) and [GCC](https://gcc.gnu.org/) 6.3.0
|
||||
- Linux (32-bit, 64-bit, and ARM) using [musl](https://www.musl-libc.org/) and [GCC](https://gcc.gnu.org/) 6.3.0
|
||||
- macOS using [Clang](https://clang.llvm.org/) 5.0.0
|
||||
- Supported languages for cross-compiling:
|
||||
- C
|
||||
- C++
|
||||
- Supported build platforms:
|
||||
- Linux
|
||||
- Supported build tools:
|
||||
- [CMake](https://cmake.org/)
|
||||
- [GNU Make](https://www.gnu.org/software/make/)
|
||||
- [Ninja](https://ninja-build.org/)
|
||||
- pkg-config (as implemented by [pkgconf](https://github.com/pkgconf/pkgconf))
|
||||
- [GNU Bash](https://www.gnu.org/software/bash/)
|
||||
- [Ruby](https://www.ruby-lang.org/)
|
||||
- Notable supported libraries:
|
||||
- [Qt](https://www.qt.io/) 5.9.6
|
||||
- [libusb](https://libusb.info/)
|
||||
- [libusbp](https://github.com/pololu/libusbp)
|
||||
- [Windows API](https://en.wikipedia.org/wiki/Windows_API) (thanks to mingw-w64)
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To get started, you should first install Nix on a Linux machine by following the
|
||||
instructions on the [Nix website][nix].
|
||||
|
||||
Next, run `df -h` to make sure you have enough disk space.
|
||||
|
||||
- The filesystem that holds `/nix` should have several gigabytes of free
|
||||
space. Each GCC cross-compiler takes about 300 MB while each Qt installation
|
||||
takes about 800 MB.
|
||||
- The filesystem that holds `/tmp` should have at least 4 gigabytes of free
|
||||
space, which will be needed while building cross-compilers. If that is not the
|
||||
case on your system, you can set the `TMPDIR` environment variable to tell
|
||||
`nix-build` to perform its builds in a different directory on a filesystem with
|
||||
more free space.
|
||||
|
||||
Next, clone or download this repository and use `cd` to change into the
|
||||
top-level directory.
|
||||
|
||||
To build a simple "Hello, World!" program for Windows, run:
|
||||
|
||||
nix-build -A win32.hello
|
||||
|
||||
The first time you run this command, it will take a while because Nix has to
|
||||
build a cross-compiling toolchain. When `nix-build` is done, it will print the
|
||||
name of a directory in `/nix/store` that holds the resulting program, and it
|
||||
will create a symbolic link in the current directory named `result` that points
|
||||
to that directory.
|
||||
|
||||
If you copy `result/bin/hello.exe` to a Windows machine and run it, you should
|
||||
see a message box appear that says "Hello, World!".
|
||||
|
||||
If you run `nix-build -A win32.hello` a second time, Nix will detect that
|
||||
nothing about the build recipes has changed, so it will simply print the
|
||||
directory name and remake the symbolic link.
|
||||
|
||||
To see how the `hello` package is specified in nixcrpkgs, you can look in
|
||||
`pkgs.nix` and the `pkgs/hello` directory. To see how the GCC cross-compiler
|
||||
for Windows was specified, you can look in the `mingw-w64` directory. If you
|
||||
change any of the build recipes for `hello` or its dependencies and then run the
|
||||
`nix-build` command again, Nix will automatically rebuild those dependencies and
|
||||
anything that depends on them, ensuring that you always get a consistent build.
|
||||
|
||||
|
||||
### Obtaining the macOS SDK
|
||||
|
||||
If you are trying to build software for macOS, you will need to get a
|
||||
macOS SDK tarball and put it in the the right place. Otherwise, you
|
||||
will get an error like this:
|
||||
|
||||
error: getting attributes of path '/home/yourname/nixcrpkgs/macos/MacOSX.sdk.tar.xz': No such file or directory
|
||||
|
||||
To generate the tarball, follow these steps:
|
||||
|
||||
1. On a macOS machine, install [Xcode](https://developer.apple.com/xcode/).
|
||||
2. Download this repository to the machine.
|
||||
3. In a Terminal window, run the `macos/gen_sdk_package.sh` script from this repository.
|
||||
4. After several minutes, the current directory should have a tarball with a name like
|
||||
`MacOSX10.12.sdk.tar.xz` and a size of about 25 MB.
|
||||
5. Copy the SDK tarball file to the machine where you will be building software,
|
||||
and put it in the `macos` directory.
|
||||
6. The nixcrpkgs build recipe for the SDK is hardcoded to look for a file named
|
||||
`MacOSX.sdk.tar.xz`, so rename the tarball to that.
|
||||
7. Consider keeping a backup of the tarball so you can always rebuild any software you
|
||||
made with it.
|
||||
|
||||
Now you should be able to build your software for macOS.
|
||||
|
||||
|
||||
## Integrating nixcrpkgs into your project
|
||||
|
||||
The instructions above show how to cross-compile a "Hello, World!" program that
|
||||
is included with nixcrpkgs. Instead of including your project in nixcrpkgs like
|
||||
the hello program, you will probably want to just use nixcrpkgs as a tool in
|
||||
your project. To get an idea of how to do that, you can look at other projects
|
||||
that have done the same. In the projects listed below, you should look for a
|
||||
file named `default.nix` in the top-level directory and look for build
|
||||
instructions that explain what `nix-build` commands to run.
|
||||
|
||||
* The [Pololu Tic Stepper Motor Controller software](https://github.com/pololu/pololu-tic-software) is a C/C++ project that uses CMake and nixcrpkgs.
|
||||
* The [Pololu USB AVR Programmer v2 software](https://github.com/pololu/pololu-usb-avr-programmer-v2) is a C++ project that uses CMake and nixcrpkgs.
|
||||
* The [Pololu USB Bootloader Utility (p-load)](https://github.com/pololu/p-load) is a C++ project that uses CMake and nixcrpkgs.
|
||||
|
||||
[nix]: http://nixos.org/nix/
|
||||
[nixpkgs]: http://nixos.org/nixpkgs/
|
||||
|
||||
## Updating package versions
|
||||
|
||||
Each build recipe in nixcrpkgs specifies a version number for the software that it builds. It is relatively easy to update the recipes even if you have not worked with Nix before. The general procedure is:
|
||||
|
||||
1) Find the build recipe you want to update. For example, if you wanted to update the version of GCC used to build Linux programs, you would update the build recipe in `linux/gcc/default.nix`.
|
||||
2) Find the part of the build recipe where the software sources are downloaded from the internet. It is usually a `fetchurl` command with two parameters: `url` and `sha256`. The `url` parameter usually refers to a version string defined nearby, so update that version string and/or the `url` parameter as desired.
|
||||
3) In a shell, run `nix-prefetch-url URL`, where URL is the new URL specified in your modified build recipe with all version variables fully expanded). This command will download the URL you specified, store it in the Nix store, and output the hash of it in the proper format for Nix build recipes.
|
||||
3) Update the `sha256` hash string in the build recipe by replacing it with the hash that was printed in the output of `nix-prefetch-url`. Updating the hash in the build recipe is important: Nix uses it to determine whether you already downloaded the right file, so if you don't update the hash then Nix might use the wrong file (e.g. an older version of the software that you downloaded earlier).
|
||||
4) Run the usual `nix-build` command that you use to build your software. For example, you could go to the top-level directory of nixcrpkgs and run `nix-build -A rpi.hello` to build a "Hello world" program for the Raspberry Pi, or you could run `nix-build -A rpi.gcc` to just build the cross-compiler.
|
||||
5) Fix any error messages that happen, one at a time. (Tip: to make a `.patch` file, run `diff -ur old new` where `old` and `new` are directories that contain the unpatched and patched versions of the source code, respectively.)
|
||||
6) Once things are working, consider publishing your work on Github so others can benefit from what you figured out.
|
||||
|
||||
|
||||
## Maintaining the nixcrpkgs system
|
||||
|
||||
You should occasionally run `nix-collect-garbage` to remove items that are no
|
||||
longer needed and reclaim your disk space. However, note that Nix will
|
||||
typically remove all of your cross compilers and libraries when you run this
|
||||
command, so be prepared to do a lengthy mass rebuild. The Nix manual has more
|
||||
information about [Nix garbage
|
||||
collection](http://nixos.org/nix/manual/#sec-garbage-collection).
|
||||
|
||||
You should occasionally run `nix-channel --update` to update to the latest
|
||||
version of Nixpkgs. However, when doing this, be aware that the new version of
|
||||
Nixpkgs might require you to do a mass rebuild.
|
||||
|
||||
You should occasionally update your checkout of the nixcrpkgs repository to get
|
||||
the latest versions of build tools, new features, and bug fixes. Once again,
|
||||
this might require a mass rebuild.
|
||||
|
||||
If you want your builds to be very stable and reliable, you could make forks of
|
||||
nixcrpkgs and/or Nixpkgs and update them at your own pace, carefully considering
|
||||
any changes made by others before merging them in. That's one of the beauties
|
||||
of Nix when compared to other package management systems: you will never be
|
||||
forced to upgrade your build tools, and using old tools is just as easy as using
|
||||
new ones. You can use the `NIX_PATH` environment variable to tell `nix-build`
|
||||
to use your forked versions.
|
||||
|
||||
|
||||
## Related projects
|
||||
|
||||
* [osxcross]: Cross-compiling toolchain targeting macOS.
|
||||
* [musl-cross-make]: Makefile-based build tool for creating cross-compilers targeting musl.
|
||||
* [musl_nix_arm]: A fork of nixcrpkgs with a focus on building Docker images for ARM Linux.
|
||||
|
||||
[osxcross]: https://github.com/tpoechtrager/osxcross
|
||||
[musl-cross-make]: https://github.com/richfelker/musl-cross-make
|
||||
[musl_nix_arm]: https://github.com/filleduchaos/musl_nix_arm
|
@ -1,8 +0,0 @@
|
||||
source $setup
|
||||
names=($names)
|
||||
dirs=($dirs)
|
||||
mkdir $out
|
||||
cd $out
|
||||
for ((i=0;i<${#names[@]};i++)); do
|
||||
ln -s "${dirs[i]}" "${names[i]}"
|
||||
done
|
@ -1,8 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
cat > $out <<EOF
|
||||
set(CMAKE_SYSTEM_NAME ${cmake_system_name})
|
||||
set(CMAKE_C_COMPILER ${host}-gcc)
|
||||
set(CMAKE_CXX_COMPILER ${host}-g++)
|
||||
set(CMAKE_RC_COMPILER ${host}-windres)
|
||||
EOF
|
@ -1,7 +0,0 @@
|
||||
{ nixpkgs, host, cmake_system_name }:
|
||||
|
||||
nixpkgs.stdenv.mkDerivation {
|
||||
name = "cmake_toolchain-${host}.txt";
|
||||
builder = ./builder.sh;
|
||||
inherit host cmake_system_name;
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
import ./top.nix {
|
||||
nixpkgs = import <nixpkgs> {};
|
||||
osx_sdk = ./macos/MacOSX.sdk.tar.xz;
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
## Linux GCC toolchain
|
||||
|
||||
The files in this directory define how we build our GCC cross-compiler that
|
||||
targets Linux, using the musl libc.
|
||||
|
||||
### A note about `-rdynamic`
|
||||
|
||||
Do not pass `-rdynamic` to GCC when building an executable; it will cause the compiled executable to depend on a musl libc dynamic loader in `/lib` that probably doesn't exist, and defeats the point of static linking. The `-static` option overrides `-rdynamic`, so adding`-static` to the linker flags of a project using `-rdynamic` is one way to fix the issue.
|
||||
|
||||
CMake will pass `-rdynamic` unless you set [CMP0065](https://cmake.org/cmake/help/v3.8/policy/CMP0065.html) to new as shown below, or set your [CMake policy version](https://cmake.org/cmake/help/v3.8/command/cmake_policy.html) to 3.4 or later.
|
||||
|
||||
# Don't use -rdynamic since it causes Musl static linking to not work.
|
||||
cmake_policy(SET CMP0065 NEW)
|
||||
|
@ -1,26 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
unset CC CXX CFLAGS LDFLAGS LD AR AS RANLIB SIZE STRINGS NM STRIP OBJCOPY
|
||||
|
||||
tar -xf $src
|
||||
|
||||
cd binutils-$version
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Clear the default library search path (noSysDirs)
|
||||
echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
|
||||
|
||||
cd ..
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
../binutils-$version/configure --prefix=$out $configure_flags
|
||||
|
||||
make
|
||||
|
||||
make install
|
||||
|
@ -1,26 +0,0 @@
|
||||
{ native, host }:
|
||||
|
||||
native.make_derivation rec {
|
||||
name = "binutils-${version}-${host}";
|
||||
|
||||
version = "2.27";
|
||||
|
||||
src = native.nixpkgs.fetchurl {
|
||||
url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
|
||||
sha256 = "125clslv17xh1sab74343fg6v31msavpmaa1c1394zsqa773g5rn";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./deterministic.patch
|
||||
];
|
||||
|
||||
native_inputs = [ native.nixpkgs.bison native.nixpkgs.zlib ];
|
||||
|
||||
configure_flags =
|
||||
"--target=${host} " +
|
||||
"--enable-shared " +
|
||||
"--enable-deterministic-archives " +
|
||||
"--disable-werror ";
|
||||
|
||||
builder = ./builder.sh;
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
Make binutils output deterministic by default.
|
||||
--- orig/ld/ldlang.c
|
||||
+++ new/ld/ldlang.c
|
||||
@@ -3095,6 +3095,8 @@
|
||||
ldfile_output_machine))
|
||||
einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
|
||||
|
||||
+ link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;
|
||||
+
|
||||
link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
|
||||
if (link_info.hash == NULL)
|
||||
einfo (_("%P%F: can not create hash table: %E\n"));
|
@ -1,78 +0,0 @@
|
||||
{ native, arch, gcc_options ? "" }:
|
||||
let
|
||||
nixpkgs = native.nixpkgs;
|
||||
|
||||
host = "${arch}-linux-musleabi";
|
||||
|
||||
os = "linux";
|
||||
|
||||
compiler = "gcc";
|
||||
|
||||
exe_suffix = "";
|
||||
|
||||
binutils = import ./binutils { inherit native host; };
|
||||
|
||||
linux_arch =
|
||||
if arch == "i686" || arch == "x86_64" then "x86"
|
||||
else if arch == "armv6" || arch == "armv7" then "arm"
|
||||
else throw "not sure what Linux architecture code to use";
|
||||
|
||||
headers = native.make_derivation rec {
|
||||
name = "linux-headers-${linux_arch}-${version}";
|
||||
inherit linux_arch;
|
||||
version = "4.4.10";
|
||||
src = nixpkgs.fetchurl {
|
||||
url = "https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-${version}.tar.xz";
|
||||
sha256 = "1kpjvvd9q9wwr3314q5ymvxii4dv2d27295bzly225wlc552xhja";
|
||||
};
|
||||
builder = ./headers_builder.sh;
|
||||
};
|
||||
|
||||
gcc = import ./gcc {
|
||||
inherit native host binutils headers gcc_options;
|
||||
};
|
||||
|
||||
license = native.make_derivation {
|
||||
name = "linux-license";
|
||||
inherit (gcc) musl_src gcc_src;
|
||||
linux_src = headers.src;
|
||||
builder = ./license_builder.sh;
|
||||
};
|
||||
|
||||
global_license_set = { _global = license; };
|
||||
|
||||
cmake_toolchain = import ../cmake_toolchain {
|
||||
cmake_system_name = "Linux";
|
||||
inherit nixpkgs host;
|
||||
};
|
||||
|
||||
crossenv = {
|
||||
is_cross = true;
|
||||
|
||||
# Build tools available on the PATH for every derivation.
|
||||
default_native_inputs = native.default_native_inputs ++
|
||||
[ gcc binutils native.pkgconf native.wrappers ];
|
||||
|
||||
# Target info environment variables.
|
||||
inherit host arch os compiler exe_suffix;
|
||||
|
||||
# CMake toolchain file.
|
||||
inherit cmake_toolchain;
|
||||
|
||||
# A wide variety of programs and build tools.
|
||||
inherit nixpkgs;
|
||||
|
||||
# Some native build tools made by nixcrpkgs.
|
||||
inherit native;
|
||||
|
||||
# License information that should be shipped with any software
|
||||
# compiled by this environment.
|
||||
inherit global_license_set;
|
||||
|
||||
# Make it easy to refer to the build tools.
|
||||
inherit headers gcc binutils;
|
||||
|
||||
make_derivation = import ../make_derivation.nix crossenv;
|
||||
};
|
||||
in
|
||||
crossenv
|
@ -1,34 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $gcc_src
|
||||
mv gcc-* gcc
|
||||
cd gcc
|
||||
for patch in $gcc_patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
cd ..
|
||||
|
||||
tar -xf $musl_src
|
||||
mv musl-* musl
|
||||
|
||||
mkdir -p $out/$host
|
||||
cp -r --no-preserve=mode $headers/include $out/$host
|
||||
|
||||
mkdir build_gcc
|
||||
cd build_gcc
|
||||
../gcc/configure --prefix=$out $gcc_conf
|
||||
cd ..
|
||||
make -C build_gcc all-gcc
|
||||
mkdir build_musl
|
||||
cd build_musl
|
||||
../musl/configure --prefix=$out/$host $musl_conf \
|
||||
CC="../build_gcc/gcc/xgcc -B ../build_gcc/gcc" \
|
||||
LIBCC=../build_gcc/$host/libgcc/libgcc.a
|
||||
cd ..
|
||||
make -C build_musl install-headers
|
||||
make -C build_gcc all-target-libgcc
|
||||
make -C build_musl
|
||||
make -C build_musl install
|
||||
make -C build_gcc
|
||||
make -C build_gcc install
|
@ -1,81 +0,0 @@
|
||||
{ native, host, binutils, headers, gcc_options }:
|
||||
|
||||
let
|
||||
nixpkgs = native.nixpkgs;
|
||||
isl = nixpkgs.isl_0_14;
|
||||
inherit (nixpkgs) stdenv lib fetchurl;
|
||||
inherit (nixpkgs) gmp libmpc libelf mpfr zlib;
|
||||
in
|
||||
|
||||
native.make_derivation rec {
|
||||
name = "gcc-${gcc_version}-${host}";
|
||||
|
||||
gcc_version = "6.3.0";
|
||||
gcc_src = fetchurl {
|
||||
url = "mirror://gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.bz2";
|
||||
sha256 = "17xjz30jb65hcf714vn9gcxvrrji8j20xm7n33qg1ywhyzryfsph";
|
||||
};
|
||||
|
||||
musl_version = "1.1.16";
|
||||
musl_src = nixpkgs.fetchurl {
|
||||
url = "https://www.musl-libc.org/releases/musl-${musl_version}.tar.gz";
|
||||
sha256 = "048h0w4yjyza4h05bkc6dpwg3hq6l03na46g0q1ha8fpwnjqawck";
|
||||
};
|
||||
|
||||
inherit host headers;
|
||||
|
||||
builder = ./builder.sh;
|
||||
|
||||
gcc_patches = [
|
||||
# These patches are from nixpkgs.
|
||||
./use-source-date-epoch.patch
|
||||
./libstdc++-target.patch
|
||||
|
||||
# Without this, we cannot build a simple hello world program for ARM.
|
||||
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31798
|
||||
./link_gcc_c_sequence_spec.patch
|
||||
|
||||
# Fix a compiler error in GCC's ubsan.c: ISO C++ forbids comparison
|
||||
# between pointer and integer.
|
||||
./ubsan.patch
|
||||
];
|
||||
|
||||
native_inputs = [ binutils ];
|
||||
|
||||
gcc_conf =
|
||||
"--target=${host} " +
|
||||
gcc_options +
|
||||
"--with-gnu-as " +
|
||||
"--with-gnu-ld " +
|
||||
"--with-as=${binutils}/bin/${host}-as " +
|
||||
"--with-ld=${binutils}/bin/${host}-ld " +
|
||||
"--with-isl=${isl} " +
|
||||
"--with-gmp-include=${gmp.dev}/include " +
|
||||
"--with-gmp-lib=${gmp.out}/lib " +
|
||||
"--with-libelf=${libelf}" +
|
||||
"--with-mpfr=${mpfr.dev} " +
|
||||
"--with-mpfr-include=${mpfr.dev}/include " +
|
||||
"--with-mpfr-lib=${mpfr.out}/lib " +
|
||||
"--with-mpc=${libmpc.out} " +
|
||||
"--with-zlib-include=${zlib.dev}/include " +
|
||||
"--with-zlib-lib=${zlib.out}/lib " +
|
||||
"--enable-deterministic-archives " +
|
||||
"--enable-languages=c,c++ " +
|
||||
"--enable-libstdcxx-time " +
|
||||
"--enable-static " +
|
||||
"--enable-tls " +
|
||||
"--disable-gnu-indirect-function " +
|
||||
"--disable-libmudflap " +
|
||||
"--disable-libmpx " +
|
||||
"--disable-libsanitizer " +
|
||||
"--disable-multilib " +
|
||||
"--disable-shared " +
|
||||
"--disable-werror";
|
||||
|
||||
musl_conf =
|
||||
"--target=${host} " +
|
||||
"--disable-shared";
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
}
|
||||
|
@ -1,32 +0,0 @@
|
||||
Patch to make the target libraries 'configure' scripts find the proper CPP.
|
||||
I noticed that building the mingw32 cross compiler.
|
||||
Looking at the build script for mingw in archlinux, I think that only nixos
|
||||
needs this patch. I don't know why.
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 93f66b6..d691917 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -266,6 +266,7 @@ BASE_TARGET_EXPORTS = \
|
||||
AR="$(AR_FOR_TARGET)"; export AR; \
|
||||
AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
|
||||
CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
|
||||
+ CPP="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CC; \
|
||||
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
|
||||
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
||||
CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
|
||||
@@ -291,11 +292,13 @@ BASE_TARGET_EXPORTS = \
|
||||
RAW_CXX_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
||||
- CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
NORMAL_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
- CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
# Where to find GMP
|
||||
HOST_GMPLIBS = @gmplibs@
|
@ -1,12 +0,0 @@
|
||||
diff -ur gcc-6.3.0-orig/gcc/config/gnu-user.h gcc-6.3.0/gcc/config/gnu-user.h
|
||||
--- gcc-6.3.0-orig/gcc/config/gnu-user.h 2017-08-13 19:03:08.671572528 -0700
|
||||
+++ gcc-6.3.0/gcc/config/gnu-user.h 2017-08-13 19:15:00.768588499 -0700
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC \
|
||||
- "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
|
||||
+ "--start-group %G %L --end-group"
|
||||
|
||||
/* Use --as-needed -lgcc_s for eh support. */
|
||||
#ifdef HAVE_LD_AS_NEEDED
|
@ -1,10 +0,0 @@
|
||||
--- gcc-6.3.0-orig/gcc/ubsan.c
|
||||
+++ gcc-6.3.0/gcc/ubsan.c
|
||||
@@ -1471,7 +1471,7 @@
|
||||
|
||||
expanded_location xloc = expand_location (loc);
|
||||
if (xloc.file == NULL || strncmp (xloc.file, "\1", 2) == 0
|
||||
- || xloc.file == '\0' || xloc.file[0] == '\xff'
|
||||
+ || xloc.file == NULL || xloc.file[0] == '\xff'
|
||||
|| xloc.file[1] == '\xff')
|
||||
return false;
|
@ -1,52 +0,0 @@
|
||||
https://gcc.gnu.org/ml/gcc-patches/2015-06/msg02210.html
|
||||
|
||||
diff --git a/libcpp/macro.c b/libcpp/macro.c
|
||||
index 1e0a0b5..a52e3cb 100644
|
||||
--- a/libcpp/macro.c
|
||||
+++ b/libcpp/macro.c
|
||||
@@ -349,14 +349,38 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
|
||||
slow on some systems. */
|
||||
time_t tt;
|
||||
struct tm *tb = NULL;
|
||||
+ char *source_date_epoch;
|
||||
|
||||
- /* (time_t) -1 is a legitimate value for "number of seconds
|
||||
- since the Epoch", so we have to do a little dance to
|
||||
- distinguish that from a genuine error. */
|
||||
- errno = 0;
|
||||
- tt = time(NULL);
|
||||
- if (tt != (time_t)-1 || errno == 0)
|
||||
- tb = localtime (&tt);
|
||||
+ /* Allow the date and time to be set externally by an exported
|
||||
+ environment variable to enable reproducible builds. */
|
||||
+ source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
|
||||
+ if (source_date_epoch)
|
||||
+ {
|
||||
+ errno = 0;
|
||||
+ tt = (time_t) strtol (source_date_epoch, NULL, 10);
|
||||
+ if (errno == 0)
|
||||
+ {
|
||||
+ tb = gmtime (&tt);
|
||||
+ if (tb == NULL)
|
||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||
+ "SOURCE_DATE_EPOCH=\"%s\" is not a valid date",
|
||||
+ source_date_epoch);
|
||||
+ }
|
||||
+ else
|
||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||
+ "SOURCE_DATE_EPOCH=\"%s\" is not a valid number",
|
||||
+ source_date_epoch);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* (time_t) -1 is a legitimate value for "number of seconds
|
||||
+ since the Epoch", so we have to do a little dance to
|
||||
+ distinguish that from a genuine error. */
|
||||
+ errno = 0;
|
||||
+ tt = time(NULL);
|
||||
+ if (tt != (time_t)-1 || errno == 0)
|
||||
+ tb = localtime (&tt);
|
||||
+ }
|
||||
|
||||
if (tb)
|
||||
{
|
@ -1,13 +0,0 @@
|
||||
source $setup
|
||||
shopt -u nullglob
|
||||
|
||||
tar -xf $src
|
||||
mv linux-$version linux
|
||||
|
||||
mkdir -p obj/staged
|
||||
make -C linux headers_install \
|
||||
ARCH=$linux_arch \
|
||||
O=$(pwd)/obj \
|
||||
INSTALL_HDR_PATH=$out
|
||||
|
||||
find $out '(' -name .install -o -name ..install.cmd ')' -exec rm {} +
|
@ -1,45 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $gcc_src
|
||||
mv gcc-* gcc
|
||||
|
||||
tar -xf $musl_src
|
||||
mv musl-* musl
|
||||
|
||||
tar -xf $linux_src
|
||||
mv linux-* linux
|
||||
|
||||
license_gcc=$(cat gcc/COPYING3.LIB)
|
||||
license_musl=$(cat musl/COPYRIGHT)
|
||||
license_linux=$(cat linux/COPYING)
|
||||
|
||||
cat > $out <<EOF
|
||||
<p>
|
||||
The third-party software included with this software may
|
||||
have been patched or otherwise modified.
|
||||
</p>
|
||||
|
||||
<h2>GCC run-time libraries</h2>
|
||||
|
||||
<p>
|
||||
The GCC run-time libraries libgcc and libstdc++ are licensed under the GNU
|
||||
General Public License Version 3 (GPLv3) as shown below.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$license_gcc
|
||||
</pre>
|
||||
|
||||
<h2>musl libc</h2>
|
||||
|
||||
<pre>
|
||||
$license_musl
|
||||
</pre>
|
||||
|
||||
<h2>Linux headers</h2>
|
||||
|
||||
<pre>
|
||||
$license_linux
|
||||
</pre>
|
||||
|
||||
EOF
|
1
nix/nixcrpkgs/macos/.gitignore
vendored
1
nix/nixcrpkgs/macos/.gitignore
vendored
@ -1 +0,0 @@
|
||||
/MacOSX.sdk.tar.xz
|
@ -1,46 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv cctools-port-* cctools-port
|
||||
|
||||
cd cctools-port
|
||||
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Similar to but not the same as the other _structs.h.
|
||||
rm cctools/include/foreign/mach/i386/_structs.h
|
||||
|
||||
# Causes a troublesome undefined reference.
|
||||
rm cctools/libstuff/vm_flush_cache.c
|
||||
|
||||
cd ..
|
||||
|
||||
mv cctools-port/cctools/ar .
|
||||
mv cctools-port/cctools/include .
|
||||
mv cctools-port/cctools/libstuff .
|
||||
rm -r cctools-port
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
CFLAGS="-Wno-deprecated -Wno-deprecated-declarations -Wno-unused-result -Werror -Wfatal-errors -O2 -g -I../include -I../include/foreign -DPROGRAM_PREFIX=\\\"$host-\\\" -D__LITTLE_ENDIAN__ -D__private_extern__= -D__DARWIN_UNIX03 -DPACKAGE_NAME=\\\"cctools\\\" -DPACKAGE_VERSION=\\\"$apple_version\\\" -DEMULATED_HOST_CPU_TYPE=16777223 -DEMULATED_HOST_CPU_SUBTYPE=3"
|
||||
|
||||
CXXFLAGS="-std=gnu++11 $CFLAGS"
|
||||
|
||||
LDFLAGS="-ldl -lpthread"
|
||||
|
||||
for f in ../ar/*.c ../libstuff/*.c; do
|
||||
echo "compiling $f"
|
||||
eval "gcc -c $CFLAGS $f -o $(basename $f).o"
|
||||
done
|
||||
|
||||
gcc *.o $LDFLAGS -o $host-ar
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp $host-ar $out/bin/
|
||||
|
||||
# ar looks for ranlib in this directory
|
||||
ln -s $ranlib/bin/$host-ranlib $out/bin/
|
@ -1,11 +0,0 @@
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/bytesex.h cctools-port-bytesex/cctools/include/stuff/bytesex.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/bytesex.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-bytesex/cctools/include/stuff/bytesex.h 2017-11-10 19:07:26.338161875 -0800
|
||||
@@ -48,6 +48,7 @@
|
||||
#include <mach/m88k/thread_status.h>
|
||||
#include <mach/i860/thread_status.h>
|
||||
#include <mach/i386/thread_status.h>
|
||||
+#include <mach/i386/_structs.h>
|
||||
#include <mach/hppa/thread_status.h>
|
||||
#include <mach/sparc/thread_status.h>
|
||||
/* cctools-port: need to undef these to avoid warnings */
|
File diff suppressed because it is too large
Load Diff
@ -1,299 +0,0 @@
|
||||
diff -ur cctools-port-c1cc758/cctools/ld64/src/ld/parsers/libunwind/Registers.hpp cctools-port-patched/cctools/ld64/src/ld/parsers/libunwind/Registers.hpp
|
||||
--- cctools-port-c1cc758/cctools/ld64/src/ld/parsers/libunwind/Registers.hpp 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-patched/cctools/ld64/src/ld/parsers/libunwind/Registers.hpp 2017-10-29 10:12:23.150301208 -0700
|
||||
@@ -72,22 +72,22 @@
|
||||
const char* getRegisterName(int num);
|
||||
void jumpto();
|
||||
|
||||
- uint32_t getSP() const { return fRegisters.__esp; }
|
||||
- void setSP(uint32_t value) { fRegisters.__esp = value; }
|
||||
- uint32_t getIP() const { return fRegisters.__eip; }
|
||||
- void setIP(uint32_t value) { fRegisters.__eip = value; }
|
||||
- uint32_t getEBP() const { return fRegisters.__ebp; }
|
||||
- void setEBP(uint32_t value) { fRegisters.__ebp = value; }
|
||||
- uint32_t getEBX() const { return fRegisters.__ebx; }
|
||||
- void setEBX(uint32_t value) { fRegisters.__ebx = value; }
|
||||
- uint32_t getECX() const { return fRegisters.__ecx; }
|
||||
- void setECX(uint32_t value) { fRegisters.__ecx = value; }
|
||||
- uint32_t getEDX() const { return fRegisters.__edx; }
|
||||
- void setEDX(uint32_t value) { fRegisters.__edx = value; }
|
||||
- uint32_t getESI() const { return fRegisters.__esi; }
|
||||
- void setESI(uint32_t value) { fRegisters.__esi = value; }
|
||||
- uint32_t getEDI() const { return fRegisters.__edi; }
|
||||
- void setEDI(uint32_t value) { fRegisters.__edi = value; }
|
||||
+ uint32_t getSP() const { return fRegisters.esp; }
|
||||
+ void setSP(uint32_t value) { fRegisters.esp = value; }
|
||||
+ uint32_t getIP() const { return fRegisters.eip; }
|
||||
+ void setIP(uint32_t value) { fRegisters.eip = value; }
|
||||
+ uint32_t getEBP() const { return fRegisters.ebp; }
|
||||
+ void setEBP(uint32_t value) { fRegisters.ebp = value; }
|
||||
+ uint32_t getEBX() const { return fRegisters.ebx; }
|
||||
+ void setEBX(uint32_t value) { fRegisters.ebx = value; }
|
||||
+ uint32_t getECX() const { return fRegisters.ecx; }
|
||||
+ void setECX(uint32_t value) { fRegisters.ecx = value; }
|
||||
+ uint32_t getEDX() const { return fRegisters.edx; }
|
||||
+ void setEDX(uint32_t value) { fRegisters.edx = value; }
|
||||
+ uint32_t getESI() const { return fRegisters.esi; }
|
||||
+ void setESI(uint32_t value) { fRegisters.esi = value; }
|
||||
+ uint32_t getEDI() const { return fRegisters.edi; }
|
||||
+ void setEDI(uint32_t value) { fRegisters.edi = value; }
|
||||
|
||||
private:
|
||||
i386_thread_state_t fRegisters;
|
||||
@@ -122,25 +122,25 @@
|
||||
{
|
||||
switch ( regNum ) {
|
||||
case UNW_REG_IP:
|
||||
- return fRegisters.__eip;
|
||||
+ return fRegisters.eip;
|
||||
case UNW_REG_SP:
|
||||
- return fRegisters.__esp;
|
||||
+ return fRegisters.esp;
|
||||
case UNW_X86_EAX:
|
||||
- return fRegisters.__eax;
|
||||
+ return fRegisters.eax;
|
||||
case UNW_X86_ECX:
|
||||
- return fRegisters.__ecx;
|
||||
+ return fRegisters.ecx;
|
||||
case UNW_X86_EDX:
|
||||
- return fRegisters.__edx;
|
||||
+ return fRegisters.edx;
|
||||
case UNW_X86_EBX:
|
||||
- return fRegisters.__ebx;
|
||||
+ return fRegisters.ebx;
|
||||
case UNW_X86_EBP:
|
||||
- return fRegisters.__ebp;
|
||||
+ return fRegisters.ebp;
|
||||
case UNW_X86_ESP:
|
||||
- return fRegisters.__esp;
|
||||
+ return fRegisters.esp;
|
||||
case UNW_X86_ESI:
|
||||
- return fRegisters.__esi;
|
||||
+ return fRegisters.esi;
|
||||
case UNW_X86_EDI:
|
||||
- return fRegisters.__edi;
|
||||
+ return fRegisters.edi;
|
||||
}
|
||||
ABORT("unsupported x86 register");
|
||||
}
|
||||
@@ -149,34 +149,34 @@
|
||||
{
|
||||
switch ( regNum ) {
|
||||
case UNW_REG_IP:
|
||||
- fRegisters.__eip = value;
|
||||
+ fRegisters.eip = value;
|
||||
return;
|
||||
case UNW_REG_SP:
|
||||
- fRegisters.__esp = value;
|
||||
+ fRegisters.esp = value;
|
||||
return;
|
||||
case UNW_X86_EAX:
|
||||
- fRegisters.__eax = value;
|
||||
+ fRegisters.eax = value;
|
||||
return;
|
||||
case UNW_X86_ECX:
|
||||
- fRegisters.__ecx = value;
|
||||
+ fRegisters.ecx = value;
|
||||
return;
|
||||
case UNW_X86_EDX:
|
||||
- fRegisters.__edx = value;
|
||||
+ fRegisters.edx = value;
|
||||
return;
|
||||
case UNW_X86_EBX:
|
||||
- fRegisters.__ebx = value;
|
||||
+ fRegisters.ebx = value;
|
||||
return;
|
||||
case UNW_X86_EBP:
|
||||
- fRegisters.__ebp = value;
|
||||
+ fRegisters.ebp = value;
|
||||
return;
|
||||
case UNW_X86_ESP:
|
||||
- fRegisters.__esp = value;
|
||||
+ fRegisters.esp = value;
|
||||
return;
|
||||
case UNW_X86_ESI:
|
||||
- fRegisters.__esi = value;
|
||||
+ fRegisters.esi = value;
|
||||
return;
|
||||
case UNW_X86_EDI:
|
||||
- fRegisters.__edi = value;
|
||||
+ fRegisters.edi = value;
|
||||
return;
|
||||
}
|
||||
ABORT("unsupported x86 register");
|
||||
@@ -253,22 +253,22 @@
|
||||
void setVectorRegister(int num, v128 value);
|
||||
const char* getRegisterName(int num);
|
||||
void jumpto();
|
||||
- uint64_t getSP() const { return fRegisters.__rsp; }
|
||||
- void setSP(uint64_t value) { fRegisters.__rsp = value; }
|
||||
- uint64_t getIP() const { return fRegisters.__rip; }
|
||||
- void setIP(uint64_t value) { fRegisters.__rip = value; }
|
||||
- uint64_t getRBP() const { return fRegisters.__rbp; }
|
||||
- void setRBP(uint64_t value) { fRegisters.__rbp = value; }
|
||||
- uint64_t getRBX() const { return fRegisters.__rbx; }
|
||||
- void setRBX(uint64_t value) { fRegisters.__rbx = value; }
|
||||
- uint64_t getR12() const { return fRegisters.__r12; }
|
||||
- void setR12(uint64_t value) { fRegisters.__r12 = value; }
|
||||
- uint64_t getR13() const { return fRegisters.__r13; }
|
||||
- void setR13(uint64_t value) { fRegisters.__r13 = value; }
|
||||
- uint64_t getR14() const { return fRegisters.__r14; }
|
||||
- void setR14(uint64_t value) { fRegisters.__r14 = value; }
|
||||
- uint64_t getR15() const { return fRegisters.__r15; }
|
||||
- void setR15(uint64_t value) { fRegisters.__r15 = value; }
|
||||
+ uint64_t getSP() const { return fRegisters.rsp; }
|
||||
+ void setSP(uint64_t value) { fRegisters.rsp = value; }
|
||||
+ uint64_t getIP() const { return fRegisters.rip; }
|
||||
+ void setIP(uint64_t value) { fRegisters.rip = value; }
|
||||
+ uint64_t getRBP() const { return fRegisters.rbp; }
|
||||
+ void setRBP(uint64_t value) { fRegisters.rbp = value; }
|
||||
+ uint64_t getRBX() const { return fRegisters.rbx; }
|
||||
+ void setRBX(uint64_t value) { fRegisters.rbx = value; }
|
||||
+ uint64_t getR12() const { return fRegisters.r12; }
|
||||
+ void setR12(uint64_t value) { fRegisters.r12 = value; }
|
||||
+ uint64_t getR13() const { return fRegisters.r13; }
|
||||
+ void setR13(uint64_t value) { fRegisters.r13 = value; }
|
||||
+ uint64_t getR14() const { return fRegisters.r14; }
|
||||
+ void setR14(uint64_t value) { fRegisters.r14 = value; }
|
||||
+ uint64_t getR15() const { return fRegisters.r15; }
|
||||
+ void setR15(uint64_t value) { fRegisters.r15 = value; }
|
||||
private:
|
||||
x86_thread_state64_t fRegisters;
|
||||
};
|
||||
@@ -302,41 +302,41 @@
|
||||
{
|
||||
switch ( regNum ) {
|
||||
case UNW_REG_IP:
|
||||
- return fRegisters.__rip;
|
||||
+ return fRegisters.rip;
|
||||
case UNW_REG_SP:
|
||||
- return fRegisters.__rsp;
|
||||
+ return fRegisters.rsp;
|
||||
case UNW_X86_64_RAX:
|
||||
- return fRegisters.__rax;
|
||||
+ return fRegisters.rax;
|
||||
case UNW_X86_64_RDX:
|
||||
- return fRegisters.__rdx;
|
||||
+ return fRegisters.rdx;
|
||||
case UNW_X86_64_RCX:
|
||||
- return fRegisters.__rcx;
|
||||
+ return fRegisters.rcx;
|
||||
case UNW_X86_64_RBX:
|
||||
- return fRegisters.__rbx;
|
||||
+ return fRegisters.rbx;
|
||||
case UNW_X86_64_RSI:
|
||||
- return fRegisters.__rsi;
|
||||
+ return fRegisters.rsi;
|
||||
case UNW_X86_64_RDI:
|
||||
- return fRegisters.__rdi;
|
||||
+ return fRegisters.rdi;
|
||||
case UNW_X86_64_RBP:
|
||||
- return fRegisters.__rbp;
|
||||
+ return fRegisters.rbp;
|
||||
case UNW_X86_64_RSP:
|
||||
- return fRegisters.__rsp;
|
||||
+ return fRegisters.rsp;
|
||||
case UNW_X86_64_R8:
|
||||
- return fRegisters.__r8;
|
||||
+ return fRegisters.r8;
|
||||
case UNW_X86_64_R9:
|
||||
- return fRegisters.__r9;
|
||||
+ return fRegisters.r9;
|
||||
case UNW_X86_64_R10:
|
||||
- return fRegisters.__r10;
|
||||
+ return fRegisters.r10;
|
||||
case UNW_X86_64_R11:
|
||||
- return fRegisters.__r11;
|
||||
+ return fRegisters.r11;
|
||||
case UNW_X86_64_R12:
|
||||
- return fRegisters.__r12;
|
||||
+ return fRegisters.r12;
|
||||
case UNW_X86_64_R13:
|
||||
- return fRegisters.__r13;
|
||||
+ return fRegisters.r13;
|
||||
case UNW_X86_64_R14:
|
||||
- return fRegisters.__r14;
|
||||
+ return fRegisters.r14;
|
||||
case UNW_X86_64_R15:
|
||||
- return fRegisters.__r15;
|
||||
+ return fRegisters.r15;
|
||||
}
|
||||
ABORT("unsupported x86_64 register");
|
||||
}
|
||||
@@ -345,58 +345,58 @@
|
||||
{
|
||||
switch ( regNum ) {
|
||||
case UNW_REG_IP:
|
||||
- fRegisters.__rip = value;
|
||||
+ fRegisters.rip = value;
|
||||
return;
|
||||
case UNW_REG_SP:
|
||||
- fRegisters.__rsp = value;
|
||||
+ fRegisters.rsp = value;
|
||||
return;
|
||||
case UNW_X86_64_RAX:
|
||||
- fRegisters.__rax = value;
|
||||
+ fRegisters.rax = value;
|
||||
return;
|
||||
case UNW_X86_64_RDX:
|
||||
- fRegisters.__rdx = value;
|
||||
+ fRegisters.rdx = value;
|
||||
return;
|
||||
case UNW_X86_64_RCX:
|
||||
- fRegisters.__rcx = value;
|
||||
+ fRegisters.rcx = value;
|
||||
return;
|
||||
case UNW_X86_64_RBX:
|
||||
- fRegisters.__rbx = value;
|
||||
+ fRegisters.rbx = value;
|
||||
return;
|
||||
case UNW_X86_64_RSI:
|
||||
- fRegisters.__rsi = value;
|
||||
+ fRegisters.rsi = value;
|
||||
return;
|
||||
case UNW_X86_64_RDI:
|
||||
- fRegisters.__rdi = value;
|
||||
+ fRegisters.rdi = value;
|
||||
return;
|
||||
case UNW_X86_64_RBP:
|
||||
- fRegisters.__rbp = value;
|
||||
+ fRegisters.rbp = value;
|
||||
return;
|
||||
case UNW_X86_64_RSP:
|
||||
- fRegisters.__rsp = value;
|
||||
+ fRegisters.rsp = value;
|
||||
return;
|
||||
case UNW_X86_64_R8:
|
||||
- fRegisters.__r8 = value;
|
||||
+ fRegisters.r8 = value;
|
||||
return;
|
||||
case UNW_X86_64_R9:
|
||||
- fRegisters.__r9 = value;
|
||||
+ fRegisters.r9 = value;
|
||||
return;
|
||||
case UNW_X86_64_R10:
|
||||
- fRegisters.__r10 = value;
|
||||
+ fRegisters.r10 = value;
|
||||
return;
|
||||
case UNW_X86_64_R11:
|
||||
- fRegisters.__r11 = value;
|
||||
+ fRegisters.r11 = value;
|
||||
return;
|
||||
case UNW_X86_64_R12:
|
||||
- fRegisters.__r12 = value;
|
||||
+ fRegisters.r12 = value;
|
||||
return;
|
||||
case UNW_X86_64_R13:
|
||||
- fRegisters.__r13 = value;
|
||||
+ fRegisters.r13 = value;
|
||||
return;
|
||||
case UNW_X86_64_R14:
|
||||
- fRegisters.__r14 = value;
|
||||
+ fRegisters.r14 = value;
|
||||
return;
|
||||
case UNW_X86_64_R15:
|
||||
- fRegisters.__r15 = value;
|
||||
+ fRegisters.r15 = value;
|
||||
return;
|
||||
}
|
||||
ABORT("unsupported x86_64 register");
|
@ -1,93 +0,0 @@
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/errors.h cctools-port-libstuff-no-error/cctools/include/stuff/errors.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/errors.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/include/stuff/errors.h 2017-11-10 21:52:54.172522281 -0800
|
||||
@@ -40,7 +40,7 @@
|
||||
__attribute__ ((format (printf, 1, 2)))
|
||||
#endif
|
||||
__attribute__((visibility("hidden")));
|
||||
-extern void error(
|
||||
+extern void errorf(
|
||||
const char *format, ...)
|
||||
#ifdef __GNUC__
|
||||
__attribute__ ((format (printf, 1, 2)))
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/errors.c cctools-port-libstuff-no-error/cctools/libstuff/errors.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/errors.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/errors.c 2017-11-10 21:52:42.795730237 -0800
|
||||
@@ -57,7 +57,7 @@
|
||||
*/
|
||||
__private_extern__
|
||||
void
|
||||
-error(
|
||||
+errorf(
|
||||
const char *format,
|
||||
...)
|
||||
{
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/ofile.c cctools-port-libstuff-no-error/cctools/libstuff/ofile.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/ofile.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/ofile.c 2017-11-10 21:54:20.156803208 -0800
|
||||
@@ -115,6 +115,8 @@
|
||||
};
|
||||
#endif /* !defined(OTOOL) */
|
||||
|
||||
+#define error errorf
|
||||
+
|
||||
static enum bool ofile_specific_arch(
|
||||
struct ofile *ofile,
|
||||
uint32_t narch);
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/swap_headers.c cctools-port-libstuff-no-error/cctools/libstuff/swap_headers.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/swap_headers.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/swap_headers.c 2017-11-10 21:54:49.873797374 -0800
|
||||
@@ -50,6 +50,8 @@
|
||||
#include "stuff/bytesex.h"
|
||||
#include "stuff/errors.h"
|
||||
|
||||
+#define error errorf
|
||||
+
|
||||
/*
|
||||
* swap_object_headers() swaps the object file headers from the host byte sex
|
||||
* into the non-host byte sex. It returns TRUE if it can and did swap the
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/SymLoc.c cctools-port-libstuff-no-error/cctools/libstuff/SymLoc.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/SymLoc.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/SymLoc.c 2017-11-10 21:53:06.199321490 -0800
|
||||
@@ -118,7 +118,7 @@
|
||||
if(fclose(file) != 0)
|
||||
system_error("fclose() failed");
|
||||
if (!*viewPath) {
|
||||
- error("symLocForDylib(): Can't locate view path for release %s",
|
||||
+ errorf("symLocForDylib(): Can't locate view path for release %s",
|
||||
releaseName);
|
||||
return NULL;
|
||||
}
|
||||
@@ -252,7 +252,7 @@
|
||||
// process return value
|
||||
if (!c) {
|
||||
if(no_error_if_missing == FALSE)
|
||||
- error("Can't find project that builds %s", installName);
|
||||
+ errorf("Can't find project that builds %s", installName);
|
||||
return NULL;
|
||||
} else {
|
||||
*found_project = TRUE;
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/version_number.c cctools-port-libstuff-no-error/cctools/libstuff/version_number.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/version_number.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/version_number.c 2017-11-10 21:55:18.674114769 -0800
|
||||
@@ -27,6 +27,8 @@
|
||||
#include "stuff/allocate.h"
|
||||
#include "stuff/errors.h"
|
||||
|
||||
+#define error errorf
|
||||
+
|
||||
/*
|
||||
* get_version_number() converts an ascii version number string of the form:
|
||||
* X[.Y[.Z]]
|
||||
diff -ur cctools-port-c1cc758/cctools/libstuff/writeout.c cctools-port-libstuff-no-error/cctools/libstuff/writeout.c
|
||||
--- cctools-port-c1cc758/cctools/libstuff/writeout.c 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-libstuff-no-error/cctools/libstuff/writeout.c 2017-11-10 21:55:43.537722114 -0800
|
||||
@@ -37,6 +37,8 @@
|
||||
#include "stuff/lto.h"
|
||||
#endif /* LTO_SUPPORT */
|
||||
|
||||
+#define error errorf
|
||||
+
|
||||
static void copy_new_symbol_info(
|
||||
char *p,
|
||||
uint32_t *size,
|
@ -1,271 +0,0 @@
|
||||
diff -ur cctools-port-c1cc758/cctools/include/foreign/extern.h cctools-port-private-extern/cctools/include/foreign/extern.h
|
||||
--- cctools-port-c1cc758/cctools/include/foreign/extern.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/foreign/extern.h 2017-11-10 18:32:37.035890924 -0800
|
||||
@@ -1 +1,2 @@
|
||||
+#pragma once
|
||||
#define __private_extern__ __attribute__((visibility("hidden")))
|
||||
diff -ur cctools-port-c1cc758/cctools/include/mach-o/dyld.h cctools-port-private-extern/cctools/include/mach-o/dyld.h
|
||||
--- cctools-port-c1cc758/cctools/include/mach-o/dyld.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/mach-o/dyld.h 2017-11-10 18:32:37.035890924 -0800
|
||||
@@ -27,9 +27,7 @@
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+#include <extern.h>
|
||||
|
||||
#include <mach-o/loader.h>
|
||||
#include <AvailabilityMacros.h>
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/allocate.h cctools-port-private-extern/cctools/include/stuff/allocate.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/allocate.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/allocate.h 2017-11-10 18:33:52.006780029 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
/* defined in allocate.c */
|
||||
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/arch.h cctools-port-private-extern/cctools/include/stuff/arch.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/arch.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/arch.h 2017-11-10 18:34:36.487305108 -0800
|
||||
@@ -23,9 +23,8 @@
|
||||
#ifndef _STUFF_ARCH_H_
|
||||
#define _STUFF_ARCH_H_
|
||||
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+#include <extern.h>
|
||||
+
|
||||
/*
|
||||
* This file contains the current known set of flags and constants for the
|
||||
* known architectures.
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/best_arch.h cctools-port-private-extern/cctools/include/stuff/best_arch.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/best_arch.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/best_arch.h 2017-11-10 18:34:48.764116432 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
#include <mach/machine.h>
|
||||
#include <stuff/bool.h>
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/breakout.h cctools-port-private-extern/cctools/include/stuff/breakout.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/breakout.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/breakout.h 2017-11-10 18:35:04.334299743 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
#import "stuff/ofile.h"
|
||||
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/bytesex.h cctools-port-private-extern/cctools/include/stuff/bytesex.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/bytesex.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/bytesex.h 2017-11-10 18:35:12.637730768 -0800
|
||||
@@ -29,9 +29,7 @@
|
||||
#ifndef _STUFF_BYTESEX_H_
|
||||
#define _STUFF_BYTESEX_H_
|
||||
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+#include <extern.h>
|
||||
|
||||
#include <mach-o/fat.h>
|
||||
#include <mach-o/loader.h>
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/execute.h cctools-port-private-extern/cctools/include/stuff/execute.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/execute.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/execute.h 2017-11-10 18:35:34.417986815 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
/*
|
||||
* execute() does an execvp using the argv passed to it. If the parameter
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/guess_short_name.h cctools-port-private-extern/cctools/include/stuff/guess_short_name.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/guess_short_name.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/guess_short_name.h 2017-11-10 18:40:11.801171715 -0800
|
||||
@@ -22,6 +22,8 @@
|
||||
*/
|
||||
#include "stuff/bool.h"
|
||||
|
||||
+#include <extern.h>
|
||||
+
|
||||
__private_extern__ char * guess_short_name(
|
||||
char *name,
|
||||
enum bool *is_framework,
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/hash_string.h cctools-port-private-extern/cctools/include/stuff/hash_string.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/hash_string.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/hash_string.h 2017-11-10 18:35:43.698095826 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
__private_extern__ int32_t hash_string(
|
||||
char *key);
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/hppa.h cctools-port-private-extern/cctools/include/stuff/hppa.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/hppa.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/hppa.h 2017-11-10 18:36:01.414970472 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
__private_extern__ void calc_hppa_HILO(
|
||||
uint32_t base,
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/lto.h cctools-port-private-extern/cctools/include/stuff/lto.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/lto.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/lto.h 2017-11-10 18:40:27.811342692 -0800
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include "stuff/arch.h"
|
||||
|
||||
+#include <extern.h>
|
||||
+
|
||||
#ifdef LTO_SUPPORT
|
||||
|
||||
__private_extern__ int is_llvm_bitcode_from_memory(
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/macosx_deployment_target.h cctools-port-private-extern/cctools/include/stuff/macosx_deployment_target.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/macosx_deployment_target.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/macosx_deployment_target.h 2017-11-10 18:39:47.814249693 -0800
|
||||
@@ -22,6 +22,8 @@
|
||||
*/
|
||||
#include <mach/mach.h>
|
||||
|
||||
+#include <extern.h>
|
||||
+
|
||||
struct macosx_deployment_target {
|
||||
uint32_t major; /* major version */
|
||||
uint32_t minor; /* minor version (if any or zero) */
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/ofile.h cctools-port-private-extern/cctools/include/stuff/ofile.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/ofile.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/ofile.h 2017-11-10 18:36:14.268454589 -0800
|
||||
@@ -24,9 +24,7 @@
|
||||
#ifndef _STUFF_OFILE_H_
|
||||
#define _STUFF_OFILE_H_
|
||||
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+#include <extern.h>
|
||||
|
||||
#import <ar.h>
|
||||
#ifndef AR_EFMT1
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/print.h cctools-port-private-extern/cctools/include/stuff/print.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/print.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/print.h 2017-11-10 18:36:24.805244801 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
#import <stdarg.h>
|
||||
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/reloc.h cctools-port-private-extern/cctools/include/stuff/reloc.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/reloc.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/reloc.h 2017-11-10 18:36:31.878661041 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
#import <mach/machine.h>
|
||||
#import "stuff/bool.h"
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/rnd.h cctools-port-private-extern/cctools/include/stuff/rnd.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/rnd.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/rnd.h 2017-11-10 18:36:39.068745293 -0800
|
||||
@@ -27,9 +27,7 @@
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+#include <extern.h>
|
||||
|
||||
/*
|
||||
* rnd() rounds v to a multiple of r.
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/symbol_list.h cctools-port-private-extern/cctools/include/stuff/symbol_list.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/symbol_list.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/symbol_list.h 2017-11-10 18:37:11.605792928 -0800
|
||||
@@ -23,6 +23,8 @@
|
||||
#include <mach-o/nlist.h>
|
||||
#include <stuff/bool.h>
|
||||
|
||||
+#include <extern.h>
|
||||
+
|
||||
/*
|
||||
* Data structures to perform selective stripping of symbol table entries.
|
||||
*/
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/unix_standard_mode.h cctools-port-private-extern/cctools/include/stuff/unix_standard_mode.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/unix_standard_mode.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/unix_standard_mode.h 2017-11-10 18:37:42.596155389 -0800
|
||||
@@ -22,5 +22,7 @@
|
||||
*/
|
||||
#include "stuff/bool.h"
|
||||
|
||||
+#include <extern.h>
|
||||
+
|
||||
__private_extern__ enum bool get_unix_standard_mode(
|
||||
void);
|
||||
diff -ur cctools-port-c1cc758/cctools/include/stuff/vm_flush_cache.h cctools-port-private-extern/cctools/include/stuff/vm_flush_cache.h
|
||||
--- cctools-port-c1cc758/cctools/include/stuff/vm_flush_cache.h 2017-10-01 13:47:04.000000000 -0700
|
||||
+++ cctools-port-private-extern/cctools/include/stuff/vm_flush_cache.h 2017-11-10 18:37:59.973025145 -0800
|
||||
@@ -20,9 +20,8 @@
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
-#if defined(__MWERKS__) && !defined(__private_extern__)
|
||||
-#define __private_extern__ __declspec(private_extern)
|
||||
-#endif
|
||||
+
|
||||
+#include <extern.h>
|
||||
|
||||
#import <mach/mach.h>
|
||||
__private_extern__ kern_return_t vm_flush_cache(
|
@ -1,30 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $llvm_src
|
||||
mv llvm-* llvm
|
||||
|
||||
tar -xf $lld_src
|
||||
mv lld-* lld
|
||||
mv lld llvm/tools/
|
||||
|
||||
tar -xf $src
|
||||
mv cfe-* clang
|
||||
cd clang
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
cd ..
|
||||
mv clang llvm/projects/
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
cmake ../llvm -GNinja -DDEFAULT_SYSROOT=$out -DCMAKE_INSTALL_PREFIX=$out $cmake_flags
|
||||
|
||||
ninja
|
||||
|
||||
ninja install
|
||||
|
||||
# clang-tblgen is supposed to be an internal tool, but tapi needs it
|
||||
cp bin/clang-tblgen $out/bin
|
@ -1,37 +0,0 @@
|
||||
diff -ur cfe-5.0.0.src.orig/lib/Driver/ToolChains/Gnu.cpp cfe-5.0.0.src/lib/Driver/ToolChains/Gnu.cpp
|
||||
--- cfe-5.0.0.src.orig/lib/Driver/ToolChains/Gnu.cpp 2017-09-13 07:15:52.419093088 -0700
|
||||
+++ cfe-5.0.0.src/lib/Driver/ToolChains/Gnu.cpp 2017-09-13 07:21:58.892639000 -0700
|
||||
@@ -493,10 +493,6 @@
|
||||
CmdArgs.push_back("-export-dynamic");
|
||||
|
||||
if (!Args.hasArg(options::OPT_shared)) {
|
||||
- const std::string Loader =
|
||||
- D.DyldPrefix + ToolChain.getDynamicLinker(Args);
|
||||
- CmdArgs.push_back("-dynamic-linker");
|
||||
- CmdArgs.push_back(Args.MakeArgString(Loader));
|
||||
}
|
||||
}
|
||||
|
||||
diff -ur cfe-5.0.0.src.orig/lib/Driver/ToolChains/Linux.cpp cfe-5.0.0.src/lib/Driver/ToolChains/Linux.cpp
|
||||
--- cfe-5.0.0.src.orig/lib/Driver/ToolChains/Linux.cpp 2017-09-13 07:15:52.419093088 -0700
|
||||
+++ cfe-5.0.0.src/lib/Driver/ToolChains/Linux.cpp 2017-09-13 07:17:58.530311694 -0700
|
||||
@@ -195,18 +195,7 @@
|
||||
llvm::Triple::ArchType Arch = Triple.getArch();
|
||||
std::string SysRoot = computeSysRoot();
|
||||
|
||||
- // Cross-compiling binutils and GCC installations (vanilla and openSUSE at
|
||||
- // least) put various tools in a triple-prefixed directory off of the parent
|
||||
- // of the GCC installation. We use the GCC triple here to ensure that we end
|
||||
- // up with tools that support the same amount of cross compiling as the
|
||||
- // detected GCC installation. For example, if we find a GCC installation
|
||||
- // targeting x86_64, but it is a bi-arch GCC installation, it can also be
|
||||
- // used to target i386.
|
||||
- // FIXME: This seems unlikely to be Linux-specific.
|
||||
- ToolChain::path_list &PPaths = getProgramPaths();
|
||||
- PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
|
||||
- GCCInstallation.getTriple().str() + "/bin")
|
||||
- .str());
|
||||
+ // Removed some code here that found programs like ld in "/..//bin"
|
||||
|
||||
Distro Distro(D.getVFS());
|
||||
|
@ -1,192 +0,0 @@
|
||||
# Note: To reduce clutter here, it might be nice to move clang to
|
||||
# `native`, and also make `native` provide a function for building
|
||||
# binutils. So clang and binutils recipes could be shared by the
|
||||
# different platforms we targets.
|
||||
|
||||
{ osx_sdk, native }:
|
||||
let
|
||||
nixpkgs = native.nixpkgs;
|
||||
|
||||
arch = "x86_64";
|
||||
|
||||
# was darwin15, changed to darwin so that lld guesses flavor=Darwin correctly
|
||||
darwin_name = "darwin15";
|
||||
|
||||
macos_version_min = "10.11";
|
||||
|
||||
host = "${arch}-apple-${darwin_name}";
|
||||
|
||||
os = "macos";
|
||||
|
||||
compiler = "clang";
|
||||
|
||||
exe_suffix = "";
|
||||
|
||||
clang = native.make_derivation rec {
|
||||
name = "clang";
|
||||
|
||||
version = "5.0.0";
|
||||
|
||||
src = nixpkgs.fetchurl {
|
||||
url = "https://llvm.org/releases/${version}/cfe-${version}.src.tar.xz";
|
||||
sha256 = "0w09s8fn3lkn6i04nj0cisgp821r815fk5b5fjn97xrd371277q1";
|
||||
};
|
||||
|
||||
llvm_src = nixpkgs.fetchurl {
|
||||
url = "https://llvm.org/releases/${version}/llvm-${version}.src.tar.xz";
|
||||
sha256 = "1nin64vz21hyng6jr19knxipvggaqlkl2l9jpd5czbc4c2pcnpg3";
|
||||
};
|
||||
|
||||
# Note: We aren't actually using lld for anything yet.
|
||||
lld_src = nixpkgs.fetchurl {
|
||||
url = "http://releases.llvm.org/${version}/lld-${version}.src.tar.xz";
|
||||
sha256 = "15rqsmfw0jlsri7hszbs8l0j7v1030cy9xvvdb245397llh7k6ir";
|
||||
};
|
||||
|
||||
patches = [ ./clang_megapatch.patch ];
|
||||
|
||||
builder = ./clang_builder.sh;
|
||||
|
||||
native_inputs = [ nixpkgs.python2 ];
|
||||
|
||||
cmake_flags =
|
||||
"-DCMAKE_BUILD_TYPE=Release " +
|
||||
# "-DCMAKE_BUILD_TYPE=Debug " +
|
||||
"-DLLVM_TARGETS_TO_BUILD=X86\;ARM " +
|
||||
"-DLLVM_ENABLE_RTTI=ON " + # ld64 uses dynamic_cast, requiring rtti
|
||||
"-DLLVM_ENABLE_ASSERTIONS=OFF";
|
||||
};
|
||||
|
||||
# Note: There is an alternative version we could use, but it
|
||||
# has a copy of LLVM in it: https://github.com/tpoechtrager/apple-libtapi
|
||||
tapi = native.make_derivation rec {
|
||||
name = "tapi";
|
||||
version = "${version0}.${version1}.${version2}";
|
||||
version0 = "2";
|
||||
version1 = "0";
|
||||
version2 = "0";
|
||||
src = nixpkgs.fetchurl {
|
||||
url = "https://github.com/DavidEGrayson/tapi/archive/f98d0c3.tar.gz";
|
||||
sha256 = "0jibz0fsyh47q8y3w6f0qspjh6fhs164rkhjg7x6k7qhlawcdy6g";
|
||||
};
|
||||
builder = ./tapi_builder.sh;
|
||||
native_inputs = [ clang ];
|
||||
inherit clang;
|
||||
};
|
||||
|
||||
cctools_commit = "c1cc758";
|
||||
cctools_apple_version = "274.2"; # from README.md
|
||||
cctools_port_src = nixpkgs.fetchurl {
|
||||
url = "https://github.com/tpoechtrager/cctools-port/archive/${cctools_commit}.tar.gz";
|
||||
sha256= "11bfcndzbdmjp2piabyqs34da617fh5fhirqvb9w87anfan15ffa";
|
||||
};
|
||||
|
||||
ld = native.make_derivation rec {
|
||||
name = "cctools-ld64";
|
||||
apple_version = cctools_apple_version;
|
||||
src = cctools_port_src;
|
||||
patches = [
|
||||
./cctools-format.patch
|
||||
./cctools-ld64-registers.patch
|
||||
];
|
||||
builder = ./ld_builder.sh;
|
||||
native_inputs = [ tapi ];
|
||||
inherit host;
|
||||
};
|
||||
|
||||
ranlib = native.make_derivation rec {
|
||||
name = "cctools-ranlib";
|
||||
apple_version = cctools_apple_version;
|
||||
src = ld.src;
|
||||
builder = ./ranlib_builder.sh;
|
||||
patches = [
|
||||
./cctools-format.patch
|
||||
./cctools-bytesex.patch
|
||||
];
|
||||
inherit host;
|
||||
};
|
||||
|
||||
ar = native.make_derivation rec {
|
||||
name = "cctools-ar";
|
||||
apple_version = cctools_apple_version;
|
||||
src = cctools_port_src;
|
||||
builder = ./ar_builder.sh;
|
||||
patches = [
|
||||
./cctools-format.patch
|
||||
./cctools-libstuff-no-error.patch
|
||||
];
|
||||
inherit host ranlib;
|
||||
};
|
||||
|
||||
strip = native.make_derivation rec {
|
||||
name = "cctools-strip";
|
||||
apple_version = cctools_apple_version;
|
||||
src = cctools_port_src;
|
||||
builder = ./strip_builder.sh;
|
||||
patches = [
|
||||
./cctools-format.patch
|
||||
];
|
||||
inherit host;
|
||||
};
|
||||
|
||||
# TODO: add instructions for building the SDK tarball, probably want a copy of
|
||||
# the script from osxcross.
|
||||
sdk = native.make_derivation rec {
|
||||
name = "macos-sdk";
|
||||
builder = ./sdk_builder.sh;
|
||||
src = osx_sdk;
|
||||
};
|
||||
|
||||
toolchain = native.make_derivation rec {
|
||||
name = "macos-toolchain";
|
||||
builder = ./toolchain_builder.sh;
|
||||
src_file = ./wrapper.cpp;
|
||||
inherit host clang ld ranlib ar strip sdk;
|
||||
|
||||
CXXFLAGS =
|
||||
"-std=c++11 " +
|
||||
"-Wall " +
|
||||
"-I. " +
|
||||
"-O2 -g " +
|
||||
"-DWRAPPER_OS_VERSION_MIN=\\\"${macos_version_min}\\\" " +
|
||||
"-DWRAPPER_HOST=\\\"${host}\\\" " +
|
||||
"-DWRAPPER_ARCH=\\\"${arch}\\\" " +
|
||||
"-DWRAPPER_SDK_PATH=\\\"${sdk}\\\" " +
|
||||
"-DWRAPPER_LINKER_VERSION=\\\"${ld.apple_version}\\\"";
|
||||
};
|
||||
|
||||
cmake_toolchain = import ../cmake_toolchain {
|
||||
cmake_system_name = "Darwin";
|
||||
inherit nixpkgs host;
|
||||
};
|
||||
|
||||
crossenv = {
|
||||
is_cross = true;
|
||||
|
||||
# Build tools available on the PATH for every derivation.
|
||||
default_native_inputs = native.default_native_inputs
|
||||
++ [ clang toolchain native.wrappers ];
|
||||
|
||||
# Target info environment variables.
|
||||
inherit host arch os compiler exe_suffix macos_version_min;
|
||||
|
||||
# CMake toolchain file.
|
||||
inherit cmake_toolchain;
|
||||
|
||||
# A wide variety of programs and build tools.
|
||||
inherit nixpkgs;
|
||||
|
||||
# Some native build tools made by nixcrpkgs.
|
||||
inherit native;
|
||||
|
||||
# License information that should be shipped with any software
|
||||
# compiled by this environment.
|
||||
global_license_set = { };
|
||||
|
||||
# Make it easy to build or refer to the build tools.
|
||||
inherit clang tapi ld ranlib ar sdk toolchain strip;
|
||||
|
||||
make_derivation = import ../make_derivation.nix crossenv;
|
||||
};
|
||||
in
|
||||
crossenv
|
@ -1,164 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Package the OS X SDKs into a tar file to be used by `build.sh`.
|
||||
#
|
||||
|
||||
# This file comes from the osxcross project and is licensed under the GNU GPLv2.
|
||||
# For more information, see the `COPYING` file from:
|
||||
# https://github.com/tpoechtrager/osxcross/tree/1a1733a773fe26e7b6c93b16fbf9341f22fac831
|
||||
|
||||
export LC_ALL=C
|
||||
|
||||
function set_xcode_dir()
|
||||
{
|
||||
local tmp=$(ls $1 2>/dev/null | grep "^Xcode.*.app" | grep -v "beta" | head -n1)
|
||||
|
||||
if [ -z "$tmp" ]; then
|
||||
tmp=$(ls $1 2>/dev/null | grep "^Xcode.*.app" | head -n1)
|
||||
fi
|
||||
|
||||
if [ -n "$tmp" ]; then
|
||||
XCODEDIR="$1/$tmp"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $(uname -s) != "Darwin" ]; then
|
||||
if [ -z "$XCODEDIR" ]; then
|
||||
echo "This script must be run on OS X" 1>&2
|
||||
echo "... Or with XCODEDIR=... on Linux" 1>&2
|
||||
exit 1
|
||||
else
|
||||
case $XCODEDIR in
|
||||
/*) ;;
|
||||
*) XCODEDIR="$PWD/$XCODEDIR" ;;
|
||||
esac
|
||||
set_xcode_dir $XCODEDIR
|
||||
fi
|
||||
else
|
||||
set_xcode_dir $(echo /Volumes/Xcode* | tr ' ' '\n' | grep -v "beta" | head -n1)
|
||||
|
||||
if [ -z "$XCODEDIR" ]; then
|
||||
set_xcode_dir /Applications
|
||||
|
||||
if [ -z "$XCODEDIR" ]; then
|
||||
set_xcode_dir $(echo /Volumes/Xcode* | tr ' ' '\n' | head -n1)
|
||||
|
||||
if [ -z "$XCODEDIR" ]; then
|
||||
echo "please mount Xcode.dmg" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d $XCODEDIR ]; then
|
||||
echo "cannot find Xcode (XCODEDIR=$XCODEDIR)" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "found Xcode: $XCODEDIR"
|
||||
|
||||
WDIR=$(pwd)
|
||||
|
||||
which gnutar &>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
TAR=gnutar
|
||||
else
|
||||
TAR=tar
|
||||
fi
|
||||
|
||||
which xz &>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPRESSOR=xz
|
||||
PKGEXT="tar.xz"
|
||||
else
|
||||
COMPRESSOR=bzip2
|
||||
PKGEXT="tar.bz2"
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
pushd $XCODEDIR &>/dev/null
|
||||
|
||||
if [ -d "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" ]; then
|
||||
pushd "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" &>/dev/null
|
||||
else
|
||||
if [ -d "../Packages" ]; then
|
||||
pushd "../Packages" &>/dev/null
|
||||
elif [ -d "Packages" ]; then
|
||||
pushd "Packages" &>/dev/null
|
||||
else
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Xcode (or this script) is out of date" 1>&2
|
||||
echo "trying some magic to find the SDKs anyway ..." 1>&2
|
||||
|
||||
SDKDIR=$(find . -name SDKs -type d | grep MacOSX | head -n1)
|
||||
|
||||
if [ -z "$SDKDIR" ]; then
|
||||
echo "cannot find SDKs!" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pushd $SDKDIR &>/dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
SDKS=$(ls | grep "^MacOSX10.*" | grep -v "Patch")
|
||||
|
||||
if [ -z "$SDKS" ]; then
|
||||
echo "No SDK found" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Xcode 5
|
||||
LIBCXXDIR1="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1"
|
||||
|
||||
# Xcode 6
|
||||
LIBCXXDIR2="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1"
|
||||
|
||||
# Manual directory
|
||||
MANDIR="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man"
|
||||
|
||||
for SDK in $SDKS; do
|
||||
echo -n "packaging $(echo "$SDK" | sed -E "s/(.sdk|.pkg)//g") SDK "
|
||||
echo "(this may take several minutes) ..."
|
||||
|
||||
if [[ $SDK == *.pkg ]]; then
|
||||
cp $SDK $WDIR
|
||||
continue
|
||||
fi
|
||||
|
||||
TMP=$(mktemp -d /tmp/XXXXXXXXXXX)
|
||||
cp -r $SDK $TMP &>/dev/null || true
|
||||
|
||||
pushd $XCODEDIR &>/dev/null
|
||||
|
||||
# libc++ headers for C++11/C++14
|
||||
if [ -d $LIBCXXDIR1 ]; then
|
||||
cp -rf $LIBCXXDIR1 "$TMP/$SDK/usr/include/c++"
|
||||
elif [ -d $LIBCXXDIR2 ]; then
|
||||
cp -rf $LIBCXXDIR2 "$TMP/$SDK/usr/include/c++"
|
||||
fi
|
||||
|
||||
if [ -d $MANDIR ]; then
|
||||
mkdir -p $TMP/$SDK/usr/share/man
|
||||
cp -rf $MANDIR/* $TMP/$SDK/usr/share/man
|
||||
fi
|
||||
|
||||
popd &>/dev/null
|
||||
|
||||
pushd $TMP &>/dev/null
|
||||
$TAR -cf - * | $COMPRESSOR -9 -c - > "$WDIR/$SDK.$PKGEXT"
|
||||
popd &>/dev/null
|
||||
|
||||
rm -rf $TMP
|
||||
done
|
||||
|
||||
popd &>/dev/null
|
||||
popd &>/dev/null
|
||||
|
||||
echo ""
|
||||
ls -lh | grep MacOSX
|
@ -1,45 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv cctools-port-* cctools-port
|
||||
|
||||
cd cctools-port
|
||||
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Similar to but not the same as the other _structs.h.
|
||||
rm cctools/include/foreign/mach/i386/_structs.h
|
||||
|
||||
cd ..
|
||||
|
||||
mv cctools-port/cctools/ld64 ld64
|
||||
mv cctools-port/cctools/include include
|
||||
rm -r cctools-port
|
||||
rm -r ld64/src/other
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
CFLAGS="-Wno-deprecated -Wno-deprecated-declarations -Wno-unused-result -Werror -Wfatal-errors -O2 -g -I../ld64/src -I../ld64/src/ld -I../ld64/src/ld/parsers -I../ld64/src/abstraction -I../ld64/src/3rd -I../ld64/src/3rd/include -I../ld64/src/3rd/BlocksRuntime -I../include -I../include/foreign -DTAPI_SUPPORT -DPROGRAM_PREFIX=\\\"$host-\\\" -D__LITTLE_ENDIAN__ -D__private_extern__= $(pkg-config --cflags libtapi)"
|
||||
|
||||
CXXFLAGS="-std=gnu++11 $CFLAGS"
|
||||
|
||||
LDFLAGS="$(pkg-config --libs libtapi) -ldl -lpthread"
|
||||
|
||||
for f in ../ld64/src/ld/*.c ../ld64/src/3rd/*.c; do
|
||||
echo "compiling $f"
|
||||
eval "gcc -c $CFLAGS $f -o $(basename $f).o"
|
||||
done
|
||||
|
||||
for f in $(find ../ld64/src -name \*.cpp); do
|
||||
echo "compiling $f"
|
||||
eval "g++ -c $CXXFLAGS $f -o $(basename $f).o"
|
||||
done
|
||||
|
||||
g++ *.o $LDFLAGS -o $host-ld
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp $host-ld $out/bin
|
@ -1,45 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv cctools-port-* cctools-port
|
||||
|
||||
cd cctools-port
|
||||
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Similar to but not the same as the other _structs.h.
|
||||
rm cctools/include/foreign/mach/i386/_structs.h
|
||||
|
||||
# Causes a troublesome undefined reference.
|
||||
rm cctools/libstuff/vm_flush_cache.c
|
||||
|
||||
cd ..
|
||||
|
||||
mv cctools-port/cctools/misc .
|
||||
mv cctools-port/cctools/include .
|
||||
mv cctools-port/cctools/libstuff .
|
||||
rm -r cctools-port
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
CFLAGS="-Wno-deprecated -Wno-deprecated-declarations -Wno-unused-result -Wno-format-overflow -Werror -Wfatal-errors -O2 -g -I../include -I../include/foreign -DPROGRAM_PREFIX=\\\"$host-\\\" -D__LITTLE_ENDIAN__ -D__private_extern__= -D__DARWIN_UNIX03 -DPACKAGE_NAME=\\\"cctools\\\" -DPACKAGE_VERSION=\\\"$apple_version\\\" -DEMULATED_HOST_CPU_TYPE=16777223 -DEMULATED_HOST_CPU_SUBTYPE=3"
|
||||
|
||||
CXXFLAGS="-std=gnu++11 $CFLAGS"
|
||||
|
||||
LDFLAGS="-ldl"
|
||||
|
||||
for f in ../libstuff/*.c ; do
|
||||
echo "compiling $f"
|
||||
eval "gcc -c $CFLAGS $f -o $(basename $f).o"
|
||||
done
|
||||
|
||||
eval "gcc $CFLAGS ../misc/libtool.c *.o $LDFLAGS -o $host-libtool"
|
||||
eval "gcc $CFLAGS -DRANLIB ../misc/libtool.c *.o $LDFLAGS -o $host-ranlib"
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp $host-libtool $host-ranlib $out/bin/
|
||||
|
@ -1,4 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv MacOSX*.sdk $out
|
@ -1,43 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv cctools-port-* cctools-port
|
||||
|
||||
cd cctools-port
|
||||
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Similar to but not the same as the other _structs.h.
|
||||
rm cctools/include/foreign/mach/i386/_structs.h
|
||||
|
||||
# Causes a troublesome undefined reference.
|
||||
rm cctools/libstuff/vm_flush_cache.c
|
||||
|
||||
cd ..
|
||||
|
||||
mv cctools-port/cctools/misc .
|
||||
mv cctools-port/cctools/include .
|
||||
mv cctools-port/cctools/libstuff .
|
||||
rm -r cctools-port
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
CFLAGS="-Wno-deprecated -Wno-deprecated-declarations -Wno-unused-result -Werror -Wfatal-errors -O2 -g -I../include -I../include/foreign -DPROGRAM_PREFIX=\\\"$host-\\\" -D__LITTLE_ENDIAN__ -D__private_extern__= -D__DARWIN_UNIX03 -DPACKAGE_NAME=\\\"cctools\\\" -DPACKAGE_VERSION=\\\"$apple_version\\\" -DEMULATED_HOST_CPU_TYPE=16777223 -DEMULATED_HOST_CPU_SUBTYPE=3"
|
||||
|
||||
CXXFLAGS="-std=gnu++11 $CFLAGS"
|
||||
|
||||
LDFLAGS="-ldl -lpthread"
|
||||
|
||||
for f in ../misc/strip.c ../libstuff/*.c; do
|
||||
echo "compiling $f"
|
||||
eval "gcc -c $CFLAGS $f -o $(basename $f).o"
|
||||
done
|
||||
|
||||
gcc *.o $LDFLAGS -o $host-strip
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp $host-strip $out/bin/
|
@ -1,80 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
mv tapi-* tapi
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
mkdir -p include/tapi/{Core,Driver}
|
||||
cat > include/tapi/Core/ArchitectureConfig.h <<EOF
|
||||
#pragma once
|
||||
#define SUPPORT_ARCH_I386 1
|
||||
#define SUPPORT_ARCH_X86_64 1
|
||||
#define SUPPORT_ARCH_X86_64H 1
|
||||
EOF
|
||||
|
||||
cat > include/tapi/Version.inc <<EOF
|
||||
#pragma once
|
||||
#define TAPI_VERSION $version
|
||||
#define TAPI_VERSION_MAJOR $version0
|
||||
#define TAPI_VERSION_MINOR $version1
|
||||
#define TAPI_VERSION_PATCH $version2
|
||||
EOF
|
||||
|
||||
clang-tblgen -I$clang/include -gen-clang-diags-defs \
|
||||
-o include/tapi/Driver/DiagnosticTAPIKinds.inc \
|
||||
../tapi/include/tapi/Driver/DiagnosticTAPIKinds.td
|
||||
|
||||
llvm-tblgen -I$clang/include -gen-opt-parser-defs \
|
||||
-o include/tapi/Driver/TAPIOptions.inc \
|
||||
../tapi/include/tapi/Driver/TAPIOptions.td
|
||||
|
||||
function build-lib() {
|
||||
libsrc=$1
|
||||
lib=$2
|
||||
mkdir $lib.o
|
||||
for f in $libsrc/*.cpp; do
|
||||
echo "compiling $f"
|
||||
g++ -c $CFLAGS $f -o $lib.o/$(basename $f).o
|
||||
done
|
||||
echo "archiving $lib"
|
||||
ar cr $lib $lib.o/*.o
|
||||
}
|
||||
|
||||
CFLAGS="-std=gnu++11 -O2 -Iinclude -I../tapi/include -I$clang/include"
|
||||
|
||||
build-lib ../tapi/tools/libtapi libtapi.a
|
||||
build-lib ../tapi/lib/Config libtapiConfig.a
|
||||
build-lib ../tapi/lib/Core libtapiCore.a
|
||||
build-lib ../tapi/lib/Driver libtapiDriver.a
|
||||
build-lib ../tapi/lib/Scanner libtapiScanner.a
|
||||
build-lib ../tapi/lib/SDKDB libtapiSDKDB.a
|
||||
|
||||
CLANG_LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangSerialization -lclangParse -lclangSema -lclangAST -lclangAnalysis -lclangEdit -lclangLex -lclangBasic -lLLVMDemangle -lLLVMObject -lLLVMBitReader -lLLVMMC -lLLVMMCParser -lLLVMCore -lLLVMBinaryFormat -lLLVMOption -lLLVMProfileData -lLLVMSupport"
|
||||
|
||||
LDFLAGS="-L$clang/lib -L. -ltapi -ltapiDriver -ltapiCore -ltapiDriver -ltapiScanner -ltapiSDKDB -ltapiConfig $CLANG_LIBS -lpthread"
|
||||
|
||||
echo "building tapi"
|
||||
g++ $CFLAGS ../tapi/tools/tapi/tapi.cpp $LDFLAGS -o tapi
|
||||
|
||||
echo "building tapi-run"
|
||||
g++ $CFLAGS ../tapi/tools/tapi-run/tapi-run.cpp $LDFLAGS -o tapi-run
|
||||
|
||||
mkdir -p $out/lib/pkgconfig $out/bin
|
||||
cp *.a $out/lib
|
||||
cp tapi tapi-run $out/bin
|
||||
|
||||
cp -r ../tapi/include $out/
|
||||
|
||||
cp include/tapi/Version.inc $out/include/tapi/
|
||||
|
||||
cat > $out/lib/pkgconfig/libtapi.pc <<EOF
|
||||
prefix=$out
|
||||
libdir=\${prefix}/lib
|
||||
includedir=\${prefix}/include
|
||||
|
||||
Version: $version
|
||||
Libs: -L\${libdir} -L$clang/lib -ltapi -ltapiCore $CLANG_LIBS -lpthread
|
||||
Cflags: -I\${includedir}
|
||||
EOF
|
@ -1,24 +0,0 @@
|
||||
source $setup
|
||||
|
||||
mkdir -p $out/bin
|
||||
|
||||
cd $out/bin
|
||||
|
||||
CXXFLAGS="$CXXFLAGS -DWRAPPER_PATH=\\\"$out/bin:$ld/bin:$clang/bin\\\""
|
||||
|
||||
eval "g++ $CXXFLAGS $src_file -o $host-wrapper"
|
||||
|
||||
ln -s $clang/bin/llvm-dsymutil dsymutil
|
||||
ln -s $ar/bin/$host-ar
|
||||
ln -s $ranlib/bin/$host-ranlib
|
||||
ln -s $ranlib/bin/$host-libtool
|
||||
ln -s $strip/bin/$host-strip
|
||||
|
||||
ln -s $host-wrapper $host-cc
|
||||
ln -s $host-wrapper $host-c++
|
||||
|
||||
ln -s $host-wrapper $host-clang
|
||||
ln -s $host-wrapper $host-clang++
|
||||
|
||||
ln -s $host-wrapper $host-gcc
|
||||
ln -s $host-wrapper $host-g++
|
@ -1,139 +0,0 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
#include <unistd.h>
|
||||
|
||||
int do_exec(const std::string & compiler_name,
|
||||
const std::vector<std::string> & args)
|
||||
{
|
||||
char ** exec_args = new char *[args.size() + 1];
|
||||
size_t i = 0;
|
||||
for (const std::string & arg : args)
|
||||
{
|
||||
exec_args[i++] = (char *)arg.c_str();
|
||||
}
|
||||
exec_args[i] = nullptr;
|
||||
|
||||
execvp(compiler_name.c_str(), exec_args);
|
||||
|
||||
int result = errno;
|
||||
std::cerr << "execvp failed: " << compiler_name << ": "
|
||||
<< strerror(result) << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int compiler_main(int argc, char ** argv,
|
||||
const std::string & compiler_name)
|
||||
{
|
||||
std::vector<std::string> args;
|
||||
|
||||
args.push_back(compiler_name);
|
||||
|
||||
args.push_back("-target");
|
||||
args.push_back(WRAPPER_HOST);
|
||||
|
||||
args.push_back("-mmacosx-version-min=" WRAPPER_OS_VERSION_MIN);
|
||||
|
||||
// The ld64 linker will just assume sdk_version is the same as
|
||||
// macosx-version-min if we don't supply it. That probably will not
|
||||
// do any harm.
|
||||
// args.push_back("-Wl,-sdk_version," WRAPPER_SDK_VERSION);
|
||||
|
||||
// Suppress warnings about the -Wl arguments not being used when we're just
|
||||
// compiling and not linking.
|
||||
args.push_back("-Wno-unused-command-line-argument");
|
||||
|
||||
args.push_back("--sysroot");
|
||||
args.push_back(WRAPPER_SDK_PATH);
|
||||
|
||||
// Causes clang to pass -demangle, -lto_library, -no_deduplicate, and other
|
||||
// options that could be useful. Version 274.2 is the version number used here:
|
||||
// https://github.com/tpoechtrager/osxcross/blob/474f359/build.sh#L140
|
||||
if (WRAPPER_LINKER_VERSION[0])
|
||||
{
|
||||
args.push_back("-mlinker-version=" WRAPPER_LINKER_VERSION);
|
||||
}
|
||||
|
||||
if (compiler_name == "clang++")
|
||||
{
|
||||
args.push_back("-stdlib=libc++");
|
||||
args.push_back("-cxx-isystem");
|
||||
args.push_back(WRAPPER_SDK_PATH "/usr/include/c++/v1");
|
||||
}
|
||||
|
||||
for (int i = 1; i < argc; ++i)
|
||||
{
|
||||
args.push_back(argv[i]);
|
||||
}
|
||||
|
||||
return do_exec(compiler_name, args);
|
||||
}
|
||||
|
||||
int c_compiler_main(int argc, char ** argv)
|
||||
{
|
||||
return compiler_main(argc, argv, "clang");
|
||||
}
|
||||
|
||||
int cxx_compiler_main(int argc, char ** argv)
|
||||
{
|
||||
return compiler_main(argc, argv, "clang++");
|
||||
}
|
||||
|
||||
int wrapper_main(int argc, char ** argv)
|
||||
{
|
||||
std::cout <<
|
||||
"host: " WRAPPER_HOST "\n"
|
||||
"path: " WRAPPER_PATH "\n"
|
||||
"sdk_path: " WRAPPER_SDK_PATH "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct {
|
||||
const char * name;
|
||||
int (*main_func)(int argc, char ** argv);
|
||||
} prgms[] = {
|
||||
{ WRAPPER_HOST "-gcc", c_compiler_main },
|
||||
{ WRAPPER_HOST "-cc", c_compiler_main },
|
||||
{ WRAPPER_HOST "-clang", c_compiler_main },
|
||||
{ WRAPPER_HOST "-g++", cxx_compiler_main },
|
||||
{ WRAPPER_HOST "-c++", cxx_compiler_main },
|
||||
{ WRAPPER_HOST "-clang++", cxx_compiler_main },
|
||||
{ WRAPPER_HOST "-wrapper", wrapper_main },
|
||||
{ nullptr, nullptr },
|
||||
};
|
||||
|
||||
const char * get_program_name(const char * path)
|
||||
{
|
||||
const char * p = strrchr(path, '/');
|
||||
if (p) { path = p + 1; }
|
||||
return path;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
// We only want this wrapper and the compiler it invokes to access a certain
|
||||
// set of tools that are determined at build time. Ignore whatever is on the
|
||||
// user's path and use the path specified by our Nix expression instead.
|
||||
int result = setenv("PATH", WRAPPER_PATH, 1);
|
||||
if (result)
|
||||
{
|
||||
std::cerr << "wrapper failed to set PATH" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::string program_name = get_program_name(argv[0]);
|
||||
|
||||
for (auto * p = prgms; p->name; p++)
|
||||
{
|
||||
if (program_name == p->name)
|
||||
{
|
||||
return p->main_func(argc, argv);
|
||||
}
|
||||
}
|
||||
|
||||
std::cerr << "compiler wrapper invoked with unknown program name: "
|
||||
<< argv[0] << std::endl;
|
||||
return 1;
|
||||
}
|
@ -1,91 +0,0 @@
|
||||
env: attrs:
|
||||
|
||||
let
|
||||
nixpkgs = env.nixpkgs;
|
||||
|
||||
native_inputs =
|
||||
(attrs.native_inputs or [])
|
||||
++ env.default_native_inputs;
|
||||
|
||||
cross_inputs = (attrs.cross_inputs or []);
|
||||
|
||||
path_join = builtins.concatStringsSep ":";
|
||||
|
||||
path_map = dir: inputs: (map (i: "${i}" + dir) inputs);
|
||||
|
||||
# We can't just set PATH in our derivation because nix-shell will make the
|
||||
# derivation's PATH override the system PATH, meaning we can't use utilities
|
||||
# like "git" or "which" form the host system. So we set _PATH instead, and we
|
||||
# use a setup script ($setup) that copies _PATH to PATH. And we provide
|
||||
# $stdenv/setup so that nix-shell can find our setup script.
|
||||
#
|
||||
# nixcrpkgs does not expose its users to this mess. The user can specify a
|
||||
# PATH if they want, and it will be automatically moved to _PATH in the
|
||||
# derivation.
|
||||
filtered_attrs = nixpkgs.lib.filterAttrs (n: v: n != "PATH") attrs;
|
||||
|
||||
path_attrs = {
|
||||
_PATH = path_join (
|
||||
(if attrs ? PATH then [attrs.PATH] else []) ++
|
||||
(path_map "/bin" native_inputs)
|
||||
);
|
||||
};
|
||||
|
||||
default_attrs = {
|
||||
system = builtins.currentSystem;
|
||||
|
||||
SHELL = "${nixpkgs.bashInteractive}/bin/bash";
|
||||
|
||||
setup = ./pretend_stdenv/setup;
|
||||
|
||||
# This allows nix-shell to find our setup script.
|
||||
stdenv = ./pretend_stdenv;
|
||||
|
||||
PKG_CONFIG_PATH = path_join (
|
||||
(if attrs ? PKG_CONFIG_PATH then [attrs.PKG_CONFIG_PATH] else []) ++
|
||||
(path_map "/lib/pkgconfig" native_inputs)
|
||||
);
|
||||
};
|
||||
|
||||
cross_attrs = if !env.is_cross then {} else {
|
||||
NIXCRPKGS = true;
|
||||
|
||||
inherit (env) host arch os exe_suffix;
|
||||
inherit (env) cmake_toolchain;
|
||||
|
||||
PKG_CONFIG_CROSS_PATH = path_join (
|
||||
(if attrs ? PKG_CONFIG_CROSS_PATH then [attrs.PKG_CONFIG_CROSS_PATH] else []) ++
|
||||
(path_map "/lib/pkgconfig" cross_inputs)
|
||||
);
|
||||
|
||||
CMAKE_CROSS_PREFIX_PATH = path_join (
|
||||
(if attrs ? CMAKE_CROSS_PREFIX_PATH then [attrs.CMAKE_CROSS_PREFIX_PATH] else []) ++
|
||||
cross_inputs
|
||||
);
|
||||
};
|
||||
|
||||
name_attrs = {
|
||||
name = (attrs.name or "package")
|
||||
+ (if env.is_cross then "-${env.host}" else "");
|
||||
};
|
||||
|
||||
builder_attrs =
|
||||
if builtins.isAttrs attrs.builder then
|
||||
if attrs.builder ? ruby then
|
||||
{
|
||||
builder = "${nixpkgs.ruby}/bin/ruby";
|
||||
args = [attrs.builder.ruby];
|
||||
}
|
||||
else
|
||||
attrs.builder
|
||||
else
|
||||
rec {
|
||||
builder = "${nixpkgs.bashInteractive}/bin/bash";
|
||||
args = ["-ue" attrs.builder];
|
||||
};
|
||||
|
||||
drv_attrs = default_attrs // cross_attrs
|
||||
// filtered_attrs // name_attrs // builder_attrs // path_attrs;
|
||||
|
||||
in
|
||||
derivation drv_attrs
|
@ -1,26 +0,0 @@
|
||||
source $stdenv/setup
|
||||
|
||||
unset CC CXX CFLAGS LDFLAGS LD AR AS RANLIB SIZE STRINGS NM STRIP OBJCOPY
|
||||
|
||||
tar -xf $src
|
||||
|
||||
cd binutils-$version
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Clear the default library search path (noSysDirs)
|
||||
echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
|
||||
|
||||
cd ..
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
../binutils-$version/configure --prefix=$out $configure_flags
|
||||
|
||||
make
|
||||
|
||||
make install
|
||||
|
@ -1,26 +0,0 @@
|
||||
{ native, host }:
|
||||
|
||||
native.make_derivation rec {
|
||||
name = "binutils-${version}-${host}";
|
||||
|
||||
version = "2.27";
|
||||
|
||||
src = native.nixpkgs.fetchurl {
|
||||
url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
|
||||
sha256 = "125clslv17xh1sab74343fg6v31msavpmaa1c1394zsqa773g5rn";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./deterministic.patch
|
||||
];
|
||||
|
||||
build_inputs = [ native.nixpkgs.bison native.nixpkgs.zlib ];
|
||||
|
||||
configure_flags =
|
||||
"--target=${host} " +
|
||||
"--enable-shared " +
|
||||
"--enable-deterministic-archives " +
|
||||
"--disable-werror ";
|
||||
|
||||
builder = ./builder.sh;
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
Make binutils output deterministic by default.
|
||||
--- orig/ld/ldlang.c
|
||||
+++ new/ld/ldlang.c
|
||||
@@ -3095,6 +3095,8 @@
|
||||
ldfile_output_machine))
|
||||
einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
|
||||
|
||||
+ link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;
|
||||
+
|
||||
link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
|
||||
if (link_info.hash == NULL)
|
||||
einfo (_("%P%F: can not create hash table: %E\n"));
|
@ -1,35 +0,0 @@
|
||||
source $setup
|
||||
|
||||
cp -r $src mingw-w64
|
||||
chmod -R u+w mingw-w64
|
||||
|
||||
cd mingw-w64
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
cd ..
|
||||
|
||||
if [ -n "$just_headers" ]; then
|
||||
mkdir build_headers
|
||||
cd build_headers
|
||||
../mingw-w64/mingw-w64-headers/configure --prefix=$out $configure_flags
|
||||
make
|
||||
make install
|
||||
cd ..
|
||||
else
|
||||
mkdir build_crt_and_headers
|
||||
cd build_crt_and_headers
|
||||
../mingw-w64/configure --prefix=$out $configure_flags
|
||||
make
|
||||
make install
|
||||
cd ..
|
||||
|
||||
mkdir build_winpthreads
|
||||
cd build_winpthreads
|
||||
LDFLAGS="-L${out}/lib" ../mingw-w64/mingw-w64-libraries/winpthreads/configure \
|
||||
--host=$host --prefix=$out --disable-shared --enable-static
|
||||
make
|
||||
make install
|
||||
cd ..
|
||||
fi
|
@ -1,106 +0,0 @@
|
||||
{ native, arch }:
|
||||
|
||||
let
|
||||
nixpkgs = native.nixpkgs;
|
||||
|
||||
host = "${arch}-w64-mingw32";
|
||||
|
||||
binutils = import ./binutils { inherit native host; };
|
||||
|
||||
mingw-w64_info = rec {
|
||||
name = "mingw-w64-${version}";
|
||||
version = "2017-08-03";
|
||||
src = nixpkgs.fetchgit {
|
||||
url = "git://git.code.sf.net/p/mingw-w64/mingw-w64";
|
||||
rev = "6de0055f99ed447ec63c1a650a3830f266a808bd";
|
||||
sha256 = "1830rcd0vsbvpr5m1lrabcqh12qrw1flq333b8xrs5b3n542xy2i";
|
||||
};
|
||||
patches = [
|
||||
./usb.patch
|
||||
./guid-selectany.patch
|
||||
];
|
||||
configure_flags = "--enable-secure-api --enable-idl";
|
||||
};
|
||||
|
||||
mingw-w64_headers = native.make_derivation {
|
||||
name = "${mingw-w64_info.name}-headers";
|
||||
inherit host;
|
||||
inherit (mingw-w64_info) src patches configure_flags;
|
||||
builder = ./builder.sh;
|
||||
just_headers = true;
|
||||
};
|
||||
|
||||
gcc_stage_1 = import ./gcc {
|
||||
stage = 1;
|
||||
libc = mingw-w64_headers;
|
||||
inherit native arch binutils;
|
||||
};
|
||||
|
||||
mingw-w64_full = native.make_derivation {
|
||||
name = "${mingw-w64_info.name}-${host}";
|
||||
inherit host;
|
||||
inherit (mingw-w64_info) version src patches;
|
||||
configure_flags =
|
||||
"--host=${host} " +
|
||||
"--disable-shared --enable-static " +
|
||||
mingw-w64_info.configure_flags;
|
||||
native_inputs = [ binutils gcc_stage_1 ];
|
||||
builder = ./builder.sh;
|
||||
just_headers = false;
|
||||
};
|
||||
|
||||
gcc = import ./gcc {
|
||||
libc = mingw-w64_full;
|
||||
inherit native arch binutils;
|
||||
};
|
||||
|
||||
license = native.make_derivation {
|
||||
name = "${mingw-w64_info.name}-license";
|
||||
inherit (mingw-w64_info) version src;
|
||||
gcc_src = gcc.src;
|
||||
builder = ./license_builder.sh;
|
||||
};
|
||||
|
||||
global_license_set = { _global = license; };
|
||||
|
||||
cmake_toolchain = import ../cmake_toolchain {
|
||||
cmake_system_name = "Windows";
|
||||
inherit nixpkgs host;
|
||||
};
|
||||
|
||||
os = "windows";
|
||||
|
||||
compiler = "gcc";
|
||||
|
||||
exe_suffix = ".exe";
|
||||
|
||||
crossenv = {
|
||||
is_cross = true;
|
||||
|
||||
default_native_inputs = native.default_native_inputs
|
||||
++ [ gcc binutils native.pkgconf native.wrappers ];
|
||||
|
||||
# Target info variables.
|
||||
inherit host arch os compiler exe_suffix;
|
||||
|
||||
# CMake toolchain file.
|
||||
inherit cmake_toolchain;
|
||||
|
||||
# A wide variety of programs and build tools.
|
||||
inherit nixpkgs;
|
||||
|
||||
# Some native build tools made by nixcrpkgs.
|
||||
inherit native;
|
||||
|
||||
# License information that should be shipped with any software compiled by
|
||||
# this environment.
|
||||
inherit global_license_set;
|
||||
|
||||
# Make it easy to build or refer to the build tools.
|
||||
inherit gcc binutils mingw-w64_full mingw-w64_info mingw-w64_headers gcc_stage_1;
|
||||
mingw-w64 = mingw-w64_full;
|
||||
|
||||
make_derivation = import ../make_derivation.nix crossenv;
|
||||
};
|
||||
in
|
||||
crossenv
|
@ -1,63 +0,0 @@
|
||||
source $setup
|
||||
|
||||
tar -xf $src
|
||||
|
||||
cd gcc-$version
|
||||
for patch in $patches; do
|
||||
echo applying patch $patch
|
||||
patch -p1 -i $patch
|
||||
done
|
||||
|
||||
# Prevents a name collision with mingw-w64 headers.
|
||||
# See: https://gcc.gnu.org/ml/gcc-help/2017-05/msg00121.html
|
||||
cd libstdc++-v3
|
||||
sed -i 's/\b__in\b/___in/g' \
|
||||
include/ext/random.tcc \
|
||||
include/ext/vstring.tcc \
|
||||
include/std/utility \
|
||||
include/std/tuple \
|
||||
include/std/istream \
|
||||
include/tr2/bool_set.tcc \
|
||||
include/tr2/bool_set \
|
||||
include/bits/basic_string.h \
|
||||
include/bits/basic_string.tcc \
|
||||
include/bits/locale_facets.h \
|
||||
include/bits/istream.tcc \
|
||||
include/tr1/utility \
|
||||
include/tr1/tuple
|
||||
sed -i 's/\b__out\b/___out/g' \
|
||||
include/ext/random.tcc \
|
||||
include/ext/algorithm \
|
||||
include/ext/pb_ds/detail/debug_map_base.hpp \
|
||||
include/std/ostream \
|
||||
include/std/thread \
|
||||
include/tr2/bool_set \
|
||||
include/bits/ostream.tcc \
|
||||
include/bits/regex.tcc \
|
||||
include/bits/stl_algo.h \
|
||||
include/bits/locale_conv.h \
|
||||
include/bits/regex.h \
|
||||
include/bits/ostream_insert.h \
|
||||
include/tr1/regex \
|
||||
include/parallel/algo.h \
|
||||
include/parallel/set_operations.h \
|
||||
include/parallel/multiway_merge.h \
|
||||
include/parallel/unique_copy.h \
|
||||
include/experimental/algorithm \
|
||||
config/locale/dragonfly/c_locale.h \
|
||||
config/locale/generic/c_locale.h \
|
||||
config/locale/gnu/c_locale.h
|
||||
|
||||
cd ../..
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
../gcc-$version/configure --prefix=$out $configure_flags
|
||||
|
||||
make $make_flags
|
||||
|
||||
make $install_targets
|
||||
|
||||
# Remove "install-tools" so we don't have a reference to bash.
|
||||
rm -r "$out/libexec/gcc/$target/$version/install-tools/"
|
@ -1,35 +0,0 @@
|
||||
cppdefault.c If CROSS_DIRECTORY_STRUCTURE is defined, don't use the native
|
||||
system header dir; use CROSS_INCLUDE_DIR instead if it is defined.
|
||||
|
||||
This just makes GCC's behavior match the documentation for the
|
||||
"--with-sysroot" configure option, which corresponds to
|
||||
TARGET_SYSTEM_ROOT. The documentation says that if you specify
|
||||
directories with --with-sysroot and --with-native-system-header-dir,
|
||||
then the compilter will concatenate the the two together (with the
|
||||
sysroot coming first) and search that directory instead of the default
|
||||
/usr/include.
|
||||
|
||||
The concatenation is done with this line in configure.ac:
|
||||
|
||||
CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
|
||||
|
||||
Then Makefile.in sets the preprocessor macro CROSS_INCLUDE_DIR equal to
|
||||
CROSS_SYSTEM_HEADER_DIR.
|
||||
|
||||
This patch reverts one of the changes from Daniel Jacobowitz on 2013-02-13.
|
||||
https://github.com/gcc-mirror/gcc/commit/17acc97af91fbd116659301b0b7d4965ecc1631d
|
||||
|
||||
--- gcc-5.4.0/gcc/cppdefault.c
|
||||
+++ gcc-5.4.0/gcc/cppdefault.c
|
||||
@@ -28,9 +28,9 @@
|
||||
#define NATIVE_SYSTEM_HEADER_COMPONENT 0
|
||||
#endif
|
||||
|
||||
-#if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT)
|
||||
+#if defined (CROSS_DIRECTORY_STRUCTURE)
|
||||
# undef LOCAL_INCLUDE_DIR
|
||||
# undef NATIVE_SYSTEM_HEADER_DIR
|
||||
#else
|
||||
# undef CROSS_INCLUDE_DIR
|
||||
#endif
|
||||
|
@ -1,103 +0,0 @@
|
||||
{ native, arch, stage ? 2, binutils, libc }:
|
||||
|
||||
let
|
||||
nixpkgs = native.nixpkgs;
|
||||
isl = nixpkgs.isl_0_14;
|
||||
inherit (nixpkgs) stdenv lib fetchurl;
|
||||
inherit (nixpkgs) gettext gmp libmpc libelf mpfr texinfo which zlib;
|
||||
|
||||
stageName = if stage == 1 then "-stage1"
|
||||
else assert stage == 2; "";
|
||||
in
|
||||
|
||||
native.make_derivation rec {
|
||||
name = "gcc-${version}-${target}${stageName}";
|
||||
|
||||
target = "${arch}-w64-mingw32";
|
||||
|
||||
version = "6.3.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2";
|
||||
sha256 = "17xjz30jb65hcf714vn9gcxvrrji8j20xm7n33qg1ywhyzryfsph";
|
||||
};
|
||||
|
||||
builder = ./builder.sh;
|
||||
|
||||
patches = [
|
||||
# TODO: combine three of these patches into one called search-dirs.patch
|
||||
./mingw-search-paths.patch
|
||||
./use-source-date-epoch.patch
|
||||
./libstdc++-target.patch
|
||||
./no-sys-dirs.patch
|
||||
./cppdefault.patch
|
||||
|
||||
# Fix a compiler error in GCC's ubsan.c: ISO C++ forbids comparison
|
||||
# between pointer and integer.
|
||||
./ubsan.patch
|
||||
];
|
||||
|
||||
# TODO: can probably remove libelf here, and might as well remove
|
||||
# the libraries that are given to GCC as configure flags
|
||||
# TODO: just let GCC use its own gettext (intl)
|
||||
native_inputs = [
|
||||
binutils gettext libelf texinfo which zlib
|
||||
];
|
||||
|
||||
configure_flags =
|
||||
"--target=${arch}-w64-mingw32 " +
|
||||
"--with-sysroot=${libc} " +
|
||||
"--with-native-system-header-dir=/include " +
|
||||
"--with-gnu-as " +
|
||||
"--with-gnu-ld " +
|
||||
"--with-as=${binutils}/bin/${arch}-w64-mingw32-as " +
|
||||
"--with-ld=${binutils}/bin/${arch}-w64-mingw32-ld " +
|
||||
"--with-isl=${isl} " +
|
||||
"--with-gmp-include=${gmp.dev}/include " +
|
||||
"--with-gmp-lib=${gmp.out}/lib " +
|
||||
"--with-mpfr-include=${mpfr.dev}/include " +
|
||||
"--with-mpfr-lib=${mpfr.out}/lib " +
|
||||
"--with-mpc=${libmpc} " +
|
||||
"--with-zlib-include=${zlib.dev}/include " +
|
||||
"--with-zlib-lib=${zlib.out}/lib " +
|
||||
"--enable-lto " +
|
||||
"--enable-plugin " +
|
||||
"--enable-static " +
|
||||
"--enable-sjlj-exceptions " +
|
||||
"--enable-__cxa_atexit " +
|
||||
"--enable-long-long " +
|
||||
"--with-dwarf2 " +
|
||||
"--enable-fully-dynamic-string " +
|
||||
(if stage == 1 then
|
||||
"--enable-languages=c " +
|
||||
"--enable-threads=win32 "
|
||||
else
|
||||
"--enable-languages=c,c++ " +
|
||||
"--enable-threads=posix "
|
||||
) +
|
||||
"--without-included-gettext " +
|
||||
"--disable-libstdcxx-pch " +
|
||||
"--disable-nls " +
|
||||
"--disable-shared " +
|
||||
"--disable-multilib " +
|
||||
"--disable-libssp " +
|
||||
"--disable-win32-registry " +
|
||||
"--disable-bootstrap"; # TODO: not needed, --disable-bootstrap
|
||||
# only applies to native builds
|
||||
|
||||
make_flags =
|
||||
if stage == 1 then
|
||||
["all-gcc" "all-target-libgcc"]
|
||||
else
|
||||
[];
|
||||
|
||||
install_targets =
|
||||
if stage == 1 then
|
||||
["install-gcc install-target-libgcc"]
|
||||
else
|
||||
["install-strip"];
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
}
|
||||
|
||||
# TODO: why is GCC providing a fixed limits.h?
|
@ -1,32 +0,0 @@
|
||||
Patch to make the target libraries 'configure' scripts find the proper CPP.
|
||||
I noticed that building the mingw32 cross compiler.
|
||||
Looking at the build script for mingw in archlinux, I think that only nixos
|
||||
needs this patch. I don't know why.
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 93f66b6..d691917 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -266,6 +266,7 @@ BASE_TARGET_EXPORTS = \
|
||||
AR="$(AR_FOR_TARGET)"; export AR; \
|
||||
AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
|
||||
CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
|
||||
+ CPP="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CC; \
|
||||
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
|
||||
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
||||
CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
|
||||
@@ -291,11 +292,13 @@ BASE_TARGET_EXPORTS = \
|
||||
RAW_CXX_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
||||
- CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
NORMAL_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
- CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
# Where to find GMP
|
||||
HOST_GMPLIBS = @gmplibs@
|
@ -1,14 +0,0 @@
|
||||
Make it so GCC does not force us to have a "mingw" symlink.
|
||||
|
||||
--- gcc-6.3.0-orig/gcc/config/i386/mingw32.h
|
||||
+++ gcc-6.3.0/gcc/config/i386/mingw32.h
|
||||
@@ -163,3 +163,3 @@
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_1
|
||||
-#define STANDARD_STARTFILE_PREFIX_1 "/mingw/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
|
||||
#endif
|
||||
@@ -172,3 +172,3 @@
|
||||
#undef NATIVE_SYSTEM_HEADER_DIR
|
||||
-#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include"
|
||||
+#define NATIVE_SYSTEM_HEADER_DIR "/include"
|
||||
|
@ -1,28 +0,0 @@
|
||||
diff -ru -x '*~' gcc-4.8.3-orig/gcc/cppdefault.c gcc-4.8.3/gcc/cppdefault.c
|
||||
--- gcc-4.8.3-orig/gcc/cppdefault.c 2013-01-10 21:38:27.000000000 +0100
|
||||
+++ gcc-4.8.3/gcc/cppdefault.c 2014-08-18 16:20:32.893944536 +0200
|
||||
@@ -35,6 +35,8 @@
|
||||
# undef CROSS_INCLUDE_DIR
|
||||
#endif
|
||||
|
||||
+#undef LOCAL_INCLUDE_DIR
|
||||
+
|
||||
const struct default_include cpp_include_defaults[]
|
||||
#ifdef INCLUDE_DEFAULTS
|
||||
= INCLUDE_DEFAULTS;
|
||||
diff -ru -x '*~' gcc-4.8.3-orig/gcc/gcc.c gcc-4.8.3/gcc/gcc.c
|
||||
--- gcc-4.8.3-orig/gcc/gcc.c 2014-03-23 12:30:57.000000000 +0100
|
||||
+++ gcc-4.8.3/gcc/gcc.c 2014-08-18 13:19:32.689201690 +0200
|
||||
@@ -1162,10 +1162,10 @@
|
||||
/* Default prefixes to attach to command names. */
|
||||
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_1
|
||||
-#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_1 ""
|
||||
#endif
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_2
|
||||
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_2 ""
|
||||
#endif
|
||||
|
||||
#ifdef CROSS_DIRECTORY_STRUCTURE /* Don't use these prefixes for a cross compiler. */
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user