aboutsummaryrefslogtreecommitdiff
path: root/qemu/scripts/rebuild.py
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/scripts/rebuild.py')
-rwxr-xr-xqemu/scripts/rebuild.py115
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",
]