mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-22 23:00:55 +00:00
81 lines
2.7 KiB
Nix
81 lines
2.7 KiB
Nix
# The darwin toolchain, counterpart to linux.nix. Split by consumer: a dev
|
|
# shell's stdenv provides the SDK variables, nothing provides libresolv.
|
|
#
|
|
# darwin only - `libresolv` does not exist on Linux.
|
|
{ pkgs }:
|
|
let
|
|
inherit (import ./packages.nix { inherit pkgs; })
|
|
llvmVersion
|
|
llvmPackages
|
|
mkVersionedToolLinks
|
|
;
|
|
|
|
# nixpkgs keeps libresolv out of the macOS SDK, so neither c-ares' `-lresolv`
|
|
# nor grpc's <arpa/nameser.h> resolves. Headers can come from nixpkgs; the
|
|
# library cannot, or its store path lands in xrpld - hence this copy.
|
|
libresolvSystemStub =
|
|
pkgs.runCommand "libresolv-system-stub"
|
|
{
|
|
nativeBuildInputs = [ llvmPackages.bintools ];
|
|
}
|
|
''
|
|
mkdir -p "$out/lib"
|
|
cp ${pkgs.darwin.libresolv}/lib/libresolv.9.dylib "$out/lib/"
|
|
chmod +w "$out/lib/libresolv.9.dylib"
|
|
llvm-install-name-tool -id /usr/lib/libresolv.9.dylib "$out/lib/libresolv.9.dylib"
|
|
ln -s libresolv.9.dylib "$out/lib/libresolv.dylib"
|
|
'';
|
|
in
|
|
{
|
|
# For an environment that only puts binaries on PATH.
|
|
toolchain = [
|
|
llvmPackages.clang
|
|
# The wrappers re-export only part of cctools; a bare env has no stdenv to
|
|
# supply the rest, and without `dsymutil` even `clang -g` cannot link. One
|
|
# by one, because buildEnv rejects any name a wrapper owns (notably `ld`).
|
|
(pkgs.linkFarm "cctools-extra" (
|
|
map
|
|
(tool: {
|
|
name = "bin/${tool}";
|
|
path = "${llvmPackages.clang.bintools.bintools}/bin/${tool}";
|
|
})
|
|
[
|
|
"codesign_allocate"
|
|
"dsymutil"
|
|
"dwarfdump"
|
|
"install_name_tool"
|
|
"lipo"
|
|
"otool"
|
|
]
|
|
))
|
|
(mkVersionedToolLinks {
|
|
name = "clang";
|
|
package = llvmPackages.clang;
|
|
version = llvmVersion;
|
|
tools = [
|
|
"clang"
|
|
"clang++"
|
|
];
|
|
})
|
|
];
|
|
|
|
# Without these CMake asks `xcrun` and gets the Command Line Tools SDK, whose
|
|
# headers clash with the Nix libc++ ones.
|
|
sdkEnv = {
|
|
DEVELOPER_DIR = "${pkgs.apple-sdk}";
|
|
SDKROOT = "${pkgs.apple-sdk}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
|
|
};
|
|
|
|
# Salted names: the wrappers only read plain NIX_CFLAGS_COMPILE / NIX_LDFLAGS
|
|
# through role variables a Nix stdenv would set. The salt is the target
|
|
# platform, so this fits the gcc wrapper too.
|
|
#
|
|
# No space after -isystem: these are written one per line as KEY=VALUE, and a
|
|
# shell sourcing that reads the space as the end of the assignment.
|
|
libresolvEnv = {
|
|
"NIX_CFLAGS_COMPILE_${llvmPackages.clang.suffixSalt}" =
|
|
"-isystem${pkgs.darwin.libresolv.dev}/include";
|
|
"NIX_LDFLAGS_${llvmPackages.clang.bintools.suffixSalt}" = "-L${libresolvSystemStub}/lib";
|
|
};
|
|
}
|