Patchwork Explicitly detect libusb-0.1 in the Makefile

login
register
about
Submitter Carl-Daniel Hailfinger
Date 2012-11-18 23:10:57
Message ID <50A96B01.6000302@gmx.net>
Download mbox | patch
Permalink /patch/3793/
State Accepted
Commit r1623
Headers show

Comments

Carl-Daniel Hailfinger - 2012-11-18 23:10:57
Explicitly detect libusb-0.1 in the Makefile

Avoid funny interactions between libpci and libusb detection.
Leave libftdi autodetection alone for now.

Tested on Linux, needs tests on *BSD and preferably OSX/Windows.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Kyösti Mälkki - 2012-11-19 07:02:53
On Mon, 2012-11-19 at 00:10 +0100, Carl-Daniel Hailfinger wrote:
> Explicitly detect libusb-0.1 in the Makefile
> 
> Avoid funny interactions between libpci and libusb detection.
> Leave libftdi autodetection alone for now.
> 

Looks good to me. I only build-tested this on Linux with libusb-compat
and pending "unify dev_status" patches without diving deep into the
subject.

For the Altera USB Blaster, libftdi detection needs to be factored out
of the CONFIG_FT2232_SPI option too.

Kyösti
Carl-Daniel Hailfinger - 2012-11-20 21:07:14
Am 19.11.2012 08:02 schrieb Kyösti Mälkki:
> On Mon, 2012-11-19 at 00:10 +0100, Carl-Daniel Hailfinger wrote:
>> Explicitly detect libusb-0.1 in the Makefile
>>
>> Avoid funny interactions between libpci and libusb detection.
>> Leave libftdi autodetection alone for now.
>>
> Looks good to me. I only build-tested this on Linux with libusb-compat
> and pending "unify dev_status" patches without diving deep into the
> subject.

Thanks for the review.
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
and committed in r1623.

> For the Altera USB Blaster, libftdi detection needs to be factored out
> of the CONFIG_FT2232_SPI option too.

Yes, I'll fix that next.

Regards,
Carl-Daniel

Patch

Index: flashrom-libusb0_Makefile/Makefile
===================================================================
--- flashrom-libusb0_Makefile/Makefile	(Revision 1622)
+++ flashrom-libusb0_Makefile/Makefile	(Arbeitskopie)
@@ -480,6 +480,8 @@ 
 FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'")
 FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)")
 PROGRAMMER_OBJS += ft2232_spi.o
+# We can't set NEED_USB here because that would transform libftdi auto-enabling
+# into a hard requirement for libusb, defeating the purpose of auto-enabling.
 endif
 
 ifeq ($(CONFIG_DUMMY), yes)
@@ -531,8 +533,8 @@ 
 
 ifeq ($(CONFIG_DEDIPROG), yes)
 FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1'
-FEATURE_LIBS += -lusb
 PROGRAMMER_OBJS += dediprog.o
+NEED_USB := yes
 endif
 
 ifeq ($(CONFIG_SATAMV), yes)
@@ -563,23 +565,23 @@ 
 PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o
 ifeq ($(TARGET_OS), NetBSD)
 # The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci.
-LIBS += -lpciutils -lpci
+PCILIBS += -lpciutils -lpci
 # For (i386|x86_64)_iopl(2).
-LIBS += -l$(shell uname -p)
+PCILIBS += -l$(shell uname -p)
 else
 ifeq ($(TARGET_OS), DOS)
 # FIXME There needs to be a better way to do this
 CPPFLAGS += -I../libpci/include
-LIBS += ../libpci/lib/libpci.a
+PCILIBS += ../libpci/lib/libpci.a
 else
-LIBS += -lpci
+PCILIBS += -lpci
 ifeq ($(TARGET_OS), OpenBSD)
 # For (i386|amd64)_iopl(2).
-LIBS += -l$(shell uname -m)
+PCILIBS += -l$(shell uname -m)
 else
 ifeq ($(TARGET_OS), Darwin)
 # DirectHW framework can be found in the DirectHW library.
