Skip to content

Commit

Permalink
build(jni): try to improve boost build
Browse files Browse the repository at this point in the history
  • Loading branch information
WhiredPlanck authored and Bambooin committed Nov 19, 2023
1 parent 0ba4060 commit 46d9ecc
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 104 deletions.
14 changes: 1 addition & 13 deletions app/src/main/jni/CMakeLists.txt
Expand Up @@ -16,19 +16,7 @@ include(Iconv)
# workaround for boost install
install(TARGETS iconv EXPORT boost_locale-targets)

set(BOOST_VER 1.83.0)
if(NOT EXISTS ${CMAKE_SOURCE_DIR}/boost)
file(
DOWNLOAD "https://github.com/boostorg/boost/releases/download/boost-${BOOST_VER}/boost-${BOOST_VER}.tar.xz" boost-${BOOST_VER}.tar.xz
EXPECTED_HASH SHA256=c5a0688e1f0c05f354bbd0b32244d36085d9ffc9f932e8a18983a9908096f614
SHOW_PROGRESS
)
file(ARCHIVE_EXTRACT INPUT boost-${BOOST_VER}.tar.xz
DESTINATION ${CMAKE_SOURCE_DIR}
)
file(RENAME "boost-${BOOST_VER}" boost)
endif()
add_subdirectory(boost)
include(Boost)

option(WITH_GFLAGS "Use gflags" OFF)
option(WITH_GTEST "Use googletest" OFF)
Expand Down
35 changes: 35 additions & 0 deletions app/src/main/jni/cmake/Boost.cmake
@@ -0,0 +1,35 @@
set(BOOST_VER 1.83.0)

if(NOT EXISTS "${CMAKE_SOURCE_DIR}/boost")
message(STATUS "Downloading Boost ${BOOST_VER} ......")
file(
DOWNLOAD "https://github.com/boostorg/boost/releases/download/boost-${BOOST_VER}/boost-${BOOST_VER}.tar.xz" boost-${BOOST_VER}.tar.xz
EXPECTED_HASH SHA256=c5a0688e1f0c05f354bbd0b32244d36085d9ffc9f932e8a18983a9908096f614
SHOW_PROGRESS
)
file(ARCHIVE_EXTRACT INPUT boost-${BOOST_VER}.tar.xz
DESTINATION ${CMAKE_SOURCE_DIR}
)
file(RENAME "boost-${BOOST_VER}" boost)
endif()

set(BOOST_INCLUDE_LIBRARIES
algorithm
crc
date_time
dll
interprocess
range
regex
scope_exit
signals2
utility
uuid
# librime-charcode
locale
asio
# librime-lua
optional
)

add_subdirectory(boost EXCLUDE_FROM_ALL)
94 changes: 11 additions & 83 deletions app/src/main/jni/cmake/FindBoost.cmake
@@ -1,91 +1,19 @@
set(Boost_FOUND TRUE)

# libraries that can't compile
set(BOOST_EXCLUDE_LIBRARIES "context;coroutine;fiber" CACHE STRING "" FORCE)
list(TRANSFORM BOOST_INCLUDE_LIBRARIES
PREPEND Boost::
OUTPUT_VARIABLE Boost_LIBRARIES
)

# we have to specify all libraries and their dependencies manually for Boost_LIBRARIES
# you can dump them from boost/tools/cmake/include/BoostRoot.cmake ${__boost_include_libraries}
set(BOOST_INSTALLED_LIBRARIES
# used by librime directly:
"algorithm"
"any"
"crc"
"date_time"
"dll"
"filesystem"
"format"
"interprocess"
"iostreams"
"lexical_cast"
"optional"
"range"
"regex"
"scope_exit"
"signals2"
"utility"
"uuid"
# for librime-charcode:
"locale"
# dumped from ${__boost_include_libraries}:
"array"
"assert"
"bind"
"concept_check"
"config"
"core"
"coroutine"
"describe"
"exception"
"function"
"iterator"
"mpl"
"static_assert"
"throw_exception"
"tuple"
"type_traits"
"unordered"
"type_index"
"integer"
"io"
"numeric_conversion"
"smart_ptr"
"tokenizer"
"winapi"
"move"
"predef"
"spirit"
"system"
"container_hash"
"detail"
"container"
"intrusive"
"preprocessor"
"random"
"conversion"
"typeof"
"parameter"
"variant"
"serialization"
"tti"
"function_types"
"fusion"
"endian"
"phoenix"
"pool"
"proto"
"thread"
"dynamic_bitset"
"mp11"
"atomic"
"chrono"
"align"
"ratio"
"rational"
file(GLOB __boost_installed_libs
LIST_DIRECTORIES true
RELATIVE "${CMAKE_BINARY_DIR}"
"${CMAKE_BINARY_DIR}/boost/libs/*"
)

# see boost/tools/boost_install/BoostConfig.cmake
foreach(comp ${BOOST_INSTALLED_LIBRARIES})
LIST(APPEND Boost_LIBRARIES Boost::${comp})
foreach(__lib ${__boost_installed_libs})
set(__full_dir "${CMAKE_SOURCE_DIR}/${__lib}/include")
list(APPEND Boost_INCLUDE_DIRS "${__full_dir}")
endforeach()

# for librime-charcode
Expand Down
11 changes: 3 additions & 8 deletions app/src/main/jni/cmake/RimePlugins.cmake
Expand Up @@ -7,13 +7,10 @@ set(RIME_PLUGINS
)

# plugins didn't use target_link_libraries, the usage-requirements won't work, include manually
set(PLUGIN_INCLUDES "")
find_package(Boost)
foreach(boost_lib ${Boost_LIBRARIES})
unset(includes)
get_target_property(includes ${boost_lib} INTERFACE_INCLUDE_DIRECTORIES)
list(APPEND PLUGIN_INCLUDES ${includes})
endforeach()
get_target_property(PLUGIN_INCLUDES Boost::boost
INTERFACE_INCLUDE_DIRECTORIES
)
include_directories(${PLUGIN_INCLUDES})

# move plugins
Expand All @@ -39,5 +36,3 @@ execute_process(COMMAND ln -s

# librime-charcode
option(BUILD_WITH_ICU "" OFF)
# TODO: replace with TOUCH after cmake >= 3.12
file(WRITE "${CMAKE_BINARY_DIR}/include/boost/asio.hpp" "")

0 comments on commit 46d9ecc

Please sign in to comment.