Message ID | 1519249964-1630-2-git-send-email-daniel.diaz@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/2] selftests: gpio: restructure Makefile | expand |
On Wed, Feb 21, 2018 at 11:52 PM, Daniel Díaz <daniel.diaz@linaro.org> wrote: > When simply running `make' from the selftests top dir, this > error shows up: > > cc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid gpio-mockup-chardev.c ../../../gpio/gpio-utils.o -lmount -o gpio-mockup-chardev > cc: error: ../../../gpio/gpio-utils.o: No such file or directory > <builtin>: recipe for target 'gpio-mockup-chardev' failed > make[1]: *** [gpio-mockup-chardev] Error 1 > > because the output directory is set to "selftests/gpio" and > all binaries built from ../../../gpio/ end up there. In fact, > they appear as, exempli gratia: > * gpiogpio-event-mon > * gpiogpio-hammer > * gpioinclude/ > * gpiolsgpio > which is wrong, as it's missing directory separator somewhere. > > This patch sets straight the output directory when building > ../../../gpio/ so that binaries don't cross paths. This patch doesn't sound right like previous one. Does selftest infrastructure have it's own build system like tools? Does it use tools' one? What's wrong with the current approach? Why do you need tools in selftests?
Hello! On 02/21/2018 04:09 PM, Andy Shevchenko wrote: > On Wed, Feb 21, 2018 at 11:52 PM, Daniel Díaz <daniel.diaz@linaro.org> wrote: >> When simply running `make' from the selftests top dir, this >> error shows up: >> >> cc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid gpio-mockup-chardev.c ../../../gpio/gpio-utils.o -lmount -o gpio-mockup-chardev >> cc: error: ../../../gpio/gpio-utils.o: No such file or directory >> <builtin>: recipe for target 'gpio-mockup-chardev' failed >> make[1]: *** [gpio-mockup-chardev] Error 1 >> >> because the output directory is set to "selftests/gpio" and >> all binaries built from ../../../gpio/ end up there. In fact, >> they appear as, exempli gratia: >> * gpiogpio-event-mon >> * gpiogpio-hammer >> * gpioinclude/ >> * gpiolsgpio >> which is wrong, as it's missing directory separator somewhere. >> >> This patch sets straight the output directory when building >> ../../../gpio/ so that binaries don't cross paths. > > This patch doesn't sound right like previous one. > Does selftest infrastructure have it's own build system like tools? Yes. See linux/Documentation/dev-tools/kselftest.rst § "Contributing new tests (details)" or linux/tools/testing/selftests/lib.mk itself, which starts saying: # This mimics the top-level Makefile. We do it explicitly here so that this # Makefile can operate with or without the kbuild infrastructure. > Does it use tools' one? No, as far as I can tell. If anything, it uses it only to build inside tools/gpio/ whatever is needed. > What's wrong with the current approach? When building from the tools/testing/selftests/ directory, binaries end up in the current directory (and with an improper name), which is undesirable. The gpio/ selftest fails to build when make'ing from there. This is with current master: /linux/tools/testing/selftests$ make make[1]: Entering directory '/linux/tools/testing/selftests/gpio' [...] gcc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ gpio-mockup-chardev.c ../../../gpio/gpio-utils.o ../../../../usr/include/linux/gpio.h -lmount -I/usr/include/libmount -o gpio-mockup-chardev gcc: error: ../../../gpio/gpio-utils.o: No such file or directory <builtin>: recipe for target 'gpio-mockup-chardev' failed make[1]: *** [gpio-mockup-chardev] Error 1 make[1]: Leaving directory '/linux/tools/testing/selftests/gpio' Makefile:32: recipe for target 'all' failed make: *** [all] Error 2 > Why do you need tools in selftests? I'll leave that to the test author to answer, as this is only a fix in the Makefile, but the only part of tools needed here is tools/gpio/*, for make'ing the object files this test will be built against. Thanks and greetings! Daniel Díaz daniel.diaz@linaro.org -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 02/21/2018 04:04 PM, Daniel Díaz wrote: > Hello! > > > On 02/21/2018 04:09 PM, Andy Shevchenko wrote: >> On Wed, Feb 21, 2018 at 11:52 PM, Daniel Díaz <daniel.diaz@linaro.org> wrote: >>> When simply running `make' from the selftests top dir, this >>> error shows up: >>> >>> cc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid gpio-mockup-chardev.c ../../../gpio/gpio-utils.o -lmount -o gpio-mockup-chardev >>> cc: error: ../../../gpio/gpio-utils.o: No such file or directory >>> <builtin>: recipe for target 'gpio-mockup-chardev' failed >>> make[1]: *** [gpio-mockup-chardev] Error 1 >>> >>> because the output directory is set to "selftests/gpio" and >>> all binaries built from ../../../gpio/ end up there. In fact, >>> they appear as, exempli gratia: >>> * gpiogpio-event-mon >>> * gpiogpio-hammer >>> * gpioinclude/ >>> * gpiolsgpio >>> which is wrong, as it's missing directory separator somewhere. >>> >>> This patch sets straight the output directory when building >>> ../../../gpio/ so that binaries don't cross paths. >> >> This patch doesn't sound right like previous one. >> Does selftest infrastructure have it's own build system like tools? > > Yes. See linux/Documentation/dev-tools/kselftest.rst § "Contributing new > tests (details)" or linux/tools/testing/selftests/lib.mk itself, which > starts saying: > # This mimics the top-level Makefile. We do it explicitly here so that this > # Makefile can operate with or without the kbuild infrastructure. > > >> Does it use tools' one? > > No, as far as I can tell. If anything, it uses it only to build inside > tools/gpio/ whatever is needed. > > >> What's wrong with the current approach? > > When building from the tools/testing/selftests/ directory, binaries end > up in the current directory (and with an improper name), which is > undesirable. The gpio/ selftest fails to build when make'ing from there. > > This is with current master: > /linux/tools/testing/selftests$ make > make[1]: Entering directory '/linux/tools/testing/selftests/gpio' > [...] > gcc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ > gpio-mockup-chardev.c ../../../gpio/gpio-utils.o > ../../../../usr/include/linux/gpio.h -lmount -I/usr/include/libmount -o > gpio-mockup-chardev > gcc: error: ../../../gpio/gpio-utils.o: No such file or directory > <builtin>: recipe for target 'gpio-mockup-chardev' failed > make[1]: *** [gpio-mockup-chardev] Error 1 > make[1]: Leaving directory '/linux/tools/testing/selftests/gpio' > Makefile:32: recipe for target 'all' failed > make: *** [all] Error 2 > > >> Why do you need tools in selftests? > > I'll leave that to the test author to answer, as this is only a fix in > the Makefile, but the only part of tools needed here is tools/gpio/*, > for make'ing the object files this test will be built against. > This test depends on tools/libs built in tools/gpio. The original commit has details on the benefits of adding this test. Adding author to the thread for further comments. 22f6592b23ef8a0c09283bcb13087340721e1154 commit 22f6592b23ef8a0c09283bcb13087340721e1154 Author: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org> thanks, -- Shuah -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/testing/selftests/gpio/Makefile b/tools/testing/selftests/gpio/Makefile index 6890f61..46a131a 100644 --- a/tools/testing/selftests/gpio/Makefile +++ b/tools/testing/selftests/gpio/Makefile @@ -7,7 +7,7 @@ TEST_PROGS := gpio-mockup.sh TEST_FILES := gpio-mockup-sysfs.sh TEST_PROGS_EXTENDED := gpio-mockup-chardev -GPIODIR := ../../../gpio +GPIODIR := $(realpath ../../../gpio) GPIOOBJ := gpio-utils.o GPIOINC := gpio.h @@ -15,7 +15,7 @@ all: $(GPIOINC) $(TEST_PROGS_EXTENDED) override define CLEAN $(RM) $(TEST_PROGS_EXTENDED) - $(MAKE) -C $(GPIODIR) clean + $(MAKE) -C $(GPIODIR) OUTPUT=$(GPIODIR)/ clean endef include ../lib.mk @@ -23,7 +23,7 @@ include ../lib.mk $(TEST_PROGS_EXTENDED): $(GPIODIR)/$(GPIOOBJ) $(GPIODIR)/$(GPIOOBJ): - $(MAKE) -C $(GPIODIR) + $(MAKE) OUTPUT=$(GPIODIR)/ -C $(GPIODIR) $(GPIOINC): $(MAKE) -C ../../../.. headers_install
When simply running `make' from the selftests top dir, this error shows up: cc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid gpio-mockup-chardev.c ../../../gpio/gpio-utils.o -lmount -o gpio-mockup-chardev cc: error: ../../../gpio/gpio-utils.o: No such file or directory <builtin>: recipe for target 'gpio-mockup-chardev' failed make[1]: *** [gpio-mockup-chardev] Error 1 because the output directory is set to "selftests/gpio" and all binaries built from ../../../gpio/ end up there. In fact, they appear as, exempli gratia: * gpiogpio-event-mon * gpiogpio-hammer * gpioinclude/ * gpiolsgpio which is wrong, as it's missing directory separator somewhere. This patch sets straight the output directory when building ../../../gpio/ so that binaries don't cross paths. Signed-off-by: Daniel Díaz <daniel.diaz@linaro.org> --- tools/testing/selftests/gpio/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)