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
@@ -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}")