declare_options:
  - name: arch
    default: x86_64
  - name: compiler
    default: gcc

sources:
  - name: mlibc
    git: 'https://github.com/managarm/mlibc.git'
    branch: 'master'

  - name: linux
    url: 'https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.14.tar.xz'
    extract_path: 'linux-6.14'
    format: 'tar.xz'
    version: '6.14'

  - name: libdrm
    subdir: 'ports'
    git: 'https://gitlab.freedesktop.org/mesa/drm.git'
    tag: 'libdrm-2.4.124'
    version: '2.4.124'

tools: []

packages:
  - name: mlibc
    architecture: '@OPTION:arch@'
    from_source: mlibc
    pkgs_required:
      - linux-headers
      - libdrm-headers
    configure:
      - args:
        - 'meson'
        - 'setup'
        - '--prefix=/usr'
        - '--libdir=lib'
        - '--buildtype=debugoptimized'
        - "-Dc_args=['-Wno-error=maybe-uninitialized', '-Wno-unknown-warning-option']"
        - "-Dcpp_args=['-Wno-error=maybe-uninitialized', '-Wno-unknown-warning-option']"
        - "-Dlibgcc_dependency=false"
        - "-Duse_freestnd_hdrs=enabled"
        - "-Dbuild_tests=true"
        - "-Db_sanitize=undefined"
        - "-Ddefault_library=both"
        - "-Dwerror=true"
        - '-Dlinux_kernel_headers=@BUILD_ROOT@/packages/linux-headers/usr/include'
        - "--cross-file=@THIS_SOURCE_DIR@/ci/linux-@OPTION:arch@-@OPTION:compiler@.cross-file"
        - '@THIS_SOURCE_DIR@'
        environ:
          CFLAGS: '-Wno-error=maybe-uninitialized'
          CXXFLAGS: '-Wno-error=maybe-uninitialized'
          LDFLAGS: '-Wl,/tmp/libgcc-@OPTION:arch@.a'
    build:
      - args: ['ninja']
      - args: ['ninja', 'install']
        environ:
          DESTDIR: '@THIS_COLLECT_DIR@'
        quiet: true

  - name: mlibc-static
    architecture: '@OPTION:arch@'
    from_source: mlibc
    pkgs_required:
      - linux-headers
      - libdrm-headers
    configure:
      - args:
        - 'meson'
        - 'setup'
        - '--prefix=/usr'
        - '--libdir=lib'
        - '--buildtype=debugoptimized'
        - "-Dc_args=['-Wno-error=maybe-uninitialized']"
        - "-Dcpp_args=['-Wno-error=maybe-uninitialized']"
        - "-Dlibgcc_dependency=false"
        - "-Duse_freestnd_hdrs=enabled"
        - "-Dbuild_tests=true"
        - "-Db_sanitize=undefined"
        - "-Ddefault_library=static"
        - "-Dwerror=true"
        - '-Dlinux_kernel_headers=@BUILD_ROOT@/packages/linux-headers/usr/include'
        - "--cross-file=@THIS_SOURCE_DIR@/ci/linux-@OPTION:arch@-@OPTION:compiler@.cross-file"
        - '@THIS_SOURCE_DIR@'
        environ:
          LDFLAGS: '-Wl,/tmp/libgcc-@OPTION:arch@.a'
    build:
      - args: ['ninja']
      - args: ['ninja', 'install']
        environ:
          DESTDIR: '@THIS_COLLECT_DIR@'
        quiet: true

  - name: mlibc-shared
    from_source: mlibc
    pkgs_required:
      - linux-headers
      - libdrm-headers
    configure:
      - args:
        - 'meson'
        - 'setup'
        - '--prefix=/usr'
        - '--libdir=lib'
        - '--buildtype=debugoptimized'
        - "-Dc_args=['-Wno-error=maybe-uninitialized']"
        - "-Dcpp_args=['-Wno-error=maybe-uninitialized']"
        - "-Dlibgcc_dependency=false"
        - "-Duse_freestnd_hdrs=enabled"
        - "-Dbuild_tests=true"
        - "-Db_sanitize=undefined"
        - "-Ddefault_library=shared"
        - "-Dwerror=true"
        - '-Dlinux_kernel_headers=@BUILD_ROOT@/packages/linux-headers/usr/include'
        - "--cross-file=@THIS_SOURCE_DIR@/ci/linux-@OPTION:arch@-@OPTION:compiler@.cross-file"
        - '@THIS_SOURCE_DIR@'
        environ:
          LDFLAGS: '-Wl,/tmp/libgcc-@OPTION:arch@.a'
    build:
      - args: ['ninja']
      - args: ['ninja', 'install']
        environ:
          DESTDIR: '@THIS_COLLECT_DIR@'
        quiet: true

  - name: mlibc-ansi-only
    architecture: '@OPTION:arch@'
    from_source: mlibc
    pkgs_required:
      - linux-headers
      - libdrm-headers
    configure:
      - args:
        - 'meson'
        - 'setup'
        - '--prefix=/usr'
        - '--libdir=lib'
        - '--buildtype=debugoptimized'
        - "-Dc_args=['-Wno-error=maybe-uninitialized']"
        - "-Dcpp_args=['-Wno-error=maybe-uninitialized']"
        - "-Dlibgcc_dependency=false"
        - "-Duse_freestnd_hdrs=enabled"
        - "-Dbuild_tests=true"
        - "-Db_sanitize=undefined"
        - "-Ddefault_library=both"
        - "-Dwerror=true"
        - "-Dposix_option=disabled"
        - "-Dlinux_option=disabled"
        - "-Dglibc_option=disabled"
        - "-Dbsd_option=disabled"
        - '-Dlinux_kernel_headers=@BUILD_ROOT@/packages/linux-headers/usr/include'
        - "--cross-file=@THIS_SOURCE_DIR@/ci/linux-@OPTION:arch@-@OPTION:compiler@.cross-file"
        - '@THIS_SOURCE_DIR@'
        environ:
          LDFLAGS: '-Wl,/tmp/libgcc-@OPTION:arch@.a'
    build:
      - args: ['ninja']
      - args: ['ninja', 'install']
        environ:
          DESTDIR: '@THIS_COLLECT_DIR@'
        quiet: true

  - name: mlibc-headers-only
    architecture: '@OPTION:arch@'
    from_source: mlibc
    pkgs_required:
      - linux-headers
      - libdrm-headers
    configure:
      - args:
        - 'meson'
        - 'setup'
        - '--prefix=/usr'
        - '--libdir=lib'
        - '--buildtype=debugoptimized'
        - "-Dc_args=['-Wno-error=maybe-uninitialized']"
        - "-Dcpp_args=['-Wno-error=maybe-uninitialized']"
        - "-Dlibgcc_dependency=false"
        - "-Duse_freestnd_hdrs=enabled"
        - "-Db_sanitize=undefined"
        - "-Dwerror=true"
        - "-Dheaders_only=true"
        - '-Dlinux_kernel_headers=@BUILD_ROOT@/packages/linux-headers/usr/include'
        - "--cross-file=@THIS_SOURCE_DIR@/ci/linux-@OPTION:arch@-@OPTION:compiler@.cross-file"
        - '@THIS_SOURCE_DIR@'
        environ:
          LDFLAGS: '-Wl,/tmp/libgcc-@OPTION:arch@.a'
    build:
      - args: ['ninja']
      - args: ['ninja', 'install']
        environ:
          DESTDIR: '@THIS_COLLECT_DIR@'
        quiet: true

  - name: linux-headers
    architecture: '@OPTION:arch@'
    from_source: linux
    configure:
      # custom build system requires in tree-ish builds
      - args: ['cp', '-Tr', '@THIS_SOURCE_DIR@/', '.']
    build:
      - args: |
          LINUX_ARCH="@OPTION:arch@"
          case "$LINUX_ARCH" in
            "aarch64")
              LINUX_ARCH="arm64"
              ;;
            "riscv64")
              LINUX_ARCH="riscv"
              ;;
            "loongarch64")
              LINUX_ARCH="loongarch"
              ;;
          esac
          make O=@THIS_COLLECT_DIR@ ARCH="$LINUX_ARCH" headers_install

  - name: libdrm-headers
    architecture: '@OPTION:arch@'
    from_source: 'libdrm'
    build:
      - args: ['mkdir', '-p', '@THIS_COLLECT_DIR@/usr/src/libdrm-headers']
      - args: |
          cat << EOF > @THIS_COLLECT_DIR@/usr/src/libdrm-headers/meson.build
          project('libdrm-headers')
          libdrm_dep = declare_dependency(include_directories: include_directories('include'))
          EOF
      - args: ['cp', '-r', '@THIS_SOURCE_DIR@/include', '@THIS_COLLECT_DIR@/usr/src/libdrm-headers/include']
