Skip to content

Commit

Permalink
gn: fix Darwin build
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewbauer committed Apr 25, 2018
1 parent 734b13a commit 04e13de
Showing 1 changed file with 100 additions and 53 deletions.
153 changes: 100 additions & 53 deletions pkgs/development/tools/build-managers/gn/default.nix
@@ -1,77 +1,124 @@
{ stdenv, lib, fetchgit, fetchurl, libevent, ninja, python }:
{ stdenv, lib, fetchgit, fetchurl, fetchpatch
, libevent, ninja, python, darwin }:

let
depsGit = {
"tools/gn" = fetchgit {
url = "https://chromium.googlesource.com/chromium/src/tools/gn";
rev = "d0c518db129975ce88ff1de26c857873b0619c4b";
sha256 = "0l15vzmjyx6bwlz1qhn3fy7yx3qzzxr3drnkj3l0p0fmyxza52vx";
rev = "0fa417a0d2d8484e9a5a636e3301da322f586601";
sha256 = "0pigcl14yc4aak6q1ghfjxdz2ah4fg4m2r5y3asw2rz6mpr5y9z0";
};
"base" = fetchgit {
url = "https://chromium.googlesource.com/chromium/src/base";
rev = "bc6e3ce8ca01b894751e1f7b22b561e3ae2e7f17";
sha256 = "1yl49v6nxbrfms52xf7fiwh7d4301m2aj744pa3hzzh989c5j6g5";
rev = "ab1d7c3b92ce9c9bc756bdefb8338360d1a33a1e";
sha256 = "15wis6qg9ka62k6v1vamg0bp3v5vkpapg485jsn4bbfcaqp6di0f";
};
"build" = fetchgit {
url = "https://chromium.googlesource.com/chromium/src/build";
rev = "e934a19ae908081fba13769924e4ea45a7a451ce";
sha256 = "0jhy418vaiin7djg9zvk83f8zhasigki4442x5j7gkmgmgmyc4am";
rev = "8d44c08a4c9997695db8098198bdd5026bc7a6f9";
sha256 = "19sajgf55xfmvnwvy2ss7g6pyljp751cfsws30w415m6m00lmpxl";
};
"config" = fetchgit {
url = "https://chromium.googlesource.com/chromium/src/build/config";
rev = "df16c6a2c070704b0a25efe46ee9af16de1e65b3";
sha256 = "1x18syzz1scwhd8lf448hy5lnfpq118l403x9qmwm0np318w09wg";
rev = "14116c0cdcb9e28995ca8bb384a12e5c9dbd1dbb";
sha256 = "04nif0lm4wcy05b7xhal023874s4r0iq067q57cgwdm72i2gml40";
};
"testing/gtest" = fetchgit {
url = "https://chromium.googlesource.com/chromium/testing/gtest";
rev = "585ec31ea716f08233a815e680fc0d4699843938";
sha256 = "0csn1cza66851nmxxiw42smsm3422mx67vcyykwn0a71lcjng6rc";
};
"third_party/apple_apsl" = fetchurl {
url = "https://chromium.googlesource.com/chromium/src/third_party/+archive/8e6ccb8c74db6dfa15dd21401ace3ac96c054cf7/apple_apsl.tar.gz";

This comment has been minimized.

Copy link
@aszlig

aszlig Apr 25, 2018

Member

First of all, this is not a stable URL, because the tarballs seem to be generated on the fly and are not deterministic, so using fetchzip here is a better idea.

After switching this to fetchzip the build still fails on NixOS:

ninja: Entering directory `/build/tmp75Sj2K'
ninja: error: '/build/buildtools/third_party/libc++/trunk/src/algorithm.cpp', needed by '/build/buildtools/third_party/libc++/trunk/src/algorithm.o', missing and no known rule to make it
Command '['ninja', '-C', '/build/tmp75Sj2K', '-w', 'dupbuild=err', 'gn']' returned non-zero exit status 1

This comment has been minimized.

Copy link
@aszlig

aszlig Apr 25, 2018

Member

Fixed in ac61ae5 and a3502ba.

This comment has been minimized.

Copy link
@matthewbauer

matthewbauer Apr 25, 2018

Author Member

Thanks!!!

sha256 = "0sc7b7zdw7f9piyyijl7xq3v1fzflqlck1apwm8kvgdhkyz3l63k";
};
};

in
stdenv.mkDerivation rec {
name = "gn";
version = "0.0.0.20170629";
sourceRoot = ".";
in stdenv.mkDerivation {
name = "gn";
version = "20180423";
sourceRoot = ".";

unpackPhase = ''
${lib.concatStringsSep "\n" (
lib.mapAttrsToList (n: v: ''
mkdir -p $sourceRoot/${n}
unpackPhase = ''
${lib.concatStringsSep "\n" (
lib.mapAttrsToList (n: v: ''
mkdir -p $sourceRoot/${n}
if [ -d ${v} ]; then
cp -r ${v}/* $sourceRoot/${n}
'') depsGit)}
'';

postPatch = ''
# Patch shebands (for sandbox build)
chmod u+w -R build
patchShebangs build
# Patch out Chromium-bundled libevent
chmod u+w tools/gn/bootstrap tools/gn/bootstrap/bootstrap.py
sed -i -e '/static_libraries.*libevent/,/^ *\]\?[})]$/d' \
tools/gn/bootstrap/bootstrap.py
'';

NIX_LDFLAGS = "-levent";

nativeBuildInputs = [ ninja python ];
buildInputs = [ libevent ];

buildPhase = ''
python tools/gn/bootstrap/bootstrap.py -s
'';

installPhase = ''
install -vD out/Release/gn "$out/bin/gn"
'';

meta = with stdenv.lib; {
description = "A meta-build system that generates NinjaBuild files";
homepage = https://chromium.googlesource.com/chromium/src/tools/gn;
license = licenses.bsd3;
platforms = platforms.linux;
maintainers = [ maintainers.stesie ];
};
}
else
mkdir -p $sourceRoot/${n}
pushd $sourceRoot/${n}
unpackFile ${v}
popd
fi
'') depsGit)}
chmod u+w -R $sourceRoot
'';

patches = [
(fetchpatch {
url = "https://raw.githubusercontent.com/Eloston/ungoogled-chromium/master/resources/patches/ungoogled-chromium/macos/fix-gn-bootstrap.patch";
sha256 = "1h8jgxznm7zrxlzb4wcfx4zx4lyvfrmpd0r7cd7h0s23wn8ibb3a";
})
];

postPatch = ''
# Disable libevent bootstrapping (we will provide it).
sed -i -e '/static_libraries.*libevent/,/^ *\]\?[})]$/d' \
tools/gn/bootstrap/bootstrap.py
# FIXME Needed with old Apple SDKs
substituteInPlace base/mac/foundation_util.mm \
--replace "NSArray<NSString*>*" "NSArray*"
substituteInPlace base/mac/sdk_forward_declarations.h \
--replace "NSDictionary<VNImageOption, id>*" "NSDictionary*" \
--replace "NSArray<VNRequest*>*" "NSArray*" \
--replace "typedef NSString* VNImageOption NS_STRING_ENUM" "typedef NSString* VNImageOption"
# Patch shebangs (for sandbox build)
patchShebangs build
'';

# FIXME again this shouldn't be necessary but I can't figure out a better way
NIX_CFLAGS_COMPILE = "-DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_10 -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_10";

NIX_LDFLAGS = "-levent";

nativeBuildInputs = [ ninja python ];
buildInputs = [ libevent ]

# FIXME These dependencies shouldn't be needed but can't find a way
# around it. Chromium pulls this in while bootstrapping GN.
++ lib.optionals stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [
libobjc
cctools

# frameworks
ApplicationServices
Foundation
AppKit
ImageCaptureCore
CoreBluetooth
IOBluetooth
CoreWLAN
Quartz
Cocoa
]);

buildPhase = ''
python tools/gn/bootstrap/bootstrap.py -s
'';

installPhase = ''
install -vD out/Release/gn "$out/bin/gn"
'';

meta = with lib; {
description = "A meta-build system that generates NinjaBuild files";
homepage = https://chromium.googlesource.com/chromium/src/tools/gn;
license = licenses.bsd3;
platforms = platforms.unix;
maintainers = with maintainers; [ stesie matthewbauer ];
};
}

0 comments on commit 04e13de

Please sign in to comment.