python312Packages.vdf: avoid using pname for src.repo
[NixPkgs.git] / pkgs / os-specific / linux / bionic-prebuilt / default.nix
blob6aad7ebcacb37271fc9eda41f132ae88035e4d71
1 { stdenv, stdenvNoCC, lib, fetchzip, pkgs
2 , enableStatic ? stdenv.hostPlatform.isStatic
3 , enableShared ? !stdenv.hostPlatform.isStatic
4 }:
5 let
7   choosePlatform =
8     let pname = stdenv.hostPlatform.parsed.cpu.name; in
9     pset: pset.${pname} or (throw "bionic-prebuilt: unsupported platform ${pname}");
11   prebuilt_crt = choosePlatform {
12     aarch64 = fetchzip {
13       url =  "https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/98dce673ad97a9640c5d90bbb1c718e75c21e071/lib/gcc/aarch64-linux-android/4.9.x.tar.gz";
14       sha256 = "sha256-LLD2OJi78sNN5NulOsJZl7Ei4F1EUYItGG6eUsKWULc=";
15       stripRoot = false;
16     };
17     x86_64 = fetchzip {
18       url = "https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/+archive/7e8507d2a2d4df3bced561b894576de70f065be4/lib/gcc/x86_64-linux-android/4.9.x.tar.gz";
19       sha256 = "sha256-y7CFLF76pTlj+oYev9taBnL2nlT3+Tx8c6wmicWmKEw=";
20       stripRoot = false;
21     };
22   };
24   prebuilt_libs = choosePlatform {
25     aarch64 = fetchzip {
26       url = "https://android.googlesource.com/platform/prebuilts/ndk/+archive/f2c77d8ba8a7f5c2d91771e31164f29be0b8ff98/platform/platforms/android-30/arch-arm64/usr/lib.tar.gz";
27       sha256 = "sha256-TZBV7+D1QvKOCEi+VNGT5SStkgj0xRbyWoLH65zSrjw=";
28       stripRoot = false;
29     };
30     x86_64 = fetchzip {
31       url = "https://android.googlesource.com/platform/prebuilts/ndk/+archive/f2c77d8ba8a7f5c2d91771e31164f29be0b8ff98/platform/platforms/android-30/arch-x86_64/usr/lib64.tar.gz";
32       sha256 = "sha256-n2EuOKy3RGKmEYofNlm+vDDBuiQRuAJEJT6wq6NEJQs=";
33       stripRoot = false;
34     };
35   };
37   prebuilt_ndk_crt = choosePlatform {
38     aarch64 = fetchzip {
39       url = "https://android.googlesource.com/toolchain/prebuilts/ndk/r23/+archive/6c5fa4c0d3999b9ee932f6acbd430eb2f31f3151/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/30.tar.gz";
40       sha256 = "sha256-KHw+cCwAwlm+5Nwp1o8WONqdi4BBDhFaVVr+7GxQ5uE=";
41       stripRoot = false;
42     };
43     x86_64 = fetchzip {
44       url = "https://android.googlesource.com/toolchain/prebuilts/ndk/r23/+archive/6c5fa4c0d3999b9ee932f6acbd430eb2f31f3151/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/30.tar.gz";
45       sha256 = "sha256-XEd7L3cBzn+1pKfji40V92G/uZhHSMMuZcRZaiKkLnk=";
46       stripRoot = false;
47     };
48   };
50   ndk_support_headers = fetchzip {
51     url ="https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/0e7f808fa26cce046f444c9616d9167dafbfb272/clang-r416183b/include/c++/v1/support.tar.gz";
52     sha256 = "sha256-NBv7Pk1CEaz8ns9moleEERr3x/rFmVmG33LgFSeO6fY=";
53     stripRoot = false;
54   };
56   kernelHeaders = pkgs.makeLinuxHeaders {
57     version = "android-common-11-5.4";
58     src = fetchzip {
59       url = "https://android.googlesource.com/kernel/common/+archive/48ffcbf0b9e7f0280bfb8c32c68da0aaf0fdfef6.tar.gz";
60       sha256 = "1y7cmlmcr5vdqydd9n785s139yc4aylc3zhqa59xsylmkaf5habk";
61       stripRoot = false;
62     };
63   };
66 stdenvNoCC.mkDerivation rec {
67   pname = "bionic-prebuilt";
68   version = "ndk-release-r23";
69   name = "${stdenv.hostPlatform.parsed.cpu.name}-${pname}-${version}";
71   src = fetchzip {
72     url = "https://android.googlesource.com/platform/bionic/+archive/00e8ce1142d8823b0d2fc8a98b40119b0f1f02cd.tar.gz";
73     sha256 = "10z5mp4w0acvjvgxv7wlqa7m70hcyarmjdlfxbd9rwzf4mrsr8d1";
74     stripRoot = false;
75   };
77   NIX_DONT_SET_RPATH = true;
79   dontConfigure = true;
80   dontBuild = true;
82   patches = [
83     ./ndk-version.patch
84   ];
86   postPatch = ''
87     substituteInPlace libc/include/sys/cdefs.h --replace \
88       "__has_builtin(__builtin_umul_overflow)" "1"
89     substituteInPlace libc/include/bits/ioctl.h --replace \
90       "!defined(BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD)" "0"
91   '';
93   installPhase= ''
94     # copy the bionic headers
95     mkdir -p $out/include/support $out/include/android
96     cp -vr libc/include/* $out/include
97     # copy the kernel headers
98     cp -vr ${kernelHeaders}/include/*  $out/include/
100     chmod -R +w $out/include/linux
102     # fix a bunch of kernel headers so that things can actually be found
103     sed -i 's,struct epoll_event {,#include <bits/epoll_event.h>\nstruct Xepoll_event {,' $out/include/linux/eventpoll.h
104     sed -i 's,struct in_addr {,typedef unsigned int in_addr_t;\nstruct in_addr {,' $out/include/linux/in.h
105     sed -i 's,struct udphdr {,struct Xudphdr {,' $out/include/linux/udp.h
106     sed -i 's,union semun {,union Xsemun {,' $out/include/linux/sem.h
107     sed -i 's,struct __kernel_sockaddr_storage,#define sockaddr_storage __kernel_sockaddr_storage\nstruct __kernel_sockaddr_storage,' $out/include/linux/socket.h
108     sed -i 's,#ifndef __UAPI_DEF_.*$,#if 1,' $out/include/linux/libc-compat.h
109     substituteInPlace $out/include/linux/in.h --replace "__be32         imr_" "struct in_addr           imr_"
110     substituteInPlace $out/include/linux/in.h --replace "__be32         imsf_" "struct in_addr          imsf_"
111     substituteInPlace $out/include/linux/sysctl.h --replace "__unused" "_unused"
113     # what could possibly live in <linux/compiler.h>
114     touch $out/include/linux/compiler.h
116     # copy the support headers
117     cp -vr ${ndk_support_headers}* $out/include/support/
119     mkdir $out/lib
120     cp -v ${prebuilt_crt.out}/*.o $out/lib/
121     cp -v ${prebuilt_crt.out}/libgcc.a $out/lib/
122     cp -v ${prebuilt_ndk_crt.out}/*.o $out/lib/
123   '' + lib.optionalString enableShared ''
124     for i in libc.so libm.so libdl.so liblog.so; do
125       cp -v ${prebuilt_libs.out}/$i $out/lib/
126     done
127   '' + lib.optionalString enableStatic ''
128     # no liblog.a; while it's also part of the base libraries,
129     # it's only available as shared object in the prebuilts.
130     for i in libc.a libm.a libdl.a; do
131       cp -v ${prebuilt_ndk_crt.out}/$i $out/lib/
132     done
133   '' + ''
134     mkdir -p $dev/include
135     cp -v $out/include/*.h $dev/include/
136   '';
138   outputs = [ "out" "dev" ];
139   passthru.linuxHeaders = kernelHeaders;
141   meta = with lib; {
142     description = "Android libc implementation";
143     homepage    = "https://android.googlesource.com/platform/bionic/";
144     license     = licenses.mit;
145     platforms   = platforms.linux;
146     maintainers = with maintainers; [ s1341 ];
147   };