summaryrefslogtreecommitdiff
path: root/project.conf
blob: 314efc70f182f89fb3d91fac29f749567d24c9b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
128
name: baserock

aliases:
  upstream: git://git.baserock.org/delta/
  baserock: git://git.baserock.org/baserock/
  gnomesdk: https://sdk.gnome.org/

# All the elements go here
element-path: ./elements

# We list a lot of architectures here and Baserock has supported each of these
# at some point in the past, however for the list of *currently* supported
# architectures look in `elements/gnu-toolchain/base.bst`.

options:
  build_arch:
    description: |
      Specifies architecture of the build sandbox.

      This defaults to $(uname -a). On platforms where the Baserock architecture
      name doesn't match the Linux architecture name, you need to manually
      specify the Baserock architecture name.

      You can also use this to build for a different architecture provided your
      host can execute binaries for that architecture. For example, you could
      run an x86_32 build on an x86_64 machine by setting `build_arch=x86_32`
      and `arch=x86_32`.
    type: arch
    variable: build_arch
    values: [
      armv8l, armv8b, ppc64, ppc64le, x86_32, x86_64
    ]

  arch:
    description: |
      Specifies host and target architecture for output binaries.

      Usually this should match build_arch. If it differs, a cross compile
      will happen up to the gnu-toolchain/stage2.bst stack. Beyond this,
      cross compilation isn't supported.

      For instructions on how to bootstrap a new architecture, see:
      http://wiki.baserock.org/guides/how-to-cross-bootstrap/
    type: arch
    variable: arch
    values: [
      armv8l, armv8b, ppc64, ppc64le, x86_32, x86_64
    ]

variables:
  cpu: "%{arch}"
  abi: gnu

  (?):
  - arch == "x86_32":
      cpu: i686
  - arch == "armv8l":
      cpu: aarch64
  - arch == "armv8b":
      cpu: aarch64_be
  - arch == "ppc64":
      cpu: powerpc64
  - arch == "ppc64le":
      cpu: powerpc64le

  target-stage1: "%{cpu}-bootstrap-linux-%{abi}"
  target: "%{cpu}-baserock-linux-%{abi}"

  # This should match the %{strip-binaries} variable in BuildStream's default
  # project config. But when doing a cross-build of stage2.bst we need to force
  # use the cross binutils; the native binutils from the base sysroot will
  # ignore the non-native binaries and leave them unstripped.
  stage2-strip-binaries: |
    find "%{install-root}" -type f \
      '(' -perm -111 -o -name '*.so*' \
          -o -name '*.cmxs' -o -name '*.node' ')' \
      -exec sh -ec \
      'read -n4 hdr <"$1" # check for elf header
       if [ "$hdr" != "$(printf \\x7fELF)" ]; then
           exit 0
       fi
       debugfile="%{install-root}%{debugdir}/$(basename "$1")"
       mkdir -p "$(dirname "$debugfile")"
       %{target-stage1}-objcopy --only-keep-debug "$1" "$debugfile"
       chmod 644 "$debugfile"
       %{target-stage1}-strip --remove-section=.comment --remove-section=.note --strip-unneeded "$1"
       %{target-stage1}-objcopy --add-gnu-debuglink "$debugfile" "$1"' - {} ';'

  # BuildStream passes `--compress-debug-sections` to objcopy; this would be
  # great if it worked but in stage3 builds I see errors like this:
  #
  #    BFD: /buildstream/install/usr/bin/gcc-ranlib: unable to initialize compress status for section .debug_aranges
  #    objcopy:/buildstream/install/usr/bin/gcc-ranlib: Invalid operation
  #
  # This causes debug stripping to just not happen, which makes the stage3
  # sysroot huge. I haven't investigated the cause, but I guess we need to
  # build zlib in stage2 for the feature to work.
  stage3-strip-binaries: |
    find "%{install-root}" -type f \
      '(' -perm -111 -o -name '*.so*' \
          -o -name '*.cmxs' -o -name '*.node' ')' \
      -exec sh -ec \
      'read -n4 hdr <"$1" # check for elf header
       if [ "$hdr" != "$(printf \\x7fELF)" ]; then
           exit 0
       fi
       debugfile="%{install-root}%{debugdir}/$(basename "$1")"
       mkdir -p "$(dirname "$debugfile")"
       objcopy --only-keep-debug "$1" "$debugfile"
       chmod 644 "$debugfile"
       strip --remove-section=.comment --remove-section=.note --strip-unneeded "$1"
       objcopy --add-gnu-debuglink "$debugfile" "$1"' - {} ';'


artifacts:
  url: https://ostree.baserock.org/cache/

split-rules:
  devel:
    (>):
      - |
        %{prefix}/src/**

plugins:
  - origin: pip
    package-name: buildstream-external
    elements:
      x86image: 0