diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 680d22bc..51d952a1 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,27 @@ 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: libmozc/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: | + git apply --directory=libmozc/mozc/src/third_party/protobuf libmozc/patches/protobuf.patch + 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 + - name: Build everything env: ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION }} diff --git a/.gitmodules b/.gitmodules index 25500b88..a70b4e45 100644 --- a/.gitmodules +++ b/.gitmodules @@ -66,3 +66,6 @@ [submodule "libiconv"] path = libiconv url = https://git.savannah.gnu.org/git/libiconv +[submodule "libmozc"] + path = libmozc + 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/libmozc b/libmozc new file mode 160000 index 00000000..5580d540 --- /dev/null +++ b/libmozc @@ -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..9563121c --- /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 "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../../libmozc/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