mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-10-17 01:13:19 +08:00
254 lines
9.2 KiB
Markdown
254 lines
9.2 KiB
Markdown
# Build from source
|
|
|
|
[Back to README](../README_EN.md) · [中文](BUILD.md)
|
|
|
|
After cloning, run build and packaging commands from the repository root. The [Xmake options](../apps/desktop/xmake/options.lua) and [CI workflow](../.github/workflows/build.yml) define the build configuration. `1.4.3` is an example version for local builds; change both the configuration value and packaging argument together so the app and package versions match.
|
|
|
|
## Build requirements
|
|
|
|
- Git, [Xmake](https://xmake.io/guide/quick-start.html), and the platform toolchain listed below.
|
|
- The build scripts use Xmake to manage **CMake 3.x (≥ 3.21, < 4.0)**, **Rust 1.92.0**, and other dependencies. The first build downloads tools and source archives. See the [Slint package configuration](../deps/thirdparty/slint/xmake.lua) for the constraints.
|
|
|
|
## Windows
|
|
|
|
Install Visual Studio 2022 with the **Desktop development with C++** workload and Windows SDK, plus Xmake. In a developer PowerShell, run:
|
|
|
|
```powershell
|
|
git clone --recurse-submodules https://github.com/kunkundi/crossdesk.git
|
|
cd crossdesk
|
|
xmake f -c -p windows -a x64 -m release --CROSSDESK_VERSION=1.4.3 --USE_CUDA=false -y
|
|
xmake b -vy crossdesk
|
|
xmake r crossdesk
|
|
```
|
|
|
|
Installer packaging also uses NSIS. Copy the repository's [nsProcess.dll](../apps/desktop/scripts/windows/nsProcess.dll) into NSIS's `Plugins/x86-unicode` directory and ensure `makensis` is on `PATH`. After building Release, run:
|
|
|
|
```powershell
|
|
.\apps\desktop\scripts\windows\pkg_x64.ps1 1.4.3
|
|
```
|
|
|
|
See the [Windows packaging script](../apps/desktop/scripts/windows/pkg_x64.ps1) and [CI workflow](../.github/workflows/build.yml) for the full process. Manual deployment must retain the runtime libraries and both service helpers; see [Windows Service](../README_EN.md#windows-service).
|
|
|
|
## macOS
|
|
|
|
Install Xcode and its command-line tools, plus Xmake, then run:
|
|
|
|
```bash
|
|
git clone --recurse-submodules https://github.com/kunkundi/crossdesk.git
|
|
cd crossdesk
|
|
xmake f -c -m release --target_minver=14.0 --CROSSDESK_VERSION=1.4.3 --USE_CUDA=false -y
|
|
xmake b -vy crossdesk
|
|
xmake r crossdesk
|
|
```
|
|
|
|
The current CI sets macOS 14.0 as the minimum target for both Intel and Apple Silicon. Check the [workflow](../.github/workflows/build.yml) for its Xcode/SDK versions. Package with the script matching your architecture:
|
|
|
|
```bash
|
|
# Apple Silicon
|
|
./apps/desktop/scripts/macos/pkg_arm64.sh 1.4.3
|
|
# Intel
|
|
./apps/desktop/scripts/macos/pkg_x64.sh 1.4.3
|
|
```
|
|
|
|
The scripts create an `.app` and `.pkg` containing the Slint runtime. Screen Recording and Accessibility grants depend on the app path and signature; use a consistent application bundle when testing host functionality.
|
|
|
|
## Linux
|
|
|
|
Linux builds support Ubuntu 20.04 or later on amd64 and arm64. Release packages
|
|
use Ubuntu 20.04/glibc 2.31 as their compatibility baseline. The dependency
|
|
commands below target Ubuntu 20.04; adapt package names and toolchains for
|
|
other distributions or newer versions, or use the build image below to
|
|
reproduce CI. Install the base build dependencies first:
|
|
|
|
```bash
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
git curl unzip build-essential gcc-10 g++-10 python3-pip \
|
|
pkg-config binutils dpkg-dev \
|
|
libx11-dev libxext-dev libxrender-dev libxft-dev libxrandr-dev \
|
|
libxinerama-dev libxcursor-dev libxi-dev libxfixes-dev libxv-dev \
|
|
libxtst-dev libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev \
|
|
libxcb-shape0-dev libxcb-xkb-dev libxcb-xfixes0-dev libxcb-shm0-dev \
|
|
libasound2-dev libsndio-dev libpulse-dev \
|
|
libgl1-mesa-dev
|
|
```
|
|
|
|
Ubuntu 20.04's bundled CMake 3.16 is too old. Xmake downloads a CMake 3.x
|
|
version within the range above; replacing the system CMake manually is not required.
|
|
|
|
Ubuntu 20.04's default GCC 9 lacks parts of the C++20 standard library needed
|
|
by Slint's C++ API, so the commands above install GCC 10 and the configuration
|
|
below selects it explicitly.
|
|
|
|
Clone the submodules and build a release binary:
|
|
|
|
```bash
|
|
git clone --recurse-submodules https://github.com/kunkundi/crossdesk.git
|
|
cd crossdesk
|
|
|
|
# Run this when the repository has already been cloned
|
|
git submodule update --init --recursive
|
|
|
|
xmake f -c -m release --CROSSDESK_VERSION=1.4.3 --USE_CUDA=false --toolchain=gcc-10 -y
|
|
xmake b -vy crossdesk
|
|
```
|
|
|
|
Use `--toolchain=gcc-10` so that both CrossDesk and third-party packages such
|
|
as libyuv, which xmake builds during configuration, use GCC 10. Specifying only
|
|
`--cc`/`--cxx` may still let dependency builds fall back to the system
|
|
`/bin/cc` and `/bin/c++`. Keep `-c` when switching compilers to clear the old
|
|
configuration.
|
|
|
|
The amd64 binary is written to `build/linux/x86_64/release/crossdesk`; the arm64 binary is written to `build/linux/arm64/release/crossdesk`.
|
|
|
|
For Wayland and DRM, install the D-Bus, DRM, and PipeWire development dependencies.
|
|
Ubuntu 20.04 uses the repository's PipeWire header SDK; Ubuntu 22.04 and later
|
|
can use the distribution's `libpipewire-0.3-dev` and `libspa-0.2-dev` packages instead:
|
|
|
|
```bash
|
|
sudo apt-get install -y libdbus-1-dev libdrm-dev
|
|
# Skip this line if the system PipeWire 0.3 development packages are installed
|
|
sudo ./docker/linux-build/install-pipewire-sdk.sh
|
|
|
|
xmake f -c -m release --USE_WAYLAND=true --USE_DRM=true --USE_CUDA=false \
|
|
--CROSSDESK_VERSION=1.4.3 --toolchain=gcc-10 -y
|
|
xmake b -vy crossdesk
|
|
```
|
|
|
|
Build a Debian package after compiling a release binary on the matching architecture:
|
|
|
|
```bash
|
|
# amd64
|
|
./apps/desktop/scripts/linux/pkg_amd64.sh 1.4.3
|
|
|
|
# arm64
|
|
./apps/desktop/scripts/linux/pkg_arm64.sh 1.4.3
|
|
```
|
|
|
|
The package scripts install the shared Slint runtime in the private `/usr/lib/crossdesk` directory, so users do not need to install `libslint_cpp.so` separately.
|
|
PipeWire is not a mandatory runtime dependency. CrossDesk detects the host's
|
|
PipeWire 0.3 runtime dynamically and can still use X11 capture (and DRM when
|
|
enabled at build time) when it is unavailable.
|
|
|
|
## Common build options
|
|
|
|
```text
|
|
--USE_CUDA=true/false: Enable CUDA hardware codec acceleration, disabled by default
|
|
--USE_WAYLAND=true/false: Enable Wayland/PipeWire capture on Linux, disabled by default
|
|
--USE_DRM=true/false: Enable DRM capture on Linux, disabled by default
|
|
--CROSSDESK_PORTABLE=true/false: Build the portable variant, disabled by default
|
|
--CROSSDESK_VERSION=xxx: Set the CrossDesk version
|
|
|
|
# Example
|
|
xmake f --CROSSDESK_VERSION=1.4.3 --USE_CUDA=true
|
|
```
|
|
|
|
Run:
|
|
|
|
```bash
|
|
xmake r crossdesk
|
|
```
|
|
|
|
## Development Without CUDA Environment
|
|
|
|
For **Linux developers who do not have a CUDA environment installed and want to enable hardware codec feature**, a preconfigured [Ubuntu 20.04 compatibility build image](https://hub.docker.com/r/crossdesk/ubuntu20.04) is provided.
|
|
This image contains the required build dependencies and produces a single Linux package compatible with the glibc 2.31 baseline.
|
|
|
|
See the [build image notes](../docker/linux-build/README.md) for image tags and architecture differences. The CUDA example below targets the amd64 image. Inside the container, download the project and run:
|
|
|
|
```bash
|
|
export CUDA_PATH=/usr/local/cuda
|
|
export XMAKE_GLOBALDIR=/data
|
|
|
|
xmake f --root -c -m release --CROSSDESK_VERSION=1.4.3 --USE_CUDA=true --toolchain=gcc-10 -y
|
|
xmake b --root -vy crossdesk
|
|
```
|
|
|
|
For **Windows developers without a CUDA environment** installed, run the following command to install the CUDA build environment:
|
|
|
|
```powershell
|
|
xmake require -vy "cuda 12.6.3"
|
|
```
|
|
|
|
After the installation is complete, execute:
|
|
|
|
```powershell
|
|
xmake require --info "cuda 12.6.3"
|
|
```
|
|
|
|
Find the `installdir` field in the output.
|
|
|
|
From the output above, locate the CUDA installation directory — this is the path pointed to by installdir.
|
|
Add this path to your system environment variable CUDA_PATH, or set it in the terminal using:
|
|
|
|
```powershell
|
|
$env:CUDA_PATH = "C:\path\to\cuda_installdir"
|
|
```
|
|
|
|
Then re-run:
|
|
|
|
```powershell
|
|
xmake f --USE_CUDA=true
|
|
xmake b -vy crossdesk
|
|
```
|
|
|
|
### Connection issues at runtime
|
|
|
|
A disconnected status can result from network, server configuration, or certificate trust problems. See the [FAQ](FAQ.md#english) and [self-hosted TLS guide](SELF_HOSTING_EN.md) before changing the installation.
|
|
|
|
## About Xmake
|
|
|
|
### Installing Xmake
|
|
|
|
You can install Xmake using one of the following methods:
|
|
|
|
Using curl:
|
|
|
|
```bash
|
|
curl -fsSL https://xmake.io/shget.text | bash
|
|
```
|
|
|
|
Using wget:
|
|
|
|
```bash
|
|
wget https://xmake.io/shget.text -O - | bash
|
|
```
|
|
|
|
Using powershell:
|
|
|
|
```powershell
|
|
irm https://xmake.io/psget.text | iex
|
|
```
|
|
|
|
### Build Options
|
|
|
|
```text
|
|
# Select Debug; replace debug with release for a Release build
|
|
xmake f -m debug
|
|
|
|
# Optional build parameters
|
|
-r : Rebuild the target
|
|
-v : Show detailed build logs
|
|
-y : Automatically confirm prompts
|
|
|
|
# Example
|
|
xmake b -vy crossdesk
|
|
```
|
|
|
|
### Run Options
|
|
|
|
```bash
|
|
# Launch the current build in a debugger; this does not select Debug build mode
|
|
xmake r -d crossdesk
|
|
```
|
|
|
|
For more information, please refer to the [official Xmake documentation](https://xmake.io/guide/quick-start.html).
|
|
|
|
## iOS / iPadOS
|
|
|
|
The native client has a separate Xcode project and requires an arm64 physical device running iOS 16+. See the [iOS development guide](../apps/ios/README.md) for build and media/file-transfer checks. CI exports an unsigned app; device installation requires your own signing.
|
|
|
|
## Refreshing screenshots
|
|
|
|
Desktop README images are rendered directly from the current Slint UI. See the [screenshot notes](images/README.md) for reproduction commands.
|