selftests: fix headers_install circular dependency
"make kselftest" fails with "Circular Makefile.o <- prepare dependency dropped." error, when lib.mk invokes "make headers_install". Make level 0: Main make calls selftests run_tests target ... Make level n: selftests lib.mk invokes main make's headers_install The secondary level make inherits builtin-rules which will use the rule to generate Makefile.o and runs into "Circular Makefile.o <- prepare dependency dropped." error, and kselftest compile fails. Invoke headers_install target with --no-builtin-rules to avoid circular error. In addition, lib.mk installs headers in the default HDR_PATH, even when build relocation is requested with O= or export KBUILD_OUTPUT. Fix the problem by passing in INSTALL_HDR_PATH. The headers are installed under the specified output "dir/usr". Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
b433a52aa2
commit
8ce72dc325
|
@ -75,12 +75,15 @@ ifneq ($(KBUILD_SRC),)
|
|||
override LDFLAGS =
|
||||
endif
|
||||
|
||||
BUILD := $(O)
|
||||
ifndef BUILD
|
||||
BUILD := $(KBUILD_OUTPUT)
|
||||
endif
|
||||
ifndef BUILD
|
||||
BUILD := $(shell pwd)
|
||||
ifneq ($(O),)
|
||||
BUILD := $(O)
|
||||
else
|
||||
ifneq ($(KBUILD_OUTPUT),)
|
||||
BUILD := $(KBUILD_OUTPUT)
|
||||
else
|
||||
BUILD := $(shell pwd)
|
||||
DEFAULT_INSTALL_HDR_PATH := 1
|
||||
endif
|
||||
endif
|
||||
|
||||
# KSFT_TAP_LEVEL is used from KSFT framework to prevent nested TAP header
|
||||
|
@ -89,8 +92,41 @@ endif
|
|||
# with system() call. Export it here to cover override RUN_TESTS defines.
|
||||
export KSFT_TAP_LEVEL=`echo 1`
|
||||
|
||||
# Prepare for headers install
|
||||
top_srcdir ?= ../../..
|
||||
include $(top_srcdir)/scripts/subarch.include
|
||||
ARCH ?= $(SUBARCH)
|
||||
export KSFT_KHDR_INSTALL_DONE := 1
|
||||
export BUILD
|
||||
all:
|
||||
|
||||
# set default goal to all, so make without a target runs all, even when
|
||||
# all isn't the first target in the file.
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
# Install headers here once for all tests. KSFT_KHDR_INSTALL_DONE
|
||||
# is used to avoid running headers_install from lib.mk.
|
||||
# Invoke headers install with --no-builtin-rules to avoid circular
|
||||
# dependency in "make kselftest" case. In this case, second level
|
||||
# make inherits builtin-rules which will use the rule generate
|
||||
# Makefile.o and runs into
|
||||
# "Circular Makefile.o <- prepare dependency dropped."
|
||||
# and headers_install fails and test compile fails.
|
||||
#
|
||||
# O= KBUILD_OUTPUT cases don't run into this error, since main Makefile
|
||||
# invokes them as sub-makes and --no-builtin-rules is not necessary,
|
||||
# but doesn't cause any failures. Keep it simple and use the same
|
||||
# flags in both cases.
|
||||
# Local build cases: "make kselftest", "make -C" - headers are installed
|
||||
# in the default INSTALL_HDR_PATH usr/include.
|
||||
khdr:
|
||||
ifeq (1,$(DEFAULT_INSTALL_HDR_PATH))
|
||||
make --no-builtin-rules ARCH=$(ARCH) -C $(top_srcdir) headers_install
|
||||
else
|
||||
make --no-builtin-rules INSTALL_HDR_PATH=$$BUILD/usr \
|
||||
ARCH=$(ARCH) -C $(top_srcdir) headers_install
|
||||
endif
|
||||
|
||||
all: khdr
|
||||
@for TARGET in $(TARGETS); do \
|
||||
BUILD_TARGET=$$BUILD/$$TARGET; \
|
||||
mkdir $$BUILD_TARGET -p; \
|
||||
|
@ -173,4 +209,4 @@ clean:
|
|||
make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
|
||||
done;
|
||||
|
||||
.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean
|
||||
.PHONY: khdr all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean
|
||||
|
|
|
@ -3,7 +3,16 @@
|
|||
CC := $(CROSS_COMPILE)gcc
|
||||
|
||||
ifeq (0,$(MAKELEVEL))
|
||||
OUTPUT := $(shell pwd)
|
||||
ifneq ($(O),)
|
||||
OUTPUT := $(O)
|
||||
else
|
||||
ifneq ($(KBUILD_OUTPUT),)
|
||||
OUTPUT := $(KBUILD_OUTPUT)
|
||||
else
|
||||
OUTPUT := $(shell pwd)
|
||||
DEFAULT_INSTALL_HDR_PATH := 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# The following are built by lib.mk common compile rules.
|
||||
|
@ -21,9 +30,34 @@ top_srcdir ?= ../../../..
|
|||
include $(top_srcdir)/scripts/subarch.include
|
||||
ARCH ?= $(SUBARCH)
|
||||
|
||||
# set default goal to all, so make without a target runs all, even when
|
||||
# all isn't the first target in the file.
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
# Invoke headers install with --no-builtin-rules to avoid circular
|
||||
# dependency in "make kselftest" case. In this case, second level
|
||||
# make inherits builtin-rules which will use the rule generate
|
||||
# Makefile.o and runs into
|
||||
# "Circular Makefile.o <- prepare dependency dropped."
|
||||
# and headers_install fails and test compile fails.
|
||||
# O= KBUILD_OUTPUT cases don't run into this error, since main Makefile
|
||||
# invokes them as sub-makes and --no-builtin-rules is not necessary,
|
||||
# but doesn't cause any failures. Keep it simple and use the same
|
||||
# flags in both cases.
|
||||
# Note that the support to install headers from lib.mk is necessary
|
||||
# when test Makefile is run directly with "make -C".
|
||||
# When local build is done, headers are installed in the default
|
||||
# INSTALL_HDR_PATH usr/include.
|
||||
.PHONY: khdr
|
||||
khdr:
|
||||
make ARCH=$(ARCH) -C $(top_srcdir) headers_install
|
||||
ifndef KSFT_KHDR_INSTALL_DONE
|
||||
ifeq (1,$(DEFAULT_INSTALL_HDR_PATH))
|
||||
make --no-builtin-rules ARCH=$(ARCH) -C $(top_srcdir) headers_install
|
||||
else
|
||||
make --no-builtin-rules INSTALL_HDR_PATH=$$OUTPUT/usr \
|
||||
ARCH=$(ARCH) -C $(top_srcdir) headers_install
|
||||
endif
|
||||
endif
|
||||
|
||||
all: khdr $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue