| 
									
										
										
										
											2021-05-16 07:24:27 +02:00
										 |  |  | { stdenvNoCC, lib, fetchzip, pkgs | 
					
						
							| 
									
										
										
										
											2021-05-06 07:15:34 +03:00
										 |  |  | }: | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   prebuilt_crt = fetchzip { | 
					
						
							|  |  |  |     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"; | 
					
						
							|  |  |  |     sha256 = "sha256-LLD2OJi78sNN5NulOsJZl7Ei4F1EUYItGG6eUsKWULc="; | 
					
						
							|  |  |  |     stripRoot = false; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   prebuilt_libs = fetchzip { | 
					
						
							|  |  |  |     url = "https://android.googlesource.com/platform/prebuilts/ndk/+archive/f2c77d8ba8a7f5c2d91771e31164f29be0b8ff98/platform/platforms/android-30/arch-arm64/usr/lib.tar.gz"; | 
					
						
							|  |  |  |     sha256 = "sha256-TZBV7+D1QvKOCEi+VNGT5SStkgj0xRbyWoLH65zSrjw="; | 
					
						
							|  |  |  |     stripRoot = false; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   prebuilt_ndk_crt = fetchzip { | 
					
						
							|  |  |  |     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"; | 
					
						
							|  |  |  |     sha256 = "sha256-KHw+cCwAwlm+5Nwp1o8WONqdi4BBDhFaVVr+7GxQ5uE="; | 
					
						
							|  |  |  |     stripRoot = false; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ndk_support_headers = fetchzip { | 
					
						
							|  |  |  |     url ="https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/0e7f808fa26cce046f444c9616d9167dafbfb272/clang-r416183b/include/c++/v1/support.tar.gz"; | 
					
						
							|  |  |  |     sha256 = "sha256-NBv7Pk1CEaz8ns9moleEERr3x/rFmVmG33LgFSeO6fY="; | 
					
						
							|  |  |  |     stripRoot = false; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   kernelHeaders = pkgs.makeLinuxHeaders { | 
					
						
							|  |  |  |     version = "android-common-11-5.4"; | 
					
						
							| 
									
										
										
										
											2021-05-16 07:24:27 +02:00
										 |  |  |     src = fetchzip { | 
					
						
							| 
									
										
										
										
											2021-05-06 07:15:34 +03:00
										 |  |  |       url = "https://android.googlesource.com/kernel/common/+archive/48ffcbf0b9e7f0280bfb8c32c68da0aaf0fdfef6.tar.gz"; | 
					
						
							| 
									
										
										
										
											2021-05-16 07:24:27 +02:00
										 |  |  |       sha256 = "1y7cmlmcr5vdqydd9n785s139yc4aylc3zhqa59xsylmkaf5habk"; | 
					
						
							|  |  |  |       stripRoot = false; | 
					
						
							| 
									
										
										
										
											2021-05-06 07:15:34 +03:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | stdenvNoCC.mkDerivation rec { | 
					
						
							|  |  |  |   pname = "bionic-prebuilt"; | 
					
						
							|  |  |  |   version = "ndk-release-r23"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-16 07:24:27 +02:00
										 |  |  |   src = fetchzip { | 
					
						
							| 
									
										
										
										
											2021-05-06 07:15:34 +03:00
										 |  |  |     url = "https://android.googlesource.com/platform/bionic/+archive/00e8ce1142d8823b0d2fc8a98b40119b0f1f02cd.tar.gz"; | 
					
						
							| 
									
										
										
										
											2021-05-16 07:24:27 +02:00
										 |  |  |     sha256 = "10z5mp4w0acvjvgxv7wlqa7m70hcyarmjdlfxbd9rwzf4mrsr8d1"; | 
					
						
							|  |  |  |     stripRoot = false; | 
					
						
							| 
									
										
										
										
											2021-05-06 07:15:34 +03:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   NIX_DONT_SET_RPATH = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   dontConfigure = true; | 
					
						
							|  |  |  |   dontBuild = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   patches = [ | 
					
						
							|  |  |  |     ./ndk-version.patch | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   postPatch = ''
 | 
					
						
							|  |  |  |     substituteInPlace libc/include/sys/cdefs.h --replace \ | 
					
						
							|  |  |  |       "__has_builtin(__builtin_umul_overflow)" "1" | 
					
						
							|  |  |  |     substituteInPlace libc/include/bits/ioctl.h --replace \ | 
					
						
							|  |  |  |       "!defined(BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD)" "0" | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   installPhase= ''
 | 
					
						
							|  |  |  |     # copy the bionic headers | 
					
						
							|  |  |  |     mkdir -p $out/include/support $out/include/android | 
					
						
							|  |  |  |     cp -vr libc/include/* $out/include
 | 
					
						
							|  |  |  |     # copy the kernel headers | 
					
						
							|  |  |  |     cp -vr ${kernelHeaders}/include/*  $out/include/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     chmod -R +w $out/include/linux | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # fix a bunch of kernel headers so that things can actually be found | 
					
						
							|  |  |  |     sed -i 's,struct epoll_event {,#include <bits/epoll_event.h>\nstruct Xepoll_event {,' $out/include/linux/eventpoll.h | 
					
						
							|  |  |  |     sed -i 's,struct in_addr {,typedef unsigned int in_addr_t;\nstruct in_addr {,' $out/include/linux/in.h | 
					
						
							|  |  |  |     sed -i 's,struct udphdr {,struct Xudphdr {,' $out/include/linux/udp.h | 
					
						
							|  |  |  |     sed -i 's,union semun {,union Xsemun {,' $out/include/linux/sem.h | 
					
						
							|  |  |  |     sed -i 's,struct __kernel_sockaddr_storage,#define sockaddr_storage __kernel_sockaddr_storage\nstruct __kernel_sockaddr_storage,' $out/include/linux/socket.h | 
					
						
							|  |  |  |     sed -i 's,#ifndef __UAPI_DEF_.*$,#if 1,' $out/include/linux/libc-compat.h | 
					
						
							|  |  |  |     substituteInPlace $out/include/linux/in.h --replace "__be32		imr_" "struct in_addr		imr_" | 
					
						
							|  |  |  |     substituteInPlace $out/include/linux/in.h --replace "__be32		imsf_" "struct in_addr		imsf_" | 
					
						
							|  |  |  |     substituteInPlace $out/include/linux/sysctl.h --replace "__unused" "_unused" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # what could possibly live in <linux/compiler.h> | 
					
						
							|  |  |  |     touch $out/include/linux/compiler.h | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # copy the support headers | 
					
						
							|  |  |  |     cp -vr ${ndk_support_headers}* $out/include/support/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     mkdir $out/lib | 
					
						
							|  |  |  |     cp -v ${prebuilt_crt.out}/*.o $out/lib/
 | 
					
						
							|  |  |  |     cp -v ${prebuilt_crt.out}/libgcc.a $out/lib/ | 
					
						
							|  |  |  |     cp -v ${prebuilt_ndk_crt.out}/*.o $out/lib/
 | 
					
						
							|  |  |  |     for i in libc.so libm.so libdl.so liblog.so; do | 
					
						
							|  |  |  |       cp -v ${prebuilt_libs.out}/$i $out/lib/ | 
					
						
							|  |  |  |     done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     mkdir -p $dev/include | 
					
						
							|  |  |  |     cp -v $out/include/*.h $dev/include/
 | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   outputs = [ "out" "dev" ]; | 
					
						
							|  |  |  |   passthru.linuxHeaders = kernelHeaders; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   meta = with lib; { | 
					
						
							|  |  |  |     description = "The Android libc implementation"; | 
					
						
							|  |  |  |     homepage    = "https://android.googlesource.com/platform/bionic/"; | 
					
						
							|  |  |  |     license     = licenses.mit; | 
					
						
							|  |  |  |     platforms   = platforms.linux; | 
					
						
							|  |  |  |     maintainers = with maintainers; [ s1341 ]; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |