externals: Track upstream libusb
We can place the external in an inner folder and manage the custom files necessary to integrate it with CMake directly. This allows us to directly change how we use it with our build system, as opposed to needing to change a fork.
This commit is contained in:
parent
58ee9b4197
commit
045255a0a0
|
@ -16,6 +16,9 @@
|
||||||
[submodule "libressl"]
|
[submodule "libressl"]
|
||||||
path = externals/libressl
|
path = externals/libressl
|
||||||
url = https://github.com/citra-emu/ext-libressl-portable.git
|
url = https://github.com/citra-emu/ext-libressl-portable.git
|
||||||
|
[submodule "libusb"]
|
||||||
|
path = externals/libusb/libusb
|
||||||
|
url = https://github.com/libusb/libusb.git
|
||||||
[submodule "discord-rpc"]
|
[submodule "discord-rpc"]
|
||||||
path = externals/discord-rpc
|
path = externals/discord-rpc
|
||||||
url = https://github.com/discordapp/discord-rpc.git
|
url = https://github.com/discordapp/discord-rpc.git
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
add_library(usb STATIC EXCLUDE_FROM_ALL
|
||||||
|
libusb/libusb/core.c
|
||||||
|
libusb/libusb/core.c
|
||||||
|
libusb/libusb/descriptor.c
|
||||||
|
libusb/libusb/hotplug.c
|
||||||
|
libusb/libusb/io.c
|
||||||
|
libusb/libusb/strerror.c
|
||||||
|
libusb/libusb/sync.c
|
||||||
|
)
|
||||||
|
set_target_properties(usb PROPERTIES VERSION 1.0.23)
|
||||||
|
if(WIN32)
|
||||||
|
target_include_directories(usb
|
||||||
|
BEFORE
|
||||||
|
PUBLIC
|
||||||
|
libusb/libusb
|
||||||
|
|
||||||
|
PRIVATE
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT MINGW)
|
||||||
|
target_include_directories(usb BEFORE PRIVATE libusb/msvc)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
target_include_directories(usb
|
||||||
|
# turns out other projects also have "config.h", so make sure the
|
||||||
|
# LibUSB one comes first
|
||||||
|
BEFORE
|
||||||
|
|
||||||
|
PUBLIC
|
||||||
|
libusb/libusb
|
||||||
|
|
||||||
|
PRIVATE
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32 OR CYGWIN)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/threads_windows.c
|
||||||
|
libusb/libusb/os/windows_winusb.c
|
||||||
|
libusb/libusb/os/windows_usbdk.c
|
||||||
|
libusb/libusb/os/windows_nt_common.c
|
||||||
|
)
|
||||||
|
set(OS_WINDOWS TRUE)
|
||||||
|
elseif(APPLE)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/darwin_usb.c
|
||||||
|
)
|
||||||
|
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit)
|
||||||
|
find_library(OBJC_LIBRARY objc)
|
||||||
|
target_link_libraries(usb PRIVATE
|
||||||
|
${COREFOUNDATION_LIBRARY}
|
||||||
|
${IOKIT_LIBRARY}
|
||||||
|
${OBJC_LIBRARY}
|
||||||
|
)
|
||||||
|
set(OS_DARWIN TRUE)
|
||||||
|
elseif(ANDROID)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/linux_usbfs.c
|
||||||
|
libusb/libusb/os/linux_netlink.c
|
||||||
|
)
|
||||||
|
find_library(LOG_LIBRARY log)
|
||||||
|
target_link_libraries(usb PRIVATE ${LOG_LIBRARY})
|
||||||
|
set(OS_LINUX TRUE)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/linux_usbfs.c
|
||||||
|
)
|
||||||
|
find_package(Libudev)
|
||||||
|
if(LIBUDEV_FOUND)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/linux_udev.c
|
||||||
|
)
|
||||||
|
target_link_libraries(usb PRIVATE "${LIBUDEV_LIBRARIES}")
|
||||||
|
target_include_directories(usb PRIVATE "${LIBUDEV_INCLUDE_DIR}")
|
||||||
|
set(HAVE_LIBUDEV TRUE)
|
||||||
|
set(USE_UDEV TRUE)
|
||||||
|
else()
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/linux_netlink.c
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
set(OS_LINUX TRUE)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/netbsd_usb.c
|
||||||
|
)
|
||||||
|
set(OS_NETBSD TRUE)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/openbsd_usb.c
|
||||||
|
)
|
||||||
|
set(OS_OPENBSD TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/poll_posix.c
|
||||||
|
libusb/libusb/os/threads_posix.c
|
||||||
|
)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
if(THREADS_HAVE_PTHREAD_ARG)
|
||||||
|
target_compile_options(usb PUBLIC "-pthread")
|
||||||
|
endif()
|
||||||
|
if(CMAKE_THREAD_LIBS_INIT)
|
||||||
|
target_link_libraries(usb PRIVATE "${CMAKE_THREAD_LIBS_INIT}")
|
||||||
|
endif()
|
||||||
|
set(THREADS_POSIX TRUE)
|
||||||
|
elseif(WIN32)
|
||||||
|
target_sources(usb PRIVATE
|
||||||
|
libusb/libusb/os/poll_windows.c
|
||||||
|
libusb/libusb/os/threads_windows.c
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
include(CheckIncludeFiles)
|
||||||
|
include(CheckTypeSize)
|
||||||
|
check_include_files(asm/types.h HAVE_ASM_TYPES_H)
|
||||||
|
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
|
||||||
|
check_include_files(linux/filter.h HAVE_LINUX_FILTER_H)
|
||||||
|
check_include_files(linux/netlink.h HAVE_LINUX_NETLINK_H)
|
||||||
|
check_include_files(poll.h HAVE_POLL_H)
|
||||||
|
check_include_files(signal.h HAVE_SIGNAL_H)
|
||||||
|
check_include_files(strings.h HAVE_STRINGS_H)
|
||||||
|
check_type_size("struct timespec" STRUCT_TIMESPEC)
|
||||||
|
check_function_exists(syslog HAVE_SYSLOG_FUNC)
|
||||||
|
check_include_files(syslog.h HAVE_SYSLOG_H)
|
||||||
|
check_include_files(sys/socket.h HAVE_SYS_SOCKET_H)
|
||||||
|
check_include_files(sys/time.h HAVE_SYS_TIME_H)
|
||||||
|
check_include_files(sys/types.h HAVE_SYS_TYPES_H)
|
||||||
|
|
||||||
|
set(CMAKE_EXTRA_INCLUDE_FILES poll.h)
|
||||||
|
check_type_size("nfds_t" nfds_t)
|
||||||
|
unset(CMAKE_EXTRA_INCLUDE_FILES)
|
||||||
|
if(HAVE_NFDS_T)
|
||||||
|
set(POLL_NFDS_TYPE "nfds_t")
|
||||||
|
else()
|
||||||
|
set(POLL_NFDS_TYPE "unsigned int")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
check_include_files(sys/timerfd.h USBI_TIMERFD_AVAILABLE)
|
||||||
|
|
||||||
|
|
||||||
|
configure_file(config.h.in config.h)
|
|
@ -0,0 +1,90 @@
|
||||||
|
/* Default visibility */
|
||||||
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
#define DEFAULT_VISIBILITY __attribute__((visibility("default")))
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define DEFAULT_VISIBILITY __declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Start with debug message logging enabled */
|
||||||
|
#undef ENABLE_DEBUG_LOGGING
|
||||||
|
|
||||||
|
/* Message logging */
|
||||||
|
#undef ENABLE_LOGGING
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <asm/types.h> header file. */
|
||||||
|
#cmakedefine HAVE_ASM_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
#cmakedefine HAVE_GETTIMEOFDAY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `udev' library (-ludev). */
|
||||||
|
#cmakedefine HAVE_LIBUDEV 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/filter.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_FILTER_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/netlink.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_NETLINK_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <poll.h> header file. */
|
||||||
|
#cmakedefine HAVE_POLL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <signal.h> header file. */
|
||||||
|
#cmakedefine HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#cmakedefine HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct timespec'. */
|
||||||
|
#cmakedefine HAVE_STRUCT_TIMESPEC 1
|
||||||
|
|
||||||
|
/* syslog() function available */
|
||||||
|
#cmakedefine HAVE_SYSLOG_FUNC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <syslog.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYSLOG_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_TIME_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Darwin backend */
|
||||||
|
#cmakedefine OS_DARWIN 1
|
||||||
|
|
||||||
|
/* Linux backend */
|
||||||
|
#cmakedefine OS_LINUX 1
|
||||||
|
|
||||||
|
/* NetBSD backend */
|
||||||
|
#cmakedefine OS_NETBSD 1
|
||||||
|
|
||||||
|
/* OpenBSD backend */
|
||||||
|
#cmakedefine OS_OPENBSD 1
|
||||||
|
|
||||||
|
/* Windows backend */
|
||||||
|
#cmakedefine OS_WINDOWS 1
|
||||||
|
|
||||||
|
/* type of second poll() argument */
|
||||||
|
#define POLL_NFDS_TYPE @POLL_NFDS_TYPE@
|
||||||
|
|
||||||
|
/* Use POSIX Threads */
|
||||||
|
#cmakedefine THREADS_POSIX
|
||||||
|
|
||||||
|
/* timerfd headers available */
|
||||||
|
#cmakedefine USBI_TIMERFD_AVAILABLE 1
|
||||||
|
|
||||||
|
/* Enable output to system log */
|
||||||
|
#define USE_SYSTEM_LOGGING_FACILITY 1
|
||||||
|
|
||||||
|
/* Use udev for device enumeration/hotplug */
|
||||||
|
#cmakedefine USE_UDEV 1
|
||||||
|
|
||||||
|
/* Use GNU extensions */
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
/* Oldest Windows version supported */
|
||||||
|
#define WINVER 0x0501
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit e782eeb2514266f6738e242cdcb18e3ae1ed06fa
|
Reference in New Issue