2019-05-17 08:55:24 +00:00
|
|
|
{ target-os, stdenv, callPackage,
|
|
|
|
buildGoPackage, go, fetchFromGitHub, openjdk,
|
2019-06-04 16:50:29 +00:00
|
|
|
androidPkgs, xcodeWrapper }:
|
2019-03-25 16:35:01 +00:00
|
|
|
|
|
|
|
let
|
2019-07-19 18:42:16 +00:00
|
|
|
inherit (stdenv.lib) catAttrs concatStrings fileContents importJSON makeBinPath optional optionalString strings;
|
2019-05-17 08:55:24 +00:00
|
|
|
platform = callPackage ../platform.nix { inherit target-os; };
|
|
|
|
utils = callPackage ../utils.nix { inherit xcodeWrapper; };
|
2019-06-04 16:50:29 +00:00
|
|
|
gomobile = callPackage ./gomobile { inherit (androidPkgs) platform-tools; inherit target-os xcodeWrapper utils buildGoPackage; };
|
2019-05-17 08:55:24 +00:00
|
|
|
buildStatusGoDesktopLib = callPackage ./build-desktop-status-go.nix { inherit buildGoPackage go xcodeWrapper utils; };
|
|
|
|
buildStatusGoMobileLib = callPackage ./build-mobile-status-go.nix { inherit buildGoPackage go gomobile xcodeWrapper utils; };
|
2019-07-19 18:42:16 +00:00
|
|
|
extractStatusGoConfig = callPackage ./extract-status-go-config.nix { inherit (stdenv) lib; };
|
|
|
|
versionJSON = importJSON ../../status-go-version.json; # TODO: Simplify this path search with lib.locateDominatingFile
|
|
|
|
owner = versionJSON.owner;
|
|
|
|
version = versionJSON.version;
|
|
|
|
sha256 = versionJSON.src-sha256;
|
2019-04-09 20:04:45 +00:00
|
|
|
repo = "status-go";
|
2019-07-19 18:42:16 +00:00
|
|
|
rev = versionJSON.commit-sha1;
|
2019-05-02 11:29:10 +00:00
|
|
|
goPackagePath = "github.com/${owner}/${repo}";
|
2019-07-19 18:42:16 +00:00
|
|
|
src = fetchFromGitHub { inherit rev owner repo sha256; name = "${repo}-${strings.substring 0 7 rev}-source"; };
|
2019-05-02 18:13:16 +00:00
|
|
|
|
2019-04-09 20:04:45 +00:00
|
|
|
mobileConfigs = {
|
|
|
|
android = {
|
|
|
|
name = "android";
|
|
|
|
outputFileName = "status-go-${version}.aar";
|
2019-05-02 18:13:16 +00:00
|
|
|
envVars = [
|
|
|
|
"ANDROID_HOME=${androidPkgs.androidsdk}/libexec/android-sdk"
|
|
|
|
"ANDROID_NDK_HOME=${androidPkgs.ndk-bundle}/libexec/android-sdk/ndk-bundle"
|
2019-06-04 16:50:29 +00:00
|
|
|
"PATH=${makeBinPath [ openjdk ]}:$PATH"
|
2019-05-02 18:13:16 +00:00
|
|
|
];
|
|
|
|
gomobileExtraFlags = [];
|
2019-04-09 20:04:45 +00:00
|
|
|
};
|
|
|
|
ios = {
|
|
|
|
name = "ios";
|
|
|
|
outputFileName = "Statusgo.framework";
|
2019-05-02 18:13:16 +00:00
|
|
|
envVars = [];
|
|
|
|
gomobileExtraFlags = [ "-iosversion=8.0" ];
|
2019-04-09 20:04:45 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
hostConfigs = {
|
|
|
|
darwin = {
|
2019-05-02 18:13:16 +00:00
|
|
|
name = "macos";
|
|
|
|
allTargets = [ status-go-packages.desktop status-go-packages.ios status-go-packages.android ];
|
2019-04-09 20:04:45 +00:00
|
|
|
};
|
|
|
|
linux = {
|
2019-05-02 18:13:16 +00:00
|
|
|
name = "linux";
|
|
|
|
allTargets = [ status-go-packages.desktop status-go-packages.android ];
|
2019-04-09 20:04:45 +00:00
|
|
|
};
|
|
|
|
};
|
2019-06-04 16:50:29 +00:00
|
|
|
currentHostConfig = if stdenv.isDarwin then hostConfigs.darwin else hostConfigs.linux;
|
2019-05-02 18:13:16 +00:00
|
|
|
|
2019-04-09 20:04:45 +00:00
|
|
|
goBuildFlags = "-v";
|
2019-05-14 17:29:36 +00:00
|
|
|
# TODO: Manage to pass "-s -w" to -ldflags. Seems to only accept a single flag
|
2019-04-09 20:04:45 +00:00
|
|
|
goBuildLdFlags = "-ldflags=-s";
|
2019-03-25 16:35:01 +00:00
|
|
|
|
2019-05-02 18:13:16 +00:00
|
|
|
statusGoArgs = { inherit owner repo rev version goPackagePath src goBuildFlags goBuildLdFlags; };
|
|
|
|
status-go-packages = {
|
|
|
|
desktop = buildStatusGoDesktopLib (statusGoArgs // {
|
|
|
|
outputFileName = "libstatus.a";
|
2019-06-04 16:50:29 +00:00
|
|
|
hostSystem = stdenv.hostPlatform.system;
|
2019-05-02 18:13:16 +00:00
|
|
|
host = currentHostConfig.name;
|
|
|
|
});
|
|
|
|
|
|
|
|
android = buildStatusGoMobileLib (statusGoArgs // {
|
|
|
|
host = mobileConfigs.android.name;
|
|
|
|
config = mobileConfigs.android;
|
|
|
|
});
|
|
|
|
|
|
|
|
ios = buildStatusGoMobileLib (statusGoArgs // {
|
|
|
|
host = mobileConfigs.ios.name;
|
|
|
|
config = mobileConfigs.ios;
|
|
|
|
});
|
2019-03-25 16:35:01 +00:00
|
|
|
};
|
2019-04-12 07:38:08 +00:00
|
|
|
|
2019-06-04 16:50:29 +00:00
|
|
|
buildInputs = if target-os == "android" then android.buildInputs else
|
|
|
|
if target-os == "ios" then ios.buildInputs else
|
2019-05-13 09:22:29 +00:00
|
|
|
if target-os == "all" then currentHostConfig.allTargets else
|
2019-06-04 16:50:29 +00:00
|
|
|
if platform.targetDesktop then desktop.buildInputs else
|
2019-05-13 09:22:29 +00:00
|
|
|
throw "Unexpected target platform ${target-os}";
|
2019-06-04 16:50:29 +00:00
|
|
|
android = {
|
|
|
|
buildInputs = optional platform.targetAndroid [ status-go-packages.android ];
|
|
|
|
shellHook =
|
|
|
|
optionalString platform.targetAndroid ''
|
|
|
|
# These variables are used by the Status Android Gradle build script in android/build.gradle
|
|
|
|
export STATUS_GO_ANDROID_LIBDIR=${status-go-packages.android}/lib
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
ios = {
|
|
|
|
buildInputs = optional platform.targetIOS [ status-go-packages.ios ];
|
|
|
|
shellHook =
|
|
|
|
optionalString platform.targetIOS ''
|
|
|
|
# These variables are used by the iOS build preparation section in nix/mobile/ios/default.nix
|
|
|
|
export RCTSTATUS_FILEPATH=${status-go-packages.ios}/lib/Statusgo.framework
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
desktop = {
|
|
|
|
buildInputs = optional platform.targetDesktop [ status-go-packages.desktop ];
|
|
|
|
shellHook =
|
|
|
|
optionalString platform.targetDesktop ''
|
|
|
|
# These variables are used by the Status Desktop CMake build script in modules/react-native-status/desktop/CMakeLists.txt
|
|
|
|
export STATUS_GO_DESKTOP_INCLUDEDIR=${status-go-packages.desktop}/include
|
|
|
|
export STATUS_GO_DESKTOP_LIBDIR=${status-go-packages.desktop}/lib
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
platforms = [ android ios desktop ];
|
2019-05-02 18:13:16 +00:00
|
|
|
|
2019-04-12 07:38:08 +00:00
|
|
|
in {
|
2019-05-13 09:22:29 +00:00
|
|
|
inherit buildInputs;
|
2019-06-04 16:50:29 +00:00
|
|
|
shellHook = concatStrings (catAttrs "shellHook" platforms);
|
2019-05-02 18:13:16 +00:00
|
|
|
|
2019-06-04 16:50:29 +00:00
|
|
|
# CHILD DERIVATIONS
|
|
|
|
inherit android ios desktop;
|
2019-03-25 16:35:01 +00:00
|
|
|
}
|