self: super: let inherit (super) lib; hasGenode = with super.stdenv; (if hostPlatform ? isGenode then hostPlatform.isGenode else false) || (if targetPlatform ? isGenode then targetPlatform.isGenode else false); genodelibc = self.callPackage ./libc { stdenv = self.crossLibcStdenv; }; in { binutils-unwrapped = super.binutils-unwrapped.overrideAttrs (attrs: { patches = attrs.patches ++ (lib.optional hasGenode ./binutils.patch); }); cmake = super.cmake.overrideAttrs (attrs: { postInstall = if hasGenode then '' local MODULE="$out/share/cmake-${ lib.versions.majorMinor attrs.version }/Modules/Platform/Genode.cmake" if [ -e "$MODULE" ]; then echo "Upstream provides $MODULE!" exit 1 fi cp ${./Genode.cmake} $MODULE '' else null; }); llvmPackages = self.recurseIntoAttrs self.llvmPackages_8; llvmPackages_8 = super.llvmPackages_8 // { llvm = super.llvmPackages_8.llvm.overrideAttrs (attrs: { patches = [ ./llvm.patch ]; }); compiler-rt = super.llvmPackages_8.compiler-rt.overrideAttrs (attrs: { patches = attrs.patches ++ [ ./compiler-rt.patch ]; }); libcxxabi = (super.llvmPackages_8.libcxxabi.override { enableShared = false; }).overrideAttrs (attrs: { postUnpack = attrs.postUnpack + '' patch -p1 -d $(ls -d llvm-*) -i ${./llvm-genode.patch} ''; cmakeFlags = attrs.cmakeFlags ++ (lib.optionals hasGenode [ "-DCMAKE_C_FLAGS=-nodefaultlibs" "-DLIBCXXABI_USE_LLVM_UNWINDER=OFF" "-DLIBCXXABI_ENABLE_THREADS=OFF" "-DLIBCXXABI_BAREMETAL=ON" ]); installPhase = attrs.installPhase + "install -m 644 ../include/*.h $out/include"; }); libcxx = (super.llvmPackages_8.libcxx.override { enableShared = false; }).overrideAttrs (attrs: { patches = attrs.patches ++ (lib.optional hasGenode ./libc++.patch); nativeBuildInputs = attrs.nativeBuildInputs ++ [ super.buildPackages.python ]; cmakeFlags = attrs.cmakeFlags ++ (lib.optional hasGenode "-DLIBCXX_ENABLE_THREADS=OFF"); }); clang-unwrapped = super.llvmPackages_8.clang-unwrapped.overrideAttrs (attrs: { patches = attrs.patches ++ [ ./clang.patch ]; }); }; genodeHeaders = self.callPackage ./headers { }; inherit genodelibc; libcCross = genodelibc; }