selftests: gpio: fix Makefile

Message ID 20170324115527.26472-1-fathi.boudra@linaro.org
State New
Headers show

Commit Message

Fathi Boudra March 24, 2017, 11:55 a.m.
* 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 <fathi.boudra@linaro.org>

---
 tools/testing/selftests/gpio/Makefile | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

-- 
2.11.0

Comments

Michael Ellerman March 28, 2017, 3 a.m. | #1
Fathi Boudra <fathi.boudra@linaro.org> 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
Fathi Boudra March 28, 2017, 4:15 a.m. | #2
On 28 March 2017 at 06:00, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Fathi Boudra <fathi.boudra@linaro.org> 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

Patch hide | download patch | download mbox

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)