66 lines · 2.8 KB · Makefile
RawDownload
# SPDX-License-Identifier: GPL-2.0-only# drm/tegra depends on host1x, so if both drivers are built-in care must be# taken to initialize them in the correct order. Link order is the only way# to ensure this currently.# Similarly, buddy must come first since it is used by other drivers.obj-$(CONFIG_GPU_BUDDY)	+= buddy.oobj-y			+= host1x/ drm/ vga/ tests/obj-$(CONFIG_IMX_IPUV3_CORE)	+= ipu-v3/obj-$(CONFIG_TRACE_GPU_MEM)		+= trace/ # nova-core and nova-drm are built from this Makefile so nova-drm's dependency# on nova-core can be expressed as a plain Make prerequisite rather than a# recursive sub-make. This is a temporary workaround until the Rust build# system supports cross-crate dependencies natively. obj-$(CONFIG_NOVA_CORE) += nova-core.onova-core-y := nova-core/nova_core.o nova-core/nova_core_exports.o obj-$(CONFIG_DRM_NOVA) += nova-drm.onova-drm-y := drm/nova/nova.o # Export Rust symbols from nova-core only if nova-drm actually references them.nova-core-export-deps := $(if $(CONFIG_DRM_NOVA),$(obj)/drm/nova/nova.o) rust_needed_exports = \	{ $(if $(strip $(2)),$(NM) -u $(2);,) echo "__DEFINED_RUST_SYMBOLS__"; \	  $(NM) -p --defined-only $(1); } | \	awk -v fmt='$(3)' ' \		/^__DEFINED_RUST_SYMBOLS__$$/ { defs = 1; next } \		!defs { if ($$NF ~ /^_R/) needed[$$NF] = 1; next } \		defs && $$2 ~ /(T|R|D|B)/ && $$3 ~ /^_R/ && \			$$3 !~ /_(init|cleanup)_module$$/ && \			$$3 !~ /__(pfx|cfi|odr_asan)/ && \			$$3 in needed { printf fmt, $$3 } \	' quiet_cmd_exports = EXPORTS $@      cmd_exports = \	$(call rust_needed_exports,$<,$(nova-core-export-deps),EXPORT_SYMBOL_RUST_GPL(%s);\n) > $@ $(obj)/nova-core/exports_nova_core_generated.h: $(obj)/nova-core/nova_core.o $(nova-core-export-deps) FORCE	$(call if_changed,exports) targets += nova-core/exports_nova_core_generated.h $(obj)/nova-core/nova_core_exports.o: $(obj)/nova-core/exports_nova_core_generated.hCFLAGS_nova-core/nova_core_exports.o := -I $(objtree)/$(obj)/nova-core ifdef CONFIG_MODVERSIONS# The C export shim declares Rust symbols as `extern int`, so reuse its export# list but generate symbol CRCs from the Rust object instead of the shim's DWARF.$(obj)/nova-core/nova_core_exports.o: private cmd_gensymtypes_c = \	$(call getexportsymbols,\1) | \	$(objtree)/scripts/gendwarfksyms/gendwarfksyms \		$(if $(KBUILD_GENDWARFKSYMS_STABLE), --stable) \		$(if $(KBUILD_SYMTYPES), --symtypes $(@:.o=.symtypes),) \		$(obj)/nova-core/nova_core.oendif # Output nova-core's crate metadata for use by nova-drm at compile time.RUSTFLAGS_nova-core/nova_core.o += \	--emit=metadata=$(objtree)/$(obj)/nova-core/libnova_core.rmeta # Allow nova-drm to import nova-core's types.$(obj)/drm/nova/nova.o: $(obj)/nova-core/nova_core.oRUSTFLAGS_drm/nova/nova.o := -L $(objtree)/$(obj)/nova-core --extern nova_core