• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2018 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15
16PROJECT_QEMU_INC_LOCAL_DIR := $(GET_LOCAL_DIR)
17
18ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
19PACKAGE_TRUSTY_IMAGES := true
20endif
21
22APPLOADER_ALLOW_NS_CONNECT := true
23
24# Include Secretkeeper TA
25SECRETKEEPER_ENABLED := true
26
27# All qemu-generic-arm64* builds default to SPMC_EL=3
28# while the arm32 builds use the SPD because both
29# Hafnium and EL3 SPMC only support AArch64.
30ifneq ($(filter generic-arm64%,$(QEMU_TRUSTY_PROJECT)),)
31SPMC_EL ?= 3
32endif
33
34ifneq ($(SPMC_EL),)
35LIB_SM_WITH_FFA_LOOP := true
36GENERIC_ARM64_DEBUG := FFA
37
38# Merge FIQ-IRQ to keep the FF-A implementation simpler
39ARM_MERGE_FIQ_IRQ := true
40
41# TF-A on qemu sets PLATFORM_CORE_COUNT=32 and requires that the
42# SP manifest specifies that exact number of execution contexts
43SMP_MAX_CPUS := 32
44SMP_CPU_CLUSTER_SHIFT := 4
45endif
46
47include project/$(QEMU_TRUSTY_PROJECT).mk
48
49# limit physical memory to 29 bits to make the mapping
50# as small as possible while covering the entire kernel plus
51# enough pages for the page tables for the initial mappings
52GLOBAL_DEFINES += MMU_IDENT_SIZE_SHIFT=29
53
54# Qemu statically built with glibc<2.29 uses a syscall to implement
55# clock_gettime instead of the VDSO, which makes the calls much slower
56APP_TIMERTEST_MAX_CLOCK_PERIOD := 2000
57
58# Derive RPMB key using HKDF
59WITH_HKDF_RPMB_KEY ?= true
60
61# Always allow provisioning for emulator builds
62STATIC_SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED := 1
63
64# Emulator builds are unlocked by default. qemu-generic-arm32-test-debug
65# overrides this to ensure that we have at least one target that tests with app
66# loading locked.
67STATIC_SYSTEM_STATE_FLAG_APP_LOADING_UNLOCKED ?= 1
68
69MODULES += \
70	trusty/user/app/storage/rpmb_dev \
71
72RPMB_DEV := $(BUILDDIR)/host_tools/rpmb_dev
73
74# Enable unittests that should only run in the emulator
75STORAGE_UNITTEST_ON_EMULATOR := true
76
77PROJECT_KEYS_DIR := $(PROJECT_QEMU_INC_LOCAL_DIR)/keys
78
79APPLOADER_SIGN_PRIVATE_KEY_0_FILE := \
80	$(PROJECT_KEYS_DIR)/apploader_sign_test_private_key_0.der
81
82APPLOADER_SIGN_PUBLIC_KEY_0_FILE := \
83	$(PROJECT_KEYS_DIR)/apploader_sign_test_public_key_0.der
84
85APPLOADER_SIGN_PRIVATE_KEY_1_FILE := \
86	$(PROJECT_KEYS_DIR)/apploader_sign_test_private_key_1.der
87
88APPLOADER_SIGN_PUBLIC_KEY_1_FILE := \
89	$(PROJECT_KEYS_DIR)/apploader_sign_test_public_key_1.der
90
91# Key ID 1 should only be allowed if SYSTEM_STATE_FLAG_APP_LOADING_UNLOCKED is
92# true
93APPLOADER_SIGN_KEY_1_UNLOCKED_ONLY := true
94
95# The default signing key is key 0, but each application
96# can specify a different key identifier
97APPLOADER_SIGN_KEY_ID ?= 0
98
99# Treat key slot 1 as a dev key by default. In tests this key is only expected
100# to be enabled if SYSTEM_STATE_FLAG_APP_LOADING_UNLOCKED is true.
101APPLOADER_SIGN_UNLOCKED_KEY_ID ?= 1
102
103APPLOADER_ENCRYPT_KEY_0_FILE := \
104	$(PROJECT_KEYS_DIR)/apploader_encrypt_test_key_0.bin
105
106LK_BIN := $(BUILDDIR)/lk.bin
107
108EXTRA_BUILDRULES += external/trusty/bootloader/test-runner/test-runner-inc.mk
109TEST_RUNNER_BIN := $(BUILDDIR)/test-runner/external/trusty/bootloader/test-runner/test-runner.bin
110
111ifeq (true,$(call TOBOOL,$(HAFNIUM)))
112HAFNIUM_PLATFORM := secure_qemu_aarch64
113include external/hafnium/rules.mk
114BL32_BIN := $(HAFNIUM_BIN)
115else
116BL32_BIN := $(LK_BIN)
117endif
118
119ATF_DEBUG := 1
120ATF_PLAT := qemu
121ATF_WITH_TRUSTY_GENERIC_SERVICES := true
122ATF_BUILD_BASE := $(abspath $(BUILDDIR)/atf)
123ATF_TOOLCHAIN_PREFIX := $(ARCH_arm64_TOOLCHAIN_PREFIX)
124ATF_ROOT := $(call FIND_EXTERNAL,arm-trusted-firmware)
125include project/qemu-atf-inc.mk
126
127# Try using the qemu from the prebuilts
128QEMU_BUILD_BASE := $(abspath $(BUILDDIR)/qemu-build)
129QEMU_ARCH := aarch64
130QEMU_PREBUILTS_DIR ?= prebuilts/android-emulator/trusty-x86_64
131QEMU_PREBUILTS := $(wildcard $(QEMU_PREBUILTS_DIR))
132
133ifeq (,$(QEMU_PREBUILTS))
134# No prebuilts, build qemu from source
135QEMU_ROOT := $(call FIND_EXTERNAL,qemu)
136QEMU_TARGET := aarch64-softmmu,arm-softmmu
137include project/qemu-qemu-inc.mk
138else
139# We have prebuilts, copy them into the build directory
140QEMU_BIN := $(QEMU_BUILD_BASE)/bin/qemu-system-$(QEMU_ARCH)
141
142# The qemu prebuilts now contain an Android.bp file.
143# We do not want it in the build directory because Soong reads it.
144$(QEMU_BUILD_BASE): $(QEMU_PREBUILTS)
145	@echo creating qemu output directory
146	@rm -rf $@
147	@cp -r $< $@
148	@rm -f $@/Android.bp
149
150# The binary is inside the build directory, so create
151# an empty dependency between them
152$(QEMU_BIN): $(QEMU_BUILD_BASE)
153	@echo creating qemu binary
154
155EXTRA_BUILDDEPS += $(QEMU_BUILD_BASE) $(QEMU_BIN)
156endif
157
158ifneq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
159LINUX_ARCH ?= arm64
160include project/linux-inc.mk
161endif
162
163RUN_SCRIPT := $(BUILDDIR)/run
164STOP_SCRIPT := $(BUILDDIR)/stop
165ALLOC_ADB_PORTS_PY := $(BUILDDIR)/alloc_adb_ports.py
166HOST_COMMANDS_OUT_DIR := $(BUILDDIR)/host_commands
167QEMU_PY := $(BUILDDIR)/qemu.py
168QEMU_ERROR_PY := $(BUILDDIR)/qemu_error.py
169QEMU_OPTIONS_PY := $(BUILDDIR)/qemu_options.py
170QEMU_LLDB_SUPPORT_PY := $(BUILDDIR)/lldb_support.py
171QEMU_LLDBINIT := $(BUILDDIR)/lldbinit
172PY3_CMD := $(BUILDDIR)/py3-cmd
173RUN_PY := $(BUILDDIR)/run.py
174
175$(ATF_OUT_DIR):
176	mkdir -p $@
177
178# ATF built binaries
179ATF_BIN := $(ATF_OUT_DIR)/bl31.bin
180ATF_EXTRA_BINS += \
181	$(ATF_OUT_DIR)/bl1.bin \
182	$(ATF_OUT_DIR)/bl2.bin \
183
184# For ATF bootloader semihosting calls, bl32 and bl33 need to be in place
185ATF_SYMLINKS := \
186	$(ATF_OUT_DIR)/bl32.bin \
187	$(ATF_OUT_DIR)/bl33.bin \
188	$(EXTRA_ATF_SYMLINKS) \
189
190$(ATF_OUT_DIR)/bl32.bin: BUILDDIR := $(BUILDDIR)
191$(ATF_OUT_DIR)/bl32.bin: ATF_OUT_DIR := $(ATF_OUT_DIR)
192$(ATF_OUT_DIR)/bl32.bin: $(BL32_BIN) $(ATF_OUT_DIR)
193	$(NOECHO)ln -rsf $< $@
194
195$(ATF_OUT_DIR)/bl33.bin: BUILDDIR := $(BUILDDIR)
196$(ATF_OUT_DIR)/bl33.bin: ATF_OUT_DIR := $(ATF_OUT_DIR)
197$(ATF_OUT_DIR)/bl33.bin: $(TEST_RUNNER_BIN) $(ATF_OUT_DIR)
198	$(NOECHO)ln -rsf $< $@
199
200ATF_GENERATED_FILES := \
201	$(ATF_OUT_DIR)/RPMB_DATA \
202	$(ATF_OUT_DIR)/metadata.img \
203
204$(ATF_OUT_DIR)/RPMB_DATA: ATF_OUT_DIR := $(ATF_OUT_DIR)
205$(ATF_OUT_DIR)/RPMB_DATA: $(RPMB_DEV)
206	@echo Initialize rpmb device
207	$< --dev $(ATF_OUT_DIR)/RPMB_DATA --init --size 2048
208
209ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
210ANDROID_OUT_SRC_DIR :=
211ANDROID_OUT_SRC_FILES :=
212else
213ifneq (,$(ANDROID_BUILD_TOP))
214# We are building Trusty inside an Android environment,
215# which means we can use a fresh Android build instead of prebuilts
216ANDROID_OUT_SRC_DIR := $(ANDROID_BUILD_TOP)
217else
218ANDROID_OUT_SRC_DIR := trusty/prebuilts/aosp/android
219endif
220ANDROID_OUT_SRC_FILES := $(addprefix $(ANDROID_OUT_SRC_DIR)/,$(ANDROID_OUT_FILES))
221endif
222
223MKE2FS ?= $(ANDROID_OUT_SRC_DIR)/out/host/linux-x86/bin/mke2fs
224$(ATF_OUT_DIR)/metadata.img: MKE2FS := $(MKE2FS)
225$(ATF_OUT_DIR)/metadata.img:
226	@echo Create metadata.img
227	MKE2FS_CONFIG= $(MKE2FS) -t ext4 -F $@ -O has_journal,extent,huge_file,dir_nlink,extra_isize,uninit_bg 16m
228
229QEMU_SCRIPTS := \
230	$(ALLOC_ADB_PORTS_PY) \
231	$(HOST_COMMANDS_OUT_DIR) \
232	$(QEMU_PY) \
233	$(QEMU_ERROR_PY) \
234	$(QEMU_OPTIONS_PY) \
235	$(QEMU_LLDB_SUPPORT_PY) \
236	$(QEMU_LLDBINIT) \
237	$(RUN_PY) \
238
239$(QEMU_SCRIPTS): .PHONY
240EXTRA_BUILDDEPS += $(QEMU_SCRIPTS)
241
242# Copied so that the resulting build tree contains all files needed to run
243$(ALLOC_ADB_PORTS_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/alloc_adb_ports.py
244	@echo copying $@
245	@cp $< $@
246
247# Copied so that the resulting build tree contains all files needed to run
248$(HOST_COMMANDS_OUT_DIR): $(PROJECT_QEMU_INC_LOCAL_DIR)/host_commands
249	@echo copying $@
250	@rm -rf $@
251	@cp -a $< $@
252
253# Copied so that the resulting build tree contains all files needed to run
254$(QEMU_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/qemu.py
255	@echo copying $@
256	@cp $< $@
257
258# Copied so that the resulting build tree contains all files needed to run
259$(QEMU_ERROR_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/qemu_error.py
260	@echo copying $@
261	@cp $< $@
262
263# Script used to generate qemu architecture options. Need to specify qemu
264# options file name since different projects use different python script
265$(QEMU_OPTIONS_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/qemu_arm64_options.py
266	@echo copying $@
267	@cp $< $@
268
269# Script used in LLDB for setting breakpoints adjusted for KASLR and ASLR
270$(QEMU_LLDB_SUPPORT_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/lldb_support.py
271	@echo copying $@
272	@cp $< $@
273
274# Companion script to lldb_support.py that contains LLDB commands
275$(QEMU_LLDBINIT): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/lldbinit
276	@echo copying $@
277	@cp $< $@
278
279# Python version of the run shell script which can be imported by other Python
280# scripts for more granular control over how tests share emulator instances.
281# It serves as a wrapper around qemu.py which defaults the config.
282$(RUN_PY): $(PROJECT_QEMU_INC_LOCAL_DIR)/qemu/run.py
283	@echo copying $@
284	@cp $< $@
285
286# Copy prebuilt hermetic Python 3 command into the build directory so that the
287# build does not rely on the host having Python 3 installed. Hermetic python 3
288# contains the standard library so this is all we need to run the qemu scripts
289$(PY3_CMD): $(BUILDTOOLS_BINDIR)/py3-cmd
290	@echo copying $@
291	@$(MKDIR)
292	@cp $< $@
293
294EXTRA_BUILDDEPS += $(PY3_CMD)
295
296# List of files we need from Android
297ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
298ANDROID_OUT_FILES :=
299
300else
301ANDROID_OUT_FILES := \
302	out/host/linux-x86/bin/adb \
303	out/host/linux-x86/bin/mke2fs \
304	out/target/product/trusty/ramdisk.img \
305	out/target/product/trusty/system.img \
306	out/target/product/trusty/vendor.img \
307	out/target/product/trusty/userdata.img \
308	out/target/product/trusty/data/nativetest64 \
309
310endif
311# Copy Android prebuilts into the build directory so that the build does not
312# depend on any files in the source tree. We want to package the build artifacts
313# without any dependencies on the sources.
314# Because files in the prebuilts directory are not writeable the directory must
315# be cleared before copying in the fresh content. `rm -rf` is used to accomplish
316# this because it bypasses writing un-writeable files in addition to bringing
317# the target directory to the same state as with a clean build.
318ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
319ANDROID_OUT_BUILD_DIR :=
320
321else
322ANDROID_OUT_BUILD_DIR := $(BUILDDIR)/aosp/android
323
324endif
325
326ANDROID_OUT_IMAGE_DIR := $(ANDROID_OUT_BUILD_DIR)/out/target/product/trusty
327ANDROID_OUT_ADB_PATH := $(ANDROID_OUT_BUILD_DIR)/out/host/linux-x86/bin/adb
328
329# Copy the files listed in ANDROID_OUT_FILES from ANDROID_OUT_SRC_DIR into
330# ANDROID_OUT_BUILD_DIR preserving the directory structure relative to the
331# top-level ANDROID_OUT_SRC_DIR directory
332$(ANDROID_OUT_BUILD_DIR): ANDROID_OUT_SRC_DIR := $(ANDROID_OUT_SRC_DIR)
333$(ANDROID_OUT_BUILD_DIR): ANDROID_OUT_IMAGE_DIR := $(ANDROID_OUT_IMAGE_DIR)
334$(ANDROID_OUT_BUILD_DIR): ANDROID_OUT_FILES := $(ANDROID_OUT_FILES)
335$(ANDROID_OUT_BUILD_DIR): LINUX_RAMDISK_IMAGE := $(LINUX_RAMDISK_IMAGE)
336$(ANDROID_OUT_BUILD_DIR): RAMDISK_CP := $(if $(LINUX_RAMDISK_IMAGE),cp,/bin/true)
337$(ANDROID_OUT_BUILD_DIR): $(ANDROID_OUT_SRC_FILES) $(LINUX_RAMDISK_IMAGE)
338	@echo creating Android output directory
339	@rm -rf $@
340	@mkdir -p $@
341	@cd $(ANDROID_OUT_SRC_DIR) && cp -r --parents -t $@ $(ANDROID_OUT_FILES)
342	@$(RAMDISK_CP) $(LINUX_RAMDISK_IMAGE) $(ANDROID_OUT_IMAGE_DIR)/ramdisk.img
343
344EXTRA_BUILDDEPS += $(ANDROID_OUT_BUILD_DIR)
345
346ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES_ONLY)))
347QEMU_CONFIG :=
348
349else
350QEMU_CONFIG := $(BUILDDIR)/config.json
351
352endif
353
354# Save variables to a json file to export paths known to the build system to
355# the test system
356$(QEMU_CONFIG): QEMU_BIN := $(subst $(BUILDDIR)/,,$(QEMU_BIN))
357$(QEMU_CONFIG): EXTRA_QEMU_FLAGS := ["-machine", "gic-version=$(GIC_VERSION)"]
358$(QEMU_CONFIG): ATF_OUT_DIR := $(subst $(BUILDDIR)/,,$(ATF_OUT_DIR))
359$(QEMU_CONFIG): LINUX_BUILD_DIR := $(subst $(BUILDDIR)/,,$(LINUX_BUILD_DIR))
360$(QEMU_CONFIG): LINUX_ARCH := $(LINUX_ARCH)
361$(QEMU_CONFIG): ANDROID_OUT_IMAGE_DIR := $(subst $(BUILDDIR)/,,$(ANDROID_OUT_IMAGE_DIR))
362$(QEMU_CONFIG): ANDROID_OUT_ADB_PATH := $(subst $(BUILDDIR)/,,$(ANDROID_OUT_ADB_PATH))
363$(QEMU_CONFIG): RPMB_DEV := $(subst $(BUILDDIR)/,,$(RPMB_DEV))
364$(QEMU_CONFIG): $(ATF_OUT_COPIED_FILES) $(ATF_SYMLINKS) $(ATF_GENERATED_FILES)
365	@echo generating $@
366	@echo '{ "linux": "$(LINUX_BUILD_DIR)",' > $@
367	@echo '  "linux_arch": "$(LINUX_ARCH)",' >> $@
368	@echo '  "initrd": "$(ANDROID_OUT_IMAGE_DIR)/ramdisk.img",' >> $@
369	@echo '  "atf": "$(ATF_OUT_DIR)", ' >> $@
370	@echo '  "qemu": "$(QEMU_BIN)", ' >> $@
371	@echo '  "extra_qemu_flags": $(EXTRA_QEMU_FLAGS), ' >> $@
372	@echo '  "android_image_dir": "$(ANDROID_OUT_IMAGE_DIR)", ' >> $@
373	@echo '  "adb": "$(ANDROID_OUT_ADB_PATH)", ' >> $@
374	@echo '  "rpmbd": "$(RPMB_DEV)", ' >> $@
375	@echo '  "arch": "$(ARCH)" }' >> $@
376
377EXTRA_BUILDDEPS += $(QEMU_CONFIG)
378
379# The original run shell script was replaced by run.py. Create symlink to
380# preserve backwards compatibility.
381$(RUN_SCRIPT): $(RUN_PY)
382	@echo creating $@
383	@ln -sf $(abspath $<) $@
384
385EXTRA_BUILDDEPS += $(RUN_SCRIPT)
386
387# Create a script to stop all stale emulators.
388$(STOP_SCRIPT):
389	@echo generating $@
390	@echo "#!/bin/sh" >$@
391	@echo 'killall qemu-system-aarch64' >>$@
392	@chmod +x $@
393
394EXTRA_BUILDDEPS += $(STOP_SCRIPT)
395
396ifeq (true,$(call TOBOOL,$(PACKAGE_QEMU_TRUSTY)))
397
398# Files & directories to copy into QEMU package archive
399QEMU_PACKAGE_FILES := \
400	$(OUTBIN) $(QEMU_SCRIPTS) $(PY3_CMD) $(QEMU_CONFIG) $(RPMB_DEV) \
401	$(RUN_SCRIPT) $(STOP_SCRIPT) \
402	$(QEMU_BIN) $(ATF_BIN) $(ATF_SYMLINKS) \
403	$(ATF_GENERATED_FILES) \
404	$(ATF_OUT_COPIED_FILES) \
405	$(LINUX_IMAGE) \
406
407ifneq (true,$(call TOBOOL,$(PACKAGE_QEMU_WITHOUT_ANDROID)))
408# The Android prebuilts are pretty large and not all users need them
409QEMU_PACKAGE_FILES += $(ANDROID_OUT_BUILD_DIR)
410endif
411
412# Other files/directories that should be included in the package but which are
413# not make targets and therefore cannot be pre-requisites. The target that
414# creates these files must be in the QEMU_PACKAGE_FILES variable.
415QEMU_PACKAGE_EXTRA_FILES := \
416	$(LINUX_BUILD_DIR)/scripts \
417	$(QEMU_BUILD_BASE) $(ATF_EXTRA_BINS) \
418
419QEMU_PACKAGE_ARCHIVE := $(BUILDDIR)/trusty_qemu_package.zip
420
421include project/qemu-package-inc.mk
422endif
423
424ifeq (true,$(call TOBOOL,$(PACKAGE_TRUSTY_IMAGES)))
425
426# Files & directories to copy into Trusty image archive for use with QEMU
427# emulator. This does not include the QEMU emulator itself, which is located in
428# prebuilts/android-emulator/trusty-x86_64/ and part of the trusty qemu device
429# host package built in AOSP.
430QEMU_PACKAGE_FILES := \
431	$(OUTBIN) $(QEMU_SCRIPTS) $(PY3_CMD) \
432	$(STOP_SCRIPT) \
433	$(ATF_BIN) $(ATF_SYMLINKS) $(TEST_RUNNER_BIN) \
434	$(ATF_GENERATED_FILES) \
435	$(ATF_OUT_COPIED_FILES) \
436
437# Other files/directories that should be included in the package but which are
438# not make targets and therefore cannot be pre-requisites. The target that
439# creates these files must be in the QEMU_PACKAGE_FILES variable.
440QEMU_PACKAGE_EXTRA_FILES := \
441	$(ATF_EXTRA_BINS) \
442
443QEMU_PACKAGE_ARCHIVE := $(BUILDDIR)/trusty_image_package.tar.gz
444
445include project/qemu-package-inc.mk
446endif
447
448ANDROID_OUT_FILES :=
449ANDROID_OUT_BUILD_DIR :=
450ANDROID_OUT_SRC_DIR :=
451ANDROID_OUT_SRC_FILES :=
452ATF_BIN :=
453ATF_BUILD_BASE :=
454ATF_EXTRA_BINS :=
455ATF_OUT_COPIED_FILES :=
456ATF_OUT_DIR :=
457ATF_RELATIVE_TO_BUILD_BASE :=
458ATF_SYMLINKS :=
459EXTRA_ATF_SYMLINKS :=
460HAFNIUM_BIN :=
461LINUX_ARCH :=
462LINUX_BUILD_DIR :=
463LINUX_IMAGE :=
464LINUX_RAMDISK_IMAGE :=
465RUN_SCRIPT :=
466TEST_RUNNER_BIN :=
467QEMU_BIN :=
468QEMU_BUILD_BASE :=
469QEMU_CONFIG :=
470QEMU_ERROR_PY :=
471QEMU_OPTIONS_PY :=
472QEMU_LLDB_SUPPORT_PY :=
473QEMU_LLDBINIT :=
474QEMU_PREBUILTS :=
475QEMU_PY :=
476QEMU_SCRIPTS :=
477PY3_CMD :=
478RUN_PY :=
479