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
1 change: 1 addition & 0 deletions prebuilder.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,6 @@ executable prebuilder
Rules.Lua
Rules.Marisa
Rules.OpenCC
Rules.RustToolchain
Rules.YAMLCpp
Rules.ZSTD
4 changes: 3 additions & 1 deletion src/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ data AndroidEnv = AndroidEnv
ndkRoot :: FilePath,
sdkCMakeVersion :: String,
platform :: Int,
rustVersion :: String,
abi :: String
}
deriving stock (Eq, Show, Typeable, Generic)
Expand Down Expand Up @@ -141,6 +142,7 @@ getAndroidEnv = do
ndkRoot <- env "ANDROID_NDK_ROOT"
sdkCMakeVersion <- env "CMAKE_VERSION"
platform <- read <$> env "ANDROID_PLATFORM"
rustVersion <- env "RUST_VERSION"
abi <- env "ABI"
pure AndroidEnv {..}
where
Expand Down Expand Up @@ -174,7 +176,7 @@ execute tool =
cmdArguments
( CmdArgument
[ Right (outputDir </> "host" </> "bin" </> tool),
Left (AddEnv "LD_LIBRARY_PATH" (outputDir </> "host" </> "lib"))
Left (AddEnv "LD_LIBRARY_PATH" (outputDir </> "host" </> "lib"))
]
)

Expand Down
16 changes: 12 additions & 4 deletions src/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,18 @@ import Rules.Fcitx5
import Rules.GLog
import Rules.LevelDB
import Rules.LibChewing
import Rules.LibUV
import Rules.LibIconv
import Rules.LibHangul
import Rules.LibIME
import Rules.LibIMEJyutping
import Rules.LibIconv
import Rules.LibIntlLite
import Rules.LibRime
import Rules.LibThai
import Rules.LibUV
import Rules.Lua
import Rules.Marisa
import Rules.OpenCC
import Rules.RustToolchain
import Rules.YAMLCpp
import Rules.ZSTD

Expand Down Expand Up @@ -73,6 +74,8 @@ main = do
libthaiRule
libiconvRule
anthyDictRule
hostRustToolchainRule
androidRustTargetsRule
isInGitHubActionRule
getOutputDirRule
"everything" ~> do
Expand Down Expand Up @@ -194,13 +197,18 @@ instance A.ToJSON ToolchainVersions where
getToolchainVersions :: Action ToolchainVersions
getToolchainVersions = do
StdoutTrim prebuilderRev <- cmd "git" "rev-parse" "HEAD"
AndroidEnv {sdkCMakeVersion = cmakeVersion, platform = platformVersion, ..} <- getAndroidEnv
AndroidEnv
{ sdkCMakeVersion = cmakeVersion,
platform = platformVersion,
rustVersion = rustVersion,
..
} <-
getAndroidEnv
properties <- readFileLines $ ndkRoot </> "source.properties"
ndkVersion <- case find ("Pkg.Revision" `isPrefixOf`) properties of
Just line
| [_, ndkVersion] <- split (== '=') line ->
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 {..}
16 changes: 2 additions & 14 deletions src/Rules/LibChewing.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,10 @@ libchewingRule = do
useCMake $
(cmakeBuilder "libchewing")
{ preBuild = BuildAction $ \_ src -> do
-- install rust toolchain
cmd_ Shell "rustup toolchain install $RUST_VERSION"
-- 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",
Expand All @@ -49,8 +38,7 @@ libchewingRule = do
}

"chewing-dict" ~> do
-- install rust
cmd_ Shell "rustup toolchain install $RUST_VERSION"
need ["host-rust-toolchain"]
let libchewingBuildHost = outputDir </> "libchewing-build-host"
dictSrcDir = libchewingBuildHost </> "data"
cmd_ (Cwd libchewingSrc) Shell "git checkout ."
Expand Down Expand Up @@ -79,5 +67,5 @@ libchewingRule = do
copyFile' (dictSrcDir </> "misc" </> "symbols.dat") (dictOutputDir </> "symbols.dat")

"libchewing" ~> do
need ["chewing-dict"]
need ["chewing-dict", "android-rust-targets"]
buildWithAndroidEnv buildLibchewing LibChewing
27 changes: 27 additions & 0 deletions src/Rules/RustToolchain.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module Rules.RustToolchain
( hostRustToolchainRule,
androidRustTargetsRule,
)
where

import Base

hostRustToolchainRule :: Rules ()
hostRustToolchainRule = do
"host-rust-toolchain" ~> do
androidEnv <- getAndroidEnv
cmd_ "rustup" "toolchain" "install" (rustVersion androidEnv)

androidRustTargetsRule :: Rules ()
androidRustTargetsRule = do
"android-rust-targets" ~> do
need ["host-rust-toolchain"]
androidEnv <- getAndroidEnv
forM_ (getABIList androidEnv) $ \a -> do
let target = case a of
"armeabi-v7a" -> "armv7-linux-androideabi"
"arm64-v8a" -> "aarch64-linux-android"
"x86_64" -> "x86_64-linux-android"
"x86" -> "i686-linux-android"
_ -> error $ "Unknown Android ABI: " <> a
cmd_ "rustup" "target" "add" target