diff options
Diffstat (limited to 'qemu/scripts/rebuild.py')
-rwxr-xr-x | qemu/scripts/rebuild.py | 115 |
1 files changed, 107 insertions, 8 deletions
diff --git a/qemu/scripts/rebuild.py b/qemu/scripts/rebuild.py index 229965b..0a4eede 100755 --- a/qemu/scripts/rebuild.py +++ b/qemu/scripts/rebuild.py @@ -54,9 +54,9 @@ def create_dev_environment( "AR": f"{binprefix}llvm-ar", "NM": f"{binprefix}llvm-nm", "PKG_CONFIG_PATH": ":".join([ - f"{install_dir}/usr/local/lib/pkgconfig", f"{install_dir}/usr/lib/x86_64-linux-gnu/pkgconfig", f"{install_dir}/usr/lib/pkgconfig", + f"{sysroot}/usr/lib/pkgconfig", ]), "PATH": f"{install_dir}/usr/bin:{path}", "LD_LIBRARY_PATH": ":".join([ @@ -108,10 +108,10 @@ def generate_shell_command( result = "" result_wrap = False if build_dir: - result += f"cd {build_dir} && " + result += f"cd {build_dir} && \\\n" result_wrap = True if environ: - result += " ".join(environ) + " " + result += " \\\n".join(environ) + " \\\n" result += " ".join(shlex.quote(c) for c in cmd_args) if result_wrap: @@ -801,20 +801,29 @@ def build_task_for_libdrm(build: BuildConfig): ) +@project.task([]) +def build_task_for_egl(build: BuildConfig): + build.copy_dir( + build.third_party_dir / "egl" / "api" / "KHR", + build.sysroot_dir / "usr" / "include" / "KHR", + ) + build.copy_dir( + build.third_party_dir / "egl" / "api" / "EGL", + build.sysroot_dir / "usr" / "include" / "EGL", + ) + + @project.task([ build_task_for_meson, build_task_for_aemu_base, build_task_for_flatbuffers, + build_task_for_egl, build_task_for_libdrm, ]) def build_task_for_gfxstream(build: BuildConfig): dir_name = Path("gfxstream") src_dir = build.third_party_dir / dir_name build_dir = build.make_subdir(dir_name) - build.copy_dir( - build.third_party_dir / "egl" / "api" / "EGL", - build.sysroot_dir / "usr" / "include" / "EGL", - ) build.run( [ "meson", @@ -889,6 +898,93 @@ def build_task_for_rutabaga(build: BuildConfig): ) +@project.task([]) +def build_task_for_libgbm(build: BuildConfig): + # gbm is part of mesa which is a large project. + # The dependency is taken fron the system. + build.copy_file( + "/usr/lib/x86_64-linux-gnu/libgbm.so.1", + build.install_dir / "usr/lib/libgbm.so.1", + ) + build.copy_file( + "/usr/lib/x86_64-linux-gnu/libgbm.so", + build.install_dir / "usr/lib/libgbm.so", + ) + build.copy_file( + "/usr/lib/x86_64-linux-gnu/libgbm.so.1.0.0", + build.install_dir / "usr/lib/libgbm.so.1.0.0", + ) + build.copy_file( + "/usr/lib/x86_64-linux-gnu/pkgconfig/gbm.pc", + build.install_dir / "usr/lib/pkgconfig/gbm.pc", + ) + build.copy_file("/usr/include/gbm.h", build.install_dir / "usr/include/gbm.h") + + +@project.task([ + build_task_for_egl, + build_task_for_libgbm, + build_task_for_meson, + build_task_for_ninja, +]) +def build_task_for_libepoxy(build: BuildConfig): + src_dir = build.third_party_dir / "libepoxy" + build_dir = build.make_subdir(Path("libepoxy")) + build.run( + [ + "meson", + "setup", + "--prefix=%s/usr" % build.install_dir, + "--libdir=%s/usr/lib" % build.install_dir, + "-Dtests=false", + build_dir, + src_dir, + ], + ) + + build.run(["ninja", "install"], build_dir) + # There is a bug in`qemu/third_party/libepoxy/src/meson.build` + # that result in a corrupted line `Requires.private: x11,` in `epoxy.pc`. + # This is not valid and causes the failure: + # `Empty package name in Requires or Conflicts in file '[...]epoxy.pc'` + # This is because 'x11' is found as an implicit dependency and the + # pkgconfig specification in the meson file adds an empty element. + # Until a better solution is found, remove the dependency. + build.run([ + "sed", + "-i", + "s/Requires.private: x11, $//g", + build.install_dir / "usr/lib/pkgconfig/epoxy.pc", + ]) + + +@project.task([ + build_task_for_egl, + build_task_for_libdrm, + build_task_for_libepoxy, + build_task_for_libgbm, + build_task_for_meson, + build_task_for_ninja, +]) +def build_task_for_virglrenderer(build: BuildConfig): + src_dir = build.third_party_dir / "virglrenderer" + build_dir = build.make_subdir(Path("virglrenderer")) + build.run( + [ + "meson", + "setup", + "--prefix=%s/usr" % build.install_dir, + "--libdir=%s/usr/lib" % build.install_dir, + "-Dplatforms=egl", + "-Dtests=false", + build_dir, + src_dir, + ], + ) + + build.run(["ninja", "install"], build_dir) + + @project.task([ build_task_for_make, build_task_for_libslirp, @@ -898,6 +994,7 @@ def build_task_for_rutabaga(build: BuildConfig): build_task_for_pkg_config, build_task_for_rutabaga, build_task_for_gfxstream, + build_task_for_virglrenderer, ]) def build_task_for_qemu(build: BuildConfig): target_list = [ @@ -912,11 +1009,11 @@ def build_task_for_qemu(build: BuildConfig): "--prefix=/usr", "--target-list=%s" % ",".join(target_list), "--disable-plugins", + "--enable-virglrenderer", # Cuttlefish is packaged in host archives that are assembled in # `$ANDROID_BUILD_TOP/out/host/linux-x86`. # Binaries are in `./bin` and resources are in `./usr/share` which is # different from QEMU default expectations. Details in b/296286524. - # Move the binary directory up by one. This path is relative to # `--prefix` above. "-Dbindir=../bin", @@ -946,6 +1043,8 @@ def build_task_for_qemu_portable(build: BuildConfig): bin_dir = package_dir / "bin" files = [ "dest-install/usr/lib/libz.so.1", + "dest-install/usr/lib/libepoxy.so.0", + "dest-install/usr/lib/libvirglrenderer.so.1", "dest-install/usr/lib/librutabaga_gfx_ffi.so.0", "dest-install/usr/lib64/libc++.so.1", ] |