Message ID | 20240916075655.4117151-1-anders.roxell@linaro.org |
---|---|
State | New |
Headers | show |
Series | selftests: Makefile: create OUTPUT dir | expand |
On 9/16/24 01:56, Anders Roxell wrote: > When cross building kselftest out-of-tree the following issue can be > seen: > > [...] > make[4]: Entering directory > '/src/kernel/linux/tools/testing/selftests/net/lib' > CC csum > /usr/lib/gcc-cross/aarch64-linux-gnu/13/../../../../aarch64-linux-gnu/bin/ld: > cannot open output file /tmp/build/kselftest/net/lib/csum: No such > file or directory > collect2: error: ld returned 1 exit status > [...] > > Create the output build directory before building the targets, solves > this issue with building 'net/lib/csum'. > > Suggested-by: Jakub Kicinski <kuba@kernel.org> > Signed-off-by: Anders Roxell <anders.roxell@linaro.org> > --- > tools/testing/selftests/Makefile | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile > index b38199965f99..05c143bcff6a 100644 > --- a/tools/testing/selftests/Makefile > +++ b/tools/testing/selftests/Makefile > @@ -261,6 +261,7 @@ ifdef INSTALL_PATH > @ret=1; \ > for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ > BUILD_TARGET=$$BUILD/$$TARGET; \ > + mkdir -p $$BUILD_TARGET; \ > $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ > INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ > SRC_PATH=$(shell readlink -e $$(pwd)) \ Doesn't the "all" target mkdir work for this case? Why do we need another mkdir here? thanks, -- Shuah
On Thu, 19 Sep 2024 09:51:47 -0600 Shuah Khan wrote: > > @@ -261,6 +261,7 @@ ifdef INSTALL_PATH > > @ret=1; \ > > for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ > > BUILD_TARGET=$$BUILD/$$TARGET; \ > > + mkdir -p $$BUILD_TARGET; \ > > $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ > > INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ > > SRC_PATH=$(shell readlink -e $$(pwd)) \ > > Doesn't the "all" target mkdir work for this case? Why do we need another mkdir here? I was wondering about that, too. Looks like the code from the all target is copy/pasted in the install target except the mkdir line. Best fix would be to make the dependency work, I don't understand why it doesn't already, tho.
On 9/20/24 04:38, Jakub Kicinski wrote: > On Thu, 19 Sep 2024 09:51:47 -0600 Shuah Khan wrote: >>> @@ -261,6 +261,7 @@ ifdef INSTALL_PATH >>> @ret=1; \ >>> for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ >>> BUILD_TARGET=$$BUILD/$$TARGET; \ >>> + mkdir -p $$BUILD_TARGET; \ >>> $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ >>> INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ >>> SRC_PATH=$(shell readlink -e $$(pwd)) \ >> >> Doesn't the "all" target mkdir work for this case? Why do we need another mkdir here? > > I was wondering about that, too. Looks like the code from the all > target is copy/pasted in the install target except the mkdir line. > Best fix would be to make the dependency work, I don't understand > why it doesn't already, tho. I think this could be the issue: net main Makefile doesn't have handling for subdirs. It looks like the way this is handled is by adding an entry to the main Makefile: TARGETS += net/af_unix TARGETS += net/forwarding TARGETS += net/hsr TARGETS += net/mptcp TARGETS += net/openvswitch TARGETS += net/tcp_ao TARGETS += net/netfilter So the solution would be similar adding net/lib to the main Makefile. Anders, can you try the above and see if it works. Another issue - lib/Makefile TEST_GEN_FILES += csum needs to be TEST_GEN_FILES = csum thanks, -- Shuah
On Wed, 25 Sept 2024 at 19:26, Shuah Khan <skhan@linuxfoundation.org> wrote: > > On 9/20/24 04:38, Jakub Kicinski wrote: > > On Thu, 19 Sep 2024 09:51:47 -0600 Shuah Khan wrote: > >>> @@ -261,6 +261,7 @@ ifdef INSTALL_PATH > >>> @ret=1; \ > >>> for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ > >>> BUILD_TARGET=$$BUILD/$$TARGET; \ > >>> + mkdir -p $$BUILD_TARGET; \ > >>> $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ > >>> INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ > >>> SRC_PATH=$(shell readlink -e $$(pwd)) \ > >> > >> Doesn't the "all" target mkdir work for this case? Why do we need another mkdir here? > > > > I was wondering about that, too. Looks like the code from the all > > target is copy/pasted in the install target except the mkdir line. > > Best fix would be to make the dependency work, I don't understand > > why it doesn't already, tho. > > I think this could be the issue: > > net main Makefile doesn't have handling for subdirs. It looks > like the way this is handled is by adding an entry to the main > Makefile: > > TARGETS += net/af_unix > TARGETS += net/forwarding > TARGETS += net/hsr > TARGETS += net/mptcp > TARGETS += net/openvswitch > TARGETS += net/tcp_ao > TARGETS += net/netfilter > > So the solution would be similar adding net/lib to the main > Makefile. > > Anders, can you try the above and see if it works. Sadly that didn't help. > > Another issue - lib/Makefile > TEST_GEN_FILES += csum needs to be TEST_GEN_FILES = csum > > thanks, > -- Shuah >
On 10/2/24 00:15, Anders Roxell wrote: > On Wed, 25 Sept 2024 at 19:26, Shuah Khan <skhan@linuxfoundation.org> wrote: >> >> On 9/20/24 04:38, Jakub Kicinski wrote: >>> On Thu, 19 Sep 2024 09:51:47 -0600 Shuah Khan wrote: >>>>> @@ -261,6 +261,7 @@ ifdef INSTALL_PATH >>>>> @ret=1; \ >>>>> for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ >>>>> BUILD_TARGET=$$BUILD/$$TARGET; \ >>>>> + mkdir -p $$BUILD_TARGET; \ >>>>> $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ >>>>> INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ >>>>> SRC_PATH=$(shell readlink -e $$(pwd)) \ >>>> >>>> Doesn't the "all" target mkdir work for this case? Why do we need another mkdir here? >>> >>> I was wondering about that, too. Looks like the code from the all >>> target is copy/pasted in the install target except the mkdir line. >>> Best fix would be to make the dependency work, I don't understand >>> why it doesn't already, tho. >> >> I think this could be the issue: >> >> net main Makefile doesn't have handling for subdirs. It looks >> like the way this is handled is by adding an entry to the main >> Makefile: >> >> TARGETS += net/af_unix >> TARGETS += net/forwarding >> TARGETS += net/hsr >> TARGETS += net/mptcp >> TARGETS += net/openvswitch >> TARGETS += net/tcp_ao >> TARGETS += net/netfilter >> >> So the solution would be similar adding net/lib to the main >> Makefile. >> >> Anders, can you try the above and see if it works. > > Sadly that didn't help. > Okay. I tried the following: make kselftest-all TARGETS=net/lib O=/tmp I see /tmp/kselftest/net/lib/csum Can you give me the exact command you are running? The following from selftests/Makefile should take care of this. # Networking tests want the net/lib target, include it automatically ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),) ifeq ($(filter net/lib,$(TARGETS)),) INSTALL_DEP_TARGETS := net/lib endif endif thanks, -- Shuah
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index b38199965f99..05c143bcff6a 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -261,6 +261,7 @@ ifdef INSTALL_PATH @ret=1; \ for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ + mkdir -p $$BUILD_TARGET; \ $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \ INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \ SRC_PATH=$(shell readlink -e $$(pwd)) \
When cross building kselftest out-of-tree the following issue can be seen: [...] make[4]: Entering directory '/src/kernel/linux/tools/testing/selftests/net/lib' CC csum /usr/lib/gcc-cross/aarch64-linux-gnu/13/../../../../aarch64-linux-gnu/bin/ld: cannot open output file /tmp/build/kselftest/net/lib/csum: No such file or directory collect2: error: ld returned 1 exit status [...] Create the output build directory before building the targets, solves this issue with building 'net/lib/csum'. Suggested-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Anders Roxell <anders.roxell@linaro.org> --- tools/testing/selftests/Makefile | 1 + 1 file changed, 1 insertion(+)