linux-tools opportunistically set linux as only a patch dependency. This unfortunately introduces a race condition in the shared linux scripts when using PER_PACKAGE_DIRECTORIES and using top level parallelism. The race manifests as the error "/bin/sh: 1: scripts/basic/fixdep: Permission denied". This happens when the linux package and the linux-tools package are being compiled in parallel. The linux-tools currently using fixdep are perf and rtla. When the timing is correct, perf, rtla, or the kernel Makefile will try to use fixdep while one of the others is compiling fixed, resulting in fixdep being briefly not available. To fix this, set linux as a build dependency instead of a patch dependency. Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> Reviewed-by: Yann E. MORIN <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
79 lines
3.0 KiB
Makefile
79 lines
3.0 KiB
Makefile
################################################################################
|
|
#
|
|
# linux-tools
|
|
#
|
|
################################################################################
|
|
|
|
# Vampirising sources from the kernel tree, so no source nor site specified.
|
|
# Instead, we directly build in the sources of the linux package. We can do
|
|
# that, because we're not building in the same location and the same files.
|
|
#
|
|
# So, all tools refer to $(LINUX_DIR) instead of $(@D).
|
|
|
|
# Note: we need individual tools makefiles to be included *before* we build
|
|
# the list of build and install hooks below to guarantee that each tool has
|
|
# a chance to register itself once, and only once. Therefore, the makefiles
|
|
# are named linux-tool-*.mk.in, so they won't be picked up by the top-level
|
|
# Makefile, but can be included here, guaranteeing the single inclusion and
|
|
# the proper ordering.
|
|
|
|
include $(sort $(wildcard package/linux-tools/*.mk.in))
|
|
|
|
# Prevent the kernel from being compiled in parallel with linux-tools. The
|
|
# kernel and some linux-tools (such as perf) use fixdep to manage kconfig
|
|
# dependencies. There is a race condition where the kernel and linux-tools try
|
|
# to build fixdep while the other tries to use fixdep, resulting in the use of
|
|
# fixdep failing.
|
|
LINUX_TOOLS_DEPENDENCIES = linux
|
|
|
|
# Install Linux kernel tools in the staging directory since some tools
|
|
# may install shared libraries and headers (e.g. cpupower).
|
|
LINUX_TOOLS_INSTALL_STAGING = YES
|
|
|
|
LINUX_TOOLS_DEPENDENCIES += $(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$($(call UPPERCASE,$(tool))_DEPENDENCIES)))
|
|
|
|
LINUX_TOOLS_POST_BUILD_HOOKS += $(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$(call UPPERCASE,$(tool))_BUILD_CMDS))
|
|
|
|
LINUX_TOOLS_POST_INSTALL_STAGING_HOOKS += $(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$(call UPPERCASE,$(tool))_INSTALL_STAGING_CMDS))
|
|
|
|
LINUX_TOOLS_POST_INSTALL_TARGET_HOOKS += $(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$(call UPPERCASE,$(tool))_INSTALL_TARGET_CMDS))
|
|
|
|
define LINUX_TOOLS_LINUX_CONFIG_FIXUPS
|
|
$(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$($(call UPPERCASE,$(tool))_LINUX_CONFIG_FIXUPS))
|
|
)
|
|
endef
|
|
|
|
define LINUX_TOOLS_INSTALL_INIT_SYSTEMD
|
|
$(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSTEMD))
|
|
)
|
|
endef
|
|
|
|
define LINUX_TOOLS_INSTALL_INIT_SYSV
|
|
$(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSV))
|
|
)
|
|
endef
|
|
|
|
define LINUX_TOOLS_INSTALL_INIT_OPENRC
|
|
$(foreach tool,$(LINUX_TOOLS),\
|
|
$(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\
|
|
$(or $($(call UPPERCASE,$(tool))_INSTALL_INIT_OPENRC),\
|
|
$($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSV)))
|
|
)
|
|
endef
|
|
|
|
$(eval $(generic-package))
|