linglong/docs/pages/en/guide/building/manifests.md

16 KiB

Build Configuration File Introduction

linglong.yaml is the description file for Linyaps project engineering, which records relevant information needed for building, such as build artifact names, versions, source code addresses, build dependencies, etc.

Project Directory Structure

{project-root}
├── linglong.yaml
└── linglong

{user-home}
└── .cache
    └── linglong-builder
        ├── repo
        └── layers

Field Definitions

The linglong.yaml file structure follows specific specifications. First, the version of the configuration file needs to be declared at the top level of the file:

version: "1"
Name Description Required
version Version of the build configuration file, currently '1' Yes

Next are the main configuration blocks. Among them, package, base, and build must be defined.

Package Metadata Configuration (package)

Defines basic information about build artifacts. This package configuration block is required.

package:
  id: org.deepin.calculator
  name: deepin-calculator
  version: 5.7.21.0
  kind: app
  description: |
    calculator for deepin os.    
  architecture: x86_64 # Optional
  channel: main # Optional
Name Description Required
id Unique name of build artifact (for example: org.deepin.calculator) Yes
name Name of build artifact (for example: deepin-calculator) Yes
version Version of build artifact, recommend four digits (for example: 5.7.21.0) Yes
kind Type of build artifact: app (application), runtime (runtime) Yes
description Detailed description of build artifact Yes
architecture Target architecture of build artifact (for example: x86_64, arm64) No
channel Channel of build artifact (for example: main, dev) No

Command (command)

Defines how to start the application. This is a list of strings. The first element in the list is usually the absolute path of the executable file (relative to inside the container), and subsequent elements are parameters passed to the executable.

command:
  - /opt/apps/org.deepin.calculator/files/bin/deepin-calculator
  # - --some-argument # Can add more parameters
Name Description Required
command Defines the executable file path and its parameter list for starting the application. Usually required for kind: app. No

Base Environment (base)

Specifies the minimal root filesystem required for building and running. This field is required.

base: org.deepin.base/23.1.0
Name Description Required
base Identifier of the base, in the format id/version. Version numbers support three-digit fuzzy matching. Yes

Runtime

Application runtime dependencies, also build dependencies.

runtime: org.deepin.runtime.dtk/23.1.0
Name Description
id Unique name of the runtime
version Version of the runtime, three digits can fuzzy match the fourth

Sources (sources)

Describes source code information required by the project. sources is a list that can contain multiple source items. Fetched source code is stored by default in the linglong/sources directory at the same level as linglong.yaml.

git Type

sources:
  - kind: git
    url: https://github.com/linuxdeepin/deepin-calculator.git
    commit: d7e207b4a71bbd97f7d818de5044228c1a6e2c92 # Branch, tag or commit, used to precisely specify the commit
    name: deepin-calculator.git # Optional, specify the directory name after download
Name Description Required (within single source)
kind git, indicating using git tool to download. Yes
url Source code repository address Yes
commit Source code repository branch, tag or hash value of a specific commit, used for precise checkout Yes
name Optional, specify the subdirectory name in linglong/sources directory after source code download. No

file Type

sources:
  - kind: file
    url: https://example.com/some-file.dat
    digest: sha256:... # Recommend providing sha256 hash value
    name: my-data.dat # Optional, specify the filename after download
Name Description Required (within single source)
kind file, indicating direct file download. Yes
url File download address Yes
digest Optional, sha256 hash value of the file, used for verification. No
name Optional, specify the filename in linglong/sources directory after download. No

archive Type

sources:
  - kind: archive
    url: https://github.com/linuxdeepin/deepin-calculator/archive/refs/tags/6.5.4.tar.gz
    digest: 9675e27395891da9d9ee0a6094841410e344027fd81265ab75f83704174bb3a8 # Recommend providing sha256 hash value
    name: deepin-calculator-6.5.4 # Optional, specify the directory name after extraction
Name Description Required (within single source)
kind archive, download compressed package and automatically extract. Supports common compressed formats. Yes
url Compressed package download address Yes
digest Optional, sha256 hash value of the compressed package file, used for verification. No
name Optional, specify the directory name in linglong/sources directory after extraction. No

dsc Type

sources:
  - kind: dsc
    url: https://cdn-community-packages.deepin.com/deepin/beige/pool/main/d/deepin-calculator/deepin-calculator_6.0.1.dsc
    digest: ce47ed04a427a887a52e3cc098534bba53188ee0f38f59713f4f176374ea2141 # Recommend providing sha256 hash value
    name: deepin-calculator-dsc # Optional, specify the directory name after download and extraction
Name Description Required (within single source)
kind dsc, handle Debian source package description files and their associated files. Yes
url .dsc file download address Yes
digest Optional, sha256 hash value of the .dsc file, used for verification. No
name Optional, specify the directory name in linglong/sources directory after download and extraction. No

Export Trimming Rules (exclude/include)

After building the application and exporting to UAB package, files that need to be trimmed are as follows:

