├── .github └── workflows │ ├── build.yml │ ├── pr.yml │ └── release.yml ├── CHANGELOG.md ├── LICENSE └── README.md /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: 3 | push: 4 | branches: 5 | - v1.x 6 | - v2.x 7 | - v3.x 8 | jobs: 9 | build: 10 | name: Publish latest 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout the Git repository 14 | uses: actions/checkout@v2 15 | - name: Build and publish images 16 | run: | 17 | echo "${{ secrets.CR_PAT }}" | docker login ghcr.io -u matteodelabre --password-stdin 18 | ./scripts/build -p . 19 | -------------------------------------------------------------------------------- /.github/workflows/pr.yml: -------------------------------------------------------------------------------- 1 | name: pr 2 | on: 3 | pull_request: 4 | branches: 5 | - v1.x 6 | - v2.x 7 | - v3.x 8 | jobs: 9 | build: 10 | name: Publish latest 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout the Git repository 14 | uses: actions/checkout@v2 15 | - name: Build images 16 | run: | 17 | echo "${{ secrets.CR_PAT }}" | docker login ghcr.io -u matteodelabre --password-stdin 18 | ./scripts/build . 19 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | on: 3 | push: 4 | tags: 5 | - '*' 6 | jobs: 7 | release: 8 | name: Publish a release 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout the Git repository 12 | uses: actions/checkout@v2 13 | - name: Build and publish images 14 | run: | 15 | echo "${{ secrets.CR_PAT }}" | docker login ghcr.io -u matteodelabre --password-stdin 16 | version="$(echo "${{ github.ref }}" | cut -d / -f 3)" 17 | ./scripts/build -p . "$version" 18 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Changelog 2 | 3 | ### v3.x 4 | 5 | ### v3.2 - 2024-09-11 6 | 7 | * Use latest rust nightly 8 | * Switch from debian unstable to debian bullseye 9 | 10 | ### v3.1 - 2023-08-17 11 | 12 | * Update golang to v1.20.7 13 | 14 | #### v3.0 — 2023-07-25 15 | 16 | * Update crosstool-ng to assume linux kernel 5.4.70 17 | * Update Qt to use reMarkable's qtbase 18 | 19 | *** 20 | 21 | ### v2.x 22 | 23 | #### v2.3.2 24 | 25 | * Add dotnet6 image 26 | 27 | #### v2.3.1 28 | 29 | * Bump rust to latest nightly 30 | 31 | #### v2.3 — 2022-02-27 32 | 33 | * Update base image to use Debian unstable 2022-01-25 34 | * Pin gcc/g++ major version to v10 35 | * Update crosstool-ng to a21748bd 36 | * Add NGCONFIG environment variable 37 | * Add OpenSSL to the `base` image 38 | * Add libcurl to the `base` image 39 | * Add libbreakpad to the `base` image 40 | 41 | #### v2.2 — 2021-09-25 42 | 43 | * Update base image to use Debian unstable 2021-09-02 44 | * Update Go to 1.17.1 45 | * Update Rust to latest nightly 46 | 47 | #### v2.1 — 2021-04-07 48 | 49 | * Update all images to be based on Debian unstable (2021-03-29 snapshot) 50 | 51 | #### v2.0.1 — 2021-04-02 52 | 53 | * Fix crashes for some apps due to libqsgepaper 54 | 55 | #### v2.0 — 2021-03-20 56 | 57 | * Update libraries for reMarkable 2.6.1.71 58 | 59 | *** 60 | 61 | ### v1.x 62 | 63 | #### v1.6 — 2021-04-07 64 | 65 | * Update all images to be based on Debian unstable (2021-03-29 snapshot) 66 | 67 | #### v1.5 — 2021-03-18 68 | 69 | * Create the `golang` image. 70 | 71 | #### v1.4 — 2021-03-04 72 | 73 | * Automatically set the `offline-root` and `host-cache-dir` flags when invoking `opkg`. 74 | * Prevent qmake from setting rpath on built binaries. 75 | * Remove Qt libraries that are not available on the default reMarkable system. 76 | 77 | #### v1.3.2 — 2021-02-04 78 | 79 | * Fix incorrect `opkg` root installation dir. 80 | 81 | #### v1.3.1 — 2021-01-31 82 | 83 | * Create the `toolchain` image which does not contain the pre-installed reMarkable libraries. 84 | * Add `$SYSROOT/opt/lib/pkg-config` to the pkgconfig search path. 85 | 86 | #### v1.3 — 2021-01-26 87 | 88 | * Add `opkg` to the `base` image. 89 | * Remove dlib from the `base` image. 90 | * Add libevdev to the `base` image. 91 | * Cleanup all remaining `*.la` files from the host system root. 92 | * Fix systemd install location in the host system root. 93 | * Remove references to the system root location in the host system root’s libs. 94 | 95 | #### v1.2.2 — 2021-01-06 96 | 97 | * Fix wrong `libqsgepaper.a` and `epframebuffer.h` files in the `qt` image due to outdated link. 98 | 99 | #### v1.2.1 — 2020-10-31 100 | 101 | * Fix missing CMake from final images. 102 | 103 | #### v1.2 — 2020-09-30 104 | 105 | * Add toolchain configuration for CMake projects to the `base` image. 106 | * Add dlib to the `base` image. 107 | 108 | #### v1.1 — 2020-09-23 109 | 110 | * Add libcap, util-linux and libsystemd to the `base` image. 111 | * Move libpng and zlib from the `qt` image to the `base` image. 112 | 113 | #### v1.0 — 2020-09-12 114 | 115 | _(Initial release.)_ 116 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 The Toltec Contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Toltec Build Toolchain 2 | 3 | This is a set of Docker images used for cross-compiling binaries for the [the reMarkable tablet](https://remarkable.com/). 4 | They are primarily aimed at providing reproducible build environments for [Toltec](https://github.com/toltec-dev/toltec) packages. 5 | They can also be useful for any project that needs to be built for the reMarkable. 6 | 7 | _Note: reMarkable also used to provide an official OpenEmbedded-Core-based toolchain on its website._ 8 | _However, the company seems to have phased out the website as of January 2021, so its status is currently unknown._ 9 | 10 | ### Paths 11 | 12 | Name | Location | Contents 13 | --------------------- | ---------- | ------- 14 | Build system root | `/` | Minimal Debian install with usual build tools, the CMake and Meson build systems, and the `opkg` package manager for installing packages in the host system root. 15 | Cross-compiler root | `/opt/x-tools/arm-remarkable-linux-gnueabihf/bin` | GCC cross-compiler and assorted tools which target the ARMv7 architecture. This directory is in `$PATH` by default. 16 | Host system root | `$SYSROOT` | This is where binaries targeting the reMarkable are installed. By default, it only contains a minimal set of libraries and executables (glibc and Linux headers). 17 | Local Opkg repository | `/repo` | Packages stored in this directory can be installed to the host system root using the `opkg` command. 18 | 19 | ### Images 20 | 21 | Name | Contents 22 | ---- | ------- 23 | [toolchain](https://github.com/orgs/toltec-dev/packages/container/package/toolchain) | Only the tools mentioned above. 24 | [base](https://github.com/orgs/toltec-dev/packages/container/package/base) | Adds to the host system root a set of libraries similar to those that come pre-installed on the reMarkable: libcap, util-linux, libsystemd, zlib, libpng, libevdev, OpenSSL, libcurl, and libbreakpad. 25 | [qt](https://github.com/orgs/toltec-dev/packages/container/package/qt) | Adds Qt to the host system root, including the closed-source libqsgepaper plugin. Includes the `qmake` build tool in the build system root. 26 | [rust](https://github.com/orgs/toltec-dev/packages/container/package/rust) | Adds Nightly Rust configured to use the ARMv7 cross-compiler to the build system root. 27 | [python](https://github.com/orgs/toltec-dev/packages/container/package/python) | Adds a Python 3.7.3 distribution to the build system root. 28 | [golang](https://github.com/orgs/toltec-dev/packages/container/package/golang) | Adds a Go distribution to the build system root. 29 | [dotnet6](https://github.com/orgs/toltec-dev/packages/container/package/dotnet6) | Adds dotnet6 to the build system root. 30 | 31 | ### Version Matrix 32 | 33 | The toolchain images aim to follow the library versions available on the stock reMarkable system. 34 | The major version number of the toolchain is increased each time an official reMarkable update changes the available libraries. 35 | The table below lists the version number of each library for each major toolchain release. 36 | 37 | _Deprecation notice: Images of the v1.x and v2.x series are kept for compatibility but will not be maintained further._ 38 | 39 | 40 | 41 | 42 | 46 | 47 | 49 | 50 | 51 | 52 | 53 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 |
↓ Library \ Toolchain →1.x 43 | 2.x 44 | 3.x 45 |
Compatible reMarkable updates 48 | ⩽ 2.5.0.26⩾ 2.6.1.71⩾ 2.9.0.153
54 | toolchain Image 55 |
Linux headers4.94.145.4.70
glibc2.272.312.31
71 | base Image 72 |
libcap2.252.322.32
util-linux2.322.36.12.36.1
libsystemd237244244
zlib1.2.11
libpng1.6.341.6.371.6.37
libevdev1.5.81.9.11.9.1
OpenSSL1.1.1g1.1.1g
libcurl7.69.17.69.1
libbreakpad0.1 (db1cda2653)0.1 (db1cda2653)
128 | qt Image 129 |
Qt5.11.35.15.15.15.1 (reMarkable qtbase)
138 | 139 | ### Installing Opkg Packages 140 | 141 | Opkg is installed on every toolchain image and is configured to install packages in _offline_ mode, i.e., without executing any [maintainer script](https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html). 142 | By default, it is configured to install packages from Entware and from the local repository stored in `/repo`. 143 | Opkg stores its cache in `/var/cache/opkg`. 144 | 145 | ### Changelog 146 | 147 | [See the changelog →](CHANGELOG.md) 148 | --------------------------------------------------------------------------------