{ lib, stdenv, fetchFromGitiles, cmake, darwin }:

stdenv.mkDerivation {
  pname = "aemu";
  version = "0.1.2";

  src = fetchFromGitiles {
    url = "https://android.googlesource.com/platform/hardware/google/aemu";
    rev = "07ccc3ded3357e67e39104f18f35feaf8b3b6a0e";
    hash = "sha256-H3IU9aTFSzUAqYgrtHd4F18hbhZsbOJGC4K5JwMQOOw=";
  };

  patches = [
    # stop using transitional LFS64 APIs, which are removed in musl 1.2.4
    # https://android-review.googlesource.com/c/platform/hardware/google/aemu/+/3105640/1
    ./LFS64.patch
  ];

  nativeBuildInputs = [ cmake ];
  buildInputs = lib.optionals stdenv.isDarwin [
    darwin.apple_sdk.frameworks.Cocoa
  ];

  cmakeFlags = [
    "-DAEMU_COMMON_GEN_PKGCONFIG=ON"
    "-DAEMU_COMMON_BUILD_CONFIG=gfxstream"
    # "-DENABLE_VKCEREAL_TESTS=OFF"
  ];

  meta = with lib; {
    homepage = "https://android.googlesource.com/platform/hardware/google/aemu";
    description = "Android emulation utilities library";
    maintainers = with maintainers; [ qyliss ];
    # The BSD license comes from host-common/VpxFrameParser.cpp, which
    # incorporates some code from libvpx, which uses the 3-clause BSD license.
    license = with licenses; [ asl20 mit bsd3 ];
    # See base/include/aemu/base/synchronization/Lock.h
    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
  };
}
