diff --git a/content/post/build-co-linux.md b/content/post/build-co-linux.md index 289329b4..81026a48 100644 --- a/content/post/build-co-linux.md +++ b/content/post/build-co-linux.md @@ -89,7 +89,11 @@ sudo zypper install autoconf automake cppunit-devel fontconfig-devel gcc-c++ \ ### General notes -A C++ compiler with full C++20 support is required, including `std::format` (GCC 13+ or Clang 17+). +A C++ compiler with full C++20 support is required, including `std::format` (GCC 13+ or Clang 17+); the code uses `std::format`, which the GNU C++ standard library only provides from GCC 13 on. The distribution releases listed above all ship a new enough compiler. If yours does not, install a newer one (for example the `gcc-13` and `g++-13` packages) and select it on the configure line, optionally prefixed with `ccache` for faster rebuilds: + +```bash +./configure CC="ccache gcc-13" CXX="ccache g++-13" --enable-qtapp --enable-debug +``` POCO is built as part of the engine (`engine/`) and picked up from its workdir automatically, so it no longer needs to be installed as a distro package. diff --git a/content/post/build-code.md b/content/post/build-code.md index 5c3e5c44..3eb904a6 100644 --- a/content/post/build-code.md +++ b/content/post/build-code.md @@ -26,6 +26,8 @@ Build **C**ollabora **O**nline **D**evelopment **E**dition. Choose your operatin **Where the code lives.** Development happens on [Gerrit](https://gerrit.collaboraoffice.com/), which is where code review takes place and where the canonical history lives. GitHub hosts a read-only mirror of the monorepo (online plus the engine under `engine/`) at [`CollaboraOnline/online.mirror`](https://github.com/CollaboraOnline/online.mirror) for browsing, cloning, and GitHub Actions. The original [`CollaboraOnline/online`](https://github.com/CollaboraOnline/online) repo is now used only for the issue tracker, so existing `cool#1234` references in commit messages keep working. Pull requests against either GitHub repo are auto-closed; see the FAQ entries [What is `online.mirror`?]({{< relref "faq.md#online-mirror" >}}) and [I have a fix - where do I send the PR?]({{< relref "faq.md#sending-fixes" >}}) for the contribution workflow. +**Compiler requirement.** Building CODE needs a C++ compiler with full C++20 support, including `std::format`: GCC 13 or newer (or Clang 17 or newer). The code uses `std::format`, which the GNU C++ standard library only provides from GCC 13 on, so builds with GCC 12 or older fail. The distribution sections below say how to get a new enough compiler where the default one is too old. + {{< build-dropdown >}}
@@ -69,6 +71,12 @@ zypper in libcap-progs python3-polib libcap-devel npm libtool cppunit-devel pam- zypper in libpng16-compat-devel ``` +The default gcc on Leap 15.x is older than GCC 13, which the build requires. Install the newer compiler packages, plus ccache for faster rebuilds: +```bash +zypper in gcc13 gcc13-c++ ccache +``` +The configure line below then selects this compiler as `gcc-13` and `g++-13`. + ### Clone the source Clone the unified `online` monorepo from Gerrit: @@ -80,7 +88,7 @@ Clone the unified `online` monorepo from Gerrit: ### Building CODE Run autoconf/automake, configure and build using GNU make: -{{% common-build-commands section="build-online" %}} +{{% common-build-commands section="build-online" cc="gcc-13" cxx="g++-13" %}} {{% common-build-commands section="run-unit-tests" %}} @@ -96,6 +104,8 @@ Run autoconf/automake, configure and build using GNU make: The instructions below have been prepared for and tested on Fedora 37. You might need to do small adjustments for Fedora-based distributions. +The build requires GCC 13 or newer. Fedora ships GCC 13 as its system compiler since Fedora 38, so use Fedora 38 or a later release. + ### Dependencies We need the engine and several other libraries and tools to build `CODE`. POCO is built as part of the engine and taken from its workdir, so it is not a separate dependency. @@ -103,6 +113,7 @@ Open a terminal and follow the steps below: ```bash sudo dnf install \ + ccache \ chromium \ cppunit-devel \ gcc \ @@ -152,9 +163,11 @@ We need the engine and several other libraries and tools to build `CODE`. POCO i Open a terminal and follow the steps below: ```bash -sudo pacman -Syu libcap libcap-ng lib32-libcap libpng cppunit nodejs npm chromium python-lxml python-polib +sudo pacman -Syu ccache libcap libcap-ng lib32-libcap libpng cppunit nodejs npm chromium python-lxml python-polib ``` +The build requires GCC 13 or newer. Arch is a rolling release and its current `gcc` package is well past that, so the default compiler is fine. + ### Clone the source Clone the unified `online` monorepo from Gerrit: @@ -182,6 +195,8 @@ Run autoconf/automake, configure and build using GNU make: The instructions below have been prepared for and tested on Debian GNU/Linux 11 (bullseye). You might need to do small adjustments for other releases. +The build requires GCC 13 or newer. Debian 13 (trixie) ships GCC 14 as its default compiler, so use Debian 13 or a later release. Debian 12 and older default to GCC 12 or older and do not carry a gcc-13 package, so they cannot build the current code. + *Note: Sometimes Debian comes without sudo preinstalled. If you do not have sudo, you will need to run `apt install -y sudo` as root. It is not good enough to only run the commands which require sudo below as root, as sudo is also run during `make`* @@ -199,7 +214,7 @@ Now install the rest of the required packages: sudo apt install -y python3-polib libcap-dev npm \ libpam-dev wget git build-essential libtool \ libcap2-bin python3-lxml libpng-dev libcppunit-dev \ - pkg-config fontconfig chromium + pkg-config fontconfig chromium ccache ``` ### Clone the source @@ -229,6 +244,8 @@ Run autoconf/automake, configure and build using GNU make: The instructions below have been prepared for and tested on Ubuntu 20.04 LTS. You might need to do small adjustments for other releases. +The build requires GCC 13 or newer. Ubuntu ships GCC 13 as its default compiler since 24.04 LTS, so use Ubuntu 24.04 LTS or a later release. On an older release, install the `gcc-13` and `g++-13` packages if your release provides them and pass `CC="ccache gcc-13" CXX="ccache g++-13"` to configure instead of the plain compiler names. + ### Dependencies We need the engine and several other libraries and tools to build `CODE`. POCO is built as part of the engine and taken from its workdir, so it is not a separate dependency. Open a terminal and follow the steps below. @@ -243,7 +260,7 @@ Now install the rest of the required packages: sudo apt install -y python3-polib libcap-dev libssl-dev npm \ libpam-dev libzstd-dev wget git build-essential libtool \ libcap2-bin python3-lxml libpng-dev libgif-dev libcppunit-dev \ - pkg-config fontconfig snapd chromium-browser + pkg-config fontconfig snapd chromium-browser ccache ``` *Note: Chromium is needed and used in the cypress tests. Ubuntu has no Chromium deb packages in its repositories, only a dummy package that points to the respective snap. Probably best to make sure you have snapd installed and install chromium-browser which in turn will install the snap package.* @@ -297,10 +314,14 @@ Online, configuring your build and running your newly-built CODE. CODE must be built on Linux, and you need the following: +* A C++ compiler with full C++20 support, including `std::format`: GCC 13 or newer + + If your distribution's default gcc is older than 13, install a versioned package such as `gcc-13` and `g++-13` and pass `CC` and `CXX` to configure as shown below * The engine + Either build the engine from source, or download a daily built archive (see below) * libpng, libcap-progs, libtool, automake, autoconf, pkg-config, sudo, pam + Use the packages from your distro +* ccache + + Optional: caches compilation results so rebuilds are much faster; the sample configure line below uses it You may also want to have the following optional dependencies: diff --git a/layouts/shortcodes/common-build-commands.md b/layouts/shortcodes/common-build-commands.md index fdc8acd0..087a6ce7 100644 --- a/layouts/shortcodes/common-build-commands.md +++ b/layouts/shortcodes/common-build-commands.md @@ -71,14 +71,16 @@ cd {{$clonedir}} {{ end }} {{ if eq $section "build-online" }} +{{$cc := .Get "cc" | default "gcc"}} +{{$cxx := .Get "cxx" | default "g++"}} Run autogen to generate the configure file: ```bash ./autogen.sh ``` -Run the generated configure script. The engine is in `engine/`, where configure looks by default, so no paths need to be passed: +Run the generated configure script. The engine is in `engine/`, where configure looks by default, so no paths need to be passed. The `CC` and `CXX` variables select the compiler, which must be GCC 13 or newer (see the compiler requirement above). The `ccache` prefix stores compilation results so that later rebuilds are much faster; install the `ccache` package from your distribution, or drop the prefix if you do not want it: ```bash -./configure --enable-debug --enable-cypress +./configure CC="ccache {{$cc}}" CXX="ccache {{$cxx}}" --enable-debug --enable-cypress ``` You can add `--disable-ssl` instead of changing coolwsd.xml every time you want to disable ssl.