-LIBS += -framework IOKit -framework DirectHW 
+PCILIBS += -framework IOKit -framework DirectHW 
 else
 endif
 endif
@@ -587,6 +589,12 @@ 
 endif
 endif
 
+ifeq ($(NEED_USB), yes)
+CHECK_LIBUSB0 = yes
+FEATURE_CFLAGS += -D'NEED_USB=1'
+USBLIBS := $(shell pkg-config --libs libusb 2>/dev/null || printf "%s" "-lusb")
+endif
+
 ifeq ($(CONFIG_PRINT_WIKI), yes)
 FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1'
 CLI_OBJS += print_wiki.o
@@ -600,13 +608,13 @@ 
 LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
 OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS)
 
-all: pciutils features $(PROGRAM)$(EXEC_SUFFIX)
+all: hwlibs features $(PROGRAM)$(EXEC_SUFFIX)
 ifeq ($(ARCH), x86)
 	@+$(MAKE) -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX)
 endif
 
 $(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
-	$(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS)
+	$(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) $(PCILIBS) $(USBLIBS)
 
 libflashrom.a: $(LIBFLASHROM_OBJS)
 	$(AR) rcs $@ $^
@@ -679,8 +687,21 @@ 
 endef
 export LIBPCI_TEST
 
+define LIBUSB0_TEST
+#include <usb.h>
+int main(int argc, char **argv)
+{
+	(void) argc;
+	(void) argv;
+	usb_init();
+	return 0;
+}
+endef
+export LIBUSB0_TEST
+
+hwlibs: compiler
+	@printf "" > .libdeps
 ifeq ($(CHECK_LIBPCI), yes)
-pciutils: compiler
 	@printf "Checking for libpci headers... "
 	@echo "$$LIBPCI_TEST" > .test.c
 	@$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null &&		\
@@ -689,20 +710,32 @@ 
 		echo "See README for more information."; echo;			\
 		rm -f .test.c .test.o; exit 1)
 	@printf "Checking if libpci is present and sufficient... "
-	@printf "" > .libdeps
-	@$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null &&				\
+	@$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) >/dev/null &&		\
 		echo "yes." || ( echo "no.";							\
 		printf "Checking if libz+libpci are present and sufficient...";	\
-		$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null &&		\
+		$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) -lz >/dev/null &&	\
 		( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo;	\
 		echo "Please install libpci (package pciutils) and/or libz.";			\
 		echo "See README for more information."; echo;				\
 		rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) )
 	@rm -f .test.c .test.o .test$(EXEC_SUFFIX)
-else
-pciutils: compiler
-	@printf "" > .libdeps
 endif
+ifeq ($(CHECK_LIBUSB0), yes)
+	@printf "Checking for libusb-0.1/libusb-compat headers... "
+	@echo "$$LIBUSB0_TEST" > .test.c
+	@$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null &&		\
+		echo "found." || ( echo "not found."; echo;				\
+		echo "Please install libusb-0.1 headers or libusb-compat headers.";	\
+		echo "See README for more information."; echo;				\
+		rm -f .test.c .test.o; exit 1)
+	@printf "Checking if libusb-0.1 is usable... "
+	@$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(USBLIBS) >/dev/null &&	\
+		echo "yes." || ( echo "no.";						\
+		echo "Please install libusb-0.1 or libusb-compat.";			\
+		echo "See README for more information."; echo;				\
+		rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1)
+	@rm -f .test.c .test.o .test$(EXEC_SUFFIX)
+endif
 
 .features: features
 
@@ -816,6 +849,6 @@ 
 libpayload: clean
 	make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib
 
-.PHONY: all clean distclean compiler pciutils features export tarball dos featuresavailable
+.PHONY: all clean distclean compiler hwlibs features export tarball dos featuresavailable
 
 -include $(OBJS:.o=.d)