summary refs log tree commit diff
path: root/pkgs/development/tools/xcbuild/wrapper.nix
blob: 3a1547440fd6c44583015cf047e1f7e4aaebed4f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{ stdenv, callPackage, makeWrapper, writeText, CoreServices, ImageIO, CoreGraphics
, cctools, bootstrap_cmds, binutils}:

let

  toolchainName = "com.apple.dt.toolchain.XcodeDefault";
  platformName = "com.apple.platform.macosx";
  sdkName = "macosx10.10";

  xcbuild = callPackage ./default.nix {
    inherit CoreServices ImageIO CoreGraphics;
  };

  toolchain = callPackage ./toolchain.nix {
    inherit cctools bootstrap_cmds toolchainName xcbuild binutils stdenv;
  };

  sdk = callPackage ./sdk.nix {
    inherit toolchainName sdkName xcbuild;
  };

  platform = callPackage ./platform.nix {
    inherit sdk platformName xcbuild;
  };

  xcconfig = writeText "nix.xcconfig" ''
    SDKROOT=${sdkName}
  '';

in

stdenv.mkDerivation {
  name = "xcbuild-wrapper-${xcbuild.version}";

  buildInputs = [ xcbuild makeWrapper ];

  setupHook = ./setup-hook.sh;

  phases = [ "installPhase" "fixupPhase" ];

  installPhase = ''
    mkdir -p $out/bin
    cd $out/bin/

    for file in ${xcbuild}/bin/*; do
      ln -s $file
    done

    mkdir -p $out/Library/Xcode/
    ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications

    mkdir -p $out/Platforms/
    ln -s ${platform} $out/Platforms/nixpkgs.platform

    mkdir -p $out/Toolchains/
    ln -s ${toolchain} $out/Toolchains/nixpkgs.xctoolchain

    wrapProgram $out/bin/xcodebuild \
      --add-flags "-xcconfig ${xcconfig}" \
      --add-flags "DERIVED_DATA_DIR=." \
      --set DEVELOPER_DIR "$out" \
      --set SDKROOT ${sdkName}
    wrapProgram $out/bin/xcrun \
      --set DEVELOPER_DIR "$out" \
      --set SDKROOT ${sdkName}
    wrapProgram $out/bin/xcode-select \
      --set DEVELOPER_DIR "$out" \
      --set SDKROOT ${sdkName}
  '';

  inherit (xcbuild) meta;

  passthru = {
    raw = xcbuild;
  };

  preferLocalBuild = true;
}