From 2ef24254f98c18cda875c57a69ecfe01e935a7bf Mon Sep 17 00:00:00 2001 From: Qijia Liu Date: Mon, 30 Dec 2024 18:48:13 -0500 Subject: [PATCH 1/4] Add libmozc rule --- .github/workflows/ci.yml | 18 +++++++++++++++++- .gitmodules | 3 +++ README.md | 1 + fcitx5-mozc | 1 + prebuilder.cabal | 1 + src/Main.hs | 3 +++ src/Rules/LibMozc.hs | 35 +++++++++++++++++++++++++++++++++++ 7 files changed, 61 insertions(+), 1 deletion(-) create mode 160000 fcitx5-mozc create mode 100644 src/Rules/LibMozc.hs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 680d22bc..f3ed8c57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,13 +14,14 @@ jobs: NDK_VERSION: "25.2.9519653" CMAKE_VERSION: "3.22.1" ANDROID_PLATFORM: "23" + MOZC_SHA: ad0e97b8b8dcfd4c841a02c5d6a043fb5e741405 steps: - name: Install build dependencies run: | pacman -Syu --needed --noconfirm \ git unzip ghc cabal-install haskell-shake haskell-aeson-pretty \ - cmake extra-cmake-modules ninja fmt fcitx5 boost python opencc jre-openjdk gperf + cmake extra-cmake-modules ninja fmt fcitx5 boost python opencc jre-openjdk gperf bazel - name: Fetch source code uses: actions/checkout@v4 @@ -36,11 +37,26 @@ jobs: # fetch libime submodule kenlm since it's not in .gitmodules git submodule update --init --recursive libime + - name: Fetch mozc + uses: actions/checkout@v4 + with: + submodules: recursive + repository: google/mozc + path: fcitx5-mozc/mozc + ref: ${{ env.MOZC_SHA }} + - name: Setup Android NDK uses: android-actions/setup-android@v3 with: packages: "ndk;${{ env.NDK_VERSION }} cmake;${{ env.CMAKE_VERSION }}" + - name: Build mozc_data.inc + run: | + cd fcitx5-mozc/mozc/src + useradd -m builduser + chown -R builduser:builduser . + sudo -u builduser JAVA_HOME=/usr/lib/jvm/java-21-openjdk bazel build --config oss_linux --host_cxxopt=-Wno-uninitialized //data_manager/oss:mozc_data.inc + - name: Build everything env: ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION }} diff --git a/.gitmodules b/.gitmodules index 25500b88..f2002370 100644 --- a/.gitmodules +++ b/.gitmodules @@ -66,3 +66,6 @@ [submodule "libiconv"] path = libiconv url = https://git.savannah.gnu.org/git/libiconv +[submodule "fcitx5-mozc"] + path = fcitx5-mozc + url = https://github.com/fcitx-contrib/fcitx5-mozc diff --git a/README.md b/README.md index 76a51ce7..a240cd92 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,4 @@ Cabal is required to build this project. * libchewing: [chewing/libchewing](https://github.com/chewing/libchewing) * libthai: [tlwg/libthai](https://github.com/tlwg/libthai) * libiconv: [GNU/libiconv](https://savannah.gnu.org/projects/libiconv) +* mozc: [google/mozc](https://github.com/google/mozc) diff --git a/fcitx5-mozc b/fcitx5-mozc new file mode 160000 index 00000000..5580d540 --- /dev/null +++ b/fcitx5-mozc @@ -0,0 +1 @@ +Subproject commit 5580d540d61e873033671e3d3af3e4fff51bd91d diff --git a/prebuilder.cabal b/prebuilder.cabal index 77e672df..177dab50 100644 --- a/prebuilder.cabal +++ b/prebuilder.cabal @@ -35,6 +35,7 @@ executable prebuilder Rules.LibIMEJyutping Rules.LibIconv Rules.LibIntlLite + Rules.LibMozc Rules.LibRime Rules.LibThai Rules.Lua diff --git a/src/Main.hs b/src/Main.hs index 20451147..e4257abd 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -26,6 +26,7 @@ import Rules.LibHangul import Rules.LibIME import Rules.LibIMEJyutping import Rules.LibIntlLite +import Rules.LibMozc import Rules.LibRime import Rules.LibThai import Rules.Lua @@ -71,6 +72,7 @@ main = do libthaiRule libiconvRule anthyDictRule + libmozcRule isInGitHubActionRule getOutputDirRule "everything" ~> do @@ -90,6 +92,7 @@ main = do "yaml-cpp", "leveldb", "marisa", + "libmozc", "librime", "libhangul", "chewing-dict", diff --git a/src/Rules/LibMozc.hs b/src/Rules/LibMozc.hs new file mode 100644 index 00000000..9c627884 --- /dev/null +++ b/src/Rules/LibMozc.hs @@ -0,0 +1,35 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeFamilies #-} + +module Rules.LibMozc where + +import Base +import CMakeBuilder + +data LibMozc = LibMozc + deriving stock (Eq, Show, Typeable, Generic) + deriving anyclass (Hashable, Binary, NFData) + +type instance RuleResult LibMozc = () + +libmozcRule :: Rules () +libmozcRule = do + buildLibmozc <- + useCMake $ + (cmakeBuilder "fcitx5-mozc") + { preBuild = BuildAction $ \_ src -> do + cmd_ (Cwd src) "cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_MOZC_ADDON=OFF" + cmd_ (Cwd src) "cmake --build build --target protoc", + cmakeFlags = + const + [ "-DPROTOC_EXECUTABLE=../../build/protoc", + "-DCMAKE_CXX_FLAGS=-I../../fcitx5-mozc/mozc/src/bazel-bin", + "-DBUILD_MOZC_ADDON=OFF" + ], + postBuildEachABI = BuildActionABI $ \_ BuildEnv {..} -> do + cmd_ (Cwd buildEnvBuildDir) Shell "ar rc" (buildEnvOutPrefix "lib" "libabsl.a") "$(find mozc/src/third_party/abseil-cpp -name '*.o')" + } + "libmozc" ~> buildWithAndroidEnv buildLibmozc LibMozc From cd7f654809316174e061ce8bb2311e28fa16319b Mon Sep 17 00:00:00 2001 From: Qijia Liu Date: Mon, 30 Dec 2024 20:06:01 -0500 Subject: [PATCH 2/4] rename dir --- .github/workflows/ci.yml | 4 ++-- .gitmodules | 4 ++-- fcitx5-mozc => libmozc | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename fcitx5-mozc => libmozc (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3ed8c57..82daf274 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: with: submodules: recursive repository: google/mozc - path: fcitx5-mozc/mozc + path: libmozc/mozc ref: ${{ env.MOZC_SHA }} - name: Setup Android NDK @@ -52,7 +52,7 @@ jobs: - name: Build mozc_data.inc run: | - cd fcitx5-mozc/mozc/src + cd libmozc/mozc/src useradd -m builduser chown -R builduser:builduser . sudo -u builduser JAVA_HOME=/usr/lib/jvm/java-21-openjdk bazel build --config oss_linux --host_cxxopt=-Wno-uninitialized //data_manager/oss:mozc_data.inc diff --git a/.gitmodules b/.gitmodules index f2002370..a70b4e45 100644 --- a/.gitmodules +++ b/.gitmodules @@ -66,6 +66,6 @@ [submodule "libiconv"] path = libiconv url = https://git.savannah.gnu.org/git/libiconv -[submodule "fcitx5-mozc"] - path = fcitx5-mozc +[submodule "libmozc"] + path = libmozc url = https://github.com/fcitx-contrib/fcitx5-mozc diff --git a/fcitx5-mozc b/libmozc similarity index 100% rename from fcitx5-mozc rename to libmozc From c5c6d35674fe5228559c4a4708a30f6543ed672a Mon Sep 17 00:00:00 2001 From: Qijia Liu Date: Mon, 30 Dec 2024 20:22:07 -0500 Subject: [PATCH 3/4] oops --- src/Rules/LibMozc.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rules/LibMozc.hs b/src/Rules/LibMozc.hs index 9c627884..9563121c 100644 --- a/src/Rules/LibMozc.hs +++ b/src/Rules/LibMozc.hs @@ -19,14 +19,14 @@ libmozcRule :: Rules () libmozcRule = do buildLibmozc <- useCMake $ - (cmakeBuilder "fcitx5-mozc") + (cmakeBuilder "libmozc") { preBuild = BuildAction $ \_ src -> do cmd_ (Cwd src) "cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_MOZC_ADDON=OFF" cmd_ (Cwd src) "cmake --build build --target protoc", cmakeFlags = const [ "-DPROTOC_EXECUTABLE=../../build/protoc", - "-DCMAKE_CXX_FLAGS=-I../../fcitx5-mozc/mozc/src/bazel-bin", + "-DCMAKE_CXX_FLAGS=-I../../libmozc/mozc/src/bazel-bin", "-DBUILD_MOZC_ADDON=OFF" ], postBuildEachABI = BuildActionABI $ \_ BuildEnv {..} -> do From 408ff71ee75eaa29f23cc69b11ef571745c41927 Mon Sep 17 00:00:00 2001 From: Qijia Liu Date: Mon, 30 Dec 2024 21:55:59 -0500 Subject: [PATCH 4/4] accelerate bazel protobuf --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82daf274..51d952a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,7 @@ jobs: - name: Build mozc_data.inc run: | + git apply --directory=libmozc/mozc/src/third_party/protobuf libmozc/patches/protobuf.patch cd libmozc/mozc/src useradd -m builduser chown -R builduser:builduser .