2017-03-24 11:55:44

by Fathi Boudra

[permalink] [raw]
Subject: [PATCH] selftests: gpio: fix Makefile

* Fix hardcoded and misplaced libmount headers. Use pkg-config instead to
figure out CFLAGS/LDLIBS, fixing also their value for cross-compilation.

* Fix the clean target to clean up also gpio-utils.

* Fix gpio-mockup-chardev installation by using TEST_PROGS_EXTENDED
instead of BINARIES which is not supported by the top-level lib.mk.

* Remove dependency to headers_install as we can simply use gpio.h from
user space API directly.

* Improve readibility:
- introduce GPIODIR/GPIOOBJ variables
- split CFLAGS on multiple lines

Signed-off-by: Fathi Boudra <[email protected]>
---
tools/testing/selftests/gpio/Makefile | 29 +++++++++++++++--------------
1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/tools/testing/selftests/gpio/Makefile b/tools/testing/selftests/gpio/Makefile
index 205e4d10e085..714f1f7df04d 100644
--- a/tools/testing/selftests/gpio/Makefile
+++ b/tools/testing/selftests/gpio/Makefile
@@ -1,23 +1,24 @@
+CFLAGS += -O2 -g -std=gnu99 -Wall
+CFLAGS += -I../../../../include/uapi/ -I../../../../include/
+CFLAGS += $(shell pkg-config --cflags mount)
+LDLIBS += $(shell pkg-config --libs mount)

TEST_PROGS := gpio-mockup.sh
-TEST_FILES := gpio-mockup-sysfs.sh $(BINARIES)
-BINARIES := gpio-mockup-chardev
+TEST_PROGS_EXTENDED := gpio-mockup-chardev
+TEST_FILES := gpio-mockup-sysfs.sh
+
+GPIODIR := ../../../gpio
+GPIOOBJ := gpio-utils.o

include ../lib.mk

-all: $(BINARIES)
+all: $(TEST_PROGS_EXTENDED)

clean:
- $(RM) $(BINARIES)
-
-CFLAGS += -O2 -g -std=gnu99 -Wall -I../../../../usr/include/
-LDLIBS += -lmount -I/usr/include/libmount
-
-$(BINARIES): ../../../gpio/gpio-utils.o ../../../../usr/include/linux/gpio.h
-
-../../../gpio/gpio-utils.o:
- make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C ../../../gpio
+ $(RM) $(TEST_PROGS_EXTENDED)
+ $(MAKE) -C $(GPIODIR) clean

-../../../../usr/include/linux/gpio.h:
- make -C ../../../.. headers_install INSTALL_HDR_PATH=$(shell pwd)/../../../../usr/
+$(TEST_PROGS_EXTENDED): $(GPIODIR)/$(GPIOOBJ)

+$(GPIODIR)/$(GPIOOBJ):
+ $(MAKE) -C $(GPIODIR)
--
2.11.0


2017-03-28 03:00:52

by Michael Ellerman

[permalink] [raw]
Subject: Re: [PATCH] selftests: gpio: fix Makefile

Fathi Boudra <[email protected]> writes:
> diff --git a/tools/testing/selftests/gpio/Makefile b/tools/testing/selftests/gpio/Makefile
> index 205e4d10e085..714f1f7df04d 100644
> --- a/tools/testing/selftests/gpio/Makefile
> +++ b/tools/testing/selftests/gpio/Makefile
> @@ -1,23 +1,24 @@
> +CFLAGS += -O2 -g -std=gnu99 -Wall
> +CFLAGS += -I../../../../include/uapi/ -I../../../../include/

Those are kernel headers, they *might* work in userspace but they're not
designed to.

Use the exported headers:

CFLAGS += -I../../../../usr/include


If they're not there, then the user can install them, or fall back to
the system headers.

> +CFLAGS += $(shell pkg-config --cflags mount)
> +LDLIBS += $(shell pkg-config --libs mount)

What if pkg-config isn't installed?

cheers

2017-03-28 04:16:36

by Fathi Boudra

[permalink] [raw]
Subject: Re: [PATCH] selftests: gpio: fix Makefile

On 28 March 2017 at 06:00, Michael Ellerman <[email protected]> wrote:
> Fathi Boudra <[email protected]> writes:
>> diff --git a/tools/testing/selftests/gpio/Makefile b/tools/testing/selftests/gpio/Makefile
>> index 205e4d10e085..714f1f7df04d 100644
>> --- a/tools/testing/selftests/gpio/Makefile
>> +++ b/tools/testing/selftests/gpio/Makefile
>> @@ -1,23 +1,24 @@
>> +CFLAGS += -O2 -g -std=gnu99 -Wall
>> +CFLAGS += -I../../../../include/uapi/ -I../../../../include/
>
> Those are kernel headers, they *might* work in userspace but they're not
> designed to.

except some tests are using uapi and some others are using the
generated headers inconsistently, so it looks like using uapi directly
is allowed. Do you suggest to fix the tests to only use the exported
headers consistently across selftests and add the dependency to
headers_install when necessary?

> Use the exported headers:
>
> CFLAGS += -I../../../../usr/include
>
>
> If they're not there, then the user can install them, or fall back to
> the system headers.
>
>> +CFLAGS += $(shell pkg-config --cflags mount)
>> +LDLIBS += $(shell pkg-config --libs mount)
>
> What if pkg-config isn't installed?

it gives an error (command not found) and gpio test will fail to build
because it won't be able to find the headers or link to libmount
library.

> cheers