Skip to content
Closed
6 changes: 6 additions & 0 deletions lib/systems/examples.nix
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@ rec {
libc = "libSystem";
platform = {};
};
darwin = {
config = "x86_64-darwin";
arch = "x86_64";
libc = "libSystem";
platform = {};
};

#
# Windows
Expand Down
17 changes: 8 additions & 9 deletions pkgs/development/compilers/gcc/6/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -340,22 +340,21 @@ stdenv.mkDerivation ({
"--with-native-system-header-dir=${getDev stdenv.cc.libc}/include" ++

# Basic configuration
optional (!crossDarwin) "--enable-lto" ++
[
"--enable-lto"
"--disable-libstdcxx-pch"
"--without-included-gettext"
"--with-system-zlib"
"--enable-static"
"--enable-languages=${
concatStrings (intersperse ","
( optional langC "c"
++ optional langCC "c++"
++ optional langFortran "fortran"
++ optional langJava "java"
++ optional langGo "go"
++ optional langObjC "objc"
++ optional langObjCpp "obj-c++"
++ optionals crossDarwin [ "objc" "obj-c++" ]
( optional langC "c"
++ optional langCC "c++"
++ optional langFortran "fortran"
++ optional langJava "java"
++ optional langGo "go"
++ optional (langObjC || crossDarwin) "objc"
++ optional (langObjCpp || crossDarwin) "obj-c++"
)
)
}"
Expand Down
17 changes: 8 additions & 9 deletions pkgs/development/compilers/gcc/7/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -338,22 +338,21 @@ stdenv.mkDerivation ({
"--with-native-system-header-dir=${getDev stdenv.cc.libc}/include" ++

# Basic configuration
optional (!crossDarwin) "--enable-lto" ++
[
"--enable-lto"
"--disable-libstdcxx-pch"
"--without-included-gettext"
"--with-system-zlib"
"--enable-static"
"--enable-languages=${
concatStrings (intersperse ","
( optional langC "c"
++ optional langCC "c++"
++ optional langFortran "fortran"
++ optional langJava "java"
++ optional langGo "go"
++ optional langObjC "objc"
++ optional langObjCpp "obj-c++"
++ optionals crossDarwin [ "objc" "obj-c++" ]
( optional langC "c"
++ optional langCC "c++"
++ optional langFortran "fortran"
++ optional langJava "java"
++ optional langGo "go"
++ optional (langObjC || crossDarwin) "objc"
++ optional (langObjCpp || crossDarwin) "obj-c++"
)
)
}"
Expand Down
7 changes: 4 additions & 3 deletions pkgs/os-specific/darwin/binutils/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{ stdenv, binutils-raw, cctools
{ stdenvNoCC, lib
, binutils-raw, cctools
, hostPlatform, targetPlatform
}:

Expand All @@ -15,7 +16,7 @@ let
in

# TODO loop over targetPrefixed binaries too
stdenv.mkDerivation {
stdenvNoCC.mkDerivation {
name = "${targetPrefix}cctools-binutils-darwin";
outputs = [ "out" "info" "man" ];
buildCommand = ''
Expand All @@ -34,7 +35,7 @@ stdenv.mkDerivation {
# - strip: the binutils one seems to break mach-o files
# - lipo: gcc build assumes it exists
# - nm: the gnu one doesn't understand many new load commands
for i in ${stdenv.lib.concatStringsSep " " (builtins.map (e: targetPrefix + e) cmds)}; do
for i in ${lib.concatStringsSep " " (builtins.map (e: targetPrefix + e) cmds)}; do
ln -sf "${cctools}/bin/$i" "$out/bin/$i"
done

Expand Down
4 changes: 2 additions & 2 deletions pkgs/os-specific/darwin/cctools/port.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ let
nativeBuildInputs = [ autoconf automake libtool_2 ];
buildInputs = [ libuuid ] ++
# Only need llvm and clang if the stdenv isn't already clang-based (TODO: just make a stdenv.cc.isClang)
stdenv.lib.optionals (!stdenv.isDarwin) [ llvm clang ] ++
stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ];
#stdenv.lib.optionals (!stdenv.isDarwin) [ llvm clang ] ++
[ libcxxabi libobjc ];

patches = [
./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch
Expand Down
19 changes: 11 additions & 8 deletions pkgs/os-specific/darwin/maloader/default.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ stdenv, fetchgit, opencflite, clang, libcxx }:
{ stdenv, fetchFromGitHub, opencflite, libuuid, zlib }:

stdenv.mkDerivation {
name = "maloader-0git";
name = "maloader-2017-05-27";

src = fetchgit {
url = "git://github.com/shinh/maloader.git";
rev = "5f220393e0b7b9ad0cf1aba0e89df2b42a1f0442";
sha256 = "0dd1pn07x1y8pyn5wz8qcl1c1xwghyya4d060m3y9vx5dhv9xmzw";
src = fetchFromGitHub {
owner = "shinh";
repo = "maloader";
rev = "bdff0a61952c13d88a474986cabce2304e6b8e61";
sha256 = "0axvm9h2n0q81z811njxmjbx4j8q971aik2ip74fdq8b61g95hqz";
};

postPatch = ''
Expand All @@ -16,10 +17,12 @@ stdenv.mkDerivation {
ld-mac.cc
'';

NIX_CFLAGS_COMPILE = "-I${libcxx}/include/c++/v1";
buildInputs = [ clang libcxx ];
buildInputs = [ libuuid zlib ];

buildFlags = [ "USE_LIBCXX=1" "release" ];

NIX_CFLAGS_COMPILE = "-Wno-error=unused-command-line-argument";

installPhase = ''
install -vD libmac.so "$out/lib/libmac.so"

Expand Down
2 changes: 1 addition & 1 deletion pkgs/os-specific/darwin/opencflite/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "0jgmzs0ycl930hmzcvx0ykryik56704yw62w394q1q3xw5kkjn9v";
};

configureFlags = [ "--with-uuid=${libuuid}" ];
configureFlags = stdenv.lib.optional (libuuid != null) "--with-uuid=${libuuid.dev}";
buildInputs = [ icu tzdata.dev ];
enableParallelBuilding = true;

Expand Down
10 changes: 6 additions & 4 deletions pkgs/os-specific/darwin/xcode/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ stdenv, requireFile, xpwn }:
{ stdenv, requireFile, libdmg-hfsplus }:

with stdenv.lib;

Expand All @@ -17,13 +17,15 @@ in stdenv.mkDerivation rec {
phases = [ "unpackPhase" "patchPhase" "installPhase" "fixupPhase" ];
outputs = [ "out" "toolchain" ];

nativeBuildInputs = [ libdmg-hfsplus ];


unpackCmd = let
basePath = "Xcode.app/Contents/Developer/Platforms/MacOSX.platform";
sdkPath = "${basePath}/Developer/SDKs";
in ''
${xpwn}/bin/dmg extract "$curSrc" main.hfs > /dev/null
${xpwn}/bin/hfsplus main.hfs extractall "${sdkPath}" > /dev/null
dmg extract "$curSrc" main.hfs > /dev/null
hfsplus main.hfs extractall "${sdkPath}" > /dev/null
'';

setSourceRoot = "sourceRoot=MacOSX${osxVersion}.sdk";
Expand All @@ -38,7 +40,7 @@ in stdenv.mkDerivation rec {

mkdir -p "$toolchain"
pushd "$toolchain"
${xpwn}/bin/hfsplus "$(dirs +1)/../main.hfs" extractall \
hfsplus "$(dirs +1)/../main.hfs" extractall \
Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr \
> /dev/null
popd
Expand Down
24 changes: 24 additions & 0 deletions pkgs/tools/filesystems/libdmg-hfsplus/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{ stdenv, fetchFromGitHub, cmake, zlib, bzip2, libpng, openssl }:

stdenv.mkDerivation rec {
name = "libdmg-hfsplus-${version}";
version = "2016-01-31";

src = fetchFromGitHub {
owner = "andreas56";
repo = "libdmg-hfsplus";
rev = "81dd75fd1549b24bf8af9736ac25518b367e6b63";
sha256 = "0109zmz7nkydkrka98wmj0bjkskmxghw0k39a60ampywmsdi1vkh";
};

nativeBuildInputs = [ cmake ];

buildInputs = [ zlib bzip2 libpng openssl ];

meta = with stdenv.lib; src.meta // {
description = "Portable libraries and utilities that manipulate HFS+ volumes and Apple's DMG images";
license = licenses.gpl3Plus;
platforms = with platforms; linux ++ darwin;
};
}

2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3195,6 +3195,8 @@ with pkgs;

libcpuid = callPackage ../tools/misc/libcpuid { };

libdmg-hfsplus = callPackage ../tools/filesystems/libdmg-hfsplus { };

libscrypt = callPackage ../development/libraries/libscrypt { };

libcloudproviders = callPackage ../development/libraries/libcloudproviders { };
Expand Down
1 change: 1 addition & 0 deletions pkgs/top-level/darwin-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ in
DarwinTools = callPackage ../os-specific/darwin/DarwinTools { };

maloader = callPackage ../os-specific/darwin/maloader {
stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv;
inherit (darwin) opencflite;
};

Expand Down