diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..10e57e51e --- /dev/null +++ b/docker/README.md @@ -0,0 +1,9 @@ +# docker/ (Deprecated) + + * [`ubuntu22.04/Dockerfile`](./ubuntu22.04/Dockerfile) + * [`ubuntu24.04/Dockerfile`](./ubuntu24.04/Dockerfile) + +⚠️ `Dockerfile` provided in this directory are deprecated. See the following documents on how to build Mozc for Linux desktop or Android. + +* [How to build Mozc for Android](../docs/build_mozc_for_android.md): for Android library (`libmozc.so`) +* [How to build Mozc for Linux](../docs/build_mozc_for_linux.md): for Linux desktop diff --git a/docker/ubuntu22.04/Dockerfile b/docker/ubuntu22.04/Dockerfile index e7a5ac317..5f6bb67bc 100644 --- a/docker/ubuntu22.04/Dockerfile +++ b/docker/ubuntu22.04/Dockerfile @@ -27,8 +27,10 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Build instructions with this Dockerfile. -# https://github.com/google/mozc/blob/master/docs/build_mozc_in_docker.md +# This file is deprecated. +# See the following pages for the latest build instructions. +# - https://github.com/google/mozc/blob/master/docs/build_mozc_for_linux.md +# - https://github.com/google/mozc/blob/master/docs/build_mozc_for_android.md FROM ubuntu:22.04 diff --git a/docker/ubuntu22.04/README.md b/docker/ubuntu22.04/README.md new file mode 100644 index 000000000..0cc63ec25 --- /dev/null +++ b/docker/ubuntu22.04/README.md @@ -0,0 +1,8 @@ +# docker/ubuntu22.04 (Deprecated) + + * [`Dockerfile`](./Dockerfile) + +⚠️ `Dockerfile` provided in this directory is deprecated. See the following documents on how to build Mozc for Linux desktop or Android. + +* [How to build Mozc for Android](../../docs/build_mozc_for_android.md): for Android library (`libmozc.so`) +* [How to build Mozc for Linux](../../docs/build_mozc_for_linux.md): for Linux desktop diff --git a/docker/ubuntu24.04/Dockerfile b/docker/ubuntu24.04/Dockerfile index b024ebd95..57ef6cdce 100644 --- a/docker/ubuntu24.04/Dockerfile +++ b/docker/ubuntu24.04/Dockerfile @@ -27,8 +27,10 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Build instructions with this Dockerfile. -# https://github.com/google/mozc/blob/master/docs/build_mozc_in_docker.md +# This file is deprecated. +# See the following pages for the latest build instructions. +# - https://github.com/google/mozc/blob/master/docs/build_mozc_for_linux.md +# - https://github.com/google/mozc/blob/master/docs/build_mozc_for_android.md FROM ubuntu:24.04 diff --git a/docker/ubuntu24.04/README.md b/docker/ubuntu24.04/README.md new file mode 100644 index 000000000..b7bdac21d --- /dev/null +++ b/docker/ubuntu24.04/README.md @@ -0,0 +1,8 @@ +# docker/ubuntu24.04 (Deprecated) + + * [`Dockerfile`](./Dockerfile) + +⚠️ `Dockerfile` provided in this directory is deprecated. See the following documents on how to build Mozc for Linux desktop or Android. + +* [How to build Mozc for Android](../../docs/build_mozc_for_android.md): for Android library (`libmozc.so`) +* [How to build Mozc for Linux](../../docs/build_mozc_for_linux.md): for Linux desktop diff --git a/docs/build_mozc_for_linux.md b/docs/build_mozc_for_linux.md new file mode 100644 index 000000000..7da9d22b0 --- /dev/null +++ b/docs/build_mozc_for_linux.md @@ -0,0 +1,197 @@ +# How to build Mozc for Linux desktop + +[](https://github.com/google/mozc/actions/workflows/linux.yaml) + +## Summary + +If you are not sure what the following commands do, please check the +descriptions below and make sure the operations before running them. + +``` +git clone https://github.com/google/mozc.git --recursive +cd mozc/src + +bazelisk build package --config oss_linux --config release_build +``` + +`bazel-bin/unix/mozc.zip` contains built files. + +## System Requirements + +Due to the diverse nature of Linux desktop ecosystem, how our Linux CI is +configured is almost always the best example on how Mozc executables for Linux +desktop can be built and tested against existing test cases. + +* [`.github/workflows/linux.yaml`](../.github/workflows/linux.yaml) +* [CI for Linux](https://github.com/google/mozc/actions/workflows/linux.yaml) + +The following sections describe relevant software components that are necessary +to build Mozc for Linux desktop. + +### Bazelisk + +[Bazelisk](https://github.com/bazelbuild/bazelisk) is a wrapper of +[Bazel](https://bazel.build) to use the specific version of Bazel. + +The Bazel version specified in [`src/.bazeliskrc`](../src/.bazeliskrc) is what +our CI is testing against. + +See the following document for detail on how Bazelisk determines the Bazel +version. + + * [How does Bazelisk know which Bazel version to run?](https://github.com/bazelbuild/bazelisk/blob/master/README.md#how-does-bazelisk-know-which-bazel-version-to-run) + +⚠️ Bazel version mismatch is a major source of build failures. If you manually +install Bazel then use it instead of Bazelisk, pay extra attention to which +version of Bazel you are using. + +### C++ toolchain + +Some C++ toolchain (typically GCC or Clang) is needed to build Mozc. + +💡 [`rules_cc`](https://github.com/bazelbuild/rules_cc/) automatically detects +what C++ toolchains are available in the host environment. + +### Packages + +Packages referenced in `pkg_config_repository` at +[`src/MODULE.bazel`](../src/MODULE.bazel) need to be installed beforehand. + +``` +# iBus +pkg_config_repository( + name = "ibus", + packages = [ + "glib-2.0", + "gobject-2.0", + "ibus-1.0", + ], +) +``` +``` +# Qt for Linux +pkg_config_repository( + name = "qt_linux", + packages = [ + "Qt6Core", + "Qt6Gui", + "Qt6Widgets", + ], +) +``` + +## Get the Code + +You can download Mozc source code as follows. + +``` +git clone https://github.com/google/mozc.git --recursive +cd mozc/src +``` + +Hereafter you can do all the operations without changing directory. + +## Build Mozc + +You should be able to build Mozc for Linux desktop as follows, assuming +`bazelisk` is in your `$PATH`. + +``` +bazelisk build package --config oss_linux --config release_build +``` + +`package` is an alias to build Mozc executables and archive them into `mozc.zip`. + +### Clean Bazel's build cache + +💡 You may have some build errors when you update the build environment or +configurations. Try the following command to +[clean Bazel's build cache](https://bazel.build/docs/user-manual#clean). + +``` +bazelisk clean --expunge +``` + +### Mozc installation locations + +Here is a table of contents in `mozc.zip` and their actual build target names. + +| build target | installation location | +| -------------------------------- | --------------------- | +| `//server:mozc_server` | `/usr/lib/mozc/mozc_server` | +| `//gui/tool:mozc_tool` | `/usr/lib/mozc/mozc_tool` | +| `//renderer:mozc_renderer` | `/usr/lib/mozc/mozc_renderer` | +| `//unix/ibus/ibus_mozc` | `/usr/lib/ibus-mozc/ibus-engine-mozc` | +| `//unix/ibus:gen_mozc_xml` | `/usr/share/ibus/component/mozc.xml` | +| `//unix:icons` | `/usr/share/ibus-mozc/...` | +| `//unix:icons` | `/usr/share/icons/mozc/...` | +| `//unix/emacs:mozc.el` | `/usr/share/emacs/site-lisp/emacs-mozc/mozc.el` | +| `//unix/emacs:mozc_emacs_helper` | `/usr/bin/mozc_emacs_helper` | + +To customize above installation locations, modify +[`src/config.bzl`](../src/config.bzl). + +💡 The following command makes the specified file untracked by Git. +``` +git update-index --assume-unchanged src/config.bzl +``` +💡 This command reverts the above change. +``` +git update-index --no-assume-unchanged src/config.bzl +``` + +## Unit tests + +### Run all tests + +``` +bazelisk test ... --config oss_linux --build_tests_only -c dbg +``` + +* `...` means all targets under the current and subdirectories. + + +### Run tests under the specific directories + +``` +bazelisk test base/... composer/... --config oss_linux --build_tests_only -c dbg +``` + +* `