i2pd-sys 0.0.6

Raw FFI bindings to a minimal C shim over libi2pd (PurpleI2P/i2pd)
Documentation
Drop the daemon-only libraries, and add a precompiled-header hook.

libi2pdclient and libi2pdlang: upstream links both only into the daemon executable, which
this crate never builds (WITH_BINARY=OFF), and libi2pd includes nothing from either.
update-vendor.sh no longer copies libi2pd_client/ or i18n/ at all, so without this the
configure step fails on the missing source directories.

I2PD_SYS_PCH: off unless build.rs asks for it. Combined with CMAKE_UNITY_BUILD it took the
native build from 58s to 49s and peak compiler RSS from 2.38GB to 2.20GB on a 12-core GCC
14.2 box. The two compose -- batching amortizes header parsing within a batch, the PCH
amortizes it across batches.

diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
index bee7731..736e0b3 100644
--- a/build/CMakeLists.txt
+++ b/build/CMakeLists.txt
@@ -20,8 +20,6 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
 set(CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
 
 set(LIBI2PD_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd)
-set(LIBI2PD_CLIENT_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd_client)
-set(LANG_SRC_DIR ${CMAKE_SOURCE_DIR}/i18n)
 set(DAEMON_SRC_DIR ${CMAKE_SOURCE_DIR}/daemon)
 
 include(Version)
@@ -70,35 +68,16 @@ FILE(GLOB LIBI2PD_SRC ${LIBI2PD_SRC_DIR}/*.cpp)
 add_library(libi2pd ${LIBI2PD_SRC})
 set_target_properties(libi2pd PROPERTIES PREFIX "")
 
-if(WITH_LIBRARY)
-  install(TARGETS libi2pd
-    EXPORT libi2pd
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    COMPONENT Libraries)
-endif()
-
-include_directories(${LIBI2PD_CLIENT_SRC_DIR})
-FILE(GLOB CLIENT_SRC ${LIBI2PD_CLIENT_SRC_DIR}/*.cpp)
-add_library(libi2pdclient ${CLIENT_SRC})
-set_target_properties(libi2pdclient PROPERTIES PREFIX "")
-
-if(WITH_LIBRARY)
-  install(TARGETS libi2pdclient
-    EXPORT libi2pdclient
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    COMPONENT Libraries)
+# i2pd-sys: opt-in precompiled header, benchmarked from build.rs.
+if(I2PD_SYS_PCH)
+  target_precompile_headers(libi2pd PRIVATE
+    <boost/asio.hpp>
+    <memory> <string> <vector> <map> <set> <mutex> <thread> <functional> <sstream>)
 endif()
 
-include_directories(${LANG_SRC_DIR})
-FILE(GLOB LANG_SRC ${LANG_SRC_DIR}/*.cpp)
-add_library(libi2pdlang ${LANG_SRC})
-set_target_properties(libi2pdlang PROPERTIES PREFIX "")
-
 if(WITH_LIBRARY)
-  install(TARGETS libi2pdlang
-    EXPORT libi2pdlang
+  install(TARGETS libi2pd
+    EXPORT libi2pd
     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
     COMPONENT Libraries)
@@ -406,7 +385,7 @@ if(WITH_BINARY)
     set(DL_LIB ${CMAKE_DL_LIBS})
   endif()
 
-  target_link_libraries("${PROJECT_NAME}" libi2pd libi2pdclient libi2pdlang ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto ${MINIUPNPC_LIBRARY} ZLIB::ZLIB Threads::Threads ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES})
+  target_link_libraries("${PROJECT_NAME}" libi2pd ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto ${MINIUPNPC_LIBRARY} ZLIB::ZLIB Threads::Threads ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES})
 
   install(TARGETS "${PROJECT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime)
   set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")