Update Linux build scripts (#397)
* update linux build scripts * update docs
This commit is contained in:
parent
f51ca9009e
commit
ad6873614b
|
@ -189,11 +189,8 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
arch: [amd64, i386]
|
arch: [amd64, i386]
|
||||||
version: ["11", "12"]
|
version: ["11", "12"]
|
||||||
include:
|
env:
|
||||||
- arch: amd64
|
IMAGE: docker.io/${{ matrix.arch }}/debian:${{ matrix.version }}
|
||||||
platform: linux/amd64
|
|
||||||
- arch: i386
|
|
||||||
platform: linux/386
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
@ -202,13 +199,9 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform ${{ matrix.platform }} docker.io/${{ matrix.arch }}/debian:${{ matrix.version }}
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 debian:${{ matrix.version }} /src/packages/debian/01-in-docker.sh
|
podman run --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/debian/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
|
@ -221,7 +214,9 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
version: ["22.04", "23.10", "devel"]
|
version: ["22.04", "23.10", "24.04", "devel"]
|
||||||
|
env:
|
||||||
|
IMAGE: docker.io/amd64/ubuntu:${{ matrix.version }}
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
@ -230,13 +225,9 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform linux/amd64 docker.io/amd64/ubuntu:${{ matrix.version }}
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 ubuntu:${{ matrix.version }} /src/packages/debian/01-in-docker.sh
|
podman run --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/debian/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
|
@ -247,19 +238,17 @@ jobs:
|
||||||
archlinux:
|
archlinux:
|
||||||
name: Arch Linux
|
name: Arch Linux
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
IMAGE: docker.io/amd64/archlinux:latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform linux/amd64 docker.io/amd64/archlinux:latest
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --security-opt seccomp=unconfined --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 docker.io/amd64/archlinux:latest /src/packages/archlinux/01-in-docker.sh
|
podman run --security-opt seccomp=unconfined --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/archlinux/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
|
@ -267,68 +256,70 @@ jobs:
|
||||||
name: Arch Linux
|
name: Arch Linux
|
||||||
path: dist/*.pkg.tar.zst
|
path: dist/*.pkg.tar.zst
|
||||||
|
|
||||||
rpm_fedora:
|
fedora:
|
||||||
name: RPM on latest Fedora
|
name: Fedora
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
version: ["latest", "rawhide"]
|
||||||
|
env:
|
||||||
|
IMAGE: docker.io/amd64/fedora:${{ matrix.version }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform linux/amd64 docker.io/amd64/fedora:latest
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --security-opt seccomp=unconfined --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 docker.io/amd64/fedora:latest /src/packages/fedora/01-in-docker.sh
|
podman run --security-opt seccomp=unconfined --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/fedora/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: RPM on latest Fedora
|
name: Fedora ${{ matrix.version }} x86_64
|
||||||
path: dist/*.rpm
|
path: dist/*.rpm
|
||||||
|
|
||||||
# rpm_opensuse:
|
opensuse:
|
||||||
# name: RPM on openSUSE Tumbleweed
|
name: openSUSE
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
# steps:
|
|
||||||
# - uses: actions/checkout@v2
|
|
||||||
# with:
|
|
||||||
# fetch-depth: 0
|
|
||||||
|
|
||||||
# - name: Fetch container image
|
|
||||||
# run: |
|
|
||||||
# podman pull --platform linux/amd64 docker.io/opensuse/tumbleweed:latest
|
|
||||||
|
|
||||||
# - name: Build
|
|
||||||
# run: |
|
|
||||||
# podman run --security-opt seccomp=unconfined --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 docker.io/opensuse/tumbleweed:latest /src/packages/opensuse/01-in-docker.sh
|
|
||||||
|
|
||||||
# - name: Upload
|
|
||||||
# uses: actions/upload-artifact@v2
|
|
||||||
# with:
|
|
||||||
# name: RPM on openSUSE Tumbleweed
|
|
||||||
# path: dist/*.rpm
|
|
||||||
|
|
||||||
musl:
|
|
||||||
name: musl-based Linux (latest Alpine)
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
edition: ["leap", "tumbleweed"]
|
||||||
|
env:
|
||||||
|
IMAGE: docker.io/opensuse/${{ matrix.edition }}:latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman pull --platform linux/amd64 docker.io/amd64/alpine:latest
|
podman run --security-opt seccomp=unconfined --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/opensuse/01-in-docker.sh
|
||||||
|
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: openSUSE ${{ matrix.edition }} x86_64
|
||||||
|
path: dist/*.rpm
|
||||||
|
|
||||||
|
musl:
|
||||||
|
name: musl-based Linux (latest Alpine)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
IMAGE: docker.io/amd64/alpine:latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --rm -e SOURCE_DIR=/src -v $GITHUB_WORKSPACE:/src --platform linux/amd64 docker.io/amd64/alpine:latest /src/packages/alpine/01-in-docker.sh
|
podman run --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/alpine/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
|
@ -339,19 +330,17 @@ jobs:
|
||||||
appimage:
|
appimage:
|
||||||
name: Linux AppImage
|
name: Linux AppImage
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
IMAGE: quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform linux/amd64 quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
podman run --rm -v $PWD:/mnt -w /mnt -e CARCH=x86_64 quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0 packages/appimage/01-in-docker.sh
|
podman run --rm -v $PWD:/mnt -w /mnt $IMAGE ./packages/appimage/01-in-docker.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
|
@ -368,10 +357,6 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Fetch container image
|
|
||||||
run: |
|
|
||||||
podman pull --platform linux/amd64 quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
packages/debian-static/builddeb.sh
|
packages/debian-static/builddeb.sh
|
||||||
|
|
193
BUILD.md
193
BUILD.md
|
@ -230,184 +230,69 @@ To build with VS 2017 or later in Command Prompt:
|
||||||
"%JOM%" install
|
"%JOM%" install
|
||||||
```
|
```
|
||||||
|
|
||||||
# Linux and Other freedesktop.org-conforming (XDG) Desktop Systems
|
# Linux
|
||||||
|
|
||||||
General steps:
|
See also [more build instructions for freedesktop.org-conforming (XDG) desktop systems](./docs/detailed-build-xdg.md).
|
||||||
|
|
||||||
- Install recent version of GCC (≥ 7) or Clang (≥ 6) that supports C++17.
|
## Alpine Linux, Arch Linux, Debian and Its Derivatives, Fedora, openSUSE
|
||||||
- Install Qt 5.15 Base, SVG and Tools modules, including both libraries and development files.
|
|
||||||
- Optionally install fcitx5-qt for building with static Qt library.
|
|
||||||
|
|
||||||
qmake-based build steps:
|
1. Setup build environment (documentation for [Alpine](https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers), [Arch](https://wiki.archlinux.org/title/Makepkg), [Debians](https://wiki.debian.org/BuildingTutorial), [RPM](https://rpm-packaging-guide.github.io/#prerequisites)).
|
||||||
|
- For Debians:
|
||||||
1. Configure:
|
```sh
|
||||||
```bash
|
sudo apt install --no-install-recommends build-essential debhelper devscripts equivs
|
||||||
qmake PREFIX=/usr/local /path/to/src/Red_Panda_CPP.pro
|
|
||||||
```
|
```
|
||||||
2. Build:
|
|
||||||
```bash
|
|
||||||
make -j$(nproc)
|
|
||||||
```
|
|
||||||
3. Install:
|
|
||||||
```bash
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
qmake variables:
|
|
||||||
- `PREFIX`: default to `/usr/local`. It should be set to `/usr` when packaging.
|
|
||||||
- `LIBEXECDIR`: directory for auxiliary executables, default to `$PREFIX/libexec`. Arch Linux uses `/usr/lib`.
|
|
||||||
- `LINUX_STATIC_IME_PLUGIN=ON` (make phase): link to static ime plugin. Recommended for building with static version of Qt; **DO NOT** set for dynamic version of Qt.
|
|
||||||
|
|
||||||
xmake-based build steps:
|
|
||||||
|
|
||||||
1. Configure:
|
|
||||||
```bash
|
|
||||||
xmake f -p linux -a x86_64 -m release --qt=/usr --prefix=/usr/local
|
|
||||||
```
|
|
||||||
2. Build:
|
|
||||||
```bash
|
|
||||||
xmake
|
|
||||||
```
|
|
||||||
3. Install:
|
|
||||||
```bash
|
|
||||||
sudo xmake install --root -o / # `-o ...` imitates `DESTDIR=...` in `make install`
|
|
||||||
```
|
|
||||||
|
|
||||||
Hint: `xmake f --help` for more options.
|
|
||||||
|
|
||||||
## Debian and Its Derivatives
|
|
||||||
|
|
||||||
### “deb” Package for Current OS
|
|
||||||
|
|
||||||
1. Install dependency:
|
|
||||||
```bash
|
|
||||||
sudo apt install \
|
|
||||||
build-essential debhelper \
|
|
||||||
libqt5svg5-dev qtbase5-dev qtbase5-dev-tools qttools5-dev-tools
|
|
||||||
```
|
|
||||||
2. Build the package:
|
|
||||||
```bash
|
|
||||||
./packages/debian/builddeb.sh
|
|
||||||
```
|
|
||||||
3. Install the package:
|
|
||||||
```bash
|
|
||||||
sudo apt install /tmp/redpanda-cpp_*.deb
|
|
||||||
```
|
|
||||||
4. Run Red Panda C++:
|
|
||||||
```bash
|
|
||||||
RedPandaIDE
|
|
||||||
```
|
|
||||||
|
|
||||||
### Build Packages for Multiple Architectures and Versions in Containers
|
|
||||||
|
|
||||||
Extra requirements for Windows host:
|
|
||||||
- Docker uses WSL 2 based engine, or enable file sharing on the project folder (Settings > Resources > File sharing);
|
|
||||||
- PowerShell (Core) or Windows PowerShell.
|
|
||||||
|
|
||||||
* Linux host:
|
|
||||||
```bash
|
|
||||||
DOCKER=docker # or podman
|
|
||||||
SOURCE_DIR=/build/RedPanda-CPP # source directory *in container*
|
|
||||||
JOBS=$(nproc) # reduce it for multiple builds at same time
|
|
||||||
|
|
||||||
MIRROR=mirrors.kernel.org # leave empty for default mirror
|
|
||||||
PLATFORM=linux/amd64 # or linux/386, linux/arm64/v8, linux/arm/v7, linux/riscv64
|
|
||||||
IMAGE=debian:12 # or Ubuntu (e.g. ubuntu:22.04)
|
|
||||||
|
|
||||||
$DOCKER run --rm -e MIRROR=$MIRROR -e SOURCE_DIR=$SOURCE_DIR -e JOBS=$JOBS -v $PWD:$SOURCE_DIR --platform $PLATFORM $IMAGE $SOURCE_DIR/packages/debian/01-in-docker.sh
|
|
||||||
```
|
|
||||||
* Windows host:
|
|
||||||
```ps1
|
|
||||||
$DOCKER = "docker" # or "podman"
|
|
||||||
$SOURCE_DIR = "/build/RedPanda-CPP" # source directory *in container*
|
|
||||||
$JOBS = $Env:NUMBER_OF_PROCESSORS # reduce it for multiple builds at same time
|
|
||||||
|
|
||||||
$MIRROR = "mirrors.kernel.org" # leave empty for default mirror
|
|
||||||
$PLATFORM = "linux/amd64" # or "linux/386", "linux/arm64/v8", "linux/arm/v7", "linux/riscv64"
|
|
||||||
$IMAGE = "debian:12" # or Ubuntu (e.g. "ubuntu:22.04")
|
|
||||||
|
|
||||||
& $DOCKER run --rm -e MIRROR=$MIRROR -e SOURCE_DIR=$SOURCE_DIR -e JOBS=$JOBS -v "$(Get-Location):$SOURCE_DIR" --platform $PLATFORM $IMAGE $SOURCE_DIR/packages/debian/01-in-docker.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Manual Install
|
|
||||||
|
|
||||||
1. Install compiler
|
|
||||||
```bash
|
|
||||||
apt install gcc g++ make gdb gdbserver
|
|
||||||
```
|
|
||||||
2. Install Qt 5 and other dependencies
|
|
||||||
```bash
|
|
||||||
apt install qtbase5-dev qttools5-dev-tools libqt5svg5-dev git qterminal
|
|
||||||
```
|
|
||||||
3. Fetch source code
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/royqh1979/RedPanda-CPP.git
|
|
||||||
```
|
|
||||||
4. Build
|
|
||||||
```bash
|
|
||||||
cd RedPanda-CPP/
|
|
||||||
qmake Red_Panda_CPP.pro
|
|
||||||
make -j$(nproc)
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
5. Run
|
|
||||||
```bash
|
|
||||||
RedPandaIDE
|
|
||||||
```
|
|
||||||
|
|
||||||
## Alpine Linux, Arch Linux, Fedora, openSUSE
|
|
||||||
|
|
||||||
1. Setup build environment (documentation for [Alpine](https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers), [Arch](https://wiki.archlinux.org/title/Makepkg), [RPM](https://rpm-packaging-guide.github.io/#prerequisites)).
|
|
||||||
2. Call build script:
|
2. Call build script:
|
||||||
- Alpine Linux: `./packages/alpine/buildapk.sh`
|
- Alpine Linux: `./packages/alpine/buildapk.sh`
|
||||||
- Arch Linux: `./packages/archlinux/buildpkg.sh`
|
- Arch Linux: `./packages/archlinux/buildpkg.sh`
|
||||||
|
- Debians: `./packages/debian/builddeb.sh`
|
||||||
- Fedora: `./packages/fedora/buildrpm.sh`
|
- Fedora: `./packages/fedora/buildrpm.sh`
|
||||||
- openSUSE: `./packages/opensuse/buildrpm.sh`
|
- openSUSE: `./packages/opensuse/buildrpm.sh`
|
||||||
3. Install the package:
|
3. Install the package:
|
||||||
- Alpine Linux: `~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk`
|
- Alpine Linux: `~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk`
|
||||||
- Arch Linux: `/tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst`
|
- Arch Linux: `/tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst`
|
||||||
|
- Debians: `/tmp/redpanda-cpp_*.deb`
|
||||||
- Fedora, openSUSE: `~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm`
|
- Fedora, openSUSE: `~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm`
|
||||||
4. Run Red Panda C++:
|
4. Run Red Panda C++:
|
||||||
```bash
|
```bash
|
||||||
RedPandaIDE
|
RedPandaIDE
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that these build scripts check out HEAD of the repo, so any changes should be committed before building.
|
Note that some of these scripts check out HEAD of the repo, so any changes should be committed before building.
|
||||||
|
|
||||||
|
Alternatively, build in container (rootless Podman preferred; Docker may break file permissions):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt <image> ./packages/<distro>/01-in-docker.sh
|
||||||
|
|
||||||
|
# Arch Linux for example
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt docker.io/archlinux:latest ./packages/archlinux/01-in-docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The package will be placed in `dist/`.
|
||||||
|
|
||||||
|
## Statically Linked Binary for Ubuntu 20.04 x86_64 (NOI Linux 2.0)
|
||||||
|
|
||||||
|
The package `redpanda-cpp-bin` is roughly “AppImage repack”. The binary is actually built in a container. Thus the build host is not necessarily Ubuntu 20.04; any Linux distribution with Podman and dpkg should work.
|
||||||
|
|
||||||
|
1. Install Podman, and dpkg if build host is not Debian or its derivatives:
|
||||||
|
```sh
|
||||||
|
sudo apt install podman
|
||||||
|
```
|
||||||
|
WARNING: DO NOT install packages with dpkg on non-Debians, or your system will be terminated.
|
||||||
|
2. Call build script:
|
||||||
|
```sh
|
||||||
|
./packages/debian-static/builddeb.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The package will be placed in `dist/`.
|
||||||
|
|
||||||
## Linux AppImage
|
## Linux AppImage
|
||||||
|
|
||||||
Linux host:
|
|
||||||
```bash
|
```bash
|
||||||
ARCH=x86_64
|
podman run --rm -v $PWD:/mnt -w /mnt quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0 ./packages/appimage/01-in-docker.sh
|
||||||
podman run --rm -v $PWD:/mnt -w /mnt -e CARCH=$ARCH quay.io/redpanda-cpp/appimage-builder-$ARCH:20240304.0 packages/appimage/01-in-docker.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Windows host:
|
Dockerfiles are available in [redpanda-cpp/appimage-builder](https://github.com/redpanda-cpp/appimage-builder). Available architectures: `x86_64`, `aarch64`, `riscv64`.
|
||||||
```ps1
|
|
||||||
$ARCH = "x86_64"
|
|
||||||
podman run --rm -v "$(Get-Location):/mnt" -w /mnt -e CARCH=$ARCH redpanda-builder-$ARCH packages/appimage/01-in-docker.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Dockerfiles are available in [redpanda-cpp/appimage-builder](https://github.com/redpanda-cpp/appimage-builder).
|
|
||||||
|
|
||||||
## Emulated Native Build for Foreign Architectures
|
|
||||||
|
|
||||||
It is possible to build Red Panda C++ for foreign architectures using targets’ native toolchains with QEMU user space emulation.
|
|
||||||
|
|
||||||
Note: Always run emulated native build **in containers or jails**. Mixing architectures may kill your system.
|
|
||||||
|
|
||||||
For Linux or BSD host, install statically linked QEMU user space emulator (package name is likely `qemu-user-static`) and make sure that binfmt support is enabled.
|
|
||||||
|
|
||||||
For Windows host, Docker and Podman should have QEMU user space emulation enabled. If not,
|
|
||||||
* For Docker:
|
|
||||||
```ps1
|
|
||||||
docker run --rm --privileged multiarch/qemu-user-static:register
|
|
||||||
```
|
|
||||||
* For Podman, whose virtual machine is based on Fedora WSL, simply enable binfmt support:
|
|
||||||
```ps1
|
|
||||||
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /proc/sys/fs/binfmt_misc/register
|
|
||||||
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-riscv64-static.conf /proc/sys/fs/binfmt_misc/register
|
|
||||||
```
|
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
|
|
||||||
|
|
191
BUILD_cn.md
191
BUILD_cn.md
|
@ -230,142 +230,27 @@ qmake 变量:
|
||||||
"%JOM%" install
|
"%JOM%" install
|
||||||
```
|
```
|
||||||
|
|
||||||
# Linux 和其他符合 freedesktop.org(XDG)规范的桌面系统
|
# Linux
|
||||||
|
|
||||||
通用步骤:
|
另请参阅[详细构建指南——符合 freedesktop.org(XDG)规范的桌面系统](./docs/detailed-build-xdg-cn.md)。
|
||||||
|
|
||||||
- 安装支持 C++17 的 GCC(≥ 7)或 Clang(≥ 6)。
|
## Alpine Linux、Arch Linux、Debian 及其衍生版本、Fedora、openSUSE
|
||||||
- 安装 Qt 5.15 Base、SVG、Tools 模块,包括库和开发文件。
|
|
||||||
- 如果使用静态版本的 Qt 编译,还要安装 fcitx5-qt。
|
|
||||||
|
|
||||||
基于 qmake 构建:
|
1. 准备构建环境([Alpine](https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers)、[Arch](https://wiki.archlinuxcn.org/wiki/Makepkg)、[Debians](https://wiki.debian.org/BuildingTutorial)、[RPM](https://rpm-packaging-guide.github.io/#prerequisites) 文档)。
|
||||||
|
- 对于 Debian 系:
|
||||||
1. 配置:
|
```sh
|
||||||
```bash
|
sudo apt install --no-install-recommends build-essential debhelper devscripts equivs
|
||||||
qmake PREFIX=/usr/local /path/to/src/Red_Panda_CPP.pro
|
|
||||||
```
|
```
|
||||||
2. 构建:
|
|
||||||
```bash
|
|
||||||
make -j$(nproc)
|
|
||||||
```
|
|
||||||
3. 安装:
|
|
||||||
```bash
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
qmake 变量:
|
|
||||||
- `PREFIX`:默认值是 `/usr/local`。打包时应该定义为 `/usr`。
|
|
||||||
- `LIBEXECDIR`:辅助程序的路径,默认值是 `$PREFIX/libexec`。Arch Linux 使用 `/usr/lib`。
|
|
||||||
- `LINUX_STATIC_IME_PLUGIN=ON`(make 阶段):静态链接输入法插件。推荐在使用静态版本的 Qt 编译时启用;**不要**在使用动态版本的 Qt 编译时启用。
|
|
||||||
|
|
||||||
基于 xmake 构建:
|
|
||||||
|
|
||||||
1. 配置:
|
|
||||||
```bash
|
|
||||||
xmake f -p linux -a x86_64 -m release --qt=/usr --prefix=/usr/local
|
|
||||||
```
|
|
||||||
2. 构建:
|
|
||||||
```bash
|
|
||||||
xmake
|
|
||||||
```
|
|
||||||
3. 安装:
|
|
||||||
```bash
|
|
||||||
sudo xmake install --root -o / # -o ... 模拟了 make install 的 DESTDIR=...
|
|
||||||
```
|
|
||||||
|
|
||||||
提示:`xmake f --help` 可以查看更多选项。
|
|
||||||
|
|
||||||
## Debian 及其衍生版本
|
|
||||||
|
|
||||||
### 适用于当前系统的 deb 包
|
|
||||||
|
|
||||||
1. 安装依赖包:
|
|
||||||
```bash
|
|
||||||
sudo apt install \
|
|
||||||
build-essential debhelper \
|
|
||||||
libqt5svg5-dev qtbase5-dev qtbase5-dev-tools qttools5-dev-tools
|
|
||||||
```
|
|
||||||
2. 构建 deb 包:
|
|
||||||
```bash
|
|
||||||
./packages/debian/builddeb.sh
|
|
||||||
```
|
|
||||||
3. 安装 deb 包:
|
|
||||||
```bash
|
|
||||||
sudo apt install /tmp/redpanda-cpp_*.deb
|
|
||||||
```
|
|
||||||
4. 运行小熊猫C++:
|
|
||||||
```bash
|
|
||||||
RedPandaIDE
|
|
||||||
```
|
|
||||||
|
|
||||||
### 在容器中构建适用于多架构/版本的包
|
|
||||||
|
|
||||||
Windows 宿主的额外要求:
|
|
||||||
- Docker 使用基于 WSL 2 的引擎,或者对此项目文件夹启用文件共享(Settings > Resources > File sharing);
|
|
||||||
- PowerShell (Core) 或 Windows PowerShell。
|
|
||||||
|
|
||||||
* Linux 宿主:
|
|
||||||
```bash
|
|
||||||
DOCKER=docker # 或 podman
|
|
||||||
SOURCE_DIR=/build/RedPanda-CPP # *容器内*的源代码路径
|
|
||||||
JOBS=$(nproc) # 同时构建多个包时可降低并行数
|
|
||||||
|
|
||||||
MIRROR=mirrors.ustc.edu.cn # 留空以使用默认的镜像站
|
|
||||||
PLATFORM=linux/amd64 # 或 linux/386、linux/arm64/v8、linux/arm/v7、linux/riscv64
|
|
||||||
IMAGE=debian:12 # 或 Ubuntu(如 ubuntu:22.04)
|
|
||||||
|
|
||||||
$DOCKER run --rm -e MIRROR=$MIRROR -e SOURCE_DIR=$SOURCE_DIR -e JOBS=$JOBS -v $PWD:$SOURCE_DIR --platform $PLATFORM $IMAGE $SOURCE_DIR/packages/debian/01-in-docker.sh
|
|
||||||
```
|
|
||||||
* Windows 宿主:
|
|
||||||
```ps1
|
|
||||||
$DOCKER = "docker" # 或 "podman"
|
|
||||||
$SOURCE_DIR = "/build/RedPanda-CPP" # *容器内*的源代码路径
|
|
||||||
$JOBS = $Env:NUMBER_OF_PROCESSORS # 同时构建多个包时可降低并行数
|
|
||||||
|
|
||||||
$MIRROR = "mirrors.ustc.edu.cn" # 留空以使用默认的镜像站
|
|
||||||
$PLATFORM = "linux/amd64" # 或 "linux/386"、"linux/arm64/v8"、"linux/arm/v7"、"linux/riscv64"
|
|
||||||
$IMAGE = "debian:12" # 或 Ubuntu(如 "ubuntu:22.04")
|
|
||||||
|
|
||||||
& $DOCKER run --rm -e MIRROR=$MIRROR -e SOURCE_DIR=$SOURCE_DIR -e JOBS=$JOBS -v "$(Get-Location):$SOURCE_DIR" --platform $PLATFORM $IMAGE $SOURCE_DIR/packages/debian/01-in-docker.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### 手动安装
|
|
||||||
|
|
||||||
1. 安装编译器
|
|
||||||
```bash
|
|
||||||
apt install gcc g++ make gdb gdbserver
|
|
||||||
```
|
|
||||||
2. 安装 Qt 5 和依赖包
|
|
||||||
```bash
|
|
||||||
apt install qtbase5-dev qttools5-dev-tools libqt5svg5-dev git qterminal
|
|
||||||
```
|
|
||||||
3. 下载源码
|
|
||||||
```bash
|
|
||||||
git clone https://gitee.com/royqh1979/RedPanda-CPP.git
|
|
||||||
```
|
|
||||||
4. 编译
|
|
||||||
```bash
|
|
||||||
cd RedPanda-CPP/
|
|
||||||
qmake Red_Panda_CPP.pro
|
|
||||||
make -j$(nproc)
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
5. 运行
|
|
||||||
```bash
|
|
||||||
RedPandaIDE
|
|
||||||
```
|
|
||||||
|
|
||||||
## Alpine Linux, Arch Linux, Fedora, openSUSE
|
|
||||||
|
|
||||||
1. 准备构建环境([Alpine](https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers)、[Arch](https://wiki.archlinux.org/title/Makepkg)、[RPM](https://rpm-packaging-guide.github.io/#prerequisites) 文档)。
|
|
||||||
2. 调用构建脚本:
|
2. 调用构建脚本:
|
||||||
- Alpine Linux:`./packages/alpine/buildapk.sh`
|
- Alpine Linux:`./packages/alpine/buildapk.sh`
|
||||||
- Arch Linux:`./packages/archlinux/buildpkg.sh`
|
- Arch Linux:`./packages/archlinux/buildpkg.sh`
|
||||||
|
- Debian 系:`./packages/debian/builddeb.sh`
|
||||||
- Fedora:`./packages/fedora/buildrpm.sh`
|
- Fedora:`./packages/fedora/buildrpm.sh`
|
||||||
- openSUSE:`./packages/opensuse/buildrpm.sh`
|
- openSUSE:`./packages/opensuse/buildrpm.sh`
|
||||||
3. 安装软件包:
|
3. 安装软件包:
|
||||||
- Alpine Linux:`~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk`
|
- Alpine Linux:`~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk`
|
||||||
- Arch Linux:`/tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst`
|
- Arch Linux:`/tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst`
|
||||||
|
- Debian 系:`/tmp/redpanda-cpp_*.deb`
|
||||||
- Fedora、openSUSE:`~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm`
|
- Fedora、openSUSE:`~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm`
|
||||||
4. 运行小熊猫C++:
|
4. 运行小熊猫C++:
|
||||||
```bash
|
```bash
|
||||||
|
@ -374,40 +259,40 @@ Windows 宿主的额外要求:
|
||||||
|
|
||||||
注意:这些构建脚本签出此存储库的 HEAD,因此构建之前务必提交所有变更。
|
注意:这些构建脚本签出此存储库的 HEAD,因此构建之前务必提交所有变更。
|
||||||
|
|
||||||
|
此外,也可以在容器环境中构建(推荐使用 rootless Podman;Docker 可能搞乱文件权限):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt <image> ./packages/<distro>/01-in-docker.sh
|
||||||
|
|
||||||
|
# 以 Arch Linux 为例
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt docker.io/archlinux:latest ./packages/archlinux/01-in-docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
软件包位于 `dist/` 目录下。
|
||||||
|
|
||||||
|
## Ubuntu 20.04 x86_64(NOI Linux 2.0)静态链接包
|
||||||
|
|
||||||
|
`redpanda-cpp-bin` 包大体上就是 “AppImage 重新打包”。真正的构建过程在容器中进行,因此构建主机不一定要 Ubuntu 20.04,任何 Linux 发行版只要有 Podman 和 dpkg 就行。
|
||||||
|
|
||||||
|
1. 安装 Podman,如果不是 Debian 及其衍生版还要安装 dpkg。
|
||||||
|
```sh
|
||||||
|
sudo apt install podman
|
||||||
|
```
|
||||||
|
**警告**:**不要**在非 Debian 系上使用 dpkg 安装软件包,否则将会破坏系统。
|
||||||
|
2. 调用构建脚本:
|
||||||
|
```sh
|
||||||
|
./packages/debian-static/builddeb.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
软件包位于 `dist/` 目录下。
|
||||||
|
|
||||||
## Linux AppImage
|
## Linux AppImage
|
||||||
|
|
||||||
Linux 宿主:
|
|
||||||
```bash
|
```bash
|
||||||
ARCH=x86_64
|
podman run --rm -v $PWD:/mnt -w /mnt quay.io/redpanda-cpp/appimage-builder-x86_64:20240304.0 ./packages/appimage/01-in-docker.sh
|
||||||
podman run --rm -v $PWD:/mnt -w /mnt -e CARCH=$ARCH quay.io/redpanda-cpp/appimage-builder-$ARCH:20240304.0 packages/appimage/01-in-docker.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Windows 宿主:
|
Dockerfile 位于 [redpanda-cpp/appimage-builder](https://github.com/redpanda-cpp/appimage-builder)。可用架构:`x86_64`、`aarch64`、`riscv64`。
|
||||||
```ps1
|
|
||||||
$ARCH = "x86_64"
|
|
||||||
podman run --rm -v "$(Get-Location):/mnt" -w /mnt -e CARCH=$ARCH redpanda-builder-$ARCH packages/appimage/01-in-docker.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Dockerfile 位于 [redpanda-cpp/appimage-builder](https://github.com/redpanda-cpp/appimage-builder)。
|
|
||||||
|
|
||||||
## 异架构的模拟本机构建(emulated native build)
|
|
||||||
|
|
||||||
可以借助 QEMU 用户空间模拟,运行目标架构的本机工具链,来构建小熊猫C++。
|
|
||||||
|
|
||||||
注意:始终**在容器或 jail 中**运行模拟本机构建,因为混用不同架构的程序和库可能会损坏系统。
|
|
||||||
|
|
||||||
对于 Linux 或 BSD 宿主,需要安装静态链接的 QEMU 用户空间模拟器(包名通常为 `qemu-user-static`)并确认已经启用 binfmt 支持。
|
|
||||||
|
|
||||||
对于 Windows 宿主,Docker 和 Podman 应该已经启用了 QEMU 用户空间模拟。如果没有启用,
|
|
||||||
* Docker:
|
|
||||||
```ps1
|
|
||||||
docker run --rm --privileged multiarch/qemu-user-static:register
|
|
||||||
```
|
|
||||||
* Podman(其虚拟机基于 Fedora WSL)只需要启用 binfmt 支持:
|
|
||||||
```ps1
|
|
||||||
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /proc/sys/fs/binfmt_misc/register
|
|
||||||
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-riscv64-static.conf /proc/sys/fs/binfmt_misc/register
|
|
||||||
```
|
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
# 详细构建指南——符合 freedesktop.org(XDG)规范的桌面系统
|
||||||
|
|
||||||
|
## 传统 Unix 方式(`./configure`–`make`–`make install`)
|
||||||
|
|
||||||
|
- 安装支持 C++17 的 GCC(≥ 7)或 Clang(≥ 6)。
|
||||||
|
- 安装 Qt 5.15 Base、SVG、Tools 模块,包括库和开发文件。
|
||||||
|
- 如果使用静态版本的 Qt 编译,还要安装 fcitx5-qt。
|
||||||
|
- 安装 astyle 以便在小熊猫 C++ 中对代码进行重新排版。
|
||||||
|
|
||||||
|
### 基于 qmake 构建
|
||||||
|
|
||||||
|
1. 配置:
|
||||||
|
```bash
|
||||||
|
qmake PREFIX=/usr/local /path/to/src/Red_Panda_CPP.pro
|
||||||
|
```
|
||||||
|
2. 构建:
|
||||||
|
```bash
|
||||||
|
make -j$(nproc)
|
||||||
|
```
|
||||||
|
3. 安装:
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
qmake 变量:
|
||||||
|
- `PREFIX`:默认值是 `/usr/local`。打包时应该定义为 `/usr`。
|
||||||
|
- `LIBEXECDIR`:辅助程序的路径,默认值是 `$PREFIX/libexec`。Arch Linux 使用 `/usr/lib`。
|
||||||
|
- `LINUX_STATIC_IME_PLUGIN=ON`(make 阶段):静态链接输入法插件。推荐在使用静态版本的 Qt 编译时启用;**不要**在使用动态版本的 Qt 编译时启用。
|
||||||
|
|
||||||
|
### 基于 xmake 构建
|
||||||
|
|
||||||
|
1. 配置:
|
||||||
|
```bash
|
||||||
|
xmake f -p linux -a x86_64 -m release --qt=/usr --prefix=/usr/local
|
||||||
|
```
|
||||||
|
2. 构建:
|
||||||
|
```bash
|
||||||
|
xmake
|
||||||
|
```
|
||||||
|
3. 安装:
|
||||||
|
```bash
|
||||||
|
sudo xmake install --root -o / # -o ... 模拟了 make install 的 DESTDIR=...
|
||||||
|
```
|
||||||
|
|
||||||
|
提示:`xmake f --help` 可以查看更多选项。
|
||||||
|
|
||||||
|
### Debian/Ubuntu 的傻瓜式指南
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 准备工作
|
||||||
|
apt install gcc g++ make git gdb gdbserver astyle qterminal # 安装构建工具和运行时工具
|
||||||
|
apt install qtbase5-dev qttools5-dev-tools libqt5svg5-dev # 安装开发头文件和库
|
||||||
|
git clone https://gitee.com/royqh1979/RedPanda-CPP.git # 获取源代码
|
||||||
|
|
||||||
|
# 构建
|
||||||
|
mkdir -p RedPanda-CPP/build && cd RedPanda-CPP/build # 创建构建目录
|
||||||
|
qmake ../Red_Panda_CPP.pro # 配置
|
||||||
|
make -j$(nproc) # 构建
|
||||||
|
sudo make install # 安装
|
||||||
|
|
||||||
|
# 运行
|
||||||
|
RedPandaIDE
|
||||||
|
```
|
||||||
|
|
||||||
|
## 适用于多架构/版本的 Debian 包
|
||||||
|
|
||||||
|
可以在容器环境中构建这些包。支持 Linux 宿主和 Windows 宿主。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt --platform linux/amd64 docker.io/debian:12 ./packages/debian/01-in-docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
平台(`--platform` 参数)可以是 `linux/amd64`、`linux/386`、`linux/arm64/v8`、`linux/arm/v7`、`linux/riscv64` 等。
|
||||||
|
|
||||||
|
映像可以是 `docker.io/debian:12`、`docker.io/debian:11`、`docker.io/ubuntu:24.04`、`docker.io/ubuntu:23.10`、`docker.io/ubuntu:22.04` 等。
|
||||||
|
|
||||||
|
可选环境变量:
|
||||||
|
- `-e MIRROR=mirrors.kernel.org`:APT 镜像站。
|
||||||
|
- `-e JOBS=4`:make 的并行任务数。
|
||||||
|
|
||||||
|
## 异架构的模拟本机构建(emulated native build)
|
||||||
|
|
||||||
|
可以借助 QEMU 用户空间模拟,运行目标架构的本机工具链,来构建小熊猫C++。
|
||||||
|
|
||||||
|
注意:始终**在容器或 jail 中**运行模拟本机构建,因为混用不同架构的程序和库可能会损坏系统。
|
||||||
|
|
||||||
|
对于 Linux 或 BSD 宿主,需要安装静态链接的 QEMU 用户空间模拟器(包名通常为 `qemu-user-static`)并确认已经启用 binfmt 支持。
|
||||||
|
|
||||||
|
对于 Windows 宿主,Docker 和 Podman 应该已经启用了 QEMU 用户空间模拟。如果没有启用,
|
||||||
|
* Docker:
|
||||||
|
```ps1
|
||||||
|
docker run --rm --privileged multiarch/qemu-user-static:register
|
||||||
|
```
|
||||||
|
* Podman(其虚拟机基于 Fedora WSL)只需要启用 binfmt 支持:
|
||||||
|
```ps1
|
||||||
|
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /proc/sys/fs/binfmt_misc/register
|
||||||
|
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-riscv64-static.conf /proc/sys/fs/binfmt_misc/register
|
||||||
|
```
|
|
@ -0,0 +1,98 @@
|
||||||
|
# More Build Instructions for freedesktop.org-conforming (XDG) Desktop Systems
|
||||||
|
|
||||||
|
## Traditional Unix Way (`./configure`–`make`–`make install`)
|
||||||
|
|
||||||
|
- Install recent version of GCC (≥ 7) or Clang (≥ 6) that supports C++17.
|
||||||
|
- Install Qt 5.15 Base, SVG and Tools modules, including both libraries and development files.
|
||||||
|
- Optionally install fcitx5-qt for building with static Qt library.
|
||||||
|
- Install astyle for code formatting in Red Panda C++.
|
||||||
|
|
||||||
|
### qmake-based Build Steps
|
||||||
|
|
||||||
|
1. Configure:
|
||||||
|
```bash
|
||||||
|
qmake PREFIX=/usr/local /path/to/src/Red_Panda_CPP.pro
|
||||||
|
```
|
||||||
|
2. Build:
|
||||||
|
```bash
|
||||||
|
make -j$(nproc)
|
||||||
|
```
|
||||||
|
3. Install:
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
qmake variables:
|
||||||
|
- `PREFIX`: default to `/usr/local`. It should be set to `/usr` when packaging.
|
||||||
|
- `LIBEXECDIR`: directory for auxiliary executables, default to `$PREFIX/libexec`. Arch Linux uses `/usr/lib`.
|
||||||
|
- `LINUX_STATIC_IME_PLUGIN=ON` (make phase): link to static ime plugin. Recommended for building with static version of Qt; **DO NOT** set for dynamic version of Qt.
|
||||||
|
|
||||||
|
### xmake-based Build Steps
|
||||||
|
|
||||||
|
1. Configure:
|
||||||
|
```bash
|
||||||
|
xmake f -p linux -a x86_64 -m release --qt=/usr --prefix=/usr/local
|
||||||
|
```
|
||||||
|
2. Build:
|
||||||
|
```bash
|
||||||
|
xmake
|
||||||
|
```
|
||||||
|
3. Install:
|
||||||
|
```bash
|
||||||
|
sudo xmake install --root -o / # `-o ...` imitates `DESTDIR=...` in `make install`
|
||||||
|
```
|
||||||
|
|
||||||
|
Hint: `xmake f --help` for more options.
|
||||||
|
|
||||||
|
### Copy ’n’ Paste Instructions for Debian/Ubuntu
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# prepare
|
||||||
|
apt install gcc g++ make git gdb gdbserver astyle qterminal # install build tools and runtime tools
|
||||||
|
apt install qtbase5-dev qttools5-dev-tools libqt5svg5-dev # install development headers and libraries
|
||||||
|
git clone https://github.com/royqh1979/RedPanda-CPP.git # fetch source code
|
||||||
|
|
||||||
|
# build
|
||||||
|
mkdir -p RedPanda-CPP/build && cd RedPanda-CPP/build # create build directory
|
||||||
|
qmake ../Red_Panda_CPP.pro # configure
|
||||||
|
make -j$(nproc) # build
|
||||||
|
sudo make install # install
|
||||||
|
|
||||||
|
# run
|
||||||
|
RedPandaIDE
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debian Packages for Multiple Architectures and Versions
|
||||||
|
|
||||||
|
These packages can be built in containers. Both Linux host and Windows host are supported.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman run --rm -v $PWD:/mnt -w /mnt --platform linux/amd64 docker.io/debian:12 ./packages/debian/01-in-docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Platform can be `linux/amd64`, `linux/386`, `linux/arm64/v8`, `linux/arm/v7`, `linux/riscv64`, etc.
|
||||||
|
|
||||||
|
Image can be `docker.io/debian:12`, `docker.io/debian:11`, `docker.io/ubuntu:24.04`, `docker.io/ubuntu:23.10`, `docker.io/ubuntu:22.04`, etc.
|
||||||
|
|
||||||
|
Optional environment variables:
|
||||||
|
- `-e MIRROR=mirrors.kernel.org`: mirror for APT.
|
||||||
|
- `-e JOBS=4`: number of parallel jobs for make.
|
||||||
|
|
||||||
|
## Emulated Native Build for Foreign Architectures
|
||||||
|
|
||||||
|
It is possible to build Red Panda C++ for foreign architectures using targets’ native toolchains with QEMU user space emulation.
|
||||||
|
|
||||||
|
Note: Always run emulated native build **in containers or jails**. Mixing architectures may kill your system.
|
||||||
|
|
||||||
|
For Linux or BSD host, install statically linked QEMU user space emulator (package name is likely `qemu-user-static`) and make sure that binfmt support is enabled.
|
||||||
|
|
||||||
|
For Windows host, Docker and Podman should have QEMU user space emulation enabled. If not,
|
||||||
|
* For Docker:
|
||||||
|
```ps1
|
||||||
|
docker run --rm --privileged multiarch/qemu-user-static:register
|
||||||
|
```
|
||||||
|
* For Podman, whose virtual machine is based on Fedora WSL, simply enable binfmt support:
|
||||||
|
```ps1
|
||||||
|
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /proc/sys/fs/binfmt_misc/register
|
||||||
|
wsl -d podman-machine-default sudo cp /usr/lib/binfmt.d/qemu-riscv64-static.conf /proc/sys/fs/binfmt_misc/register
|
||||||
|
```
|
|
@ -9,8 +9,7 @@ fi
|
||||||
apk add alpine-sdk git
|
apk add alpine-sdk git
|
||||||
abuild-keygen -an
|
abuild-keygen -an
|
||||||
|
|
||||||
cd $SOURCE_DIR
|
|
||||||
./packages/alpine/buildapk.sh
|
./packages/alpine/buildapk.sh
|
||||||
|
|
||||||
mkdir -p $SOURCE_DIR/dist
|
mkdir -p dist
|
||||||
cp ~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk $SOURCE_DIR/dist/
|
cp ~/packages/unsupported/$(uname -m)/redpanda-cpp-git-*.apk dist/
|
||||||
|
|
|
@ -6,7 +6,7 @@ pkgdesc='A fast, lightweight, open source, and cross platform C++ IDE (developme
|
||||||
arch='all'
|
arch='all'
|
||||||
url="https://github.com/royqh1979/$_pkgname"
|
url="https://github.com/royqh1979/$_pkgname"
|
||||||
license='GPL-3.0'
|
license='GPL-3.0'
|
||||||
depends='qt5-qtbase qt5-qtsvg gcc g++ gdb'
|
depends='qt5-qtbase qt5-qtsvg gcc g++ gdb astyle'
|
||||||
makedepends='qt5-qtbase-dev qt5-qtsvg-dev qt5-qttools-dev'
|
makedepends='qt5-qtbase-dev qt5-qtsvg-dev qt5-qttools-dev'
|
||||||
provides='redpanda-cpp'
|
provides='redpanda-cpp'
|
||||||
source="$_pkgname.tar.gz"
|
source="$_pkgname.tar.gz"
|
||||||
|
|
|
@ -12,6 +12,7 @@ else
|
||||||
VERSION="$APP_VERSION.$TEST_VERSION"
|
VERSION="$APP_VERSION.$TEST_VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CARCH=$(gcc -dumpmachine | cut -d- -f1)
|
||||||
APPIMAGE_FILE=RedPandaIDE-$VERSION-$CARCH.AppImage
|
APPIMAGE_FILE=RedPandaIDE-$VERSION-$CARCH.AppImage
|
||||||
RUNTIME_FILE=/opt/appimage-runtime
|
RUNTIME_FILE=/opt/appimage-runtime
|
||||||
RUNTIME_SIZE=$(wc -c <$RUNTIME_FILE)
|
RUNTIME_SIZE=$(wc -c <$RUNTIME_FILE)
|
||||||
|
|
|
@ -13,9 +13,8 @@ useradd -m builduser
|
||||||
echo 'builduser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/builduser
|
echo 'builduser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/builduser
|
||||||
echo "MAKEFLAGS=-j$(($(nproc)+1))" >>/etc/makepkg.conf
|
echo "MAKEFLAGS=-j$(($(nproc)+1))" >>/etc/makepkg.conf
|
||||||
|
|
||||||
cd $SOURCE_DIR
|
su builduser -c "git config --global --add safe.directory $PWD"
|
||||||
su builduser -c "git config --global --add safe.directory $SOURCE_DIR"
|
|
||||||
su builduser -c ./packages/archlinux/buildpkg.sh
|
su builduser -c ./packages/archlinux/buildpkg.sh
|
||||||
|
|
||||||
mkdir -p $SOURCE_DIR/dist
|
mkdir -p dist
|
||||||
cp /tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst $SOURCE_DIR/dist/
|
cp /tmp/redpanda-cpp-git/redpanda-cpp-git-*.pkg.tar.zst dist/
|
||||||
|
|
|
@ -6,7 +6,7 @@ pkgdesc='A fast, lightweight, open source, and cross platform C++ IDE (developme
|
||||||
arch=('i686' 'pentium4' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64' 'riscv64')
|
arch=('i686' 'pentium4' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64' 'riscv64')
|
||||||
url="https://github.com/royqh1979/$_pkgname"
|
url="https://github.com/royqh1979/$_pkgname"
|
||||||
license=('GPL3')
|
license=('GPL3')
|
||||||
depends=(qt5-base qt5-svg gcc gdb)
|
depends=(qt5-base qt5-svg gcc gdb astyle)
|
||||||
makedepends=(qt5-tools imagemagick librsvg)
|
makedepends=(qt5-tools imagemagick librsvg)
|
||||||
optdepends=(
|
optdepends=(
|
||||||
'clang: C/C++ compiler (alternative)'
|
'clang: C/C++ compiler (alternative)'
|
||||||
|
|
|
@ -6,7 +6,7 @@ Homepage: https://github.com/royqh1979/RedPanda-CPP
|
||||||
Package: redpanda-cpp-bin
|
Package: redpanda-cpp-bin
|
||||||
Version: __VERSION__
|
Version: __VERSION__
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Depends: gcc, g++, make, gdb, gdbserver,
|
Depends: gcc, g++, make, gdb, gdbserver, astyle,
|
||||||
libc6 (>= 2.17), libstdc++6 (>= 4.8),
|
libc6 (>= 2.17), libstdc++6 (>= 4.8),
|
||||||
libdbus-1-3, libfontconfig1, libfreetype6, libwayland-client0, libwayland-cursor0, libwayland-server0, libx11-6, libx11-xcb1, libxcb1, libxcb-icccm4, libxcb-image0, libxcb-keysyms1, libxcb-randr0, libxcb-render-util0, libxcb-render0, libxcb-shape0, libxcb-shm0, libxcb-sync1, libxcb-xfixes0, libxcb-xinerama0, libxcb-xkb1, libxcb1, libxext6, libxkbcommon-x11-0, libxkbcommon0, libzstd1
|
libdbus-1-3, libfontconfig1, libfreetype6, libwayland-client0, libwayland-cursor0, libwayland-server0, libx11-6, libx11-xcb1, libxcb1, libxcb-icccm4, libxcb-image0, libxcb-keysyms1, libxcb-randr0, libxcb-render-util0, libxcb-render0, libxcb-shape0, libxcb-shm0, libxcb-sync1, libxcb-xfixes0, libxcb-xinerama0, libxcb-xkb1, libxcb1, libxext6, libxkbcommon-x11-0, libxkbcommon0, libzstd1
|
||||||
Recommends: qterminal | deepin-terminal | konsole | gnome-terminal | terminator | lxterminal | mate-terminal | terminology | xfce4-terminal | alacritty | cool-retro-term | kitty | sakura | termit | tilix
|
Recommends: qterminal | deepin-terminal | konsole | gnome-terminal | terminator | lxterminal | mate-terminal | terminology | xfce4-terminal | alacritty | cool-retro-term | kitty | sakura | termit | tilix
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -xe
|
set -xeuo pipefail
|
||||||
|
|
||||||
TMP_FOLDER=/build/redpanda-build
|
|
||||||
DISTRO_ID=$(grep ^ID= /etc/os-release | cut -d= -f2- | tr -d '"')
|
DISTRO_ID=$(grep ^ID= /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
VERSION_ID=$(grep ^VERSION_ID= /etc/os-release | cut -d= -f2- | tr -d '"')
|
VERSION_ID=$(grep ^VERSION_ID= /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
[[ -z $JOBS ]] && JOBS=$(nproc)
|
[[ -v JOBS ]] || JOBS=$(nproc)
|
||||||
|
|
||||||
# install deps
|
# install deps
|
||||||
default_repositories=(
|
default_repositories=(
|
||||||
|
@ -16,7 +15,7 @@ default_repositories=(
|
||||||
ports.ubuntu.com
|
ports.ubuntu.com
|
||||||
)
|
)
|
||||||
|
|
||||||
if [[ -n $MIRROR ]]
|
if [[ -v MIRROR ]]
|
||||||
then
|
then
|
||||||
for repo in ${default_repositories[@]}
|
for repo in ${default_repositories[@]}
|
||||||
do
|
do
|
||||||
|
@ -31,31 +30,13 @@ fi
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt update
|
apt update
|
||||||
apt install -y --no-install-recommends \
|
apt install -y --no-install-recommends build-essential debhelper devscripts equivs
|
||||||
build-essential debhelper g++-mingw-w64 \
|
|
||||||
libqt5svg5-dev qtbase5-dev qtbase5-dev-tools qttools5-dev-tools
|
|
||||||
|
|
||||||
# prepare source
|
./packages/debian/builddeb.sh
|
||||||
mkdir -p $TMP_FOLDER
|
|
||||||
|
|
||||||
cd $SOURCE_DIR
|
file=$(ls /tmp/redpanda-cpp_*.deb)
|
||||||
cp -r packages/debian $TMP_FOLDER
|
basename=$(basename $file)
|
||||||
cp -r tools $TMP_FOLDER
|
|
||||||
cp -r libs $TMP_FOLDER
|
|
||||||
cp -r RedPandaIDE $TMP_FOLDER
|
|
||||||
cp README.md $TMP_FOLDER
|
|
||||||
cp LICENSE $TMP_FOLDER
|
|
||||||
cp NEWS.md $TMP_FOLDER
|
|
||||||
cp -r platform $TMP_FOLDER
|
|
||||||
cp Red_Panda_CPP.pro $TMP_FOLDER
|
|
||||||
|
|
||||||
# build
|
|
||||||
cd $TMP_FOLDER
|
|
||||||
sed -i '/CONFIG += ENABLE_LUA_ADDON/ { s/^#\s*// }' RedPandaIDE/RedPandaIDE.pro
|
|
||||||
dpkg-buildpackage -us -uc -j$JOBS
|
|
||||||
|
|
||||||
# copy back to host
|
# copy back to host
|
||||||
cd ..
|
mkdir -p dist
|
||||||
file=$(ls redpanda-cpp_*.deb)
|
cp $file dist/${basename/.deb/.$DISTRO_ID$VERSION_ID.deb}
|
||||||
mkdir -p $SOURCE_DIR/dist
|
|
||||||
cp $file $SOURCE_DIR/dist/${file/.deb/.$DISTRO_ID$VERSION_ID.deb}
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
make distclean
|
set -xeuo pipefail
|
||||||
|
|
||||||
TMP_FOLDER=/tmp/redpandaide
|
TMP_FOLDER=/tmp/redpandaide
|
||||||
test -n $TMP_FOLDER | rm -rf $TMP_FOLDER
|
[[ -d $TMP_FOLDER ]] && rm -rf $TMP_FOLDER
|
||||||
test -z $TMP_FOLDER | mkdir $TMP_FOLDER
|
mkdir -p "$TMP_FOLDER"
|
||||||
|
|
||||||
|
|
||||||
cp -r packages/debian $TMP_FOLDER
|
cp -r packages/debian $TMP_FOLDER
|
||||||
cp -r tools $TMP_FOLDER
|
cp -r tools $TMP_FOLDER
|
||||||
|
@ -19,5 +18,6 @@ cp -r platform $TMP_FOLDER
|
||||||
cp Red_Panda_CPP.pro $TMP_FOLDER
|
cp Red_Panda_CPP.pro $TMP_FOLDER
|
||||||
|
|
||||||
cd $TMP_FOLDER
|
cd $TMP_FOLDER
|
||||||
|
command -v mk-build-deps && mk-build-deps -i -t "apt -y --no-install-recommends" debian/control
|
||||||
sed -i '/CONFIG += ENABLE_LUA_ADDON/ { s/^#\s*// }' RedPandaIDE/RedPandaIDE.pro
|
sed -i '/CONFIG += ENABLE_LUA_ADDON/ { s/^#\s*// }' RedPandaIDE/RedPandaIDE.pro
|
||||||
dpkg-buildpackage -us -uc
|
dpkg-buildpackage -us -uc
|
||||||
|
|
|
@ -5,8 +5,7 @@ set -xeuo pipefail
|
||||||
dnf install -y dnf-plugins-core git rpm-build rpmdevtools
|
dnf install -y dnf-plugins-core git rpm-build rpmdevtools
|
||||||
rpmdev-setuptree
|
rpmdev-setuptree
|
||||||
|
|
||||||
cd $SOURCE_DIR
|
|
||||||
./packages/fedora/buildrpm.sh
|
./packages/fedora/buildrpm.sh
|
||||||
|
|
||||||
mkdir -p $SOURCE_DIR/dist
|
mkdir -p dist
|
||||||
cp ~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm $SOURCE_DIR/dist/
|
cp ~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm dist/
|
||||||
|
|
|
@ -8,7 +8,7 @@ Source0: RedPanda-CPP.tar.gz
|
||||||
|
|
||||||
BuildRequires: gcc gcc-c++
|
BuildRequires: gcc gcc-c++
|
||||||
BuildRequires: qt5-qtbase-devel qt5-qtsvg-devel qt5-qttools-devel
|
BuildRequires: qt5-qtbase-devel qt5-qtsvg-devel qt5-qttools-devel
|
||||||
Requires: gcc gcc-c++
|
Requires: gcc gcc-c++ astyle
|
||||||
Requires: glibc-static libstdc++-static libasan
|
Requires: glibc-static libstdc++-static libasan
|
||||||
Requires: qt5-qtbase qt5-qtsvg
|
Requires: qt5-qtbase qt5-qtsvg
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,10 @@ VERSION_ID=$(grep ^VERSION_ID= /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
zypper in -y git rpm-build rpmdevtools sudo
|
zypper in -y git rpm-build rpmdevtools sudo
|
||||||
rpmdev-setuptree
|
rpmdev-setuptree
|
||||||
|
|
||||||
cd $SOURCE_DIR
|
|
||||||
./packages/opensuse/buildrpm.sh
|
./packages/opensuse/buildrpm.sh
|
||||||
|
|
||||||
file=$(ls ~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm)
|
file=$(ls ~/rpmbuild/RPMS/$(uname -m)/redpanda-cpp-git-*.rpm)
|
||||||
basename=$(basename $file)
|
basename=$(basename $file)
|
||||||
|
|
||||||
mkdir -p $SOURCE_DIR/dist
|
mkdir -p dist
|
||||||
cp $file $SOURCE_DIR/dist/${basename/.rpm/.$DISTRO_ID$VERSION_ID.rpm}
|
cp $file dist/${basename/.rpm/.$DISTRO_ID$VERSION_ID.rpm}
|
||||||
|
|
|
@ -8,7 +8,7 @@ Source0: RedPanda-CPP.tar.gz
|
||||||
|
|
||||||
BuildRequires: gcc gcc-c++
|
BuildRequires: gcc gcc-c++
|
||||||
BuildRequires: libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel
|
BuildRequires: libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel
|
||||||
Requires: gcc gcc-c++
|
Requires: gcc gcc-c++ astyle
|
||||||
Requires: glibc-devel-static
|
Requires: glibc-devel-static
|
||||||
Requires: libQt5Core5 libQt5Gui5 libQt5Svg5
|
Requires: libQt5Core5 libQt5Gui5 libQt5Svg5
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue