1{ 2 inputs = { 3 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; 4 5 fenix = { 6 url = "github:nix-community/fenix"; 7 inputs.nixpkgs.follows = "nixpkgs"; 8 }; 9 10 android-nixpkgs = { 11 url = "github:tadfisher/android-nixpkgs"; 12 inputs.nixpkgs.follows = "nixpkgs"; 13 }; 14 }; 15 16 outputs = { self, nixpkgs, fenix, android-nixpkgs, ... }: 17 let 18 pkgs = import nixpkgs { system = "x86_64-linux"; }; 19 20 llvm = pkgs.llvmPackages_16; 21 22 rust = with fenix.packages."x86_64-linux"; combine [ 23 complete.cargo 24 complete.clippy 25 complete.rustc 26 complete.rustfmt 27 complete.rust-src 28 complete.rust-analyzer 29 targets."aarch64-apple-darwin".latest.rust-std 30 targets."aarch64-apple-ios".latest.rust-std 31 targets."aarch64-linux-android".latest.rust-std 32 targets."aarch64-unknown-linux-gnu".latest.rust-std 33 targets."wasm32-unknown-unknown".latest.rust-std 34 targets."wasm32-wasi".latest.rust-std 35 targets."x86_64-apple-darwin".latest.rust-std 36 targets."x86_64-pc-windows-msvc".latest.rust-std 37 targets."x86_64-unknown-linux-gnu".latest.rust-std 38 ]; 39 40 fetchVendor = { name, url, sha256, stripComponents ? 0 }: 41 let 42 authorization = 43 if (pkgs.lib.hasPrefix "https://raw.githubusercontent.com/<repo>/" url) then 44 ''-H "Authorization: Bearer <token>"'' 45 else 46 ""; 47 in 48 pkgs.runCommandLocal "vendor-${name}" 49 { 50 buildInputs = [ pkgs.cacert ]; 51 outputHashMode = "recursive"; 52 outputHashAlgo = "sha256"; 53 outputHash = sha256; 54 } '' 55 # Empty URL special cased for example 56 mkdir --parents $out 57 if [ -n "${url}" ]; then 58 ${pkgs.curl}/bin/curl -s -S -L ${authorization} "${url}" | ${pkgs.libarchive}/bin/bsdtar -C $out -xf - --strip-components ${toString stripComponents} 59 fi 60 ''; 61 62 libclang_rt_wasm32 = fetchVendor { 63 name = "libclang_rt_wasm32"; 64 url = "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/libclang_rt.builtins-wasm32-wasi-20.0.tar.gz"; 65 sha256 = "AdRe1XrGeBuai1p5IMUTR7T7nhNlD1RZ8grZjVoHAKs="; 66 }; 67 68 sdk_aarch64-unknown-linux-gnu = fetchVendor { 69 name = "sdk_aarch64-unknown-linux-gnu"; 70 url = "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/80fc74e431f37f590d0c85f16a9d8709088929e8/debian_bullseye_arm64_sysroot.tar.xz"; 71 sha256 = "VwHx6SjTmnGWvEoevjThR2oxNEe9NIdnSIJ9RBgKPE8="; 72 }; 73 74 sdk_universal-apple-darwin = fetchVendor { 75 name = "sdk_universal-apple-darwin"; 76 url = ""; # User needs to supply. 77 sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply. 78 }; 79 80 sdk_universal-apple-ios = fetchVendor { 81 name = "sdk_universal-apple-ios"; 82 url = ""; # User needs to supply. 83 sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply. 84 }; 85 86 sdk_universal-linux-android = android-nixpkgs.sdk."x86_64-linux" (sdkPkgs: with sdkPkgs; [ 87 cmdline-tools-latest 88 build-tools-33-0-2 89 platform-tools 90 platforms-android-33 91 ndk-25-2-9519653 92 ]); 93 94 sdk_wasm32-wasi = fetchVendor { 95 name = "sdk_wasm32-wasi"; 96 url = "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sysroot-20.0.tar.gz"; 97 sha256 = "aePDwDYWopPPDSO802BO3YWM4d/J4a4CmGP/hDPF8FY="; 98 }; 99 100 sdk_x86_64-pc-windows-msvc = fetchVendor { 101 name = "sdk_x86_64-pc-windows-msvc"; 102 url = ""; # User needs to supply. 103 sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply. 104 }; 105 106 sdk_x86_64-unknown-linux-gnu = fetchVendor { 107 name = "sdk_x86_64-unknown-linux-gnu"; 108 url = "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/f5f68713249b52b35db9e08f67184cac392369ab/debian_bullseye_amd64_sysroot.tar.xz"; 109 sha256 = "+pqXDAsKY1BCBGFD3PDqMv1YiU+0/B2LXXryTFIUaWk="; 110 }; 111 112 sdk_x86_64-unknown-nixos-gnu = pkgs.symlinkJoin { 113 name = "sdk_x86_64-unknown-nixos-gnu"; 114 paths = [ 115 llvm.libcxx.out 116 llvm.libcxx.dev 117 llvm.libcxxabi.out 118 llvm.libunwind.out 119 pkgs.gcc13.cc.libgcc.out 120 pkgs.gcc13.cc.libgcc.libgcc 121 pkgs.glibc.dev 122 pkgs.glibc.libgcc.out 123 pkgs.glibc.out 124 ]; 125 }; 126 in 127 { 128 packages."x86_64-linux".bazel = { 129 config = pkgs.writeTextFile { 130 name = "bazel-config"; 131 destination = "/config.bzl"; 132 text = '' 133 LLVM = "${llvm.bintools-unwrapped}" 134 CLANG = "${llvm.clang-unwrapped}" 135 CLANG_LIB = "${llvm.clang-unwrapped.lib}" 136 CLANG_LIB_VERSION = "16" 137 138 NIXOS_DYNAMIC_LINKER = "${pkgs.glibc.out}/lib64/ld-linux-x86-64.so.2" 139 LIBCLANG_RT_WASM32 = "${libclang_rt_wasm32}" 140 ANDROID_NDK_VERSION = "25.2.9519653" 141 142 SDK_AARCH64_UNKNOWN_LINUX_GNU = "${sdk_aarch64-unknown-linux-gnu}" 143 SDK_UNIVERSAL_APPLE_DARWIN = "${sdk_universal-apple-darwin}" 144 SDK_UNIVERSAL_APPLE_IOS = "${sdk_universal-apple-ios}" 145 SDK_UNIVERSAL_LINUX_ANDROID = "${sdk_universal-linux-android}" 146 SDK_WASM32_WASI = "${sdk_wasm32-wasi}" 147 SDK_X86_64_PC_WINDOWS_MSVC = "${sdk_x86_64-pc-windows-msvc}" 148 SDK_X86_64_UNKNOWN_LINUX_GNU = "${sdk_x86_64-unknown-linux-gnu}" 149 SDK_X86_64_UNKNOWN_NIXOS_GNU = "${sdk_x86_64-unknown-nixos-gnu}" 150 ''; 151 }; 152 153 rust = rust; 154 }; 155 }; 156} 157