From 122fdf48b25250a010e31749342d2f13a3b90c05 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sun, 17 Jun 2018 13:40:41 -0700 Subject: [PATCH] libuv: Hook up to build. --- shared/javacpp/setupBuild.gradle | 3 + wpiutil/CMakeLists.txt | 62 ++++++++++++++++++- wpiutil/build.gradle | 103 +++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) diff --git a/shared/javacpp/setupBuild.gradle b/shared/javacpp/setupBuild.gradle index 21d63dc55b..89e0ffe10b 100644 --- a/shared/javacpp/setupBuild.gradle +++ b/shared/javacpp/setupBuild.gradle @@ -43,6 +43,9 @@ model { it.buildable = false return } + if (project.hasProperty('extraSetup')) { + extraSetup(it) + } } } "${nativeName}"(NativeLibrarySpec) { diff --git a/wpiutil/CMakeLists.txt b/wpiutil/CMakeLists.txt index d409461df9..99fcc97293 100644 --- a/wpiutil/CMakeLists.txt +++ b/wpiutil/CMakeLists.txt @@ -23,20 +23,80 @@ find_package(Threads REQUIRED) file(GLOB_RECURSE wpiutil_native_src src/main/native/cpp/*.cpp) -add_library(wpiutil ${wpiutil_native_src}) +file(GLOB uv_native_src src/main/native/libuv/*.cpp) + +file(GLOB uv_windows_src src/main/native/libuv/win/*.cpp) + +set(uv_unix_src + src/main/native/libuv/unix/async.cpp + src/main/native/libuv/unix/core.cpp + src/main/native/libuv/unix/dl.cpp + src/main/native/libuv/unix/fs.cpp + src/main/native/libuv/unix/getaddrinfo.cpp + src/main/native/libuv/unix/getnameinfo.cpp + src/main/native/libuv/unix/loop-watcher.cpp + src/main/native/libuv/unix/loop.cpp + src/main/native/libuv/unix/pipe.cpp + src/main/native/libuv/unix/poll.cpp + src/main/native/libuv/unix/process.cpp + src/main/native/libuv/unix/signal.cpp + src/main/native/libuv/unix/stream.cpp + src/main/native/libuv/unix/tcp.cpp + src/main/native/libuv/unix/thread.cpp + src/main/native/libuv/unix/timer.cpp + src/main/native/libuv/unix/tty.cpp + src/main/native/libuv/unix/udp.cpp +) + +set(uv_darwin_src + src/main/native/libuv/unix/bsd-ifaddrs.cpp + src/main/native/libuv/unix/darwin.cpp + src/main/native/libuv/unix/darwin-proctitle.cpp + src/main/native/libuv/unix/fsevents.cpp + src/main/native/libuv/unix/kqueue.cpp + src/main/native/libuv/unix/proctitle.cpp +) + +set(uv_linux_src + src/main/native/libuv/unix/linux-core.cpp + src/main/native/libuv/unix/linux-inotify.cpp + src/main/native/libuv/unix/linux-syscalls.cpp + src/main/native/libuv/unix/procfs-exepath.cpp + src/main/native/libuv/unix/proctitle.cpp + src/main/native/libuv/unix/sysinfo-loadavg.cpp + src/main/native/libuv/unix/sysinfo-memory.cpp +) + +add_library(wpiutil ${wpiutil_native_src} ${uv_native_src}) set_property(TARGET wpiutil PROPERTY FOLDER "libraries") if(NOT MSVC) + target_sources(wpiutil PRIVATE ${uv_unix_src}) + if (APPLE) + target_sources(wpiutil PRIVATE ${uv_darwin_src}) + else() + target_sources(wpiutil PRIVATE ${uv_linux_src}) + endif() target_compile_options(wpiutil PUBLIC -std=c++14 -Wall -pedantic -Wextra -Wno-unused-parameter) + target_compile_options(wpiutil PRIVATE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE) else() + target_sources(wpiutil PRIVATE ${uv_windows_src}) target_compile_options(wpiutil PUBLIC -DNOMINMAX) + target_compile_options(wpiutil PRIVATE -D_CRT_SECURE_NO_WARNINGS) + if(BUILD_SHARED_LIBS) + target_compile_options(wpiutil PRIVATE -DBUILDING_UV_SHARED) + endif() endif() target_link_libraries(wpiutil Threads::Threads) target_include_directories(wpiutil PUBLIC $ $) +target_include_directories(wpiutil PRIVATE + src/main/native/libuv + src/main/native/include/uv-private +) install(TARGETS wpiutil EXPORT wpiutil DESTINATION "${main_lib_dest}") install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpiutil") diff --git a/wpiutil/build.gradle b/wpiutil/build.gradle index f5b391d226..67ddd86c00 100644 --- a/wpiutil/build.gradle +++ b/wpiutil/build.gradle @@ -1,6 +1,109 @@ ext { nativeName = 'wpiutil' devMain = 'edu.wpi.first.wpiutil.DevMain' + extraSetup = { + it.sources { + libuvCpp(CppSourceSet) { + source { + srcDirs 'src/main/native/libuv' + include '*.cpp' + } + exportedHeaders { + srcDirs 'src/main/native/include', 'src/main/native/include/uv-private', 'src/main/native/libuv' + } + } + } + if (it.targetPlatform.operatingSystem.name != 'windows') { + it.cppCompiler.define '_LARGEFILE_SOURCE' + it.cppCompiler.define '_FILE_OFFSET_BITS=64' + it.cppCompiler.define '_GNU_SOURCE' + it.sources { + libuvUnixCpp(CppSourceSet) { + source { + srcDirs 'src/main/native/libuv/unix' + includes = [ + 'async.cpp', + 'core.cpp', + 'dl.cpp', + 'fs.cpp', + 'getaddrinfo.cpp', + 'getnameinfo.cpp', + 'loop-watcher.cpp', + 'loop.cpp', + 'pipe.cpp', + 'poll.cpp', + 'process.cpp', + 'signal.cpp', + 'stream.cpp', + 'tcp.cpp', + 'thread.cpp', + 'timer.cpp', + 'tty.cpp', + 'udp.cpp', + ] + } + exportedHeaders { + srcDirs 'src/main/native/include', 'src/main/native/include/uv-private', 'src/main/native/libuv' + } + } + } + } + if (it.targetPlatform.operatingSystem.name == 'windows') { + if (it in SharedLibraryBinarySpec) { + it.cppCompiler.define 'BUILDING_UV_SHARED' + } + it.sources { + libuvWindowsCpp(CppSourceSet) { + source { + srcDirs 'src/main/native/libuv/win' + include '*.cpp' + } + exportedHeaders { + srcDirs 'src/main/native/include', 'src/main/native/include/uv-private', 'src/main/native/libuv' + } + } + } + } else if (it.targetPlatform.operatingSystem.name == 'osx') { + it.sources { + libuvMacCpp(CppSourceSet) { + source { + srcDirs 'src/main/native/libuv/unix' + includes = [ + 'bsd-ifaddrs.cpp', + 'darwin.cpp', + 'darwin-proctitle.cpp', + 'fsevents.cpp', + 'kqueue.cpp', + 'proctitle.cpp' + ] + } + exportedHeaders { + srcDirs 'src/main/native/include', 'src/main/native/include/uv-private', 'src/main/native/libuv' + } + } + } + } else { + it.sources { + libuvLinuxCpp(CppSourceSet) { + source { + srcDirs 'src/main/native/libuv/unix' + includes = [ + 'linux-core.cpp', + 'linux-inotify.cpp', + 'linux-syscalls.cpp', + 'procfs-exepath.cpp', + 'proctitle.cpp', + 'sysinfo-loadavg.cpp', + 'sysinfo-memory.cpp', + ] + } + exportedHeaders { + srcDirs 'src/main/native/include', 'src/main/native/include/uv-private', 'src/main/native/libuv' + } + } + } + } + } } apply from: "${rootDir}/shared/javacpp/setupBuild.gradle"