Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ jobs:
NDK_VERSION: "28.0.13004108"
CMAKE_VERSION: "3.31.6"
ANDROID_PLATFORM: "23"
RUST_VERSION: "1.92.0"

steps:
- name: Install build dependencies
# android-actions/setup-android needs unzip
# sdkmanager needs jre
# libime needs boost (build host tools)
# opencc needs python (scripts)
# libchewing needs rustup (build)
# libiconv needs gperf (build)
run: |
pacman -Syu --needed --noconfirm \
Expand All @@ -29,6 +31,7 @@ jobs:
cmake extra-cmake-modules ninja \
boost \
python \
rustup \
gperf

- name: Fetch source code
Expand All @@ -44,6 +47,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
Expand All @@ -53,6 +58,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
Expand Down
2 changes: 1 addition & 1 deletion libchewing
Submodule libchewing updated 202 files
117 changes: 76 additions & 41 deletions patches/libchewing.patch
Original file line number Diff line number Diff line change
@@ -1,50 +1,85 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ae1d14b7..5d03df35 100644
index 59e012d8..48dca4c0 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)
endif()

-add_subdirectory(doc)
-add_subdirectory(data)
@@ -77,7 +77,7 @@ corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_capi)
if(BUILD_TESTING)
add_subdirectory(tests)
corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing_testhelper)
endif()
@@ -228,14 +226,20 @@ add_library(common OBJECT
-corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES chewing-cli)
+corrosion_add_target_rustflags(chewing_capi "--remap-path-prefix=${PROJECT_SOURCE_DIR}=.")

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\"
if(WITH_SQLITE3)
corrosion_set_features(chewing_capi FEATURES sqlite)
@@ -191,7 +191,7 @@ target_include_directories(libchewing
)

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\"
corrosion_set_env_vars(chewing_capi
- 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)
target_link_libraries(libchewing PRIVATE chewing_capi)
target_link_libraries(chewing_capi INTERFACE ${SQLite3_LIBRARIES})
@@ -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)
-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 lib
+ INCLUDES DESTINATION include
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libchewing_capi.a
+ DESTINATION lib)

if(BUILD_DATA)
install(
@@ -261,7 +263,6 @@ if(BUILD_DATA)
)
endif()

-install(IMPORTED_RUNTIME_ARTIFACTS chewing-cli DESTINATION ${CMAKE_INSTALL_BINDIR})

# generate CMake Config files
include(CMakePackageConfigHelpers)
diff --git a/Cargo.toml b/Cargo.toml
index d546d772..448f6b1d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -41,10 +41,10 @@ tempfile = "3.10.1"

[profile.release]
lto = true
-opt-level = 3
+opt-level = "s"
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 = ".." }
7 changes: 5 additions & 2 deletions src/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ data ToolchainVersions = ToolchainVersions
{ prebuilderRev :: String,
ndkVersion :: String,
platformVersion :: Int,
cmakeVersion :: String
cmakeVersion :: String,
rustVersion :: String
}

instance A.ToJSON ToolchainVersions where
Expand All @@ -186,7 +187,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
Expand All @@ -200,4 +202,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 {..}
53 changes: 31 additions & 22 deletions src/Rules/LibChewing.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,34 @@ libchewingRule = do
useCMake $
(cmakeBuilder "libchewing")
{ preBuild = BuildAction $ \_ src -> do
-- CMakeLists is changed in last build
-- install rust toolchain
cmd_ Shell "rustup toolchain install $RUST_VERSION"
-- 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
[ "-DBUILD_SHARED_LIBS=OFF",
"-DBUILD_TESTING=OFF",
"-DWITH_SQLITE3=OFF",
"-DWITH_RUST=OFF"
]
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",
"-DBUILD_TESTING=OFF",
"-DBUILD_DATA=OFF",
"-DBUILD_DOC=OFF",
"-DWITH_SQLITE3=OFF"
]
}

"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 ."
Expand All @@ -49,25 +60,23 @@ 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_
"cmake"
"--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
need ["chewing-dict"]
Expand Down