From 9e1cc7a9febe673f645fc5dd674783cee4ba3982 Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:19:21 +0800 Subject: [PATCH 01/18] try rust libchewing v0.11.0 --- .github/workflows/ci.yml | 3 ++ libchewing | 2 +- patches/libchewing.patch | 64 ++++++++++++++-------------------------- src/Rules/LibChewing.hs | 20 ++++++++----- 4 files changed, 39 insertions(+), 50 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ac2005ba..5f4c2ab3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,7 @@ jobs: NDK_VERSION: "28.0.13004108" CMAKE_VERSION: "3.31.6" ANDROID_PLATFORM: "23" + RUST_VERSION: "1.92.0" steps: - name: Install build dependencies @@ -26,6 +27,7 @@ jobs: cmake extra-cmake-modules ninja \ fmt boost \ python opencc \ + rustup \ gperf - name: Fetch source code @@ -50,6 +52,7 @@ jobs: - name: Build everything env: ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION }} + RUST_VERSION: ${{ env.RUST_VERSION }} run: | # use archlinux's dynamic only ghc cabal configure --disable-library-vanilla --enable-shared --enable-executable-dynamic --ghc-options=-dynamic diff --git a/libchewing b/libchewing index 9be48513..a6a8fa4a 160000 --- a/libchewing +++ b/libchewing @@ -1 +1 @@ -Subproject commit 9be48513bc46bafa134eef4b2bfde6a533470d33 +Subproject commit a6a8fa4abd3f215e3ba89a7b61702eaf8ca68f5c diff --git a/patches/libchewing.patch b/patches/libchewing.patch index cb719ae0..7347d191 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -1,50 +1,30 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index ae1d14b7..5d03df35 100644 +index 4c175c1..783abfb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -1,2 +1,2 @@ --cmake_minimum_required(VERSION 3.24.0) -+cmake_minimum_required(VERSION 3.22.1) - project(libchewing LANGUAGES C) -@@ -216,8 +216,6 @@ if(WITH_RUST) - list(APPEND ALL_INC ${INC_DIR}/chewing_rs.h) +@@ -77,7 +77,8 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) + if(BUILD_TESTING) + corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_testhelper) endif() + corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing-cli) ++corrosion_add_target_rustflags(chewing_capi "--remap-path-prefix=${PROJECT_SOURCE_DIR}=.") --add_subdirectory(doc) --add_subdirectory(data) - if(BUILD_TESTING) - add_subdirectory(tests) + if(WITH_SQLITE3) + corrosion_set_features(chewing_capi FEATURES sqlite) +@@ -242,7 +252,7 @@ endif() + install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) + install(FILES ${PROJECT_BINARY_DIR}/chewing.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +-install(TARGETS libchewing ++install(TARGETS chewing_capi + EXPORT libchewingTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +@@ -261,7 +271,6 @@ if(BUILD_DATA) + ) endif() -@@ -228,14 +226,20 @@ add_library(common OBJECT - src/porting_layer/src/asprintf.c - ) -+target_compile_options(common PRIVATE -+ "-ffile-prefix-map=${CMAKE_SOURCE_DIR}=." -+) - target_compile_definitions(common PRIVATE -- CHEWING_DATADIR=\"${CMAKE_INSTALL_FULL_DATADIR}/libchewing\" -+ CHEWING_DATADIR=\"./libchewing\" - ) +-install(IMPORTED_RUNTIME_ARTIFACTS chewing-cli DESTINATION ${CMAKE_INSTALL_BINDIR}) - add_library(libchewing ${ALL_INC} src/chewing.c) - set_target_properties(libchewing PROPERTIES LINKER_LANGUAGE C) -+target_compile_options(libchewing PRIVATE -+ "-ffile-prefix-map=${CMAKE_SOURCE_DIR}=." -+) - target_compile_definitions(libchewing PRIVATE -- CHEWING_DATADIR=\"${CMAKE_INSTALL_FULL_DATADIR}/libchewing\" -+ CHEWING_DATADIR=\"./libchewing\" - ) - if(NOT WITH_RUST) - target_sources(common PRIVATE -@@ -288,6 +292,9 @@ if(NOT WITH_RUST) - ${SRC_DIR}/userphrase-hash.c - ) - endif() -+ target_compile_options(userphrase PRIVATE -+ "-ffile-prefix-map=${CMAKE_SOURCE_DIR}=." -+ ) - target_link_libraries(libchewing - PRIVATE common - PRIVATE userphrase) + # generate CMake Config files + include(CMakePackageConfigHelpers) \ No newline at end of file diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 53216704..57905b52 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -23,6 +23,12 @@ libchewingRule = do useCMake $ (cmakeBuilder "libchewing") { preBuild = BuildAction $ \_ src -> do + -- install rust + cmd_ Shell "rustup toolchain install $RUST_VERSION" + cmd_ Shell "rustup target add thumbv7neon-linux-androideabi" + cmd_ Shell "rustup target add aarch64-linux-android" + cmd_ Shell "rustup target add i686-linux-android" + cmd_ Shell "rustup target add x86_64-linux-android" -- CMakeLists is changed in last build cmd_ (Cwd src) Shell "git checkout ." -- skip data and shared lib @@ -30,13 +36,13 @@ libchewingRule = do -- remove absolute path by CHEWING_DATADIR macro -- remove absolute path by __FILE__ macro cmd_ (Cwd src) "git apply ../patches/libchewing.patch", - cmakeFlags = - const - [ "-DBUILD_SHARED_LIBS=OFF", - "-DBUILD_TESTING=OFF", - "-DWITH_SQLITE3=OFF", - "-DWITH_RUST=OFF" - ] + cmakeFlags = + const + [ "-DBUILD_SHARED_LIBS=OFF", + "-DBUILD_TESTING=OFF", + "-DWITH_SQLITE3=OFF", + "-DWITH_RUST=OFF" + ] } "chewing-dict" ~> do From 2aca79049172dde62fec934e137461ff0d35ef77 Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:28:08 +0800 Subject: [PATCH 02/18] try again --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f4c2ab3..b9697a6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,14 +49,14 @@ jobs: with: packages: "ndk;${{ env.NDK_VERSION }} cmake;${{ env.CMAKE_VERSION }}" - - name: Build everything + - name: Build libchewing (for PR test only) env: ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION }} RUST_VERSION: ${{ env.RUST_VERSION }} run: | # use archlinux's dynamic only ghc cabal configure --disable-library-vanilla --enable-shared --enable-executable-dynamic --ghc-options=-dynamic - ./build-cabal -j everything + ./build-cabal -j libchewing - name: Pack prebuilt libraries if: github.event_name == 'pull_request' From c1f681feb2c200f12766417e882a71f2c39a47f2 Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:31:36 +0800 Subject: [PATCH 03/18] temporarily disable chewing-dict --- src/Rules/LibChewing.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 57905b52..2e330d52 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -76,5 +76,6 @@ libchewingRule = do copyFile' (dictSrcDir "symbols.dat") (dictOutputDir "symbols.dat") "libchewing" ~> do - need ["chewing-dict"] + -- comment out for test + -- need ["chewing-dict"] buildWithAndroidEnv buildLibchewing LibChewing From a1b09a4ea9218ea8bc4104660a0f4e399a011fba Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:35:17 +0800 Subject: [PATCH 04/18] fix patch format --- patches/libchewing.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index 7347d191..1dcdce12 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -27,4 +27,5 @@ index 4c175c1..783abfb 100644 -install(IMPORTED_RUNTIME_ARTIFACTS chewing-cli DESTINATION ${CMAKE_INSTALL_BINDIR}) # generate CMake Config files - include(CMakePackageConfigHelpers) \ No newline at end of file + include(CMakePackageConfigHelpers) + \ No newline at end of file From 9dadb1baec06bbd68861037508e6e3d5e112247a Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:41:12 +0800 Subject: [PATCH 05/18] fixup armv7 target --- src/Rules/LibChewing.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 2e330d52..b51652aa 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -25,7 +25,7 @@ libchewingRule = do { preBuild = BuildAction $ \_ src -> do -- install rust cmd_ Shell "rustup toolchain install $RUST_VERSION" - cmd_ Shell "rustup target add thumbv7neon-linux-androideabi" + cmd_ Shell "rustup target add armv7-linux-androideabi" cmd_ Shell "rustup target add aarch64-linux-android" cmd_ Shell "rustup target add i686-linux-android" cmd_ Shell "rustup target add x86_64-linux-android" From 456465be99027b3762211fd0e606ab5af79b1489 Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:47:25 +0800 Subject: [PATCH 06/18] disable data and doc --- src/Rules/LibChewing.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index b51652aa..b33f4006 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -40,8 +40,9 @@ libchewingRule = do const [ "-DBUILD_SHARED_LIBS=OFF", "-DBUILD_TESTING=OFF", + "-DBUILD_DATA=OFF", + "-DBUILD_DOC=OFF" "-DWITH_SQLITE3=OFF", - "-DWITH_RUST=OFF" ] } From 5d3c0a93993551271402f947a907d85c1158c8cc Mon Sep 17 00:00:00 2001 From: Rocka Date: Tue, 20 Jan 2026 23:50:07 +0800 Subject: [PATCH 07/18] f --- src/Rules/LibChewing.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index b33f4006..0e70bc20 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -41,8 +41,8 @@ libchewingRule = do [ "-DBUILD_SHARED_LIBS=OFF", "-DBUILD_TESTING=OFF", "-DBUILD_DATA=OFF", - "-DBUILD_DOC=OFF" - "-DWITH_SQLITE3=OFF", + "-DBUILD_DOC=OFF", + "-DWITH_SQLITE3=OFF" ] } From 061c3f7cca0512c1ce9a058baeae2a45f36715ee Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 00:09:15 +0800 Subject: [PATCH 08/18] remove install target patch --- patches/libchewing.patch | 9 --------- 1 file changed, 9 deletions(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index 1dcdce12..d1f07c44 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -11,15 +11,6 @@ index 4c175c1..783abfb 100644 if(WITH_SQLITE3) corrosion_set_features(chewing_capi FEATURES sqlite) -@@ -242,7 +252,7 @@ endif() - install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) - install(FILES ${PROJECT_BINARY_DIR}/chewing.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) --install(TARGETS libchewing -+install(TARGETS chewing_capi - EXPORT libchewingTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} @@ -261,7 +271,6 @@ if(BUILD_DATA) ) endif() From 76bdcccfa8b52340ab6a7a69a058d9cbd71aaf04 Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 00:28:48 +0800 Subject: [PATCH 09/18] install chewing_capi --- patches/libchewing.patch | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index d1f07c44..0e78a8ae 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -1,17 +1,32 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 4c175c1..783abfb 100644 +index 59e012d8..e65d104b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -77,7 +77,8 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) +@@ -77,7 +77,7 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) if(BUILD_TESTING) corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_testhelper) endif() - corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing-cli) +-corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing-cli) +corrosion_add_target_rustflags(chewing_capi "--remap-path-prefix=${PROJECT_SOURCE_DIR}=.") if(WITH_SQLITE3) corrosion_set_features(chewing_capi FEATURES sqlite) -@@ -261,7 +271,6 @@ if(BUILD_DATA) +@@ -242,12 +242,13 @@ endif() + install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) + install(FILES ${PROJECT_BINARY_DIR}/chewing.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +-install(TARGETS libchewing ++install(TARGETS chewing_capi + EXPORT libchewingTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++install(FILES $ DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + if(BUILD_DATA) + install( +@@ -261,7 +262,6 @@ if(BUILD_DATA) ) endif() @@ -19,4 +34,3 @@ index 4c175c1..783abfb 100644 # generate CMake Config files include(CMakePackageConfigHelpers) - \ No newline at end of file From 70e5172a2d33b9545a99d719236a698413fda9ac Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 00:51:32 +0800 Subject: [PATCH 10/18] f --- patches/libchewing.patch | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index 0e78a8ae..b93b3086 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 59e012d8..e65d104b 100644 +index 59e012d8..79637e60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,7 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) @@ -11,7 +11,7 @@ index 59e012d8..e65d104b 100644 if(WITH_SQLITE3) corrosion_set_features(chewing_capi FEATURES sqlite) -@@ -242,12 +242,13 @@ endif() +@@ -242,12 +242,14 @@ endif() install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) install(FILES ${PROJECT_BINARY_DIR}/chewing.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) @@ -22,11 +22,12 @@ index 59e012d8..e65d104b 100644 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -+install(FILES $ DESTINATION ${CMAKE_INSTALL_LIBDIR}) ++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libchewing_capi.a ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(BUILD_DATA) install( -@@ -261,7 +262,6 @@ if(BUILD_DATA) +@@ -261,7 +263,6 @@ if(BUILD_DATA) ) endif() From 3ea11144b38c8f1b6561125da7aa0c7981d119a2 Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 01:00:16 +0800 Subject: [PATCH 11/18] relative install path --- patches/libchewing.patch | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index b93b3086..0563e278 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 59e012d8..79637e60 100644 +index 59e012d8..380fead5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,7 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) @@ -11,19 +11,28 @@ index 59e012d8..79637e60 100644 if(WITH_SQLITE3) corrosion_set_features(chewing_capi FEATURES sqlite) -@@ -242,12 +242,14 @@ endif() - install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) +@@ -239,15 +239,17 @@ else() + ) + endif() + +-install(FILES ${ALL_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chewing) ++install(FILES ${ALL_INC} DESTINATION include/chewing) install(FILES ${PROJECT_BINARY_DIR}/chewing.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -install(TARGETS libchewing ++ DESTINATION lib/pkgconfig) +install(TARGETS chewing_capi EXPORT libchewingTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +- INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++ ARCHIVE DESTINATION lib ++ INCLUDES DESTINATION include ++ LIBRARY DESTINATION lib ++ RUNTIME DESTINATION bin) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libchewing_capi.a -+ DESTINATION ${CMAKE_INSTALL_LIBDIR}) ++ DESTINATION lib) if(BUILD_DATA) install( From 2ea208845806c3a17e8296507d419616467e2104 Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 01:07:58 +0800 Subject: [PATCH 12/18] patch everything --- .github/workflows/ci.yml | 4 ++-- src/Main.hs | 45 ++++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9697a6e..5f4c2ab3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,14 +49,14 @@ jobs: with: packages: "ndk;${{ env.NDK_VERSION }} cmake;${{ env.CMAKE_VERSION }}" - - name: Build libchewing (for PR test only) + - name: Build everything env: ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION }} RUST_VERSION: ${{ env.RUST_VERSION }} run: | # use archlinux's dynamic only ghc cabal configure --disable-library-vanilla --enable-shared --enable-executable-dynamic --ghc-options=-dynamic - ./build-cabal -j libchewing + ./build-cabal -j everything - name: Pack prebuilt libraries if: github.event_name == 'pull_request' diff --git a/src/Main.hs b/src/Main.hs index 34fd4398..ce0ced4d 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -75,28 +75,29 @@ main = do getOutputDirRule "everything" ~> do let artifacts = - [ "spell-dict", - "libime", - "chinese-addons-data", - "libime-jyutping", - "libuv", - "libintl-lite", - "lua", - "opencc", - "boost", - "zstd", - "glog", - "yaml-cpp", - "leveldb", - "marisa", - "librime", - "libhangul", - "chewing-dict", - "libchewing", - "libthai", - "libiconv", - "anthy-dict" - ] + [ "libchewing" ] + -- [ "spell-dict", + -- "libime", + -- "chinese-addons-data", + -- "libime-jyutping", + -- "libuv", + -- "libintl-lite", + -- "lua", + -- "opencc", + -- "boost", + -- "zstd", + -- "glog", + -- "yaml-cpp", + -- "leveldb", + -- "marisa", + -- "librime", + -- "libhangul", + -- "chewing-dict", + -- "libchewing", + -- "libthai", + -- "libiconv", + -- "anthy-dict" + -- ] need artifacts writeFileLines (outputDir "artifacts.txt") ("toolchain-versions.json" : artifacts) getToolchainVersions >>= writeFile' (outputDir "toolchain-versions.json") . TL.unpack . TLB.toLazyText . A.encodePrettyToTextBuilder From eb87320a3ab911c1e5c0e89271bd99a45f98cfd1 Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 23:23:03 +0800 Subject: [PATCH 13/18] optimize static library size --- patches/libchewing.patch | 41 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index 0563e278..1757fd36 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 59e012d8..380fead5 100644 +index 59e012d8..48dca4c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,7 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi) @@ -11,6 +11,15 @@ index 59e012d8..380fead5 100644 if(WITH_SQLITE3) corrosion_set_features(chewing_capi FEATURES sqlite) +@@ -191,7 +191,7 @@ target_include_directories(libchewing + ) + + corrosion_set_env_vars(chewing_capi +- CHEWING_DATADIR=${CMAKE_INSTALL_FULL_DATADIR}/libchewing ++ CHEWING_DATADIR="./libchewing" + ) + target_link_libraries(libchewing PRIVATE chewing_capi) + target_link_libraries(chewing_capi INTERFACE ${SQLite3_LIBRARIES}) @@ -239,15 +239,17 @@ else() ) endif() @@ -44,3 +53,33 @@ index 59e012d8..380fead5 100644 # generate CMake Config files include(CMakePackageConfigHelpers) +diff --git a/Cargo.toml b/Cargo.toml +index d546d772..abf57c2f 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -41,10 +41,10 @@ tempfile = "3.10.1" + + [profile.release] + lto = true +-opt-level = 3 ++opt-level = "z" + panic = "abort" + codegen-units = 1 +-debug = true ++debug = false + + [package.metadata.docs.rs] + features = ["sqlite"] +diff --git a/capi/Cargo.toml b/capi/Cargo.toml +index 517dd9e2..12fefb9e 100644 +--- a/capi/Cargo.toml ++++ b/capi/Cargo.toml +@@ -7,7 +7,7 @@ rust-version = "1.88" + edition = "2024" + + [lib] +-crate-type = ["rlib", "staticlib"] ++crate-type = ["staticlib"] + + [dependencies] + chewing = { version = "0.11.0", path = ".." } From 56db6fcfe1792b44f889bdce9f59192be416ee78 Mon Sep 17 00:00:00 2001 From: Rocka Date: Wed, 21 Jan 2026 23:35:39 +0800 Subject: [PATCH 14/18] try opt-level = "s" --- patches/libchewing.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/libchewing.patch b/patches/libchewing.patch index 1757fd36..ca23a90d 100644 --- a/patches/libchewing.patch +++ b/patches/libchewing.patch @@ -54,7 +54,7 @@ index 59e012d8..48dca4c0 100644 # generate CMake Config files include(CMakePackageConfigHelpers) diff --git a/Cargo.toml b/Cargo.toml -index d546d772..abf57c2f 100644 +index d546d772..448f6b1d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,10 +41,10 @@ tempfile = "3.10.1" @@ -62,7 +62,7 @@ index d546d772..abf57c2f 100644 [profile.release] lto = true -opt-level = 3 -+opt-level = "z" ++opt-level = "s" panic = "abort" codegen-units = 1 -debug = true From a45c7a475ae509600b6eef6e36989c3c0d4ef8c0 Mon Sep 17 00:00:00 2001 From: Rocka Date: Thu, 22 Jan 2026 00:06:42 +0800 Subject: [PATCH 15/18] try build data --- .github/workflows/ci.yml | 2 ++ src/Main.hs | 2 +- src/Rules/LibChewing.hs | 29 ++++++++++++----------------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f4c2ab3..be826ff1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,6 +43,8 @@ jobs: git config --global --add safe.directory '*' # fetch libime submodule kenlm since it's not in .gitmodules git submodule update --init --recursive libime + # fetch libchewing-data submodule + git submodule update --init --recursive libchewing - name: Setup Android NDK uses: android-actions/setup-android@v3 diff --git a/src/Main.hs b/src/Main.hs index ce0ced4d..a55b40af 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -75,7 +75,7 @@ main = do getOutputDirRule "everything" ~> do let artifacts = - [ "libchewing" ] + [ "chewing-dict", "libchewing" ] -- [ "spell-dict", -- "libime", -- "chinese-addons-data", diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 0e70bc20..3e3a5d49 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -24,17 +24,15 @@ libchewingRule = do (cmakeBuilder "libchewing") { preBuild = BuildAction $ \_ src -> do -- install rust + -- TODO: add target only before building in preBuildEachABI cmd_ Shell "rustup toolchain install $RUST_VERSION" cmd_ Shell "rustup target add armv7-linux-androideabi" cmd_ Shell "rustup target add aarch64-linux-android" cmd_ Shell "rustup target add i686-linux-android" cmd_ Shell "rustup target add x86_64-linux-android" - -- CMakeLists is changed in last build + -- CMakeLists.txt changed in last build cmd_ (Cwd src) Shell "git checkout ." - -- skip data and shared lib - -- merge libuserphrase.a into libchewing.a - -- remove absolute path by CHEWING_DATADIR macro - -- remove absolute path by __FILE__ macro + -- disable data/doc, remove absolute path, optimize library size cmd_ (Cwd src) "git apply ../patches/libchewing.patch", cmakeFlags = const @@ -56,10 +54,9 @@ libchewingRule = do libchewingBuildHost "-G" "Ninja" - [ "-DBUILD_SHARED_LIBS=OFF", - "-DBUILD_TESTING=OFF", + [ "-DBUILD_TESTING=OFF", "-DWITH_SQLITE3=OFF", - "-DWITH_RUST=OFF" + "-DBUILD_DOC=OFF" ] libchewingSrc cmd_ @@ -67,16 +64,14 @@ libchewingRule = do "--build" libchewingBuildHost "--target" - [ "data", - "all_static_data" + [ "dict_chewing", + "misc" ] - copyFile' (dictSrcDir "dictionary.dat") (dictOutputDir "dictionary.dat") - copyFile' (dictSrcDir "index_tree.dat") (dictOutputDir "index_tree.dat") - copyFile' (dictSrcDir "pinyin.tab") (dictOutputDir "pinyin.tab") - copyFile' (dictSrcDir "swkb.dat") (dictOutputDir "swkb.dat") - copyFile' (dictSrcDir "symbols.dat") (dictOutputDir "symbols.dat") + copyFile' (dictSrcDir "dict" "chewing" "tsi.dat") (dictOutputDir "tsi.dat") + copyFile' (dictSrcDir "dict" "chewing" "word.dat") (dictOutputDir "word.dat") + copyFile' (dictSrcDir "misc" "swkb.dat") (dictOutputDir "swkb.dat") + copyFile' (dictSrcDir "misc" "symbols.dat") (dictOutputDir "symbols.dat") "libchewing" ~> do - -- comment out for test - -- need ["chewing-dict"] + need ["chewing-dict"] buildWithAndroidEnv buildLibchewing LibChewing From 96b9db45af1f354ebab6d38d55c2634d27e2f5a6 Mon Sep 17 00:00:00 2001 From: Rocka Date: Thu, 22 Jan 2026 00:14:10 +0800 Subject: [PATCH 16/18] f --- src/Rules/LibChewing.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 3e3a5d49..276271f2 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -45,6 +45,8 @@ libchewingRule = do } "chewing-dict" ~> do + -- install rust + cmd_ Shell "rustup toolchain install $RUST_VERSION" let libchewingBuildHost = outputDir "libchewing-build-host" dictSrcDir = libchewingBuildHost "data" cmd_ (Cwd libchewingSrc) Shell "git checkout ." From 6dc72e030670a4b5bc6f72a408a9c9555f7535b3 Mon Sep 17 00:00:00 2001 From: Rocka Date: Thu, 22 Jan 2026 01:47:10 +0800 Subject: [PATCH 17/18] add rust version to toolchain-versions.json --- src/Main.hs | 7 +++++-- src/Rules/LibChewing.hs | 16 ++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Main.hs b/src/Main.hs index a55b40af..973d23d0 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -176,7 +176,8 @@ data ToolchainVersions = ToolchainVersions { prebuilderRev :: String, ndkVersion :: String, platformVersion :: Int, - cmakeVersion :: String + cmakeVersion :: String, + rustVersion :: String } instance A.ToJSON ToolchainVersions where @@ -185,7 +186,8 @@ instance A.ToJSON ToolchainVersions where [ fromString "prebuilder" A..= prebuilderRev, fromString "ndk" A..= ndkVersion, fromString "platform" A..= platformVersion, - fromString "cmake" A..= cmakeVersion + fromString "cmake" A..= cmakeVersion, + fromString "rust" A..= rustVersion ] getToolchainVersions :: Action ToolchainVersions @@ -199,4 +201,5 @@ getToolchainVersions = do pure $ dropWhileEnd (== ' ') ndkVersion | otherwise -> fail "Failed to parse Pkg.Revision" Nothing -> fail "Pkg.Revision not found in source.properties" + rustVersion <- fromMaybeM (fail "RUST_VERSION not set") (getEnv "RUST_VERSION") pure ToolchainVersions {..} diff --git a/src/Rules/LibChewing.hs b/src/Rules/LibChewing.hs index 276271f2..cb206bb5 100644 --- a/src/Rules/LibChewing.hs +++ b/src/Rules/LibChewing.hs @@ -23,17 +23,21 @@ libchewingRule = do useCMake $ (cmakeBuilder "libchewing") { preBuild = BuildAction $ \_ src -> do - -- install rust - -- TODO: add target only before building in preBuildEachABI + -- install rust toolchain cmd_ Shell "rustup toolchain install $RUST_VERSION" - cmd_ Shell "rustup target add armv7-linux-androideabi" - cmd_ Shell "rustup target add aarch64-linux-android" - cmd_ Shell "rustup target add i686-linux-android" - cmd_ Shell "rustup target add x86_64-linux-android" -- CMakeLists.txt changed in last build cmd_ (Cwd src) Shell "git checkout ." -- disable data/doc, remove absolute path, optimize library size cmd_ (Cwd src) "git apply ../patches/libchewing.patch", + preBuildEachABI = BuildActionABI $ \_ env -> do + -- install rust target for this abi + let targetName = case (buildEnvABI env) of + "armeabi-v7a" -> "armv7-linux-androideabi" + "arm64-v8a" -> "aarch64-linux-android" + "x86" -> "i686-linux-android" + "x86_64" -> "x86_64-linux-android" + _ -> fail "Unknown Android ABI" + cmd_ "rustup" "target" "add" targetName, cmakeFlags = const [ "-DBUILD_SHARED_LIBS=OFF", From 8b3fb95eecc92ff34340c50010284f320e908fc6 Mon Sep 17 00:00:00 2001 From: Rocka Date: Thu, 22 Jan 2026 01:54:12 +0800 Subject: [PATCH 18/18] rebuild everything --- src/Main.hs | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/Main.hs b/src/Main.hs index 973d23d0..54ed2998 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -75,29 +75,28 @@ main = do getOutputDirRule "everything" ~> do let artifacts = - [ "chewing-dict", "libchewing" ] - -- [ "spell-dict", - -- "libime", - -- "chinese-addons-data", - -- "libime-jyutping", - -- "libuv", - -- "libintl-lite", - -- "lua", - -- "opencc", - -- "boost", - -- "zstd", - -- "glog", - -- "yaml-cpp", - -- "leveldb", - -- "marisa", - -- "librime", - -- "libhangul", - -- "chewing-dict", - -- "libchewing", - -- "libthai", - -- "libiconv", - -- "anthy-dict" - -- ] + [ "spell-dict", + "libime", + "chinese-addons-data", + "libime-jyutping", + "libuv", + "libintl-lite", + "lua", + "opencc", + "boost", + "zstd", + "glog", + "yaml-cpp", + "leveldb", + "marisa", + "librime", + "libhangul", + "chewing-dict", + "libchewing", + "libthai", + "libiconv", + "anthy-dict" + ] need artifacts writeFileLines (outputDir "artifacts.txt") ("toolchain-versions.json" : artifacts) getToolchainVersions >>= writeFile' (outputDir "toolchain-versions.json") . TL.unpack . TLB.toLazyText . A.encodePrettyToTextBuilder