self: super: let inherit (super) lib stdenv; genodeTarget = stdenv.targetPlatform ? isGenode -> stdenv.targetPlatform.isGenode; genodelibc = self.callPackage ./libc { stdenv = self.crossLibcStdenv; }; in { binutils-unwrapped = super.binutils-unwrapped.overrideAttrs (attrs: { patches = attrs.patches ++ [ ./binutils.patch ]; }); cmake = super.cmake.overrideAttrs (attrs: { postInstall = if genodeTarget 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 genodeTarget [ "-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 genodeTarget ./libc++.patch); nativeBuildInputs = attrs.nativeBuildInputs ++ [ super.buildPackages.python ]; cmakeFlags = attrs.cmakeFlags ++ (lib.optional genodeTarget "-DLIBCXX_ENABLE_THREADS=OFF"); }); clang-unwrapped = super.llvmPackages_8.clang-unwrapped.overrideAttrs (attrs: { patches = attrs.patches ++ (lib.optional genodeTarget ./clang.patch); }); }; genodeHeaders = self.callPackage ./headers { }; inherit genodelibc; libcCross = genodelibc; }