From 8d0a24c7ec2676b270c61e39286672e447aaf0c8 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Fri, 27 Oct 2023 13:25:25 +0800 Subject: [PATCH 01/70] build: directly use cmake variables in pkgconfig template Also change the condition: only not to install on Android since Android doesn't support pkgconfig yet. --- CMakeLists.txt | 10 ++-------- rime.pc.in | 12 ++++++------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3630168958..0bb98d2eae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,14 +186,8 @@ configure_file( add_custom_target(remove COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|DragonFly|GNU" OR MINGW) - set(prefix "${CMAKE_INSTALL_PREFIX}") - set(exec_prefix "${CMAKE_INSTALL_PREFIX}") - set(bindir "${CMAKE_INSTALL_FULL_BINDIR}") - set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") - set(pkgdatadir "${RIME_DATA_DIR}") - set(pluginsdir "${RIME_PLUGINS_DIR}") - set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") +# Android doesn't support PkgConfig yet +if(NOT ANDROID) configure_file( ${PROJECT_SOURCE_DIR}/rime.pc.in ${PROJECT_BINARY_DIR}/rime.pc diff --git a/rime.pc.in b/rime.pc.in index 1a8c543183..9d08a5b0ff 100644 --- a/rime.pc.in +++ b/rime.pc.in @@ -1,9 +1,9 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -pkgdatadir=@pkgdatadir@ -pluginsdir=@pluginsdir@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ +pkgdatadir=@RIME_DATA_DIR@ +pluginsdir=@RIME_PLUGINS_DIR@ Name: Rime Description: Rime Input Method Engine From accd1ecec6553c72aced88f22e8ab665e98e1015 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Fri, 27 Oct 2023 13:42:54 +0800 Subject: [PATCH 02/70] build: remove redundant *_STATIC flags Also rename option BUILD_STATIC to WITH_STATIC_DEPS to make people more aware of its role --- .github/workflows/windows-build.yml | 2 +- CMakeLists.txt | 16 +++++----------- Dockerfile | 2 +- Makefile | 2 +- build-clang.bat | 2 +- build.bat | 2 +- cmake/FindGflags.cmake | 4 ++-- cmake/FindGlog.cmake | 4 ++-- cmake/FindLevelDb.cmake | 4 ++-- cmake/FindMarisa.cmake | 4 ++-- cmake/FindOpencc.cmake | 4 ++-- cmake/FindYamlCpp.cmake | 4 ++-- 12 files changed, 22 insertions(+), 28 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 460581d5a2..c35aca7c09 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -167,7 +167,7 @@ jobs: -DCMAKE_BUILD_TYPE:STRING=Release \ -DENABLE_LOGGING:BOOL=ON \ -DBUILD_TEST:BOOL=ON \ - -DBUILD_STATIC:BOOL=ON \ + -DWITH_STATIC_DEPS:BOOL=ON \ -DBUILD_SHARED_LIBS:BOOL=ON cmake --build build cmake --install build diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bb98d2eae..bdfa3357df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ include(GNUInstallDirs) option(BUILD_SHARED_LIBS "Build Rime as shared library" ON) option(BUILD_MERGED_PLUGINS "Merge plugins into one Rime library" ON) -option(BUILD_STATIC "Build with dependencies as static libraries" OFF) +option(WITH_STATIC_DEPS "Build with static dependency libraries" OFF) option(BUILD_DATA "Build data for Rime" OFF) option(BUILD_SAMPLE "Build sample Rime plugin" OFF) option(BUILD_TEST "Build and run tests" ON) @@ -45,13 +45,7 @@ if (ENABLE_ASAN) set(CMAKE_SHARED_LINKER_FLAGS "${asan_lflags} ${CMAKE_SHARED_LINKER_FLAGS}") endif() -set(Boost_USE_STATIC_LIBS ${BUILD_STATIC}) -set(Gflags_STATIC ${BUILD_STATIC}) -set(Glog_STATIC ${BUILD_STATIC}) -set(LevelDb_STATIC ${BUILD_STATIC}) -set(Marisa_STATIC ${BUILD_STATIC}) -set(Opencc_STATIC ${BUILD_STATIC}) -set(YamlCpp_STATIC ${BUILD_STATIC}) +set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) set(Boost_USE_MULTITHREADED ON) if(MSVC) @@ -80,7 +74,7 @@ if(ENABLE_LOGGING) if(Glog_FOUND) include_directories(${Glog_INCLUDE_PATH}) endif() - if(Glog_STATIC) + if(WITH_STATIC_DEPS) add_definitions(-DGOOGLE_GLOG_DLL_DECL=) endif() @@ -110,7 +104,7 @@ find_package(YamlCpp REQUIRED) if(YamlCpp_FOUND) include_directories(${YamlCpp_INCLUDE_PATH}) endif() -if(YamlCpp_STATIC) +if(WITH_STATIC_DEPS) add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() @@ -128,7 +122,7 @@ find_package(Opencc REQUIRED) if(Opencc_FOUND) include_directories(${Opencc_INCLUDE_PATH}) endif() -if(Opencc_STATIC) +if(WITH_STATIC_DEPS) add_definitions(-DOpencc_BUILT_AS_STATIC) endif() diff --git a/Dockerfile b/Dockerfile index e2cac26328..babb1b4cf6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,7 @@ RUN cmake -B build -G Ninja \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DENABLE_LOGGING:BOOL=ON \ -DBUILD_TEST:BOOL=ON \ - -DBUILD_STATIC:BOOL=OFF \ + -DWITH_STATIC_DEPS:BOOL=OFF \ -DBUILD_SHARED_LIBS:BOOL=ON RUN cmake --build build diff --git a/Makefile b/Makefile index 9d61ac9693..25fc95ff03 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ librime-static: cmake . -B$(build) \ -DCMAKE_INSTALL_PREFIX=$(prefix) \ -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_STATIC=ON \ + -DWITH_STATIC_DEPS=ON \ -DBUILD_SHARED_LIBS=OFF cmake --build $(build) diff --git a/build-clang.bat b/build-clang.bat index 44772c7a44..df82df464d 100644 --- a/build-clang.bat +++ b/build-clang.bat @@ -114,7 +114,7 @@ if %build_deps% == 1 ( ) set rime_cmake_flags=%common_cmake_flags%^ - -DBUILD_STATIC:BOOL=ON^ + -DWITH_STATIC_DEPS:BOOL=ON^ -DBUILD_SHARED_LIBS:BOOL=ON^ -DBUILD_TEST:BOOL="%build_test%"^ -DENABLE_LOGGING:BOOL=ON^ diff --git a/build.bat b/build.bat index 80e8e2022e..0ea56d84fd 100644 --- a/build.bat +++ b/build.bat @@ -176,7 +176,7 @@ if %build_deps% == 1 ( if %build_librime% == 0 goto exit set rime_cmake_flags=%common_cmake_flags%^ - -DBUILD_STATIC=ON^ + -DWITH_STATIC_DEPS=ON^ -DBUILD_SHARED_LIBS=%build_shared%^ -DBUILD_TEST=%build_test%^ -DENABLE_LOGGING=%enable_logging%^ diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake index c20b9abd20..f149a75871 100644 --- a/cmake/FindGflags.cmake +++ b/cmake/FindGflags.cmake @@ -2,13 +2,13 @@ set(_gflags_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) find_path(Gflags_INCLUDE_PATH gflags/gflags.h) -if (Gflags_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (Gflags_STATIC) +endif () find_library(Gflags_LIBRARY NAMES gflags libgflags) if(Gflags_INCLUDE_PATH AND Gflags_LIBRARY) set(Gflags_FOUND TRUE) diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake index d0a15c54a3..d1849bb568 100644 --- a/cmake/FindGlog.cmake +++ b/cmake/FindGlog.cmake @@ -2,13 +2,13 @@ set(_glog_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) find_path(Glog_INCLUDE_PATH glog/logging.h) -if (Glog_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (Glog_STATIC) +endif () find_library(Glog_LIBRARY NAMES glog glogd libglog) if(Glog_INCLUDE_PATH AND Glog_LIBRARY) set(Glog_FOUND TRUE) diff --git a/cmake/FindLevelDb.cmake b/cmake/FindLevelDb.cmake index 7c3cefc300..3f6db89864 100644 --- a/cmake/FindLevelDb.cmake +++ b/cmake/FindLevelDb.cmake @@ -2,13 +2,13 @@ set(_leveldb_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) find_path(LevelDb_INCLUDE_PATH leveldb/db.h) -if (LevelDb_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (LevelDb_STATIC) +endif () find_library(LevelDb_LIBRARY NAMES leveldb libleveldb) if(LevelDb_INCLUDE_PATH AND LevelDb_LIBRARY) set(LevelDb_FOUND TRUE) diff --git a/cmake/FindMarisa.cmake b/cmake/FindMarisa.cmake index 9a9851b436..046e34e310 100644 --- a/cmake/FindMarisa.cmake +++ b/cmake/FindMarisa.cmake @@ -2,13 +2,13 @@ set(_marisa_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) find_path(Marisa_INCLUDE_PATH marisa.h) -if (Marisa_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (Marisa_STATIC) +endif () find_library(Marisa_LIBRARY NAMES marisa libmarisa) if(Marisa_INCLUDE_PATH AND Marisa_LIBRARY) set(Marisa_FOUND TRUE) diff --git a/cmake/FindOpencc.cmake b/cmake/FindOpencc.cmake index ea7f40707a..32c9235a5b 100644 --- a/cmake/FindOpencc.cmake +++ b/cmake/FindOpencc.cmake @@ -2,13 +2,13 @@ set(_opencc_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) find_path(Opencc_INCLUDE_PATH opencc/opencc.h) -if (Opencc_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (Opencc_STATIC) +endif () find_library(Opencc_LIBRARY NAMES opencc) if(Opencc_INCLUDE_PATH AND Opencc_LIBRARY) set(Opencc_FOUND TRUE) diff --git a/cmake/FindYamlCpp.cmake b/cmake/FindYamlCpp.cmake index 030a4a2efc..9f26ec0d73 100644 --- a/cmake/FindYamlCpp.cmake +++ b/cmake/FindYamlCpp.cmake @@ -7,13 +7,13 @@ if(YamlCpp_INCLUDE_PATH AND NOT YamlCpp_NEW_API) message(FATAL_ERROR "The new yaml-cpp 0.5 API is not available.") endif() -if (YamlCpp_STATIC) +if (WITH_STATIC_DEPS) if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) -endif (YamlCpp_STATIC) +endif () find_library(YamlCpp_LIBRARY NAMES libyaml-cppmt libyaml-cppmtd yaml-cpp) if(YamlCpp_INCLUDE_PATH AND YamlCpp_LIBRARY) From 48a23415e36be6304e625add4bb034345bd6e022 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Fri, 27 Oct 2023 21:01:43 +0800 Subject: [PATCH 03/70] build: slightly polish some cmake scripts --- CMakeLists.txt | 10 +++------- src/CMakeLists.txt | 7 +++---- src/rime/setup.cc | 2 +- src/rime_api.h | 2 +- test/CMakeLists.txt | 3 +-- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bdfa3357df..d3a32f7684 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,10 +29,6 @@ option(ENABLE_TIMESTAMP "Embed timestamp to schema artifacts" ON) set(RIME_DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}/rime-data" CACHE STRING "Target directory for Rime data") set(RIME_PLUGINS_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/rime-plugins" CACHE STRING "Target directory for externally built Rime plugins") -if(WIN32) - set(ext ".exe") -endif(WIN32) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${PROJECT_SOURCE_DIR}") @@ -230,11 +226,11 @@ endif() add_subdirectory(plugins) message(STATUS "rime_plugins_libs: ${rime_plugins_deps}") message(STATUS "rime_plugins_modules: ${rime_plugins_modules}") -set(list "") foreach(mod ${rime_plugins_modules}) - set(list "${list},Q(${mod})") + list(APPEND qmods "Q(${mod})") endforeach() -add_definitions(-DRIME_EXTRA_MODULES=${list}) +list(JOIN qmods "," extra_mods) +add_definitions(-DRIME_EXTRA_MODULES=${extra_mods}) if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS AND rime_plugins_objs) set(rime_plugins_library rime-plugins) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6364e1c8e8..6fc781e42d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,12 +31,11 @@ else() ${rime_plugins_objs}) endif() -set(rime_optional_deps "") if(Gflags_FOUND) - set(rime_optional_deps ${rime_optional_deps} ${Gflags_LIBRARY}) + list(APPEND rime_optional_deps ${Gflags_LIBRARY}) endif() if(ENABLE_EXTERNAL_PLUGINS) - set(rime_optional_deps ${rime_optional_deps} dl) + list(APPEND rime_optional_deps dl) endif() set(rime_core_deps @@ -57,7 +56,7 @@ set(rime_levers_deps "") if(MINGW) # fix: bcrypt for boost uuid issue # https://github.com/boostorg/uuid/issues/68 - set(rime_core_deps ${rime_core_deps} wsock32 ws2_32 bcrypt) + list(APPEND rime_core_deps wsock32 ws2_32 bcrypt) endif() if(BUILD_SEPARATE_LIBS) diff --git a/src/rime/setup.cc b/src/rime/setup.cc index 3091838783..7cae457b30 100644 --- a/src/rime/setup.cc +++ b/src/rime/setup.cc @@ -26,7 +26,7 @@ namespace fs = std::filesystem; namespace rime { #define Q(x) #x -RIME_API RIME_MODULE_LIST(kDefaultModules, "default" RIME_EXTRA_MODULES); +RIME_API RIME_MODULE_LIST(kDefaultModules, "default", RIME_EXTRA_MODULES); #undef Q RIME_API RIME_MODULE_LIST(kDeployerModules, "deployer"); RIME_MODULE_LIST(kLegacyModules, "legacy"); diff --git a/src/rime_api.h b/src/rime_api.h index ae4467abc8..c8f4b6f77f 100644 --- a/src/rime_api.h +++ b/src/rime_api.h @@ -712,7 +712,7 @@ RIME_API RimeApi* rime_get_api(void); /*! * Defines a constant for a list of module names. */ -#define RIME_MODULE_LIST(var, ...) const char* var[] = {__VA_ARGS__, NULL} +#define RIME_MODULE_LIST(var, ...) const char* var[] = {__VA_ARGS__} /*! * Register a phony module which, when loaded, will load a list of modules. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 80fb5ddd8f..1029fe4857 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -13,5 +13,4 @@ endif(BUILD_SHARED_LIBS) file(GLOB test_data_files ${PROJECT_SOURCE_DIR}/data/test/*.yaml) file(COPY ${test_data_files} DESTINATION ${EXECUTABLE_OUTPUT_PATH}) -set(rime_test_executable ${EXECUTABLE_OUTPUT_PATH}/rime_test${ext}) -add_test(rime_test ${rime_test_executable}) +add_test(rime_test rime_test) From 8ad966ebe59df58e06b0113dabbbdcb8f6f41510 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Fri, 27 Oct 2023 23:07:40 +0800 Subject: [PATCH 04/70] build: better cmake find modules So that we are able to link them by their namespace/target name --- CMakeLists.txt | 31 +++++----------------------- cmake/FindGFlags.cmake | 17 ++++++++++++++++ cmake/FindGLog.cmake | 17 ++++++++++++++++ cmake/FindGflags.cmake | 26 ------------------------ cmake/FindGlog.cmake | 26 ------------------------ cmake/FindLevelDB.cmake | 17 ++++++++++++++++ cmake/FindLevelDb.cmake | 26 ------------------------ cmake/FindMarisa.cmake | 37 +++++++++++++-------------------- cmake/FindOpenCC.cmake | 17 ++++++++++++++++ cmake/FindOpencc.cmake | 26 ------------------------ cmake/FindYamlCpp.cmake | 45 ++++++++++++++++------------------------- src/CMakeLists.txt | 12 +++++------ 12 files changed, 110 insertions(+), 187 deletions(-) create mode 100644 cmake/FindGFlags.cmake create mode 100644 cmake/FindGLog.cmake delete mode 100644 cmake/FindGflags.cmake delete mode 100644 cmake/FindGlog.cmake create mode 100644 cmake/FindLevelDB.cmake delete mode 100644 cmake/FindLevelDb.cmake create mode 100644 cmake/FindOpenCC.cmake delete mode 100644 cmake/FindOpencc.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d3a32f7684..be752ecceb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,22 +60,14 @@ if(Boost_FOUND) endif() if(ENABLE_LOGGING) + find_package(GFlags) + find_package(GLog REQUIRED) - find_package(Gflags) - if(Gflags_FOUND) - include_directories(${Gflags_INCLUDE_PATH}) - endif() - - find_package(Glog REQUIRED) - if(Glog_FOUND) - include_directories(${Glog_INCLUDE_PATH}) - endif() if(WITH_STATIC_DEPS) add_definitions(-DGOOGLE_GLOG_DLL_DECL=) endif() - + set(RIME_ENABLE_LOGGING 1) - endif() find_package(Threads) @@ -97,27 +89,14 @@ if(BUILD_TEST) endif() find_package(YamlCpp REQUIRED) -if(YamlCpp_FOUND) - include_directories(${YamlCpp_INCLUDE_PATH}) -endif() if(WITH_STATIC_DEPS) add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() -find_package(LevelDb REQUIRED) -if(LevelDb_FOUND) - include_directories(${LevelDb_INCLUDE_PATH}) -endif() - +find_package(LevelDB REQUIRED) find_package(Marisa REQUIRED) -if(Marisa_FOUND) - include_directories(${Marisa_INCLUDE_PATH}) -endif() -find_package(Opencc REQUIRED) -if(Opencc_FOUND) -include_directories(${Opencc_INCLUDE_PATH}) -endif() +find_package(OpenCC REQUIRED) if(WITH_STATIC_DEPS) add_definitions(-DOpencc_BUILT_AS_STATIC) endif() diff --git a/cmake/FindGFlags.cmake b/cmake/FindGFlags.cmake new file mode 100644 index 0000000000..9a06798db1 --- /dev/null +++ b/cmake/FindGFlags.cmake @@ -0,0 +1,17 @@ +find_path(GFLAGS_INCLUDE_DIR NAMES gflags.h) + +find_library(GFLAGS_LIBRARY NAMES gflags libgflags) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GFlags + DEFAULT_MSG GFLAGS_LIBRARY GFLAGS_INCLUDE_DIR +) +if(GFLAGS_FOUND AND NOT TARGET GFlags::GFlags) + add_library(GFlags::GFlags UNKNOWN IMPORTED) + set_target_properties(GFlags::GFlags PROPERTIES + IMPORTED_LOCATION "${GFLAGS_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GFLAGS_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY) diff --git a/cmake/FindGLog.cmake b/cmake/FindGLog.cmake new file mode 100644 index 0000000000..45099d64f4 --- /dev/null +++ b/cmake/FindGLog.cmake @@ -0,0 +1,17 @@ +find_path(GLOG_INCLUDE_DIR NAMES glog/logging.h) + +find_library(GLOG_LIBRARY NAMES glog glogd libglog) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GLog + DEFAULT_MSG GLOG_LIBRARY GLOG_INCLUDE_DIR +) +if(GLOG_FOUND AND NOT TARGET GLog::GLog) + add_library(GLog::GLog UNKNOWN IMPORTED) + set_target_properties(GLog::GLog PROPERTIES + IMPORTED_LOCATION "${GLOG_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(GLOG_INCLUDE_DIR GLOG_LIBRARY) diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake deleted file mode 100644 index f149a75871..0000000000 --- a/cmake/FindGflags.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(_gflags_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -find_path(Gflags_INCLUDE_PATH gflags/gflags.h) - -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(Gflags_LIBRARY NAMES gflags libgflags) -if(Gflags_INCLUDE_PATH AND Gflags_LIBRARY) - set(Gflags_FOUND TRUE) -endif(Gflags_INCLUDE_PATH AND Gflags_LIBRARY) -if(Gflags_FOUND) - if(NOT Gflags_FIND_QUIETLY) - message(STATUS "Found gflags: ${Gflags_LIBRARY}") - endif(NOT Gflags_FIND_QUIETLY) -else(Gflags_FOUND) - if(Gflags_FIND_REQUIRED) - message(FATAL_ERROR "Could not find gflags library.") - endif(Gflags_FIND_REQUIRED) -endif(Gflags_FOUND) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_gflags_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake deleted file mode 100644 index d1849bb568..0000000000 --- a/cmake/FindGlog.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(_glog_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -find_path(Glog_INCLUDE_PATH glog/logging.h) - -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(Glog_LIBRARY NAMES glog glogd libglog) -if(Glog_INCLUDE_PATH AND Glog_LIBRARY) - set(Glog_FOUND TRUE) -endif(Glog_INCLUDE_PATH AND Glog_LIBRARY) -if(Glog_FOUND) - if(NOT Glog_FIND_QUIETLY) - message(STATUS "Found glog: ${Glog_LIBRARY}") - endif(NOT Glog_FIND_QUIETLY) -else(Glog_FOUND) - if(Glog_FIND_REQUIRED) - message(FATAL_ERROR "Could not find glog library.") - endif(Glog_FIND_REQUIRED) -endif(Glog_FOUND) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_glog_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/cmake/FindLevelDB.cmake b/cmake/FindLevelDB.cmake new file mode 100644 index 0000000000..972637176e --- /dev/null +++ b/cmake/FindLevelDB.cmake @@ -0,0 +1,17 @@ +find_path(LEVELDB_INCLUDE_DIR NAMES leveldb/db.h) + +find_library(LEVELDB_LIBRARY NAMES leveldb libleveldb) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LevelDB + DEFAULT_MSG LEVELDB_LIBRARY LEVELDB_INCLUDE_DIR +) +if(LEVELDB_FOUND AND NOT TARGET LevelDB::LevelDB) + add_library(LevelDB::LevelDB UNKNOWN IMPORTED) + set_target_properties(LevelDB::LevelDB PROPERTIES + IMPORTED_LOCATION "${LEVELDB_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LEVELDB_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(LEVELDB_INCLUDE_DIR LEVELDB_LIBRARY) diff --git a/cmake/FindLevelDb.cmake b/cmake/FindLevelDb.cmake deleted file mode 100644 index 3f6db89864..0000000000 --- a/cmake/FindLevelDb.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(_leveldb_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -find_path(LevelDb_INCLUDE_PATH leveldb/db.h) - -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(LevelDb_LIBRARY NAMES leveldb libleveldb) -if(LevelDb_INCLUDE_PATH AND LevelDb_LIBRARY) - set(LevelDb_FOUND TRUE) -endif(LevelDb_INCLUDE_PATH AND LevelDb_LIBRARY) -if(LevelDb_FOUND) - if(NOT LevelDb_FIND_QUIETLY) - message(STATUS "Found leveldb: ${LevelDb_LIBRARY}") - endif(NOT LevelDb_FIND_QUIETLY) -else(LevelDb_FOUND) - if(LevelDb_FIND_REQUIRED) - message(FATAL_ERROR "Could not find leveldb library.") - endif(LevelDb_FIND_REQUIRED) -endif(LevelDb_FOUND) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_leveldb_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/cmake/FindMarisa.cmake b/cmake/FindMarisa.cmake index 046e34e310..59e3ae2b76 100644 --- a/cmake/FindMarisa.cmake +++ b/cmake/FindMarisa.cmake @@ -1,26 +1,17 @@ -set(_marisa_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) +find_path(MARISA_INCLUDE_DIR NAMES marisa.h) -find_path(Marisa_INCLUDE_PATH marisa.h) +find_library(MARISA_LIBRARY NAMES marisa libmarisa) -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(Marisa_LIBRARY NAMES marisa libmarisa) -if(Marisa_INCLUDE_PATH AND Marisa_LIBRARY) - set(Marisa_FOUND TRUE) -endif(Marisa_INCLUDE_PATH AND Marisa_LIBRARY) -if(Marisa_FOUND) - if(NOT Marisa_FIND_QUIETLY) - message(STATUS "Found marisa: ${Marisa_LIBRARY}") - endif(NOT Marisa_FIND_QUIETLY) -else(Marisa_FOUND) - if(Marisa_FIND_REQUIRED) - message(FATAL_ERROR "Could not find marisa library.") - endif(Marisa_FIND_REQUIRED) -endif(Marisa_FOUND) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Marisa + DEFAULT_MSG MARISA_LIBRARY MARISA_INCLUDE_DIR +) +if(MARISA_FOUND AND NOT TARGET Marisa::Marisa) + add_library(Marisa::Marisa UNKNOWN IMPORTED) + set_target_properties(Marisa::Marisa PROPERTIES + IMPORTED_LOCATION "${MARISA_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${MARISA_INCLUDE_DIR}" + ) +endif() -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_marisa_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) +mark_as_advanced(MARISA_INCLUDE_DIR MARISA_LIBRARY) diff --git a/cmake/FindOpenCC.cmake b/cmake/FindOpenCC.cmake new file mode 100644 index 0000000000..eae70fb2e9 --- /dev/null +++ b/cmake/FindOpenCC.cmake @@ -0,0 +1,17 @@ +find_path(OPENCC_INCLUDE_DIR NAMES opencc/opencc.h) + +find_library(OPENCC_LIBRARY NAMES opencc) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenCC + DEFAULT_MSG OPENCC_LIBRARY OPENCC_INCLUDE_DIR +) +if(OPENCC_FOUND AND NOT TARGET OpenCC::OpenCC) + add_library(OpenCC::OpenCC UNKNOWN IMPORTED) + set_target_properties(OpenCC::OpenCC PROPERTIES + IMPORTED_LOCATION "${OPENCC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${OPENCC_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(OPENCC_INCLUDE_DIR OPENCC_LIBRARY) diff --git a/cmake/FindOpencc.cmake b/cmake/FindOpencc.cmake deleted file mode 100644 index 32c9235a5b..0000000000 --- a/cmake/FindOpencc.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(_opencc_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -find_path(Opencc_INCLUDE_PATH opencc/opencc.h) - -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(Opencc_LIBRARY NAMES opencc) -if(Opencc_INCLUDE_PATH AND Opencc_LIBRARY) - set(Opencc_FOUND TRUE) -endif(Opencc_INCLUDE_PATH AND Opencc_LIBRARY) -if(Opencc_FOUND) - if(NOT Opencc_FIND_QUIETLY) - message(STATUS "Found opencc: ${Opencc_LIBRARY}") - endif(NOT Opencc_FIND_QUIETLY) -else(Opencc_FOUND) - if(Opencc_FIND_REQUIRED) - message(FATAL_ERROR "Could not find opencc library.") - endif(Opencc_FIND_REQUIRED) -endif(Opencc_FOUND) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_opencc_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/cmake/FindYamlCpp.cmake b/cmake/FindYamlCpp.cmake index 9f26ec0d73..e68a3a5be0 100644 --- a/cmake/FindYamlCpp.cmake +++ b/cmake/FindYamlCpp.cmake @@ -1,32 +1,21 @@ -set(_yamlcpp_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) +find_path(YAML_CPP_INCLUDE_DIR NAMES yaml-cpp/yaml.h) -find_path(YamlCpp_INCLUDE_PATH yaml-cpp/yaml.h) +# Find library +find_library(YAML_CPP_LIBRARY NAMES yaml-cpp libyaml-cpp) -find_path(YamlCpp_NEW_API yaml-cpp/node/node.h) -if(YamlCpp_INCLUDE_PATH AND NOT YamlCpp_NEW_API) - message(FATAL_ERROR "The new yaml-cpp 0.5 API is not available.") -endif() - -if (WITH_STATIC_DEPS) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (WIN32) -endif () -find_library(YamlCpp_LIBRARY NAMES libyaml-cppmt libyaml-cppmtd yaml-cpp) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(YamlCpp + DEFAULT_MSG YAML_CPP_LIBRARY YAML_CPP_INCLUDE_DIR +) -if(YamlCpp_INCLUDE_PATH AND YamlCpp_LIBRARY) - set(YamlCpp_FOUND TRUE) -endif(YamlCpp_INCLUDE_PATH AND YamlCpp_LIBRARY) -if(YamlCpp_FOUND) - if(NOT YamlCpp_FIND_QUIETLY) - message(STATUS "Found yaml-cpp: ${YamlCpp_LIBRARY}") - endif(NOT YamlCpp_FIND_QUIETLY) -else(YamlCpp_FOUND) - if(YamlCpp_FIND_REQUIRED) - message(FATAL_ERROR "Could not find yaml-cpp library.") - endif(YamlCpp_FIND_REQUIRED) -endif(YamlCpp_FOUND) +if(YAMLCPP_FOUND AND NOT TARGET YamlCpp::YamlCpp) + set(YAML_CPP_LIBRARIES ${YAML_CPP_LIBRARY}) + add_library(YamlCpp::YamlCpp UNKNOWN IMPORTED) + set_target_properties(YamlCpp::YamlCpp PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${YAML_CPP_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${YAML_CPP_INCLUDE_DIR}" + ) +endif() -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_yamlcpp_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) +mark_as_advanced(YAML_CPP_INCLUDE_DIR YAML_CPP_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6fc781e42d..edfd4e4fb5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,7 +32,7 @@ else() endif() if(Gflags_FOUND) - list(APPEND rime_optional_deps ${Gflags_LIBRARY}) + list(APPEND rime_optional_deps GFlags::GFlags) endif() if(ENABLE_EXTERNAL_PLUGINS) list(APPEND rime_optional_deps dl) @@ -40,17 +40,17 @@ endif() set(rime_core_deps ${Boost_LIBRARIES} - ${Glog_LIBRARY} - ${YamlCpp_LIBRARY} + GLog::GLog + YamlCpp::YamlCpp ${CMAKE_THREAD_LIBS_INIT} ${rime_optional_deps}) set(rime_dict_deps - ${LevelDb_LIBRARY} - ${Marisa_LIBRARY}) + LevelDB::LevelDB + Marisa::Marisa) set(rime_gears_deps ${ICONV_LIBRARIES} ${ICU_LIBRARIES} - ${Opencc_LIBRARY}) + OpenCC::OpenCC) set(rime_levers_deps "") if(MINGW) From 00b4da47a9ef73f1892867e33ed0d06584bff55d Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Sat, 28 Oct 2023 09:23:12 +0800 Subject: [PATCH 05/70] test: improve testing composition --- .github/workflows/windows-build.yml | 2 +- CMakeLists.txt | 1 - test/CMakeLists.txt | 10 ++++------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index c35aca7c09..b5e2071f88 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -171,7 +171,7 @@ jobs: -DBUILD_SHARED_LIBS:BOOL=ON cmake --build build cmake --install build - cd build && cp ./lib/librime.dll ./test + cd build ctest --output-on-failure - name: Create distributable diff --git a/CMakeLists.txt b/CMakeLists.txt index be752ecceb..67f756691b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,7 +84,6 @@ if(BUILD_TEST) find_package(GTest REQUIRED) if(GTEST_FOUND) enable_testing() - include_directories(${GTEST_INCLUDE_DIRS}) endif() endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1029fe4857..f1f80b326f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,16 +1,14 @@ aux_source_directory(. rime_test_src) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/test) add_executable(rime_test ${rime_test_src}) target_link_libraries(rime_test ${rime_library} ${rime_dict_library} ${rime_gears_library} - ${GTEST_LIBRARIES}) + GTest::gtest + GTest::gtest_main) if(BUILD_SHARED_LIBS) target_compile_definitions(rime_test PRIVATE RIME_IMPORTS) endif(BUILD_SHARED_LIBS) -file(GLOB test_data_files ${PROJECT_SOURCE_DIR}/data/test/*.yaml) -file(COPY ${test_data_files} DESTINATION ${EXECUTABLE_OUTPUT_PATH}) - -add_test(rime_test rime_test) +add_test(NAME rime_test COMMAND rime_test + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/data/test") From 6d176ef500a86c0177cae804233fd9eca22fe95b Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Sun, 29 Oct 2023 13:28:52 +0800 Subject: [PATCH 06/70] build: simplify adding compile and link options --- CMakeLists.txt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67f756691b..b44d0e3f60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,12 +33,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${PROJECT_SOURCE_DIR}") if (ENABLE_ASAN) - set(asan_cflags "-fsanitize=address -fno-omit-frame-pointer") - set(asan_lflags "-fsanitize=address -lasan") - set(CMAKE_C_FLAGS "${asan_cflags} ${CMAKE_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${asan_cflags} ${CMAKE_CXX_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${asan_lflags} ${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS "${asan_lflags} ${CMAKE_SHARED_LINKER_FLAGS}") + add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address -lasan) endif() set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) From 31d3b209f3dd8af0fb6c2fc751813a0aa3fe90e4 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Sun, 29 Oct 2023 15:01:50 +0800 Subject: [PATCH 07/70] test: copy librime targets files to test on Windows --- test/CMakeLists.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f1f80b326f..01c1c89a44 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,19 @@ +if(WIN32) + if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) + add_custom_target(copy_librime_to_test + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Copying librime (separated) to test" + ) + else() + add_custom_target(copy_librime_to_test + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Copying librime (full) to test" + ) + endif() +endif() + aux_source_directory(. rime_test_src) add_executable(rime_test ${rime_test_src}) target_link_libraries(rime_test @@ -12,3 +28,6 @@ endif(BUILD_SHARED_LIBS) add_test(NAME rime_test COMMAND rime_test WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/data/test") +if(WIN32) + add_dependencies(rime_test copy_librime_to_test) +endif() From f2e4c9435fa589d1a6141760c821d8a6f7d065df Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Sun, 29 Oct 2023 21:32:33 +0800 Subject: [PATCH 08/70] build: drop deprecated BUILD_DATA option --- CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b44d0e3f60..def83db676 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,6 @@ include(GNUInstallDirs) option(BUILD_SHARED_LIBS "Build Rime as shared library" ON) option(BUILD_MERGED_PLUGINS "Merge plugins into one Rime library" ON) option(WITH_STATIC_DEPS "Build with static dependency libraries" OFF) -option(BUILD_DATA "Build data for Rime" OFF) option(BUILD_SAMPLE "Build sample Rime plugin" OFF) option(BUILD_TEST "Build and run tests" ON) option(BUILD_SEPARATE_LIBS "Build separate rime-* libraries" OFF) @@ -180,11 +179,6 @@ if(INSTALL_PRIVATE_HEADERS) endforeach() endif() -if(BUILD_DATA) - file(GLOB rime_preset_data_files ${PROJECT_SOURCE_DIR}/data/preset/*.yaml) - install(FILES ${rime_preset_data_files} DESTINATION ${RIME_DATA_DIR}) -endif() - if(BUILD_SHARED_LIBS) add_definitions(-DRIME_BUILD_SHARED_LIBS) set(rime_library rime) From 34d9bc5f520fa34a7fcb04c1d7f7faa0b4f4bac2 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Sun, 29 Oct 2023 23:21:56 +0800 Subject: [PATCH 09/70] build: remove artifact output placeholder --- .github/workflows/windows-build.yml | 3 --- bin/.placeholder | 0 lib/.placeholder | 0 share/.placeholder | 0 4 files changed, 3 deletions(-) delete mode 100644 bin/.placeholder delete mode 100644 lib/.placeholder delete mode 100644 share/.placeholder diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index b5e2071f88..6ebb7c9db3 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -178,9 +178,6 @@ jobs: run: | tar -cjvf rime-${{ env.git_ref_name }}-${{ runner.os }}-mingw.tar.bz2 \ dist version-info.txt - tar -cjvf rime-deps-${{ env.git_ref_name }}-${{ runner.os }}-mingw.tar.bz2 \ - --exclude '*/.placeholder' \ - bin include lib share - name: Upload artifacts uses: actions/upload-artifact@v3 diff --git a/bin/.placeholder b/bin/.placeholder deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/lib/.placeholder b/lib/.placeholder deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/share/.placeholder b/share/.placeholder deleted file mode 100644 index e69de29bb2..0000000000 From 7b2e132e820f111fd3c2100d2ba01e1bdbf076a4 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Mon, 30 Oct 2023 16:57:12 +0800 Subject: [PATCH 10/70] build: drop unused iconv and icu stuffs --- cmake/FindIconv.cmake | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 cmake/FindIconv.cmake diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake deleted file mode 100644 index 76f2769683..0000000000 --- a/cmake/FindIconv.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# Find iconv library -# -# Author: Eddy Xu -# -# Released under BSD license -# -# ICONV_INCLUDE_DIRS - where to find iconv.h, etc -# ICONV_LIBRARIES - Lists of libraries when using iconv -# ICONV_FOUND - True if iconv found - - -# Look for the header file -FIND_PATH( ICONV_INCLUDE_DIR NAMES iconv.h ) -MARK_AS_ADVANCED( ICONV_INCLUDE_DIR ) - -# Look for the library -FIND_LIBRARY( ICONV_LIBRARY NAMES iconv ) -MARK_AS_ADVANCED( ICONV_LIBRARY ) - -# Copy the result to output variables -IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARY) - SET(ICONV_FOUND 1) - SET(ICONV_LIBRARIES ${ICONV_LIBRARY}) - SET(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR}) -ELSE(ICONV_INCLUDE_DIR AND ICONV_LIBRARY) - SET(ICONV_FOUND 0) - SET(ICONV_LIBRARIES) - SET(ICONV_INCLUDE_DIRS) -ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARY) - -# Report results -IF(NOT ICONV_FOUND) - SET(ICONV_DIR_MESSAGE - "Iconv was not found. Make sure ICONV_LIBRARY and ICONV_INCLUDE_DIR are -set.") - IF(NOT ICONV_FIND_QUIETLY) - MESSAGE(STATUS ${ICONV_DIR_MESSAGE}) - ELSE(NOT ICONV_FIND_QUIETLY) - IF(ICONV_FIND_REQUIRED) - MESSAGE(FETAL_ERROR ${ICONV_DIR_MESSAGE}) - ENDIF(ICONV_FIND_REQUIRED) - ENDIF(NOT ICONV_FIND_QUIETLY) -ENDIF(NOT ICONV_FOUND) From e5e0a0854a0a11dc74b8a0396cf00cb4ff0582ef Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Tue, 6 Jan 2026 12:35:42 +0800 Subject: [PATCH 11/70] feat(vcpkg): add vcpkg configuration for rime with dependencies --- vcpkg.json | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 vcpkg.json diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000000..1880cb20fd --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,39 @@ +{ + "name" : "rime", + "version-string" : "1.0.0", + "builtin-baseline" : "e93bf5796351d422408a2e3ebf88dce98151ae45", + "dependencies" : [ { + "name" : "gtest", + "version>=" : "1.17.0#2" + }, { + "name" : "glog", + "version>=" : "0.7.1" + }, { + "name" : "yaml-cpp", + "version>=" : "0.8.0#3" + }, { + "name" : "leveldb", + "version>=" : "1.23" + }, { + "name" : "opencc", + "version>=" : "1.1.9#1" + }, { + "name" : "boost-algorithm", + "version>=" : "1.89.0" + }, { + "name" : "boost-signals2", + "version>=" : "1.89.0" + }, { + "name" : "boost-crc", + "version>=" : "1.89.0" + }, { + "name" : "boost-interprocess", + "version>=" : "1.89.0" + }, { + "name" : "boost-scope-exit", + "version>=" : "1.89.0" + }, { + "name" : "boost-uuid", + "version>=" : "1.89.0" + } ] +} \ No newline at end of file From de78eeac0590a5eaf81033849b49566a5d9b3b1d Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Wed, 7 Jan 2026 14:19:14 +0800 Subject: [PATCH 12/70] fix(test): update RIME_MODULE_LIST to include NULL terminator --- src/rime_api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rime_api.h b/src/rime_api.h index 4de00862fe..2fccde0fb8 100644 --- a/src/rime_api.h +++ b/src/rime_api.h @@ -573,7 +573,7 @@ RIME_API RIME_FLAVORED(RimeApi) * RIME_FLAVORED(rime_get_api)(void); /*! * Defines a constant for a list of module names. */ -#define RIME_MODULE_LIST(var, ...) const char* var[] = {__VA_ARGS__} +#define RIME_MODULE_LIST(var, ...) const char* var[] = {__VA_ARGS__, NULL} /*! * Register a phony module which, when loaded, will load a list of modules. From c6646e797963b01d48584b5d3730ff6f531879a5 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Wed, 7 Jan 2026 14:33:19 +0800 Subject: [PATCH 13/70] fix: correct RIME_MODULE_LIST syntax by removing extra comma --- src/rime/setup.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rime/setup.cc b/src/rime/setup.cc index 7d85fea1bc..4c2a73b9c1 100644 --- a/src/rime/setup.cc +++ b/src/rime/setup.cc @@ -22,7 +22,7 @@ namespace rime { #define Q(x) #x -RIME_DLL RIME_MODULE_LIST(kDefaultModules, "default", RIME_EXTRA_MODULES); +RIME_DLL RIME_MODULE_LIST(kDefaultModules, "default" RIME_EXTRA_MODULES); #undef Q RIME_DLL RIME_MODULE_LIST(kDeployerModules, "deployer"); RIME_MODULE_LIST(kLegacyModules, "legacy"); From bb007010161cc4dded214d13a8a38f2f13c0737e Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Wed, 7 Jan 2026 15:08:33 +0800 Subject: [PATCH 14/70] fix: update RIME_SETUP_EXTRA_MODULES to be the same as master --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e520d89362..c9bf850071 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,11 +221,11 @@ endif() add_subdirectory(plugins) message(STATUS "rime_plugins_libs: ${rime_plugins_deps}") message(STATUS "rime_plugins_modules: ${rime_plugins_modules}") +set(list "") foreach(mod ${rime_plugins_modules}) - list(APPEND qmods "Q(${mod})") + set(list "${list},Q(${mod})") endforeach() -list(JOIN qmods "," extra_mods) -add_definitions(-DRIME_EXTRA_MODULES=${extra_mods}) +set(RIME_SETUP_EXTRA_MODULES "${list}") if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS AND rime_plugins_objs) set(rime_plugins_library rime-plugins) endif() From dfbf0f81ce5c1a910dda58b9a7d202b57ecd5539 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 02:20:36 +0800 Subject: [PATCH 15/70] Refactor CMake object targets --- CMakeLists.txt | 31 +++--- cmake/FindYamlCpp.cmake | 4 +- sample/CMakeLists.txt | 2 +- src/CMakeLists.txt | 232 +++++++++++++++++++--------------------- test/CMakeLists.txt | 1 + 5 files changed, 130 insertions(+), 140 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9bf850071..cc929bf1f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,12 @@ +cmake_minimum_required(VERSION 3.13) + set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/c_flag_overrides.cmake) set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) -cmake_minimum_required(VERSION 3.12) -project(rime) +project(rime VERSION 1.15.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) set(rime_version 1.15.0) set(rime_soversion 1) @@ -19,6 +21,7 @@ option(WITH_STATIC_DEPS "Build with static dependency libraries" OFF) option(BUILD_SAMPLE "Build sample Rime plugin" OFF) option(BUILD_TEST "Build and run tests" ON) option(BUILD_SEPARATE_LIBS "Build separate rime-* libraries" OFF) +option(BUILD_ALWAYS_STATIC_TARGET "Also build a static rime target regardless of BUILD_SHARED_LIBS" OFF) option(ENABLE_LOGGING "Enable logging with google-glog library" ON) option(ALSO_LOG_TO_STDERR "Log to stderr as well as log file" OFF) option(ENABLE_ASAN "Enable Address Sanitizer (Unix Only)" OFF) @@ -52,19 +55,14 @@ endif() if(LINUX) find_package(Boost 1.74.0 REQUIRED COMPONENTS regex) else() - find_package(Boost 1.77.0) -endif() -if(Boost_FOUND) - include_directories(${Boost_INCLUDE_DIRS}) - link_directories(${Boost_LIBRARY_DIRS}) - add_definitions(-DBOOST_DLL_USE_STD_FS) + find_package(Boost 1.77.0 REQUIRED) endif() +add_definitions(-DBOOST_DLL_USE_STD_FS) if(ENABLE_LOGGING) find_package(GFlags) find_package(GLog REQUIRED) if(Glog_FOUND) - include_directories(${Glog_INCLUDE_PATH}) if(WIN32) add_compile_definitions("GLOG_DEPRECATED=__declspec(deprecated)") add_compile_definitions(GLOG_NO_ABBREVIATED_SEVERITIES) @@ -91,6 +89,7 @@ if(ENABLE_LOGGING) endif() endif() +find_package(Iconv REQUIRED) find_package(Threads) if(NOT ENABLE_THREADING) @@ -208,14 +207,12 @@ endif() if(BUILD_SHARED_LIBS) add_definitions(-DRIME_BUILD_SHARED_LIBS) - set(rime_library rime) - if(BUILD_SEPARATE_LIBS) - set(rime_dict_library rime-dict) - set(rime_gears_library rime-gears) - set(rime_levers_library rime-levers) - endif() -else() - set(rime_library rime-static) +endif() +set(rime_library rime) +if(BUILD_SEPARATE_LIBS) + set(rime_dict_library rime-dict) + set(rime_gears_library rime-gears) + set(rime_levers_library rime-levers) endif() add_subdirectory(plugins) diff --git a/cmake/FindYamlCpp.cmake b/cmake/FindYamlCpp.cmake index e68a3a5be0..e1b5bbaa1c 100644 --- a/cmake/FindYamlCpp.cmake +++ b/cmake/FindYamlCpp.cmake @@ -5,10 +5,10 @@ find_library(YAML_CPP_LIBRARY NAMES yaml-cpp libyaml-cpp) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(YamlCpp - DEFAULT_MSG YAML_CPP_LIBRARY YAML_CPP_INCLUDE_DIR + DEFAULT_MSG YAML_CPP_LIBRARY YAML_CPP_INCLUDE_DIR ) -if(YAMLCPP_FOUND AND NOT TARGET YamlCpp::YamlCpp) +if(YamlCpp_FOUND AND NOT TARGET YamlCpp::YamlCpp) set(YAML_CPP_LIBRARIES ${YAML_CPP_LIBRARY}) add_library(YamlCpp::YamlCpp UNKNOWN IMPORTED) set_target_properties(YamlCpp::YamlCpp PROPERTIES diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index 882030e212..ba795ff5d5 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -1,5 +1,5 @@ +cmake_minimum_required(VERSION 3.13) project(rime-sample) -cmake_minimum_required(VERSION 3.10) set(SAMPLE_VERSION 1.0.0) set(SAMPLE_SOVERSION 1) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 79e1fb49e9..2645a5905d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,150 +23,142 @@ set(rime_dict_module_src ${rime_algo_src} ${rime_dict_src}) -if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) - set(rime_src ${rime_core_module_src}) +function(rime_add_module name obj_target) + add_library(${name} $) + target_link_libraries(${name} + ${obj_target} + ${ARGN}) + set_target_properties(${name} PROPERTIES + VERSION ${rime_version} + SOVERSION ${rime_soversion} + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + if(XCODE_VERSION) + set_target_properties(${name} PROPERTIES INSTALL_NAME_DIR "@rpath") + endif() + install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) +endfunction() + +add_library(rime-core-obj OBJECT ${rime_core_module_src}) +add_library(rime-dict-obj OBJECT ${rime_dict_module_src}) +add_library(rime-gears-obj OBJECT ${rime_gears_src}) +add_library(rime-levers-obj OBJECT ${rime_levers_src}) +if(rime_plugins_library) + add_library(rime-plugins-obj OBJECT ${rime_plugins_src} ${rime_plugins_objs}) + set(rime_plugins_obj_list $) else() - set(rime_src - ${rime_core_module_src} - ${rime_dict_module_src} - ${rime_gears_src} - ${rime_levers_src} - ${rime_plugins_src} - ${rime_plugins_objs}) + set(rime_plugins_obj_list ${rime_plugins_objs}) endif() -if(Gflags_FOUND) - list(APPEND rime_optional_deps GFlags::GFlags) +if(BUILD_SHARED_LIBS) + set_target_properties(rime-core-obj rime-dict-obj rime-gears-obj rime-levers-obj + PROPERTIES POSITION_INDEPENDENT_CODE ON) + if(rime_plugins_library) + set_target_properties(rime-plugins-obj PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() +endif() + +if(GFlags_FOUND) + target_link_libraries(rime-core-obj PUBLIC GFlags::GFlags) endif() if(ENABLE_EXTERNAL_PLUGINS) - list(APPEND rime_optional_deps dl) + target_link_libraries(rime-core-obj PUBLIC dl) endif() -set(rime_core_deps - ${Boost_LIBRARIES} - GLog::GLog - YamlCpp::YamlCpp - ${CMAKE_THREAD_LIBS_INIT} - ${rime_optional_deps}) -set(rime_dict_deps - LevelDB::LevelDB - Marisa::Marisa) -set(rime_gears_deps - ${ICONV_LIBRARIES} - ${ICU_LIBRARIES} - OpenCC::OpenCC) -set(rime_levers_deps "") + +target_link_libraries(rime-core-obj PUBLIC + Boost::boost + YamlCpp::YamlCpp + Threads::Threads +) if(Glog_FOUND AND WIN32) - # TODO: in glog v0.7.0, someone at Google forget to add dbghelp.lib to the linker library list. - set(rime_core_deps ${rime_core_deps} dbghelp) + target_link_libraries(rime-core-obj PUBLIC GLog::GLog) + if(WIN32) + # TODO: in glog v0.7.0, someone at Google forget to add dbghelp.lib to the linker library list. + target_link_libraries(rime-core-obj PRIVATE dbghelp) + endif() endif() if(MINGW) # fix: bcrypt for boost uuid issue # https://github.com/boostorg/uuid/issues/68 - list(APPEND rime_core_deps wsock32 ws2_32 bcrypt) + target_link_libraries(rime-core-obj PRIVATE wsock32 ws2_32 bcrypt) +endif() + +target_link_libraries(rime-dict-obj PUBLIC LevelDB::LevelDB Marisa::Marisa) +target_link_libraries(rime-gears-obj PUBLIC Iconv::Iconv OpenCC::OpenCC) +target_link_libraries(rime-levers-obj PUBLIC Boost::boost) +if(rime_plugins_library) + target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) endif() if(BUILD_SEPARATE_LIBS) - set(rime_deps ${rime_core_deps}) + set(rime_src $) + set(rime_obj_targets rime-core-obj) else() - set(rime_deps - ${rime_core_deps} - ${rime_dict_deps} - ${rime_gears_deps} - ${rime_levers_deps} - ${rime_plugins_deps}) + set(rime_src + $ + $ + $ + $ + ${rime_plugins_obj_list}) + set(rime_obj_targets + rime-core-obj + rime-dict-obj + rime-gears-obj + rime-levers-obj) + if(rime_plugins_library) + list(APPEND rime_obj_targets rime-plugins-obj) + endif() endif() -if(BUILD_SHARED_LIBS) - add_library(rime ${rime_src}) - target_link_libraries(rime ${rime_deps}) - set_target_properties(rime PROPERTIES - DEFINE_SYMBOL "RIME_EXPORTS" - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(rime PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS rime DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - if(MSVC) - install(FILES $ - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} - OPTIONAL) +add_library(rime ${rime_src}) +target_link_libraries(rime ${rime_obj_targets}) +set_target_properties(rime PROPERTIES + DEFINE_SYMBOL "RIME_EXPORTS" + VERSION ${rime_version} + SOVERSION ${rime_soversion} + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) +if(XCODE_VERSION) + set_target_properties(rime PROPERTIES INSTALL_NAME_DIR "@rpath") +endif() +install(TARGETS rime DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) +if(MSVC) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + OPTIONAL) +endif() + +if(BUILD_SEPARATE_LIBS) + rime_add_module(rime-dict rime-dict-obj ${rime_library}) + rime_add_module(rime-gears rime-gears-obj ${rime_library} ${rime_dict_library}) + rime_add_module(rime-levers rime-levers-obj ${rime_library} ${rime_dict_library}) + + if(rime_plugins_library) + rime_add_module(rime-plugins rime-plugins-obj + ${rime_library} + ${rime_dict_library} + ${rime_gears_library}) endif() +endif() + +if(BUILD_ALWAYS_STATIC_TARGET) if(BUILD_SEPARATE_LIBS) - add_library(rime-dict ${rime_dict_module_src}) - target_link_libraries(rime-dict - ${rime_dict_deps} - ${rime_library}) - set_target_properties(rime-dict PROPERTIES - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(rime-dict PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS rime-dict DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - - add_library(rime-gears ${rime_gears_src}) - target_link_libraries(rime-gears - ${rime_gears_deps} - ${rime_library} - ${rime_dict_library}) - set_target_properties(rime-gears PROPERTIES - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(rime-gears PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS rime-gears DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - - add_library(rime-levers ${rime_levers_src}) - target_link_libraries(rime-levers - ${rime_levers_deps} - ${rime_library} - ${rime_dict_library}) - set_target_properties(rime-levers PROPERTIES - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(rime-levers PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS rime-levers DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - - if(rime_plugins_library) - add_library(rime-plugins - ${rime_plugins_src} - ${rime_plugins_objs}) - target_link_libraries(rime-plugins - ${rime_plugins_deps} - ${rime_library} - ${rime_dict_library} - ${rime_gears_library}) - set_target_properties(rime-plugins PROPERTIES - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(rime-plugins PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS rime-plugins DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - endif() + set(rime_static_src $) + else() + set(rime_static_src + $ + $ + $ + $ + ${rime_plugins_obj_list}) endif() -else() - add_library(rime-static STATIC ${rime_src}) - target_link_libraries(rime-static ${rime_deps}) + add_library(rime-static STATIC ${rime_static_src}) + target_link_libraries(rime-static ${rime_obj_targets}) set_target_properties(rime-static PROPERTIES - OUTPUT_NAME "rime" PREFIX "lib" + OUTPUT_NAME "rime-static" ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) install(TARGETS rime-static DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 01c1c89a44..b4e1368078 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -20,6 +20,7 @@ target_link_libraries(rime_test ${rime_library} ${rime_dict_library} ${rime_gears_library} + ${rime_levers_library} GTest::gtest GTest::gtest_main) if(BUILD_SHARED_LIBS) From bd96a9724ff1b1b9fb687aee0015941c48c01385 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 03:56:33 +0800 Subject: [PATCH 16/70] fix: remove REQUIRED from find_package for Iconv --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc929bf1f8..1524bd0bd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,7 +89,7 @@ if(ENABLE_LOGGING) endif() endif() -find_package(Iconv REQUIRED) +find_package(Iconv) find_package(Threads) if(NOT ENABLE_THREADING) From c7d96e55331bf158cde3222b1b7a464f65dda605 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 16:33:22 +0800 Subject: [PATCH 17/70] fix: conditionally link libraries based on target existence --- src/CMakeLists.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2645a5905d..c16eedd741 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,9 +58,6 @@ if(BUILD_SHARED_LIBS) endif() endif() -if(GFlags_FOUND) - target_link_libraries(rime-core-obj PUBLIC GFlags::GFlags) -endif() if(ENABLE_EXTERNAL_PLUGINS) target_link_libraries(rime-core-obj PUBLIC dl) endif() @@ -69,7 +66,7 @@ endif() target_link_libraries(rime-core-obj PUBLIC Boost::boost YamlCpp::YamlCpp - Threads::Threads + $<$:Threads::Threads> ) if(Glog_FOUND AND WIN32) @@ -87,7 +84,9 @@ if(MINGW) endif() target_link_libraries(rime-dict-obj PUBLIC LevelDB::LevelDB Marisa::Marisa) -target_link_libraries(rime-gears-obj PUBLIC Iconv::Iconv OpenCC::OpenCC) +target_link_libraries(rime-gears-obj PUBLIC + $<$:Iconv::Iconv> + OpenCC::OpenCC) target_link_libraries(rime-levers-obj PUBLIC Boost::boost) if(rime_plugins_library) target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) From 9ae43904d0e17d216de88f81b4bfce3b65520d50 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:25:34 +0800 Subject: [PATCH 18/70] fix: update rime-dict-obj to link against Boost library --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c16eedd741..98a87c748d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -83,7 +83,7 @@ if(MINGW) target_link_libraries(rime-core-obj PRIVATE wsock32 ws2_32 bcrypt) endif() -target_link_libraries(rime-dict-obj PUBLIC LevelDB::LevelDB Marisa::Marisa) +target_link_libraries(rime-dict-obj PUBLIC Boost::boost LevelDB::LevelDB Marisa::Marisa) target_link_libraries(rime-gears-obj PUBLIC $<$:Iconv::Iconv> OpenCC::OpenCC) From 2968aed5a695b7a8903b6a006176605bc5e0a7f4 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:33:58 +0800 Subject: [PATCH 19/70] fix: link rime-plugins-obj against Boost library --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 98a87c748d..8d7c57dfab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,7 +89,7 @@ target_link_libraries(rime-gears-obj PUBLIC OpenCC::OpenCC) target_link_libraries(rime-levers-obj PUBLIC Boost::boost) if(rime_plugins_library) - target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) + target_link_libraries(rime-plugins-obj PUBLIC Boost::boost ${rime_plugins_deps}) endif() if(BUILD_SEPARATE_LIBS) From 2ec7f93b7b18b8641636f9eb8dbbc0af666ba69c Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:42:09 +0800 Subject: [PATCH 20/70] fix: ensure rime-gears-obj links against Boost library --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8d7c57dfab..98c3aede5c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -85,6 +85,7 @@ endif() target_link_libraries(rime-dict-obj PUBLIC Boost::boost LevelDB::LevelDB Marisa::Marisa) target_link_libraries(rime-gears-obj PUBLIC + Boost::boost $<$:Iconv::Iconv> OpenCC::OpenCC) target_link_libraries(rime-levers-obj PUBLIC Boost::boost) From 46771943cd0b8d3874cd589b1279161b2e895b56 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:57:39 +0800 Subject: [PATCH 21/70] Revert "fix: ensure rime-gears-obj links against Boost library" This reverts commit 2ec7f93b7b18b8641636f9eb8dbbc0af666ba69c. --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 98c3aede5c..8d7c57dfab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -85,7 +85,6 @@ endif() target_link_libraries(rime-dict-obj PUBLIC Boost::boost LevelDB::LevelDB Marisa::Marisa) target_link_libraries(rime-gears-obj PUBLIC - Boost::boost $<$:Iconv::Iconv> OpenCC::OpenCC) target_link_libraries(rime-levers-obj PUBLIC Boost::boost) From 7b023078bd554f7088d7a30ce09379f3e56ad939 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:57:39 +0800 Subject: [PATCH 22/70] Revert "fix: link rime-plugins-obj against Boost library" This reverts commit 2968aed5a695b7a8903b6a006176605bc5e0a7f4. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8d7c57dfab..98a87c748d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,7 +89,7 @@ target_link_libraries(rime-gears-obj PUBLIC OpenCC::OpenCC) target_link_libraries(rime-levers-obj PUBLIC Boost::boost) if(rime_plugins_library) - target_link_libraries(rime-plugins-obj PUBLIC Boost::boost ${rime_plugins_deps}) + target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) endif() if(BUILD_SEPARATE_LIBS) From 938c2cbb35e785c4a495640b07184587f6f7affe Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 17:57:40 +0800 Subject: [PATCH 23/70] Revert "fix: update rime-dict-obj to link against Boost library" This reverts commit 9ae43904d0e17d216de88f81b4bfce3b65520d50. --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 98a87c748d..c16eedd741 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -83,7 +83,7 @@ if(MINGW) target_link_libraries(rime-core-obj PRIVATE wsock32 ws2_32 bcrypt) endif() -target_link_libraries(rime-dict-obj PUBLIC Boost::boost LevelDB::LevelDB Marisa::Marisa) +target_link_libraries(rime-dict-obj PUBLIC LevelDB::LevelDB Marisa::Marisa) target_link_libraries(rime-gears-obj PUBLIC $<$:Iconv::Iconv> OpenCC::OpenCC) From 932a656acf81509e1ecdf7ad74628d05c5bfec80 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 18:26:16 +0800 Subject: [PATCH 24/70] fix: update Boost and other libraries linkage for rime plugins --- CMakeLists.txt | 4 ++-- plugins/CMakeLists.txt | 1 + src/CMakeLists.txt | 12 ++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1524bd0bd1..b7911328f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,9 +53,9 @@ if(MSVC) endif() if(LINUX) - find_package(Boost 1.74.0 REQUIRED COMPONENTS regex) + find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) else() - find_package(Boost 1.77.0 REQUIRED) + find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) endif() add_definitions(-DBOOST_DLL_USE_STD_FS) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 09af61330c..665991f882 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -16,6 +16,7 @@ if(ENABLE_EXTERNAL_PLUGINS) PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() + target_link_libraries(rime-plugins-objs PUBLIC Boost::boost) set(plugins_objs ${plugins_objs} $) set(plugins_modules ${plugins_modules} "plugins") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c16eedd741..309c78c6da 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -65,6 +65,7 @@ endif() target_link_libraries(rime-core-obj PUBLIC Boost::boost + Boost::regex YamlCpp::YamlCpp $<$:Threads::Threads> ) @@ -83,11 +84,18 @@ if(MINGW) target_link_libraries(rime-core-obj PRIVATE wsock32 ws2_32 bcrypt) endif() -target_link_libraries(rime-dict-obj PUBLIC LevelDB::LevelDB Marisa::Marisa) +target_link_libraries(rime-dict-obj PUBLIC + Boost::boost + LevelDB::LevelDB + Marisa::Marisa) target_link_libraries(rime-gears-obj PUBLIC + Boost::boost + Boost::regex $<$:Iconv::Iconv> OpenCC::OpenCC) -target_link_libraries(rime-levers-obj PUBLIC Boost::boost) +target_link_libraries(rime-levers-obj PUBLIC + Boost::boost) + if(rime_plugins_library) target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) endif() From b6914c0ca007d26867285b4fc6cd7042dd525cf5 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 18:37:56 +0800 Subject: [PATCH 25/70] refactor: find boost using new policy --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b7911328f6..2a0da1de69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,11 +52,10 @@ if(MSVC) set(Boost_USE_STATIC_RUNTIME ON) endif() -if(LINUX) - find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) -else() - find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") + cmake_policy(SET CMP0167 NEW) endif() +find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) if(ENABLE_LOGGING) From b9b400cafa26c27352a92d48b90e8377d5164e7e Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 18:51:50 +0800 Subject: [PATCH 26/70] fix: update Boost find_package to use CONFIG mode --- CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a0da1de69..759323260d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,10 +52,7 @@ if(MSVC) set(Boost_USE_STATIC_RUNTIME ON) endif() -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") - cmake_policy(SET CMP0167 NEW) -endif() -find_package(Boost 1.77.0 REQUIRED COMPONENTS regex) +find_package(Boost CONFIG 1.77.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) if(ENABLE_LOGGING) From 381e53d59cfab07a755453b2c81893b4fa2391ed Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 19:00:32 +0800 Subject: [PATCH 27/70] fix: downgrade Boost version to 1.74.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 759323260d..124caf9140 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,7 @@ if(MSVC) set(Boost_USE_STATIC_RUNTIME ON) endif() -find_package(Boost CONFIG 1.77.0 REQUIRED COMPONENTS regex) +find_package(Boost CONFIG 1.74.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) if(ENABLE_LOGGING) From d459131729f334ad5ada1b24f0b163c4ad488776 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 19:07:13 +0800 Subject: [PATCH 28/70] fix: set CMake policy CMP0144 to NEW for Boost configuration --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 124caf9140..6aee05a122 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ if(MSVC) set(Boost_USE_STATIC_RUNTIME ON) endif() +cmake_policy(CMP0144 NEW) find_package(Boost CONFIG 1.74.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) From bf22d10c727c1e556428337460f15c66bdf52588 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 19:10:22 +0800 Subject: [PATCH 29/70] fix: set CMake policy CMP0144 using the SET command for Boost configuration --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6aee05a122..8353d9e22c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,7 @@ if(MSVC) set(Boost_USE_STATIC_RUNTIME ON) endif() -cmake_policy(CMP0144 NEW) +cmake_policy(SET CMP0144 NEW) find_package(Boost CONFIG 1.74.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) From b0adca352505044262a8f77e5fd31eb77ec92cd1 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 19:32:31 +0800 Subject: [PATCH 30/70] fix: update Boost configuration to use environment variable for BOOST_ROOT --- CMakeLists.txt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8353d9e22c..4bbc3bdc5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,16 +45,14 @@ if(ENABLE_ASAN) add_link_options(-fsanitize=address -lasan) endif() -set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) -set(Boost_USE_MULTITHREADED ON) -if(MSVC) - set(Boost_USE_STATIC_RUNTIME ON) +if(DEFINED ENV{BOOST_ROOT}) + list(PREPEND CMAKE_PREFIX_PATH "$ENV{BOOST_ROOT}") endif() - -cmake_policy(SET CMP0144 NEW) find_package(Boost CONFIG 1.74.0 REQUIRED COMPONENTS regex) add_definitions(-DBOOST_DLL_USE_STD_FS) +set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) +set(Boost_USE_MULTITHREADED ON) if(ENABLE_LOGGING) find_package(GFlags) From e86056441c152334277cb18b32cb04988fa58cfa Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 23:23:15 +0800 Subject: [PATCH 31/70] fix: install boost to provide BoostConfig.cmake --- .github/workflows/macos-build.yml | 2 +- .github/workflows/windows-build.yml | 2 +- CMakeLists.txt | 4 +--- install-boost.bat | 34 ++++++++++++++++++++--------- install-boost.sh | 6 ++++- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/.github/workflows/macos-build.yml b/.github/workflows/macos-build.yml index f0e0cfc06e..088d519738 100644 --- a/.github/workflows/macos-build.yml +++ b/.github/workflows/macos-build.yml @@ -45,7 +45,7 @@ jobs: echo BUILD_UNIVERSAL=1 >> $GITHUB_ENV - name: Install Boost - run: ./install-boost.sh + run: ./install-boost.sh --download --build - name: Check submodules run: git submodule > submodule-status diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index adfd0e8c16..7da3ccb12c 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -66,7 +66,7 @@ jobs: git submodule > submodule-status - name: Install boost - run: .\install-boost.bat + run: .\install-boost.bat --build - name: Cache dependencies id: cache-deps diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bbc3bdc5e..660490c690 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,10 +46,8 @@ if(ENABLE_ASAN) endif() -if(DEFINED ENV{BOOST_ROOT}) - list(PREPEND CMAKE_PREFIX_PATH "$ENV{BOOST_ROOT}") -endif() find_package(Boost CONFIG 1.74.0 REQUIRED COMPONENTS regex) + add_definitions(-DBOOST_DLL_USE_STD_FS) set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) set(Boost_USE_MULTITHREADED ON) diff --git a/install-boost.bat b/install-boost.bat index 0d2d199d06..e6e1621c8b 100644 --- a/install-boost.bat +++ b/install-boost.bat @@ -6,17 +6,31 @@ if not defined boost_version set boost_version=1.89.0 if not defined boost_tarball set boost_tarball=boost_%boost_version:.=_% -if not defined BOOST_ROOT set BOOST_ROOT=%RIME_ROOT%\deps\boost-%boost_version% +if not defined BOOST_ROOT set BOOST_ROOT=%RIME_ROOT%\deps\boost-%boost_version% +if not defined BOOST_PREFIX set BOOST_PREFIX=%RIME_ROOT% +if not defined boost_libs set boost_libs=regex,locale + +set do_build=0 +for %%A in (%*) do ( + if /I "%%A"=="--build" set do_build=1 +) -if exist "%BOOST_ROOT%\libs" goto boost_found -for %%I in ("%BOOST_ROOT%\.") do set src_dir=%%~dpI -rem download boost source +if exist "%BOOST_ROOT%\libs" goto boost_found +for %%I in ("%BOOST_ROOT%\.") do set src_dir=%%~dpI +rem download boost source aria2c https://archives.boost.io/release/%boost_version%/source/%boost_tarball%.7z -d %src_dir% pushd %src_dir% 7z x %boost_tarball%.7z -ren %boost_tarball% boost-%boost_version% -cd boost-%boost_version% -call .\bootstrap.bat -.\b2 headers -popd -:boost_found +ren %boost_tarball% boost-%boost_version% +cd boost-%boost_version% +call .\bootstrap.bat --with-libraries=%boost_libs% +.\b2 headers +popd +:boost_found + +if %do_build%==1 ( + pushd %BOOST_ROOT% + call .\bootstrap.bat --with-libraries=%boost_libs% + .\b2 -q -a link=static --with-libraries=%boost_libs% install --prefix="%BOOST_PREFIX%" + popd +) diff --git a/install-boost.sh b/install-boost.sh index 77adc19785..1ce6b6d17d 100755 --- a/install-boost.sh +++ b/install-boost.sh @@ -6,6 +6,8 @@ RIME_ROOT="$(cd "$(dirname "$0")"; pwd)" boost_version="${boost_version=1.89.0}" BOOST_ROOT="${BOOST_ROOT=${RIME_ROOT}/deps/boost-${boost_version}}" +BOOST_PREFIX="${BOOST_PREFIX=${RIME_ROOT}}" +boost_libs="${boost_libs=regex,locale}" boost_tarball="boost_${boost_version//./_}.tar.gz" download_url="https://archives.boost.io/release/${boost_version}/source/${boost_tarball}" @@ -27,7 +29,7 @@ boost_cxxflags='-arch arm64 -arch x86_64' build_boost_macos() { cd "${BOOST_ROOT}" ./bootstrap.sh --with-toolset=clang --with-libraries="${boost_libs}" - ./b2 -q -a link=static architecture=arm cxxflags="${boost_cxxflags}" stage + ./b2 -q -a link=static architecture=arm cxxflags="${boost_cxxflags}" install --prefix="${BOOST_PREFIX}" for lib in stage/lib/*.a; do lipo $lib -info done @@ -46,5 +48,7 @@ fi if [[ ($# -eq 0 || " $* " =~ ' --build ') && -n "${boost_libs}" ]]; then if [[ "$OSTYPE" =~ 'darwin' ]]; then build_boost_macos + else + ./b2 -q -a link=static install --prefix="${BOOST_PREFIX}" fi fi From 8e06c996be6197720f97b8ba290ef8d35788e556 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 11 Jan 2026 23:34:39 +0800 Subject: [PATCH 32/70] fix: scripts for building boost --- install-boost.bat | 8 ++++++-- install-boost.sh | 3 --- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/install-boost.bat b/install-boost.bat index e6e1621c8b..48c842c4de 100644 --- a/install-boost.bat +++ b/install-boost.bat @@ -1,4 +1,4 @@ -setlocal +setlocal EnableDelayedExpansion if not defined RIME_ROOT set RIME_ROOT=%CD% @@ -9,6 +9,10 @@ if not defined boost_tarball set boost_tarball=boost_%boost_version:.=_% if not defined BOOST_ROOT set BOOST_ROOT=%RIME_ROOT%\deps\boost-%boost_version% if not defined BOOST_PREFIX set BOOST_PREFIX=%RIME_ROOT% if not defined boost_libs set boost_libs=regex,locale +set BOOST_WITH_LIBS= +for %%L in (%boost_libs:,= %) do ( + set BOOST_WITH_LIBS=!BOOST_WITH_LIBS! --with-%%L +) set do_build=0 for %%A in (%*) do ( @@ -31,6 +35,6 @@ popd if %do_build%==1 ( pushd %BOOST_ROOT% call .\bootstrap.bat --with-libraries=%boost_libs% - .\b2 -q -a link=static --with-libraries=%boost_libs% install --prefix="%BOOST_PREFIX%" + .\b2 -q -a link=static %BOOST_WITH_LIBS% install --prefix="%BOOST_PREFIX%" popd ) diff --git a/install-boost.sh b/install-boost.sh index 1ce6b6d17d..a06aae78d2 100755 --- a/install-boost.sh +++ b/install-boost.sh @@ -30,9 +30,6 @@ build_boost_macos() { cd "${BOOST_ROOT}" ./bootstrap.sh --with-toolset=clang --with-libraries="${boost_libs}" ./b2 -q -a link=static architecture=arm cxxflags="${boost_cxxflags}" install --prefix="${BOOST_PREFIX}" - for lib in stage/lib/*.a; do - lipo $lib -info - done } if [[ $# -eq 0 || " $* " =~ ' --download ' ]]; then From e48679dcfac3d529335907fdfb0d298a52601af4 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 12 Jan 2026 00:55:12 +0800 Subject: [PATCH 33/70] fix: enhance Boost installation script to require BOOST_TOOLSET --- .github/workflows/windows-build.yml | 1 + install-boost.bat | 10 +++++++--- test/CMakeLists.txt | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 7da3ccb12c..611e4078e5 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -24,6 +24,7 @@ jobs: - { compiler: msvc, arch: x86, cross_arch: x64_x86 } env: boost_version: 1.89.0 + BOOST_TOOLSET: ${{ matrix.compiler == 'clang' && 'clang-win' || 'msvc' }} BOOST_ROOT: ${{ github.workspace }}\deps\boost-1.89.0 RIME_PLUGINS: ${{ inputs.rime_plugins }} diff --git a/install-boost.bat b/install-boost.bat index 48c842c4de..98f0d27cec 100644 --- a/install-boost.bat +++ b/install-boost.bat @@ -9,6 +9,10 @@ if not defined boost_tarball set boost_tarball=boost_%boost_version:.=_% if not defined BOOST_ROOT set BOOST_ROOT=%RIME_ROOT%\deps\boost-%boost_version% if not defined BOOST_PREFIX set BOOST_PREFIX=%RIME_ROOT% if not defined boost_libs set boost_libs=regex,locale +if not defined BOOST_TOOLSET ( + echo ERROR: BOOST_TOOLSET is not set. Set BOOST_TOOLSET to msvc or clang-win. + exit /b 1 +) set BOOST_WITH_LIBS= for %%L in (%boost_libs:,= %) do ( set BOOST_WITH_LIBS=!BOOST_WITH_LIBS! --with-%%L @@ -27,14 +31,14 @@ pushd %src_dir% 7z x %boost_tarball%.7z ren %boost_tarball% boost-%boost_version% cd boost-%boost_version% -call .\bootstrap.bat --with-libraries=%boost_libs% +call .\bootstrap.bat --with-libraries=%boost_libs% --with-toolset=%BOOST_TOOLSET% .\b2 headers popd :boost_found if %do_build%==1 ( pushd %BOOST_ROOT% - call .\bootstrap.bat --with-libraries=%boost_libs% - .\b2 -q -a link=static %BOOST_WITH_LIBS% install --prefix="%BOOST_PREFIX%" + call .\bootstrap.bat --with-libraries=%boost_libs% --with-toolset=%BOOST_TOOLSET% + .\b2 -q -a link=static toolset=%BOOST_TOOLSET% %BOOST_WITH_LIBS% install --prefix="%BOOST_PREFIX%" popd ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b4e1368078..baba1f6599 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,7 +27,7 @@ if(BUILD_SHARED_LIBS) target_compile_definitions(rime_test PRIVATE RIME_IMPORTS) endif(BUILD_SHARED_LIBS) -add_test(NAME rime_test COMMAND rime_test +add_test(NAME rime_test COMMAND $ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/data/test") if(WIN32) add_dependencies(rime_test copy_librime_to_test) From 1fb0f1762927c3460c4d7b88a104f302018d877d Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 12 Jan 2026 01:25:06 +0800 Subject: [PATCH 34/70] fix: set ARCHIVE_OUTPUT_DIRECTORY for library targets in CMakeLists.txt --- src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 309c78c6da..3af7e0ee0c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,7 @@ function(rime_add_module name obj_target) VERSION ${rime_version} SOVERSION ${rime_soversion} LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) if(XCODE_VERSION) set_target_properties(${name} PROPERTIES INSTALL_NAME_DIR "@rpath") @@ -127,6 +128,7 @@ set_target_properties(rime PROPERTIES VERSION ${rime_version} SOVERSION ${rime_soversion} LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) if(XCODE_VERSION) set_target_properties(rime PROPERTIES INSTALL_NAME_DIR "@rpath") From e101fffc9dc70ad48cd993de7e18d37d794f7511 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 12 Jan 2026 17:45:37 +0800 Subject: [PATCH 35/70] fix: ensure plugin directories contain CMakeLists.txt in CMakeLists.txt --- plugins/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 665991f882..1dedb89242 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -33,7 +33,7 @@ if(DEFINED ENV{RIME_PLUGINS}) else() file(GLOB plugin_files "*") foreach(file ${plugin_files}) - if(IS_DIRECTORY ${file}) + if(IS_DIRECTORY ${file} AND EXISTS "${file}/CMakeLists.txt") message(STATUS "Found plugin: ${file}") set(plugins ${plugins} ${file}) endif() From 98eb97c128aae30eda8899291252f4d10ddd9e2f Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 12 Jan 2026 23:24:25 +0800 Subject: [PATCH 36/70] fix: improve Boost installation script to check for existing installation before building --- install-boost.bat | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/install-boost.bat b/install-boost.bat index 98f0d27cec..a56f87d808 100644 --- a/install-boost.bat +++ b/install-boost.bat @@ -13,6 +13,9 @@ if not defined BOOST_TOOLSET ( echo ERROR: BOOST_TOOLSET is not set. Set BOOST_TOOLSET to msvc or clang-win. exit /b 1 ) +set BOOST_CONFIG_DIR=%BOOST_PREFIX%\lib\cmake\Boost-%boost_version% +set BOOST_CONFIG_FILE=%BOOST_CONFIG_DIR%\BoostConfig.cmake +set boost_needs_build=1 set BOOST_WITH_LIBS= for %%L in (%boost_libs:,= %) do ( set BOOST_WITH_LIBS=!BOOST_WITH_LIBS! --with-%%L @@ -37,8 +40,15 @@ popd :boost_found if %do_build%==1 ( - pushd %BOOST_ROOT% - call .\bootstrap.bat --with-libraries=%boost_libs% --with-toolset=%BOOST_TOOLSET% - .\b2 -q -a link=static toolset=%BOOST_TOOLSET% %BOOST_WITH_LIBS% install --prefix="%BOOST_PREFIX%" - popd + if exist "%BOOST_CONFIG_FILE%" set boost_needs_build=0 + if %boost_needs_build%==1 ( + pushd %BOOST_ROOT% + if not exist b2.exe ( + call .\bootstrap.bat --with-libraries=%boost_libs% --with-toolset=%BOOST_TOOLSET% + ) + .\b2 -q -a link=static toolset=%BOOST_TOOLSET% %BOOST_WITH_LIBS% install --prefix="%BOOST_PREFIX%" + popd + ) else ( + echo Boost already installed at "%BOOST_PREFIX%". Skipping build. + ) ) From 29f45e1a9990bc3737f058e2ff35277500006664 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Tue, 13 Jan 2026 21:43:16 +0800 Subject: [PATCH 37/70] fix: add RIME_EXPORTS compile definitions for core and plugin targets --- src/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3af7e0ee0c..b56ebfbb8e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,6 +57,13 @@ if(BUILD_SHARED_LIBS) if(rime_plugins_library) set_target_properties(rime-plugins-obj PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() + target_compile_definitions(rime-core-obj PUBLIC RIME_EXPORTS) + target_compile_definitions(rime-dict-obj PUBLIC RIME_EXPORTS) + target_compile_definitions(rime-gears-obj PUBLIC RIME_EXPORTS) + target_compile_definitions(rime-levers-obj PUBLIC RIME_EXPORTS) + if(rime_plugins_library) + target_compile_definitions(rime-plugins-obj PUBLIC RIME_EXPORTS) + endif() endif() if(ENABLE_EXTERNAL_PLUGINS) From 3c200c1178b262f09073b3cda5fafc3f5cab1aeb Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 11:08:43 +0800 Subject: [PATCH 38/70] fix: add RIME_DLL specifier to Deployer class --- src/rime/deployer.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rime/deployer.h b/src/rime/deployer.h index c13bc10fda..2274a973fd 100644 --- a/src/rime/deployer.h +++ b/src/rime/deployer.h @@ -29,7 +29,7 @@ class DeploymentTask : public Class { virtual bool Run(Deployer* deployer) = 0; }; -class Deployer : public Messenger { +class RIME_DLL Deployer : public Messenger { public: // read-only access after library initialization { path shared_data_dir; @@ -45,8 +45,8 @@ class Deployer : public Messenger { bool backup_config_files; // } - RIME_DLL Deployer(); - RIME_DLL ~Deployer(); + Deployer(); + ~Deployer(); bool RunTask(const string& task_name, TaskInitializer arg = TaskInitializer()); From b8e178e675b67bde20674607eeeae5f11343ef87 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 11:58:46 +0800 Subject: [PATCH 39/70] fix: remove Windows-specific copy target for librime in CMakeLists.txt --- test/CMakeLists.txt | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index baba1f6599..d9d55613b5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,19 +1,3 @@ -if(WIN32) - if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) - add_custom_target(copy_librime_to_test - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Copying librime (separated) to test" - ) - else() - add_custom_target(copy_librime_to_test - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Copying librime (full) to test" - ) - endif() -endif() - aux_source_directory(. rime_test_src) add_executable(rime_test ${rime_test_src}) target_link_libraries(rime_test @@ -29,6 +13,3 @@ endif(BUILD_SHARED_LIBS) add_test(NAME rime_test COMMAND $ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/data/test") -if(WIN32) - add_dependencies(rime_test copy_librime_to_test) -endif() From 27b3b7b51942b8f2c637da64e2c726b16369a2c0 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 12:16:54 +0800 Subject: [PATCH 40/70] fix: add RIME_DLL specifier to UniqueTranslation class --- src/rime/translation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rime/translation.h b/src/rime/translation.h index d567db3f71..e7702f85dd 100644 --- a/src/rime/translation.h +++ b/src/rime/translation.h @@ -38,7 +38,7 @@ class RIME_DLL Translation { bool exhausted_ = false; }; -class UniqueTranslation : public Translation { +class RIME_DLL UniqueTranslation : public Translation { public: UniqueTranslation(an candidate) : candidate_(candidate) { set_exhausted(!candidate); From 3da7d77722f4d1977db0c5cdd4e1a8c02cacfd27 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 15:21:36 +0800 Subject: [PATCH 41/70] fix: change RIME_EXPORTS from PUBLIC to PRIVATE for core and plugin targets --- src/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b56ebfbb8e..9a5489f11c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,12 +57,12 @@ if(BUILD_SHARED_LIBS) if(rime_plugins_library) set_target_properties(rime-plugins-obj PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - target_compile_definitions(rime-core-obj PUBLIC RIME_EXPORTS) - target_compile_definitions(rime-dict-obj PUBLIC RIME_EXPORTS) - target_compile_definitions(rime-gears-obj PUBLIC RIME_EXPORTS) - target_compile_definitions(rime-levers-obj PUBLIC RIME_EXPORTS) + target_compile_definitions(rime-core-obj PRIVATE RIME_EXPORTS) + target_compile_definitions(rime-dict-obj PRIVATE RIME_EXPORTS) + target_compile_definitions(rime-gears-obj PRIVATE RIME_EXPORTS) + target_compile_definitions(rime-levers-obj PRIVATE RIME_EXPORTS) if(rime_plugins_library) - target_compile_definitions(rime-plugins-obj PUBLIC RIME_EXPORTS) + target_compile_definitions(rime-plugins-obj PRIVATE RIME_EXPORTS) endif() endif() From 87bea794924e7c4ec33485261707361857805b61 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 15:47:04 +0800 Subject: [PATCH 42/70] refactor: remove vendored cmake packages finding scripts --- CMakeLists.txt | 2 +- cmake/FindGFlags.cmake | 17 ----------------- cmake/FindGLog.cmake | 17 ----------------- cmake/FindLevelDB.cmake | 17 ----------------- cmake/FindMarisa.cmake | 17 ----------------- cmake/FindOpenCC.cmake | 17 ----------------- cmake/FindYamlCpp.cmake | 21 --------------------- src/CMakeLists.txt | 6 +++--- 8 files changed, 4 insertions(+), 110 deletions(-) delete mode 100644 cmake/FindGFlags.cmake delete mode 100644 cmake/FindGLog.cmake delete mode 100644 cmake/FindLevelDB.cmake delete mode 100644 cmake/FindMarisa.cmake delete mode 100644 cmake/FindOpenCC.cmake delete mode 100644 cmake/FindYamlCpp.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 660490c690..187dfa1e48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ if(BUILD_TEST) endif() endif() -find_package(YamlCpp REQUIRED) +find_package(yaml-cpp REQUIRED) if(WITH_STATIC_DEPS) add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() diff --git a/cmake/FindGFlags.cmake b/cmake/FindGFlags.cmake deleted file mode 100644 index 9a06798db1..0000000000 --- a/cmake/FindGFlags.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(GFLAGS_INCLUDE_DIR NAMES gflags.h) - -find_library(GFLAGS_LIBRARY NAMES gflags libgflags) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GFlags - DEFAULT_MSG GFLAGS_LIBRARY GFLAGS_INCLUDE_DIR -) -if(GFLAGS_FOUND AND NOT TARGET GFlags::GFlags) - add_library(GFlags::GFlags UNKNOWN IMPORTED) - set_target_properties(GFlags::GFlags PROPERTIES - IMPORTED_LOCATION "${GFLAGS_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${GFLAGS_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY) diff --git a/cmake/FindGLog.cmake b/cmake/FindGLog.cmake deleted file mode 100644 index 45099d64f4..0000000000 --- a/cmake/FindGLog.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(GLOG_INCLUDE_DIR NAMES glog/logging.h) - -find_library(GLOG_LIBRARY NAMES glog glogd libglog) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GLog - DEFAULT_MSG GLOG_LIBRARY GLOG_INCLUDE_DIR -) -if(GLOG_FOUND AND NOT TARGET GLog::GLog) - add_library(GLog::GLog UNKNOWN IMPORTED) - set_target_properties(GLog::GLog PROPERTIES - IMPORTED_LOCATION "${GLOG_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(GLOG_INCLUDE_DIR GLOG_LIBRARY) diff --git a/cmake/FindLevelDB.cmake b/cmake/FindLevelDB.cmake deleted file mode 100644 index 972637176e..0000000000 --- a/cmake/FindLevelDB.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(LEVELDB_INCLUDE_DIR NAMES leveldb/db.h) - -find_library(LEVELDB_LIBRARY NAMES leveldb libleveldb) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LevelDB - DEFAULT_MSG LEVELDB_LIBRARY LEVELDB_INCLUDE_DIR -) -if(LEVELDB_FOUND AND NOT TARGET LevelDB::LevelDB) - add_library(LevelDB::LevelDB UNKNOWN IMPORTED) - set_target_properties(LevelDB::LevelDB PROPERTIES - IMPORTED_LOCATION "${LEVELDB_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${LEVELDB_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(LEVELDB_INCLUDE_DIR LEVELDB_LIBRARY) diff --git a/cmake/FindMarisa.cmake b/cmake/FindMarisa.cmake deleted file mode 100644 index 59e3ae2b76..0000000000 --- a/cmake/FindMarisa.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(MARISA_INCLUDE_DIR NAMES marisa.h) - -find_library(MARISA_LIBRARY NAMES marisa libmarisa) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Marisa - DEFAULT_MSG MARISA_LIBRARY MARISA_INCLUDE_DIR -) -if(MARISA_FOUND AND NOT TARGET Marisa::Marisa) - add_library(Marisa::Marisa UNKNOWN IMPORTED) - set_target_properties(Marisa::Marisa PROPERTIES - IMPORTED_LOCATION "${MARISA_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${MARISA_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(MARISA_INCLUDE_DIR MARISA_LIBRARY) diff --git a/cmake/FindOpenCC.cmake b/cmake/FindOpenCC.cmake deleted file mode 100644 index eae70fb2e9..0000000000 --- a/cmake/FindOpenCC.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(OPENCC_INCLUDE_DIR NAMES opencc/opencc.h) - -find_library(OPENCC_LIBRARY NAMES opencc) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenCC - DEFAULT_MSG OPENCC_LIBRARY OPENCC_INCLUDE_DIR -) -if(OPENCC_FOUND AND NOT TARGET OpenCC::OpenCC) - add_library(OpenCC::OpenCC UNKNOWN IMPORTED) - set_target_properties(OpenCC::OpenCC PROPERTIES - IMPORTED_LOCATION "${OPENCC_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${OPENCC_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(OPENCC_INCLUDE_DIR OPENCC_LIBRARY) diff --git a/cmake/FindYamlCpp.cmake b/cmake/FindYamlCpp.cmake deleted file mode 100644 index e1b5bbaa1c..0000000000 --- a/cmake/FindYamlCpp.cmake +++ /dev/null @@ -1,21 +0,0 @@ -find_path(YAML_CPP_INCLUDE_DIR NAMES yaml-cpp/yaml.h) - -# Find library -find_library(YAML_CPP_LIBRARY NAMES yaml-cpp libyaml-cpp) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(YamlCpp - DEFAULT_MSG YAML_CPP_LIBRARY YAML_CPP_INCLUDE_DIR -) - -if(YamlCpp_FOUND AND NOT TARGET YamlCpp::YamlCpp) - set(YAML_CPP_LIBRARIES ${YAML_CPP_LIBRARY}) - add_library(YamlCpp::YamlCpp UNKNOWN IMPORTED) - set_target_properties(YamlCpp::YamlCpp PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${YAML_CPP_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${YAML_CPP_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(YAML_CPP_INCLUDE_DIR YAML_CPP_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9a5489f11c..96a60d35fb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -74,7 +74,7 @@ endif() target_link_libraries(rime-core-obj PUBLIC Boost::boost Boost::regex - YamlCpp::YamlCpp + yaml-cpp::yaml-cpp $<$:Threads::Threads> ) @@ -94,8 +94,8 @@ endif() target_link_libraries(rime-dict-obj PUBLIC Boost::boost - LevelDB::LevelDB - Marisa::Marisa) + leveldb::leveldb + Marisa::marisa) target_link_libraries(rime-gears-obj PUBLIC Boost::boost Boost::regex From d7b46ca50997254ff8700891ccc580e0e92635fb Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 16:20:00 +0800 Subject: [PATCH 43/70] fix: update package names to non-vendored finding names --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 187dfa1e48..4f700119fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,8 +105,8 @@ if(WITH_STATIC_DEPS) add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() -find_package(LevelDB REQUIRED) -find_package(Marisa REQUIRED) +find_package(leveldb REQUIRED) +find_package(marisa REQUIRED) find_package(OpenCC REQUIRED) if(WITH_STATIC_DEPS) From 89e78fb2ef3275504f513f992e7a5373c9acc2d5 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 16:54:55 +0800 Subject: [PATCH 44/70] fix: correct case of Marisa package name in CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f700119fa..3e99e1bc40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,7 +106,7 @@ if(WITH_STATIC_DEPS) endif() find_package(leveldb REQUIRED) -find_package(marisa REQUIRED) +find_package(Marisa REQUIRED) find_package(OpenCC REQUIRED) if(WITH_STATIC_DEPS) From 5763ae0cb143a008984f3aa4c73ba0a9cf0d68c8 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 17:39:50 +0800 Subject: [PATCH 45/70] fix: update find_package calls to use CONFIG for GFlags, GLog, GTest, yaml-cpp, leveldb, Marisa, and OpenCC --- CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e99e1bc40..573212ccbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,8 +53,8 @@ set(Boost_USE_STATIC_LIBS ${WITH_STATIC_DEPS}) set(Boost_USE_MULTITHREADED ON) if(ENABLE_LOGGING) - find_package(GFlags) - find_package(GLog REQUIRED) + find_package(GFlags CONFIG QUIET) + find_package(GLog CONFIG REQUIRED) if(Glog_FOUND) if(WIN32) add_compile_definitions("GLOG_DEPRECATED=__declspec(deprecated)") @@ -94,21 +94,21 @@ if(NOT ENABLE_TIMESTAMP) endif() if(BUILD_TEST) - find_package(GTest REQUIRED) + find_package(GTest CONFIG REQUIRED) if(GTEST_FOUND) enable_testing() endif() endif() -find_package(yaml-cpp REQUIRED) +find_package(yaml-cpp CONFIG REQUIRED) if(WITH_STATIC_DEPS) add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() -find_package(leveldb REQUIRED) -find_package(Marisa REQUIRED) +find_package(leveldb CONFIG REQUIRED) +find_package(Marisa CONFIG REQUIRED) -find_package(OpenCC REQUIRED) +find_package(OpenCC CONFIG REQUIRED) if(WITH_STATIC_DEPS) add_definitions(-DOpencc_BUILT_AS_STATIC) endif() From fb1539fa8e7de65eaf30242047cd68928e260c17 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 19:01:09 +0800 Subject: [PATCH 46/70] fix: add support for Marisa package with fallback to MODULE finding --- CMakeLists.txt | 7 ++++++- cmake/FindMarisa.cmake | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 cmake/FindMarisa.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f41ab1fe69..38f5db4e18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,7 +106,12 @@ if(WITH_STATIC_DEPS) endif() find_package(leveldb CONFIG REQUIRED) -find_package(Marisa CONFIG REQUIRED) + +# debian 12 used in docker CI and ubuntu 24 Linux in CI do not have Marisa cmake config file +find_package(Marisa CONFIG QUIET) +if(NOT Marisa_FOUND) + find_package(Marisa MODULE REQUIRED) +endif() find_package(OpenCC CONFIG REQUIRED) if(WITH_STATIC_DEPS) diff --git a/cmake/FindMarisa.cmake b/cmake/FindMarisa.cmake new file mode 100644 index 0000000000..26612a6d8f --- /dev/null +++ b/cmake/FindMarisa.cmake @@ -0,0 +1,17 @@ +find_path(MARISA_INCLUDE_DIR NAMES marisa.h) + +find_library(MARISA_LIBRARY NAMES marisa libmarisa) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Marisa + DEFAULT_MSG MARISA_LIBRARY MARISA_INCLUDE_DIR +) +if(MARISA_FOUND AND NOT TARGET Marisa::marisa) + add_library(Marisa::marisa UNKNOWN IMPORTED) + set_target_properties(Marisa::marisa PROPERTIES + IMPORTED_LOCATION "${MARISA_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${MARISA_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(MARISA_INCLUDE_DIR MARISA_LIBRARY) From a55fbfef6155e6e09d9f60673d29cd8d9bc3138d Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 19:58:14 +0800 Subject: [PATCH 47/70] fix: improve OpenCC package finding with fallback to MODULE --- CMakeLists.txt | 6 +++++- cmake/FindOpenCC.cmake | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 cmake/FindOpenCC.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 38f5db4e18..3348956704 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,7 +113,11 @@ if(NOT Marisa_FOUND) find_package(Marisa MODULE REQUIRED) endif() -find_package(OpenCC CONFIG REQUIRED) +# debian 12 used in docker CI do not have OpenCC cmake config file +find_package(OpenCC CONFIG QUIET) +if(NOT OpenCC_FOUND) + find_package(OpenCC MODULE REQUIRED) +endif() if(WITH_STATIC_DEPS) add_definitions(-DOpencc_BUILT_AS_STATIC) endif() diff --git a/cmake/FindOpenCC.cmake b/cmake/FindOpenCC.cmake new file mode 100644 index 0000000000..eae70fb2e9 --- /dev/null +++ b/cmake/FindOpenCC.cmake @@ -0,0 +1,17 @@ +find_path(OPENCC_INCLUDE_DIR NAMES opencc/opencc.h) + +find_library(OPENCC_LIBRARY NAMES opencc) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenCC + DEFAULT_MSG OPENCC_LIBRARY OPENCC_INCLUDE_DIR +) +if(OPENCC_FOUND AND NOT TARGET OpenCC::OpenCC) + add_library(OpenCC::OpenCC UNKNOWN IMPORTED) + set_target_properties(OpenCC::OpenCC PROPERTIES + IMPORTED_LOCATION "${OPENCC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${OPENCC_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(OPENCC_INCLUDE_DIR OPENCC_LIBRARY) From 83adf2573f7e1af8b09f899ed20f3c0a9bbd7f70 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 20:13:05 +0800 Subject: [PATCH 48/70] fix: update base image to Debian 13.3 and add version info file --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4a5e2d2b07..4b9b673b49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:12.1 +FROM debian:13.3 RUN apt update && apt install -y \ git \ From b45ebb2a21a57e9aad15c833250b581eb261ff9d Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Thu, 15 Jan 2026 20:49:11 +0800 Subject: [PATCH 49/70] fix: adjust OpenCC package finding to prioritize CONFIG over MODULE --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3348956704..058e8c32a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,11 +113,7 @@ if(NOT Marisa_FOUND) find_package(Marisa MODULE REQUIRED) endif() -# debian 12 used in docker CI do not have OpenCC cmake config file find_package(OpenCC CONFIG QUIET) -if(NOT OpenCC_FOUND) - find_package(OpenCC MODULE REQUIRED) -endif() if(WITH_STATIC_DEPS) add_definitions(-DOpencc_BUILT_AS_STATIC) endif() From e11b91c505905f3dd04b50c48fd0157180e8c49d Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 00:01:51 +0800 Subject: [PATCH 50/70] Fix rime target aggregation and shared/static split --- CMakeLists.txt | 13 +++++---- src/CMakeLists.txt | 68 ++++++++++++++++++++++++++++++---------------- 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 058e8c32a8..b855b2eec6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -205,13 +205,16 @@ endif() if(BUILD_SHARED_LIBS) add_definitions(-DRIME_BUILD_SHARED_LIBS) + set(rime_core_library rime-core) + if(BUILD_SEPARATE_LIBS) + set(rime_dict_library rime-dict) + set(rime_gears_library rime-gears) + set(rime_levers_library rime-levers) + endif() +else() + set(rime_core_library rime-static) endif() set(rime_library rime) -if(BUILD_SEPARATE_LIBS) - set(rime_dict_library rime-dict) - set(rime_gears_library rime-gears) - set(rime_levers_library rime-levers) -endif() add_subdirectory(plugins) message(STATUS "rime_plugins_libs: ${rime_plugins_deps}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 96a60d35fb..276e79ff50 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,7 @@ function(rime_add_module name obj_target) add_library(${name} $) target_link_libraries(${name} ${obj_target} + ${rime_core_library} ${ARGN}) set_target_properties(${name} PROPERTIES VERSION ${rime_version} @@ -128,35 +129,54 @@ else() endif() endif() -add_library(rime ${rime_src}) -target_link_libraries(rime ${rime_obj_targets}) -set_target_properties(rime PROPERTIES - DEFINE_SYMBOL "RIME_EXPORTS" - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) -if(XCODE_VERSION) - set_target_properties(rime PROPERTIES INSTALL_NAME_DIR "@rpath") -endif() -install(TARGETS rime DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) -if(MSVC) - install(FILES $ - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} - OPTIONAL) +if(BUILD_SHARED_LIBS) + add_library(${rime_core_library} ${rime_src}) + target_link_libraries(${rime_core_library} ${rime_obj_targets}) + set_target_properties(${rime_core_library} PROPERTIES + OUTPUT_NAME "rime" + DEFINE_SYMBOL "RIME_EXPORTS" + VERSION ${rime_version} + SOVERSION ${rime_soversion} + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + if(XCODE_VERSION) + set_target_properties(${rime_core_library} PROPERTIES INSTALL_NAME_DIR "@rpath") + endif() + install(TARGETS ${rime_core_library} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + if(MSVC) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + OPTIONAL) + endif() +else() + add_library(${rime_core_library} STATIC ${rime_src}) + target_link_libraries(${rime_core_library} ${rime_obj_targets}) + set_target_properties(${rime_core_library} PROPERTIES + OUTPUT_NAME "rime" + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) + install(TARGETS ${rime_core_library} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) endif() -if(BUILD_SEPARATE_LIBS) - rime_add_module(rime-dict rime-dict-obj ${rime_library}) - rime_add_module(rime-gears rime-gears-obj ${rime_library} ${rime_dict_library}) - rime_add_module(rime-levers rime-levers-obj ${rime_library} ${rime_dict_library}) +# Aggregate target for consumers that want all modules. +add_library(rime INTERFACE) +target_link_libraries(rime INTERFACE ${rime_core_library}) + +if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) + rime_add_module(rime-dict rime-dict-obj) + rime_add_module(rime-gears rime-gears-obj ${rime_dict_library}) + rime_add_module(rime-levers rime-levers-obj ${rime_dict_library}) if(rime_plugins_library) rime_add_module(rime-plugins rime-plugins-obj - ${rime_library} - ${rime_dict_library} - ${rime_gears_library}) + ${rime_library}) + endif() + + if(TARGET rime) + target_link_libraries(rime INTERFACE rime-dict rime-gears rime-levers) + if(rime_plugins_library) + target_link_libraries(rime INTERFACE rime-plugins) + endif() endif() endif() From f935f094f6fcc577044a5fa877c29a961b90f92b Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 01:41:46 +0800 Subject: [PATCH 51/70] refactor: streamline rime module handling and remove static target option --- CMakeLists.txt | 4 - src/CMakeLists.txt | 279 ++++++++++++++++++++++----------------------- 2 files changed, 134 insertions(+), 149 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b855b2eec6..e15b9fc391 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,6 @@ option(WITH_STATIC_DEPS "Build with static dependency libraries" OFF) option(BUILD_SAMPLE "Build sample Rime plugin" OFF) option(BUILD_TEST "Build and run tests" ON) option(BUILD_SEPARATE_LIBS "Build separate rime-* libraries" OFF) -option(BUILD_ALWAYS_STATIC_TARGET "Also build a static rime target regardless of BUILD_SHARED_LIBS" OFF) option(ENABLE_LOGGING "Enable logging with google-glog library" ON) option(ALSO_LOG_TO_STDERR "Log to stderr as well as log file" OFF) option(ENABLE_ASAN "Enable Address Sanitizer (Unix Only)" OFF) @@ -205,14 +204,11 @@ endif() if(BUILD_SHARED_LIBS) add_definitions(-DRIME_BUILD_SHARED_LIBS) - set(rime_core_library rime-core) if(BUILD_SEPARATE_LIBS) set(rime_dict_library rime-dict) set(rime_gears_library rime-gears) set(rime_levers_library rime-levers) endif() -else() - set(rime_core_library rime-static) endif() set(rime_library rime) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 276e79ff50..b0a79f52ec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,181 +23,170 @@ set(rime_dict_module_src ${rime_algo_src} ${rime_dict_src}) -function(rime_add_module name obj_target) - add_library(${name} $) - target_link_libraries(${name} - ${obj_target} - ${rime_core_library} - ${ARGN}) - set_target_properties(${name} PROPERTIES - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(${name} PROPERTIES INSTALL_NAME_DIR "@rpath") +function(rime_add_module module_name) + set(options) + set(one_value_args) + set(multi_value_args SOURCES PUBLIC_DEPS PRIVATE_DEPS LIB_DEPS OBJ_TARGETS) + cmake_parse_arguments(MODULE "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN}) + + if(NOT MODULE_SOURCES) + message(FATAL_ERROR "rime_add_module(${module_name}) requires SOURCES") endif() - install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) -endfunction() -add_library(rime-core-obj OBJECT ${rime_core_module_src}) -add_library(rime-dict-obj OBJECT ${rime_dict_module_src}) -add_library(rime-gears-obj OBJECT ${rime_gears_src}) -add_library(rime-levers-obj OBJECT ${rime_levers_src}) -if(rime_plugins_library) - add_library(rime-plugins-obj OBJECT ${rime_plugins_src} ${rime_plugins_objs}) - set(rime_plugins_obj_list $) -else() - set(rime_plugins_obj_list ${rime_plugins_objs}) -endif() + set(obj_target "rime-${module_name}-obj") + add_library(${obj_target} OBJECT ${MODULE_SOURCES}) + if(BUILD_SHARED_LIBS) + set_target_properties(${obj_target} PROPERTIES POSITION_INDEPENDENT_CODE ON) + target_compile_definitions(${obj_target} PRIVATE RIME_EXPORTS) + endif() + if(MODULE_PUBLIC_DEPS) + target_link_libraries(${obj_target} PUBLIC ${MODULE_PUBLIC_DEPS}) + endif() + if(MODULE_PRIVATE_DEPS) + target_link_libraries(${obj_target} PRIVATE ${MODULE_PRIVATE_DEPS}) + endif() -if(BUILD_SHARED_LIBS) - set_target_properties(rime-core-obj rime-dict-obj rime-gears-obj rime-levers-obj - PROPERTIES POSITION_INDEPENDENT_CODE ON) - if(rime_plugins_library) - set_target_properties(rime-plugins-obj PROPERTIES POSITION_INDEPENDENT_CODE ON) + if(MODULE_OBJ_TARGETS) + set(obj_targets ${MODULE_OBJ_TARGETS}) + else() + set(obj_targets ${obj_target}) endif() - target_compile_definitions(rime-core-obj PRIVATE RIME_EXPORTS) - target_compile_definitions(rime-dict-obj PRIVATE RIME_EXPORTS) - target_compile_definitions(rime-gears-obj PRIVATE RIME_EXPORTS) - target_compile_definitions(rime-levers-obj PRIVATE RIME_EXPORTS) - if(rime_plugins_library) - target_compile_definitions(rime-plugins-obj PRIVATE RIME_EXPORTS) + + set(build_lib OFF) + if("${module_name}" STREQUAL "core") + set(build_lib ON) + elseif(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) + set(build_lib ON) endif() -endif() -if(ENABLE_EXTERNAL_PLUGINS) - target_link_libraries(rime-core-obj PUBLIC dl) -endif() + if(build_lib) + if("${module_name}" STREQUAL "core") + if(BUILD_SHARED_LIBS) + set(lib_target rime-core) + else() + set(lib_target rime) + endif() + else() + set(lib_target "rime-${module_name}") + endif() + set(lib_sources "") + foreach(target IN LISTS obj_targets) + list(APPEND lib_sources $) + endforeach() + if("${module_name}" STREQUAL "core" AND NOT BUILD_SEPARATE_LIBS AND rime_plugins_objs AND NOT rime_plugins_library) + list(APPEND lib_sources ${rime_plugins_objs}) + endif() -target_link_libraries(rime-core-obj PUBLIC - Boost::boost - Boost::regex - yaml-cpp::yaml-cpp - $<$:Threads::Threads> -) + add_library(${lib_target} ${lib_sources}) + target_link_libraries(${lib_target} + ${obj_targets} + ${MODULE_LIB_DEPS}) + if(NOT "${module_name}" STREQUAL "core") + if(BUILD_SHARED_LIBS) + target_link_libraries(${lib_target} rime-core) + else() + target_link_libraries(${lib_target} rime) + endif() + endif() -if(Glog_FOUND AND WIN32) - target_link_libraries(rime-core-obj PUBLIC GLog::GLog) - if(WIN32) - # TODO: in glog v0.7.0, someone at Google forget to add dbghelp.lib to the linker library list. - target_link_libraries(rime-core-obj PRIVATE dbghelp) + set_target_properties(${lib_target} PROPERTIES + VERSION ${rime_version} + SOVERSION ${rime_soversion} + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + if("${module_name}" STREQUAL "core") + set_target_properties(${lib_target} PROPERTIES OUTPUT_NAME "rime") + endif() + if("${module_name}" STREQUAL "core" AND BUILD_SHARED_LIBS) + set_target_properties(${lib_target} PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") + endif() + if(XCODE_VERSION) + set_target_properties(${lib_target} PROPERTIES INSTALL_NAME_DIR "@rpath") + endif() + install(TARGETS ${lib_target} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) endif() -endif() -if(MINGW) - # fix: bcrypt for boost uuid issue - # https://github.com/boostorg/uuid/issues/68 - target_link_libraries(rime-core-obj PRIVATE wsock32 ws2_32 bcrypt) -endif() +endfunction() -target_link_libraries(rime-dict-obj PUBLIC - Boost::boost - leveldb::leveldb - Marisa::marisa) -target_link_libraries(rime-gears-obj PUBLIC +set(rime_all_obj_targets + rime-core-obj + rime-dict-obj + rime-gears-obj + rime-levers-obj) +if(rime_plugins_library) + list(APPEND rime_all_obj_targets rime-plugins-obj) +endif() +set(rime_core_obj_targets rime-core-obj) +if(NOT BUILD_SEPARATE_LIBS) + set(rime_core_obj_targets ${rime_all_obj_targets}) +endif() +set(rime_core_public_deps Boost::boost Boost::regex - $<$:Iconv::Iconv> - OpenCC::OpenCC) -target_link_libraries(rime-levers-obj PUBLIC - Boost::boost) + yaml-cpp::yaml-cpp + $<$:Threads::Threads> + $<$:dl> + $<$:GLog::GLog>) +set(rime_core_private_deps + $<$:dbghelp> + $<$:wsock32> + $<$:ws2_32> + $<$:bcrypt>) + +rime_add_module( + core + SOURCES ${rime_core_module_src} + PUBLIC_DEPS ${rime_core_public_deps} + PRIVATE_DEPS ${rime_core_private_deps} + OBJ_TARGETS ${rime_core_obj_targets}) + +rime_add_module( + dict + SOURCES ${rime_dict_module_src} + PUBLIC_DEPS Boost::boost leveldb::leveldb Marisa::marisa) + +rime_add_module( + gears + SOURCES ${rime_gears_src} + PUBLIC_DEPS Boost::boost Boost::regex $<$:Iconv::Iconv> OpenCC::OpenCC + LIB_DEPS rime-dict) + +rime_add_module( + levers + SOURCES ${rime_levers_src} + PUBLIC_DEPS Boost::boost + LIB_DEPS rime-dict) if(rime_plugins_library) - target_link_libraries(rime-plugins-obj PUBLIC ${rime_plugins_deps}) + rime_add_module( + plugins + SOURCES ${rime_plugins_src} ${rime_plugins_objs} + PUBLIC_DEPS ${rime_plugins_deps} + LIB_DEPS rime-dict rime-gears) endif() -if(BUILD_SEPARATE_LIBS) - set(rime_src $) - set(rime_obj_targets rime-core-obj) -else() - set(rime_src - $ - $ - $ - $ - ${rime_plugins_obj_list}) - set(rime_obj_targets - rime-core-obj - rime-dict-obj - rime-gears-obj - rime-levers-obj) - if(rime_plugins_library) - list(APPEND rime_obj_targets rime-plugins-obj) - endif() +if(MSVC AND BUILD_SHARED_LIBS AND TARGET rime-core) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + OPTIONAL) endif() +# Aggregate target for consumers that want all modules. +add_library(rime INTERFACE) if(BUILD_SHARED_LIBS) - add_library(${rime_core_library} ${rime_src}) - target_link_libraries(${rime_core_library} ${rime_obj_targets}) - set_target_properties(${rime_core_library} PROPERTIES - OUTPUT_NAME "rime" - DEFINE_SYMBOL "RIME_EXPORTS" - VERSION ${rime_version} - SOVERSION ${rime_soversion} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if(XCODE_VERSION) - set_target_properties(${rime_core_library} PROPERTIES INSTALL_NAME_DIR "@rpath") - endif() - install(TARGETS ${rime_core_library} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) - if(MSVC) - install(FILES $ - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} - OPTIONAL) - endif() + target_link_libraries(rime INTERFACE rime-core) else() - add_library(${rime_core_library} STATIC ${rime_src}) - target_link_libraries(${rime_core_library} ${rime_obj_targets}) - set_target_properties(${rime_core_library} PROPERTIES - OUTPUT_NAME "rime" - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) - install(TARGETS ${rime_core_library} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + target_link_libraries(rime INTERFACE rime) endif() -# Aggregate target for consumers that want all modules. -add_library(rime INTERFACE) -target_link_libraries(rime INTERFACE ${rime_core_library}) - if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) - rime_add_module(rime-dict rime-dict-obj) - rime_add_module(rime-gears rime-gears-obj ${rime_dict_library}) - rime_add_module(rime-levers rime-levers-obj ${rime_dict_library}) - - if(rime_plugins_library) - rime_add_module(rime-plugins rime-plugins-obj - ${rime_library}) - endif() - if(TARGET rime) target_link_libraries(rime INTERFACE rime-dict rime-gears rime-levers) - if(rime_plugins_library) - target_link_libraries(rime INTERFACE rime-plugins) - endif() endif() endif() -if(BUILD_ALWAYS_STATIC_TARGET) - if(BUILD_SEPARATE_LIBS) - set(rime_static_src $) - else() - set(rime_static_src - $ - $ - $ - $ - ${rime_plugins_obj_list}) - endif() - add_library(rime-static STATIC ${rime_static_src}) - target_link_libraries(rime-static ${rime_obj_targets}) - set_target_properties(rime-static PROPERTIES - OUTPUT_NAME "rime-static" - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) - install(TARGETS rime-static DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) -endif() if(DEFINED RIME_SETUP_EXTRA_MODULES) set_property(SOURCE rime/setup.cc PROPERTY COMPILE_DEFINITIONS From bdcc3927b156f560abe26b62befa099c5f342037 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 13:00:59 +0800 Subject: [PATCH 52/70] fix: configure core module by overriding afterwards --- src/CMakeLists.txt | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b0a79f52ec..563744b7cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -60,23 +60,12 @@ function(rime_add_module module_name) endif() if(build_lib) - if("${module_name}" STREQUAL "core") - if(BUILD_SHARED_LIBS) - set(lib_target rime-core) - else() - set(lib_target rime) - endif() - else() - set(lib_target "rime-${module_name}") - endif() + set(lib_target "rime-${module_name}") set(lib_sources "") foreach(target IN LISTS obj_targets) list(APPEND lib_sources $) endforeach() - if("${module_name}" STREQUAL "core" AND NOT BUILD_SEPARATE_LIBS AND rime_plugins_objs AND NOT rime_plugins_library) - list(APPEND lib_sources ${rime_plugins_objs}) - endif() add_library(${lib_target} ${lib_sources}) target_link_libraries(${lib_target} @@ -96,12 +85,6 @@ function(rime_add_module module_name) LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) - if("${module_name}" STREQUAL "core") - set_target_properties(${lib_target} PROPERTIES OUTPUT_NAME "rime") - endif() - if("${module_name}" STREQUAL "core" AND BUILD_SHARED_LIBS) - set_target_properties(${lib_target} PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") - endif() if(XCODE_VERSION) set_target_properties(${lib_target} PROPERTIES INSTALL_NAME_DIR "@rpath") endif() @@ -167,18 +150,28 @@ if(rime_plugins_library) LIB_DEPS rime-dict rime-gears) endif() -if(MSVC AND BUILD_SHARED_LIBS AND TARGET rime-core) - install(FILES $ - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} - OPTIONAL) +if(TARGET rime-core) + set_target_properties(rime-core PROPERTIES OUTPUT_NAME "rime") + if(BUILD_SHARED_LIBS) + set_target_properties(rime-core PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") + endif() + if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_objs AND NOT rime_plugins_library) + target_sources(rime-core PRIVATE ${rime_plugins_objs}) + endif() + if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps AND NOT rime_plugins_library) + target_link_libraries(rime-core PUBLIC ${rime_plugins_deps}) + endif() + if(MSVC AND BUILD_SHARED_LIBS) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + OPTIONAL) + endif() endif() # Aggregate target for consumers that want all modules. add_library(rime INTERFACE) -if(BUILD_SHARED_LIBS) +if(TARGET rime-core) target_link_libraries(rime INTERFACE rime-core) -else() - target_link_libraries(rime INTERFACE rime) endif() if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) From a3d204fbeb43ca0d705f24b35cfc7daf9e1761d9 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 13:21:40 +0800 Subject: [PATCH 53/70] fix: update target link libraries to use appropriate visibility --- src/CMakeLists.txt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 563744b7cf..4e3370e3cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -68,14 +68,15 @@ function(rime_add_module module_name) endforeach() add_library(${lib_target} ${lib_sources}) - target_link_libraries(${lib_target} - ${obj_targets} - ${MODULE_LIB_DEPS}) + target_link_libraries(${lib_target} PRIVATE ${obj_targets}) + if(MODULE_LIB_DEPS) + target_link_libraries(${lib_target} PUBLIC ${MODULE_LIB_DEPS}) + endif() if(NOT "${module_name}" STREQUAL "core") if(BUILD_SHARED_LIBS) - target_link_libraries(${lib_target} rime-core) + target_link_libraries(${lib_target} PUBLIC rime-core) else() - target_link_libraries(${lib_target} rime) + target_link_libraries(${lib_target} PUBLIC rime) endif() endif() From 812df8418af8491ff4a07cae6ad63535c06d673f Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 13:48:31 +0800 Subject: [PATCH 54/70] fix: simplify rime module handling and adjust target linking --- src/CMakeLists.txt | 77 ++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4e3370e3cf..b2b04b2cd2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,7 @@ set(rime_dict_module_src function(rime_add_module module_name) set(options) set(one_value_args) - set(multi_value_args SOURCES PUBLIC_DEPS PRIVATE_DEPS LIB_DEPS OBJ_TARGETS) + set(multi_value_args SOURCES PUBLIC_DEPS PRIVATE_DEPS LIB_DEPS) cmake_parse_arguments(MODULE "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN}) if(NOT MODULE_SOURCES) @@ -46,11 +46,7 @@ function(rime_add_module module_name) target_link_libraries(${obj_target} PRIVATE ${MODULE_PRIVATE_DEPS}) endif() - if(MODULE_OBJ_TARGETS) - set(obj_targets ${MODULE_OBJ_TARGETS}) - else() - set(obj_targets ${obj_target}) - endif() + set(obj_targets ${obj_target}) set(build_lib OFF) if("${module_name}" STREQUAL "core") @@ -63,12 +59,10 @@ function(rime_add_module module_name) set(lib_target "rime-${module_name}") set(lib_sources "") - foreach(target IN LISTS obj_targets) - list(APPEND lib_sources $) - endforeach() + list(APPEND lib_sources $) add_library(${lib_target} ${lib_sources}) - target_link_libraries(${lib_target} PRIVATE ${obj_targets}) + target_link_libraries(${lib_target} PUBLIC ${obj_target}) if(MODULE_LIB_DEPS) target_link_libraries(${lib_target} PUBLIC ${MODULE_LIB_DEPS}) endif() @@ -94,18 +88,6 @@ function(rime_add_module module_name) endfunction() -set(rime_all_obj_targets - rime-core-obj - rime-dict-obj - rime-gears-obj - rime-levers-obj) -if(rime_plugins_library) - list(APPEND rime_all_obj_targets rime-plugins-obj) -endif() -set(rime_core_obj_targets rime-core-obj) -if(NOT BUILD_SEPARATE_LIBS) - set(rime_core_obj_targets ${rime_all_obj_targets}) -endif() set(rime_core_public_deps Boost::boost Boost::regex @@ -123,8 +105,7 @@ rime_add_module( core SOURCES ${rime_core_module_src} PUBLIC_DEPS ${rime_core_public_deps} - PRIVATE_DEPS ${rime_core_private_deps} - OBJ_TARGETS ${rime_core_obj_targets}) + PRIVATE_DEPS ${rime_core_private_deps}) rime_add_module( dict @@ -151,22 +132,38 @@ if(rime_plugins_library) LIB_DEPS rime-dict rime-gears) endif() -if(TARGET rime-core) - set_target_properties(rime-core PROPERTIES OUTPUT_NAME "rime") - if(BUILD_SHARED_LIBS) - set_target_properties(rime-core PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") - endif() - if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_objs AND NOT rime_plugins_library) +set_target_properties(rime-core PROPERTIES OUTPUT_NAME "rime") +if(BUILD_SHARED_LIBS) + set_target_properties(rime-core PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") +endif() + +if(NOT BUILD_SEPARATE_LIBS) + target_sources(rime-core PRIVATE + $ + $ + $) + target_link_libraries(rime-core PUBLIC + rime-dict-obj + rime-gears-obj + rime-levers-obj) + if(rime_plugins_library) + target_sources(rime-core PRIVATE $) + target_link_libraries(rime-core PUBLIC rime-plugins-obj) + elseif(rime_plugins_objs) target_sources(rime-core PRIVATE ${rime_plugins_objs}) endif() - if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps AND NOT rime_plugins_library) - target_link_libraries(rime-core PUBLIC ${rime_plugins_deps}) - endif() - if(MSVC AND BUILD_SHARED_LIBS) - install(FILES $ - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} - OPTIONAL) - endif() +endif() + + +if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps AND NOT rime_plugins_library) + target_link_libraries(rime-core PUBLIC ${rime_plugins_deps}) +endif() + + +if(MSVC AND BUILD_SHARED_LIBS) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + OPTIONAL) endif() # Aggregate target for consumers that want all modules. @@ -176,9 +173,7 @@ if(TARGET rime-core) endif() if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) - if(TARGET rime) - target_link_libraries(rime INTERFACE rime-dict rime-gears rime-levers) - endif() + target_link_libraries(rime INTERFACE rime-dict rime-gears rime-levers) endif() if(DEFINED RIME_SETUP_EXTRA_MODULES) From aef67f65dd86a51c717e1c35a91b22c563b1dc37 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 15:54:22 +0800 Subject: [PATCH 55/70] refactor: add deps of rime modules to libs instead of objs --- src/CMakeLists.txt | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b2b04b2cd2..6b356b337a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -39,15 +39,6 @@ function(rime_add_module module_name) set_target_properties(${obj_target} PROPERTIES POSITION_INDEPENDENT_CODE ON) target_compile_definitions(${obj_target} PRIVATE RIME_EXPORTS) endif() - if(MODULE_PUBLIC_DEPS) - target_link_libraries(${obj_target} PUBLIC ${MODULE_PUBLIC_DEPS}) - endif() - if(MODULE_PRIVATE_DEPS) - target_link_libraries(${obj_target} PRIVATE ${MODULE_PRIVATE_DEPS}) - endif() - - set(obj_targets ${obj_target}) - set(build_lib OFF) if("${module_name}" STREQUAL "core") set(build_lib ON) @@ -58,11 +49,14 @@ function(rime_add_module module_name) if(build_lib) set(lib_target "rime-${module_name}") - set(lib_sources "") - list(APPEND lib_sources $) - - add_library(${lib_target} ${lib_sources}) - target_link_libraries(${lib_target} PUBLIC ${obj_target}) + add_library(${lib_target}) + target_sources(${lib_target} PRIVATE $) + if(MODULE_PUBLIC_DEPS) + target_link_libraries(${lib_target} PUBLIC ${MODULE_PUBLIC_DEPS}) + endif() + if(MODULE_PRIVATE_DEPS) + target_link_libraries(${lib_target} PRIVATE ${MODULE_PRIVATE_DEPS}) + endif() if(MODULE_LIB_DEPS) target_link_libraries(${lib_target} PUBLIC ${MODULE_LIB_DEPS}) endif() @@ -142,13 +136,8 @@ if(NOT BUILD_SEPARATE_LIBS) $ $ $) - target_link_libraries(rime-core PUBLIC - rime-dict-obj - rime-gears-obj - rime-levers-obj) if(rime_plugins_library) target_sources(rime-core PRIVATE $) - target_link_libraries(rime-core PUBLIC rime-plugins-obj) elseif(rime_plugins_objs) target_sources(rime-core PRIVATE ${rime_plugins_objs}) endif() From 5c29bdc431087a3f7758baa6d4d005f484fd0023 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 16:06:31 +0800 Subject: [PATCH 56/70] fix: update condition for rime plugins library setup --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e15b9fc391..15e2141246 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -220,7 +220,7 @@ foreach(mod ${rime_plugins_modules}) set(list "${list},Q(${mod})") endforeach() set(RIME_SETUP_EXTRA_MODULES "${list}") -if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS AND rime_plugins_objs) +if(BUILD_MERGED_PLUGINS AND BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS AND rime_plugins_objs) set(rime_plugins_library rime-plugins) endif() From 420b24140ffc0aa07e0bc19ba8adc672d9d65946 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 16:20:32 +0800 Subject: [PATCH 57/70] fix: add public and private dependency linking for object targets --- src/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6b356b337a..26e711b542 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -39,6 +39,12 @@ function(rime_add_module module_name) set_target_properties(${obj_target} PROPERTIES POSITION_INDEPENDENT_CODE ON) target_compile_definitions(${obj_target} PRIVATE RIME_EXPORTS) endif() + if(MODULE_PUBLIC_DEPS) + target_link_libraries(${obj_target} PUBLIC ${MODULE_PUBLIC_DEPS}) + endif() + if(MODULE_PRIVATE_DEPS) + target_link_libraries(${obj_target} PRIVATE ${MODULE_PRIVATE_DEPS}) + endif() set(build_lib OFF) if("${module_name}" STREQUAL "core") set(build_lib ON) From 88a5c33e6371f85984890d466afa5c12bda84378 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Fri, 16 Jan 2026 17:08:56 +0800 Subject: [PATCH 58/70] fix: update rime-core target linking to include object targets and plugins --- src/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 26e711b542..b05ec574aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -142,8 +142,13 @@ if(NOT BUILD_SEPARATE_LIBS) $ $ $) + target_link_libraries(rime-core PUBLIC + rime-dict-obj + rime-gears-obj + rime-levers-obj) if(rime_plugins_library) target_sources(rime-core PRIVATE $) + target_link_libraries(rime-core PUBLIC rime-plugins-obj) elseif(rime_plugins_objs) target_sources(rime-core PRIVATE ${rime_plugins_objs}) endif() From 469f9c0e4a1ac3422ea7554878f1cd114c360b58 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 18 Jan 2026 21:17:06 +0800 Subject: [PATCH 59/70] feat: enhance CMake configuration for Rime library and add package support --- CMakeLists.txt | 46 +++++++++++++++++++++++---- cmake/RimeConfig.cmake.in | 15 +++++++++ src/CMakeLists.txt | 67 ++++++++++++++++++++++++++++----------- 3 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 cmake/RimeConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 15e2141246..c2a102355a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ set(rime_soversion 1) add_definitions(-DRIME_VERSION="${rime_version}") include(GNUInstallDirs) +include(CMakePackageConfigHelpers) option(BUILD_SHARED_LIBS "Build Rime as shared library" ON) option(BUILD_MERGED_PLUGINS "Merge plugins into one Rime library" ON) @@ -181,13 +182,29 @@ if(NOT ANDROID) DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig) endif() -install(FILES cmake/RimeConfig.cmake - DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/cmake/rime) +set(RIME_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/Rime") +set(RIME_IS_LINUX 0) +if(LINUX) + set(RIME_IS_LINUX 1) +endif() + +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/RimeConfig.cmake.in" + "${PROJECT_BINARY_DIR}/RimeConfig.cmake" + INSTALL_DESTINATION "${RIME_CMAKE_INSTALL_DIR}") +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/RimeConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + +install(EXPORT RimeTargets + NAMESPACE Rime:: + DESTINATION "${RIME_CMAKE_INSTALL_DIR}") +install(FILES + "${PROJECT_BINARY_DIR}/RimeConfig.cmake" + "${PROJECT_BINARY_DIR}/RimeConfigVersion.cmake" + DESTINATION "${RIME_CMAKE_INSTALL_DIR}") -file(GLOB rime_public_header_files ${PROJECT_SOURCE_DIR}/src/*.h) -list(FILTER rime_public_header_files EXCLUDE REGEX .*_impl\.h$) -install(FILES ${rime_public_header_files} - DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}) if(INSTALL_PRIVATE_HEADERS) file(GLOB rime_private_header_files ${PROJECT_SOURCE_DIR}/src/rime/*.h @@ -210,7 +227,19 @@ if(BUILD_SHARED_LIBS) set(rime_levers_library rime-levers) endif() endif() -set(rime_library rime) +if(NOT DEFINED rime_dict_library) + set(rime_dict_library rime-dict) +endif() +if(NOT DEFINED rime_gears_library) + set(rime_gears_library rime-gears) +endif() +if(NOT DEFINED rime_levers_library) + set(rime_levers_library rime-levers) +endif() +if(TARGET rime-plugins AND NOT DEFINED rime_plugins_library) + set(rime_plugins_library rime-plugins) +endif() +set(rime_library rime-all) add_subdirectory(plugins) message(STATUS "rime_plugins_libs: ${rime_plugins_deps}") @@ -220,6 +249,9 @@ foreach(mod ${rime_plugins_modules}) set(list "${list},Q(${mod})") endforeach() set(RIME_SETUP_EXTRA_MODULES "${list}") +if(rime_plugins_objs AND NOT DEFINED rime_plugins_library) + set(rime_plugins_library rime-plugins) +endif() if(BUILD_MERGED_PLUGINS AND BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS AND rime_plugins_objs) set(rime_plugins_library rime-plugins) endif() diff --git a/cmake/RimeConfig.cmake.in b/cmake/RimeConfig.cmake.in new file mode 100644 index 0000000000..9d44eb928b --- /dev/null +++ b/cmake/RimeConfig.cmake.in @@ -0,0 +1,15 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/RimeTargets.cmake") + +set(Rime_VERSION "@PROJECT_VERSION@") + +# Make the exported C API target non-transitive for downstreams. +if(TARGET Rime::rime) + set_property(TARGET Rime::rime PROPERTY INTERFACE_LINK_LIBRARIES "") +endif() + +# Provide a consistent aggregate target name for consumers. +if(TARGET Rime::rime-all AND NOT TARGET Rime::all) + add_library(Rime::all ALIAS Rime::rime-all) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b05ec574aa..1f79676e8e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -83,7 +83,9 @@ function(rime_add_module module_name) if(XCODE_VERSION) set_target_properties(${lib_target} PROPERTIES INSTALL_NAME_DIR "@rpath") endif() - install(TARGETS ${lib_target} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + if(NOT "${module_name}" STREQUAL "core") + install(TARGETS ${lib_target} EXPORT RimeTargets DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + endif() endif() endfunction() @@ -107,6 +109,22 @@ rime_add_module( PUBLIC_DEPS ${rime_core_public_deps} PRIVATE_DEPS ${rime_core_private_deps}) +target_include_directories(rime-core + PUBLIC + $ + $ + $ + $) + +set_target_properties(rime-core PROPERTIES + OUTPUT_NAME "rime" + EXPORT_NAME "rime" + PUBLIC_HEADER "rime_api.h;rime_api_stdbool.h;rime_api_deprecated.h;rime_levers_api.h") +install(TARGETS rime-core + EXPORT RimeTargets + DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + rime_add_module( dict SOURCES ${rime_dict_module_src} @@ -132,24 +150,20 @@ if(rime_plugins_library) LIB_DEPS rime-dict rime-gears) endif() -set_target_properties(rime-core PROPERTIES OUTPUT_NAME "rime") +if(NOT TARGET Rime::rime) + add_library(Rime::rime ALIAS rime-core) +endif() + if(BUILD_SHARED_LIBS) set_target_properties(rime-core PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS") endif() if(NOT BUILD_SEPARATE_LIBS) - target_sources(rime-core PRIVATE - $ - $ - $) - target_link_libraries(rime-core PUBLIC + target_link_libraries(rime-core PRIVATE rime-dict-obj rime-gears-obj rime-levers-obj) - if(rime_plugins_library) - target_sources(rime-core PRIVATE $) - target_link_libraries(rime-core PUBLIC rime-plugins-obj) - elseif(rime_plugins_objs) + if(rime_plugins_objs) target_sources(rime-core PRIVATE ${rime_plugins_objs}) endif() endif() @@ -166,15 +180,32 @@ if(MSVC AND BUILD_SHARED_LIBS) OPTIONAL) endif() -# Aggregate target for consumers that want all modules. -add_library(rime INTERFACE) -if(TARGET rime-core) - target_link_libraries(rime INTERFACE rime-core) +# Ensure per-module targets always exist for plugins/consumers, even when merged. +set(rime_module_targets rime-dict rime-gears rime-levers) +if(rime_plugins_library OR rime_plugins_objs) + list(APPEND rime_module_targets rime-plugins) endif() -if(BUILD_SHARED_LIBS AND BUILD_SEPARATE_LIBS) - target_link_libraries(rime INTERFACE rime-dict rime-gears rime-levers) -endif() +foreach(module_target ${rime_module_targets}) + if(NOT TARGET ${module_target}) + add_library(${module_target} INTERFACE) + target_link_libraries(${module_target} INTERFACE rime-core) + endif() + if(NOT TARGET Rime::${module_target}) + add_library(Rime::${module_target} ALIAS ${module_target}) + endif() + get_target_property(_type ${module_target} TYPE) + if(_type STREQUAL "INTERFACE_LIBRARY") + install(TARGETS ${module_target} EXPORT RimeTargets) + endif() +endforeach() + +# Aggregate target for consumers that want all modules. +add_library(rime-all INTERFACE) +target_link_libraries(rime-all INTERFACE rime-core ${rime_module_targets}) +install(TARGETS rime-all EXPORT RimeTargets) +add_library(Rime::all ALIAS rime-all) +add_library(rime-internal-all ALIAS rime-all) if(DEFINED RIME_SETUP_EXTRA_MODULES) set_property(SOURCE rime/setup.cc From 4add9ea882a30752477780be74e26d269fb1407e Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 18 Jan 2026 21:38:50 +0800 Subject: [PATCH 60/70] fix: remove unnecessary condition for rime plugins library setup --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1f79676e8e..15550ab5d5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -169,7 +169,7 @@ if(NOT BUILD_SEPARATE_LIBS) endif() -if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps AND NOT rime_plugins_library) +if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps) target_link_libraries(rime-core PUBLIC ${rime_plugins_deps}) endif() From 683955327260ef92bc8273660260b724303d410f Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 18 Jan 2026 21:57:13 +0800 Subject: [PATCH 61/70] fix: change rime-core library linking from PUBLIC to PRIVATE for plugins dependencies --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 15550ab5d5..28e14fa957 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -170,7 +170,7 @@ endif() if(NOT BUILD_SEPARATE_LIBS AND rime_plugins_deps) - target_link_libraries(rime-core PUBLIC ${rime_plugins_deps}) + target_link_libraries(rime-core PRIVATE ${rime_plugins_deps}) endif() From 707eaceae4e0a7e5a38868043e684eac08440e01 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Sun, 18 Jan 2026 22:22:33 +0800 Subject: [PATCH 62/70] feat: refactor CMake configuration to introduce rime-internal-all target and streamline public dependencies --- CMakeLists.txt | 5 ++++- src/CMakeLists.txt | 36 ++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c2a102355a..a621ea5d54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,7 +239,10 @@ endif() if(TARGET rime-plugins AND NOT DEFINED rime_plugins_library) set(rime_plugins_library rime-plugins) endif() -set(rime_library rime-all) +set(rime_library rime-internal-all) +if(NOT TARGET rime-internal-all) + add_library(rime-internal-all INTERFACE) +endif() add_subdirectory(plugins) message(STATUS "rime_plugins_libs: ${rime_plugins_deps}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28e14fa957..dfa1f808e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -103,6 +103,20 @@ set(rime_core_private_deps $<$:ws2_32> $<$:bcrypt>) +set(rime_dict_public_deps + Boost::boost + leveldb::leveldb + Marisa::marisa) + +set(rime_gears_public_deps + Boost::boost + Boost::regex + $<$:Iconv::Iconv> + OpenCC::OpenCC) + +set(rime_levers_public_deps + Boost::boost) + rime_add_module( core SOURCES ${rime_core_module_src} @@ -128,18 +142,18 @@ install(TARGETS rime-core rime_add_module( dict SOURCES ${rime_dict_module_src} - PUBLIC_DEPS Boost::boost leveldb::leveldb Marisa::marisa) + PUBLIC_DEPS ${rime_dict_public_deps}) rime_add_module( gears SOURCES ${rime_gears_src} - PUBLIC_DEPS Boost::boost Boost::regex $<$:Iconv::Iconv> OpenCC::OpenCC + PUBLIC_DEPS ${rime_gears_public_deps} LIB_DEPS rime-dict) rime_add_module( levers SOURCES ${rime_levers_src} - PUBLIC_DEPS Boost::boost + PUBLIC_DEPS ${rime_levers_public_deps} LIB_DEPS rime-dict) if(rime_plugins_library) @@ -201,11 +215,17 @@ foreach(module_target ${rime_module_targets}) endforeach() # Aggregate target for consumers that want all modules. -add_library(rime-all INTERFACE) -target_link_libraries(rime-all INTERFACE rime-core ${rime_module_targets}) -install(TARGETS rime-all EXPORT RimeTargets) -add_library(Rime::all ALIAS rime-all) -add_library(rime-internal-all ALIAS rime-all) +if(NOT TARGET rime-internal-all) + add_library(rime-internal-all INTERFACE) +endif() +target_link_libraries(rime-internal-all INTERFACE + rime-core + ${rime_module_targets} + ${rime_core_public_deps} + ${rime_dict_public_deps} + ${rime_gears_public_deps} + ${rime_levers_public_deps} + ${rime_plugins_deps}) if(DEFINED RIME_SETUP_EXTRA_MODULES) set_property(SOURCE rime/setup.cc From aa266e20c5a6b55f3a5b7045173e8e25eecc495c Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 14:17:11 +0800 Subject: [PATCH 63/70] feat: add backward-compatible variables for legacy users in RimeConfig --- cmake/RimeConfig.cmake | 35 ----------------------------------- cmake/RimeConfig.cmake.in | 6 ++++++ 2 files changed, 6 insertions(+), 35 deletions(-) delete mode 100644 cmake/RimeConfig.cmake diff --git a/cmake/RimeConfig.cmake b/cmake/RimeConfig.cmake deleted file mode 100644 index 35d9955d65..0000000000 --- a/cmake/RimeConfig.cmake +++ /dev/null @@ -1,35 +0,0 @@ -# - Locate the rime library -# This module defines -# Rime_FOUND found librime -# Rime_LIBRARIES rime library path -# Rime_INCLUDE_DIR, where to find headers - -#============================================================================== -# Copyright 2012 Xuetian Weng -# -# Distributed under the BSD License -#============================================================================== - -# use pkg-config to get the directories and then use these values -# in the FIND_PATH() and FIND_LIBRARY() calls - -if(Rime_INCLUDE_DIR AND Rime_LIBRARIES) - # Already in cache, be silent - set(Rime_FIND_QUIETLY TRUE) -endif(Rime_INCLUDE_DIR AND Rime_LIBRARIES) - -find_package(PkgConfig) -PKG_CHECK_MODULES(PC_Rime rime) - -find_path(Rime_INCLUDE_DIR - NAMES rime_api.h - HINTS ${PC_Rime_INCLUDEDIR} - ) - -find_library(Rime_LIBRARIES - NAMES rime - HINTS ${PC_Rime_LIBDIR} - ) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Rime DEFAULT_MSG Rime_LIBRARIES Rime_INCLUDE_DIR) diff --git a/cmake/RimeConfig.cmake.in b/cmake/RimeConfig.cmake.in index 9d44eb928b..92b626e79b 100644 --- a/cmake/RimeConfig.cmake.in +++ b/cmake/RimeConfig.cmake.in @@ -4,6 +4,12 @@ include("${CMAKE_CURRENT_LIST_DIR}/RimeTargets.cmake") set(Rime_VERSION "@PROJECT_VERSION@") +# Backward-compatible variables for legacy users. +set(Rime_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include") +set(Rime_INCLUDE_DIRS "${Rime_INCLUDE_DIR}") +set(Rime_LIBRARIES Rime::rime) +set(Rime_FOUND TRUE) + # Make the exported C API target non-transitive for downstreams. if(TARGET Rime::rime) set_property(TARGET Rime::rime PROPERTY INTERFACE_LINK_LIBRARIES "") From eee72b743c75f965bfd1c0e21f3401d401f1bd93 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 14:51:02 +0800 Subject: [PATCH 64/70] fix: simplify CMake configuration by removing unnecessary conditional definitions for libraries --- CMakeLists.txt | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a621ea5d54..16c9785c49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,10 +33,6 @@ option(ENABLE_TIMESTAMP "Embed timestamp to schema artifacts" ON) set(RIME_DATA_DIR "rime-data" CACHE STRING "Target directory for Rime data") set(RIME_PLUGINS_DIR "rime-plugins" CACHE STRING "Target directory for externally built Rime plugins") -if(WIN32) - set(ext ".exe") -endif(WIN32) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${PROJECT_SOURCE_DIR}") @@ -221,21 +217,12 @@ endif() if(BUILD_SHARED_LIBS) add_definitions(-DRIME_BUILD_SHARED_LIBS) - if(BUILD_SEPARATE_LIBS) - set(rime_dict_library rime-dict) - set(rime_gears_library rime-gears) - set(rime_levers_library rime-levers) - endif() -endif() -if(NOT DEFINED rime_dict_library) - set(rime_dict_library rime-dict) -endif() -if(NOT DEFINED rime_gears_library) - set(rime_gears_library rime-gears) -endif() -if(NOT DEFINED rime_levers_library) - set(rime_levers_library rime-levers) endif() + +set(rime_dict_library rime-dict) +set(rime_gears_library rime-gears) +set(rime_levers_library rime-levers) + if(TARGET rime-plugins AND NOT DEFINED rime_plugins_library) set(rime_plugins_library rime-plugins) endif() From f06b09c4439c59e486e484f7b093a62b59e85e7c Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 14:53:32 +0800 Subject: [PATCH 65/70] refactor: use standard BUILD_TESTING flag --- .github/workflows/windows-build.yml | 2 +- CMakeLists.txt | 13 +++++-------- build.bat | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 611e4078e5..1551fd7762 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -154,7 +154,7 @@ jobs: -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/dist \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DENABLE_LOGGING:BOOL=ON \ - -DBUILD_TEST:BOOL=ON \ + -DBUILD_TESTING:BOOL=ON \ -DWITH_STATIC_DEPS:BOOL=ON \ -DBUILD_SHARED_LIBS:BOOL=ON cmake --build build diff --git a/CMakeLists.txt b/CMakeLists.txt index 16c9785c49..cb6ac32fee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,12 +3,12 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/c_flag_overrides.cmake) set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) -project(rime VERSION 1.15.0) +project(rime VERSION 1.16.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(rime_version 1.16.0) +set(rime_version ${PROJECT_VERSION}) set(rime_soversion 1) add_definitions(-DRIME_VERSION="${rime_version}") @@ -20,7 +20,7 @@ option(BUILD_SHARED_LIBS "Build Rime as shared library" ON) option(BUILD_MERGED_PLUGINS "Merge plugins into one Rime library" ON) option(WITH_STATIC_DEPS "Build with static dependency libraries" OFF) option(BUILD_SAMPLE "Build sample Rime plugin" OFF) -option(BUILD_TEST "Build and run tests" ON) +option(BUILD_TESTING "Build and run tests" ON) option(BUILD_SEPARATE_LIBS "Build separate rime-* libraries" OFF) option(ENABLE_LOGGING "Enable logging with google-glog library" ON) option(ALSO_LOG_TO_STDERR "Log to stderr as well as log file" OFF) @@ -89,11 +89,8 @@ if(NOT ENABLE_TIMESTAMP) add_definitions(-DRIME_NO_TIMESTAMP) endif() -if(BUILD_TEST) +if(BUILD_TESTING) find_package(GTest CONFIG REQUIRED) - if(GTEST_FOUND) - enable_testing() - endif() endif() find_package(yaml-cpp CONFIG REQUIRED) @@ -251,7 +248,7 @@ add_subdirectory(src) if(BUILD_SHARED_LIBS) add_subdirectory(tools) - if(BUILD_TEST) + if(BUILD_TESTING) add_subdirectory(test) endif() diff --git a/build.bat b/build.bat index ec4e308717..0451d26e14 100644 --- a/build.bat +++ b/build.bat @@ -180,7 +180,7 @@ if %build_librime% == 0 goto exit set rime_cmake_flags=%common_cmake_flags%^ -DWITH_STATIC_DEPS=ON^ -DBUILD_SHARED_LIBS=%build_shared%^ - -DBUILD_TEST=%build_test%^ + -DBUILD_TESTING=%build_test%^ -DENABLE_LOGGING=%enable_logging%^ -DCMAKE_PREFIX_PATH:PATH="%deps_install_prefix%"^ -DCMAKE_INSTALL_PREFIX:PATH="%rime_install_prefix%" From 7eb0f2e05c7dc71f85b07995d18f5a116c33f7ff Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 15:03:35 +0800 Subject: [PATCH 66/70] ci(test): re-enable tests for mingw-w64 --- .github/workflows/windows-build.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 1551fd7762..25e6410c19 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -159,11 +159,7 @@ jobs: -DBUILD_SHARED_LIBS:BOOL=ON cmake --build build cmake --install build - # Temporarily disable test for mingw-w64 - # due to msys2 glog package issue: - # https://github.com/msys2/MINGW-packages/issues/25344 - # cd build && cp ./bin/librime.dll ./test - # ctest --output-on-failure + ctest --output-on-failure - name: Create distributable run: | From fed0f406d3c896fcdb689c2e68fb0bcc6f5390e0 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 16:06:15 +0800 Subject: [PATCH 67/70] refactor: update version handling in CMakeLists.txt for clarity and consistency --- CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb6ac32fee..97e93b24a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,14 +3,15 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/c_flag_overrides.cmake) set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) -project(rime VERSION 1.16.0) +set(rime_version 1.16.0) +set(rime_soversion 1) + +project(rime VERSION ${rime_version}) + set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(rime_version ${PROJECT_VERSION}) -set(rime_soversion 1) - add_definitions(-DRIME_VERSION="${rime_version}") include(GNUInstallDirs) From 5b0c191ff35c7d331be3bafd54741a1fa2d49027 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 21:00:46 +0800 Subject: [PATCH 68/70] ci: remove empty build-clang.bat --- build-clang.bat | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 build-clang.bat diff --git a/build-clang.bat b/build-clang.bat deleted file mode 100644 index e69de29bb2..0000000000 From 97d50443f5ae66d5d1767d5899351c4655d105c8 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 22:38:09 +0800 Subject: [PATCH 69/70] chore: remove vcpkg config --- vcpkg.json | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 vcpkg.json diff --git a/vcpkg.json b/vcpkg.json deleted file mode 100644 index 1880cb20fd..0000000000 --- a/vcpkg.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name" : "rime", - "version-string" : "1.0.0", - "builtin-baseline" : "e93bf5796351d422408a2e3ebf88dce98151ae45", - "dependencies" : [ { - "name" : "gtest", - "version>=" : "1.17.0#2" - }, { - "name" : "glog", - "version>=" : "0.7.1" - }, { - "name" : "yaml-cpp", - "version>=" : "0.8.0#3" - }, { - "name" : "leveldb", - "version>=" : "1.23" - }, { - "name" : "opencc", - "version>=" : "1.1.9#1" - }, { - "name" : "boost-algorithm", - "version>=" : "1.89.0" - }, { - "name" : "boost-signals2", - "version>=" : "1.89.0" - }, { - "name" : "boost-crc", - "version>=" : "1.89.0" - }, { - "name" : "boost-interprocess", - "version>=" : "1.89.0" - }, { - "name" : "boost-scope-exit", - "version>=" : "1.89.0" - }, { - "name" : "boost-uuid", - "version>=" : "1.89.0" - } ] -} \ No newline at end of file From 58e633b5bb8985219ef9d36077f9d53d66d1ae18 Mon Sep 17 00:00:00 2001 From: ghostflyby Date: Mon, 19 Jan 2026 22:51:30 +0800 Subject: [PATCH 70/70] ci: revert deps distributable upload --- .github/workflows/windows-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 25e6410c19..50ef99d3b9 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -165,6 +165,9 @@ jobs: run: | tar -cjvf rime-${{ env.git_ref_name }}-${{ runner.os }}-mingw.tar.bz2 \ dist version-info.txt + tar -cjvf rime-deps-${{ env.git_ref_name }}-${{ runner.os }}-mingw.tar.bz2 \ + --exclude '*/.placeholder' \ + bin include lib share - name: Upload artifacts uses: actions/upload-artifact@v4