summaryrefslogtreecommitdiffhomepage
path: root/nix/android-env.nix
blob: 5ba718f59499aa4c38fd789528e3784e55be4210 (plain)
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
{
  pkgs,
  android-sdk,
  jdk,
  buildToolsVersion,
  ndkVersion,
  minSdkVersion,
}:
let
  hostPlatform =
    # For linux the NDK support is limited to x86_64.
    if pkgs.stdenv.isLinux && pkgs.stdenv.isx86_64 then
      "linux-x86_64"
    # For macOS the x86_64 NDK is used for both intel and arm (via rosetta).
    else if pkgs.stdenv.isDarwin then
      "darwin-x86_64"
    else
      throw "Unsupported OS/architecture combination: ${pkgs.stdenv.hostPlatform.system}";
in
[
  {
    name = "JAVA_HOME";
    value = "${jdk}";
  }
  {
    name = "PROTOC_GEN_GRPC_JAVA_PLUGIN";
    prefix = "${pkgs.protoc-gen-grpc-java}/bin/protoc-gen-grpc-java";
  }
  {
    name = "GRADLE_OPTS";
    value = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${android-sdk}/share/android-sdk/build-tools/${buildToolsVersion}/aapt2";
  }
  {
    name = "ANDROID_HOME";
    value = "${android-sdk}/share/android-sdk";
  }
  {
    name = "ANDROID_SDK_ROOT";
    value = "${android-sdk}/share/android-sdk";
  }
  {
    name = "ANDROID_NDK_ROOT";
    value = "${android-sdk}/share/android-sdk/ndk/${ndkVersion}";
  }
  {
    name = "NDK_TOOLCHAIN_DIR";
    value = "${android-sdk}/share/android-sdk/ndk/${ndkVersion}/toolchains/llvm/prebuilt/${hostPlatform}/bin";
  }
  {
    name = "AR_aarch64_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/llvm-ar";
  }
  {
    name = "CC_aarch64_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/aarch64-linux-android${minSdkVersion}-clang";
  }
  {
    name = "CARGO_TARGET_aarch64_LINUX_ANDROID_LINKER";
    value = "$NDK_TOOLCHAIN_DIR/aarch64-linux-android${minSdkVersion}-clang";
  }
  {
    name = "AR_armv7_linux_androideabi";
    value = "$NDK_TOOLCHAIN_DIR/llvm-ar";
  }
  {
    name = "CC_armv7_linux_androideabi";
    value = "$NDK_TOOLCHAIN_DIR/armv7-linux-androideabi${minSdkVersion}-clang";
  }
  {
    name = "CARGO_TARGET_armv7_LINUX_ANDROID_LINKER";
    value = "$NDK_TOOLCHAIN_DIR/armv7-linux-androideabi${minSdkVersion}-clang";
  }
  {
    name = "AR_x86_64_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/llvm-ar";
  }
  {
    name = "CC_x86_64_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/x86_64-linux-android${minSdkVersion}-clang";
  }
  {
    name = "CARGO_TARGET_x86_64_LINUX_ANDROID_LINKER";
    value = "$NDK_TOOLCHAIN_DIR/x86_64-linux-android${minSdkVersion}-clang";
  }
  {
    name = "AR_i686_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/llvm-ar";
  }
  {
    name = "CC_i686_linux_android";
    value = "$NDK_TOOLCHAIN_DIR/i686-linux-android${minSdkVersion}-clang";
  }
  {
    name = "CARGO_TARGET_i686_LINUX_ANDROID_LINKER";
    value = "$NDK_TOOLCHAIN_DIR/i686-linux-android${minSdkVersion}-clang";
  }
]
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
  {
    name = "LIBRARY_PATH";
    value = "${pkgs.libiconv}/lib";
  }
  {
    name = "CPATH";
    value = "${pkgs.libiconv}/include";
  }
  {
    name = "RUSTFLAGS";
    value = "-L${pkgs.libiconv}/lib";
  }
]