xref: /linux/tools/gpio/Makefile (revision 5d7f3375cd574fc83f0cd30839b21455c0e79ae2)
1# SPDX-License-Identifier: GPL-2.0
2include ../scripts/Makefile.include
3
4bindir ?= /usr/bin
5
6# This will work when gpio is built in tools env. where srctree
7# isn't set and when invoked from selftests build, where srctree
8# is set to ".". building_out_of_srctree is undefined for in srctree
9# builds
10ifeq ($(srctree),)
11update_srctree := 1
12endif
13ifndef building_out_of_srctree
14update_srctree := 1
15endif
16ifeq ($(update_srctree),1)
17srctree := $(patsubst %/,%,$(dir $(CURDIR)))
18srctree := $(patsubst %/,%,$(dir $(srctree)))
19endif
20
21# Do not use make's built-in rules
22# (this improves performance and avoids hard-to-debug behaviour);
23MAKEFLAGS += -r
24
25override CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include
26
27ALL_TARGETS := lsgpio gpio-hammer gpio-event-mon gpio-watch
28ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
29
30all: $(ALL_PROGRAMS)
31
32export srctree OUTPUT CC LD CFLAGS
33include $(srctree)/tools/build/Makefile.include
34
35#
36# We need the following to be outside of kernel tree
37#
38$(OUTPUT)include/linux/gpio.h: ../../include/uapi/linux/gpio.h
39	mkdir -p $(OUTPUT)include/linux 2>&1 || true
40	ln -sf $(CURDIR)/../../include/uapi/linux/gpio.h $@
41
42prepare: $(OUTPUT)include/linux/gpio.h
43
44GPIO_UTILS_IN := $(OUTPUT)gpio-utils-in.o
45$(GPIO_UTILS_IN): prepare FORCE
46	$(Q)$(MAKE) $(build)=gpio-utils
47
48#
49# lsgpio
50#
51LSGPIO_IN := $(OUTPUT)lsgpio-in.o
52$(LSGPIO_IN): prepare FORCE $(OUTPUT)gpio-utils-in.o
53	$(Q)$(MAKE) $(build)=lsgpio
54$(OUTPUT)lsgpio: $(LSGPIO_IN)
55	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
56
57#
58# gpio-hammer
59#
60GPIO_HAMMER_IN := $(OUTPUT)gpio-hammer-in.o
61$(GPIO_HAMMER_IN): prepare FORCE $(OUTPUT)gpio-utils-in.o
62	$(Q)$(MAKE) $(build)=gpio-hammer
63$(OUTPUT)gpio-hammer: $(GPIO_HAMMER_IN)
64	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
65
66#
67# gpio-event-mon
68#
69GPIO_EVENT_MON_IN := $(OUTPUT)gpio-event-mon-in.o
70$(GPIO_EVENT_MON_IN): prepare FORCE $(OUTPUT)gpio-utils-in.o
71	$(Q)$(MAKE) $(build)=gpio-event-mon
72$(OUTPUT)gpio-event-mon: $(GPIO_EVENT_MON_IN)
73	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
74
75#
76# gpio-watch
77#
78GPIO_WATCH_IN := $(OUTPUT)gpio-watch-in.o
79$(GPIO_WATCH_IN): prepare FORCE
80	$(Q)$(MAKE) $(build)=gpio-watch
81$(OUTPUT)gpio-watch: $(GPIO_WATCH_IN)
82	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
83
84clean:
85	rm -f $(ALL_PROGRAMS)
86	rm -rf $(OUTPUT)include
87	find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete -o -name '\.*.cmd' -delete
88
89install: $(ALL_PROGRAMS)
90	install -d -m 755 $(DESTDIR)$(bindir);		\
91	for program in $(ALL_PROGRAMS); do		\
92		install $$program $(DESTDIR)$(bindir);	\
93	done
94
95FORCE:
96
97.PHONY: all install clean FORCE prepare
98