exclude:
  - /usr/share/locale # Trim entire folder
  - /usr/lib/libavfs.a # Trim single file

include:
  - /usr/share/locale/zh_CN.UTF-8 # Work with exclude to only export certain files in a folder
Name Description
exclude Absolute paths inside the container, can be files or folders, used for exclusion.
include Absolute paths inside the container, files that must be included in UAB package (even if parent directory is excluded).

Build Rules (build)

Describes how to compile and install the project in the build environment. This field is required, and its content is a multi-line string that will be executed as a shell script.

Describe build rules.

build: |
  qmake -makefile PREFIX=${PREFIX} LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET}
  make
  make install  
Name Description Required
build Shell script executed during build phase. Script is executed inside the container build environment. Yes

Build Extensions (buildext)

Optional field, used to define extension behavior for specific build stages. Currently mainly supports apt extension, used to manage Debian package dependencies required for building and runtime.

buildext:
  apt:
    build_depends: # Build-time dependencies, only installed in build environment
      - build-essential
      - cmake
      - qt6-base-dev
    depends: # Runtime dependencies, will be included in final application or runtime
      - libqt6widgets6
      - libglib2.0-0
Name Description Required
buildext Container block for build extension configuration. No
apt Extension configuration using apt package manager. No
build_depends A list of strings, listing packages needed at build time, these packages will not enter the final artifact. No
depends A list of strings, listing packages needed at runtime, these packages will be included in the final artifact. No

Modules (modules)

Optional field, used to split files installed to ${PREFIX} directory into different modules. This is useful for on-demand downloads or providing optional functionality.

modules:
  - name: main # Main module name, usually same or related to package.id
    files: # List of files or directories included in this module (relative to ${PREFIX})
      - bin/
      - share/applications/
      - share/icons/
      - lib/ # Include all libraries
  - name: translations # Translation module
    files:
      - share/locale/
  - name: extra-data # Optional data module
    files:
      - share/my-app/optional-data/
Name Description Required
modules List of rules defining application module splitting. No
name Name of the module. Each module needs a unique name. Yes (within each module item)
files A list of strings, listing files or directories belonging to this module. Paths are relative to ${PREFIX} paths. Yes (within each module item)

Note: All files installed to ${PREFIX} will be assigned to a module. When modules are not defined, the build system will automatically generate default binary and develop modules.

Variables

Variables that can be used during the build process.

Name Description
PREFIX Environment variable used in the build field; provides installation path during build, such as /opt/apps/org.deepin.calculator
TRIPLET Environment variable used in the build field; provides a triplet containing architecture information, such as x86_64-linux-gnu

Complete Examples

Build Application

Calculator

version: "1"

package:
  id: org.deepin.calculator
  name: deepin-calculator
  version: 5.7.21.0
  kind: app
  description: |
    calculator for deepin os.    

command:
  - /opt/apps/org.deepin.calculator/files/bin/deepin-calculator

base: org.deepin.base/23.1.0
runtime: org.deepin.runtime.dtk/23.1.0

sources:
  - kind: git
    url: https://github.com/linuxdeepin/deepin-calculator.git
    version: master
    commit: d7e207b4a71bbd97f7d818de5044228c1a6e2c92

  - kind: git
    url: https://github.com/linuxdeepin/dde-qt-dbus-factory.git
    version: master
    commit: d952e1913172c5507af080f644a654f9ba5fed95

build: |
  # build dde-qt-dbus-factory
  cd /project/linglong/sources/dde-qt-dbus-factory.git
  qmake -makefile \
        PREFIX=${PREFIX} \
        LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET} \
        INSTALL_ROOT=${PREFIX}

  make
  make install

  # build calculator
  cd /project/linglong/sources/deepin-calculator.git
  cmake -Bbuild \
        -DCMAKE_INSTALL_PREFIX=${PREFIX} \
        -DCMAKE_INSTALL_LIBDIR=${PREFIX}/lib/${TRIPLET} \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \
        -DAPP_VERSION=5.7.21 \
        -DVERSION=5.7.21

  cmake --build build
  cmake --build build --target install  

buildext:
  apt:
    # Additional dependencies at build time
    build_depends: []
    # Additional dependencies at runtime
    depends: []

Build Root Filesystem

git clone git@github.com:linglongdev/org.deepin.foundation.git
cd org.deepin.foundation
bash build_base.sh beige amd64

This project is used to build the root filesystem used by Linyaps. beige refers to the distribution code name, amd64 refers to the architecture.

Distribution Architecture
eagle (UOS 20) amd64、arm64、loongarch64
beige (deepin 23) amd64、arm64

Build Runtime

git clone git@github.com:linglongdev/org.deepin.Runtime.git -b v23
cd org.deepin.Runtime
./depend-deb-list.sh | ./tools/download_deb_depend.bash
ll-builder build --skip-fetch-source

Adds Qt and other basic environments on top of the root filesystem.