summaryrefslogtreecommitdiffstats
path: root/recipes-core/distro-build-manifest/distro-build-manifest.bb
blob: 823cc28a1f980b095aa294c47e9a93bc31938147 (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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
SUMMARY = "Distribution build manifest"
DESCRIPTION = "The folder /etc/platform-info contains build manifest (SPEC-720)."
LICENSE = "MIT"

# information distributed by the package is machine specific
PACKAGE_ARCH = "${MACHINE_ARCH}"

# dependencies of ${DISTRO_MANIFEST_GENERATOR}
DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native jq-native"

# force a rebuild everytime a build is started
do_compile[nostamp] = "1"

# borrowed to os-release.bb (output format is very close)
python do_compilestep1 () {
   import shutil
   with open(d.expand('${B}/bbinfo-deploy'),'w') as f:
      allkeys=[]
      for field in d.getVar('BUILD_MANIFEST_FIELDS_DEPLOY').split():
         key='DIST_BB_{0}'.format(field)
         allkeys.append(key)
         value=d.getVar(field)
         if value:
            f.write('{0}="{1}"\n'.format(key,value))
      f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[deploy]="%s"' % ' '.join(allkeys))

   with open(d.expand('${B}/bbinfo-target'),'w') as f:
      allkeys=[]
      for field in d.getVar('BUILD_MANIFEST_FIELDS_TARGET').split():
         key='DIST_BB_{0}'.format(field)
         allkeys.append(key)
         value=d.getVar(field)
         if value:
            f.write('{0}="{1}"\n'.format(key,value))
      f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[target]="%s"' % ' '.join(allkeys))

   with open(d.expand('${B}/bbinfo-sdk'),'w') as f:
      allkeys=[]
      for field in d.getVar('BUILD_MANIFEST_FIELDS_SDK').split():
         key='DIST_BB_{0}'.format(field)
         allkeys.append(key)
         value=d.getVar(field)
         if value:
            f.write('{0}="{1}"\n'.format(key,value))
      f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[sdk]="%s"' % ' '.join(allkeys))
}

do_compilestep2 () {
    rc=99
    timestamp=${DATETIME}
    outfile=${B}/build-info
    if [ -x "${DISTRO_MANIFEST_GENERATOR}" -a -f "${DISTRO_SETUP_MANIFEST}" ]; then
		rc=0
		for	format in bash json; do
			if [ "$format" = "json" ]; then
				ext=".json"
			else
				ext=""
			fi
			for mode in deploy target sdk; do
				${DISTRO_MANIFEST_GENERATOR} -m $mode -f $format -t $timestamp -s ${B}/bbinfo-${mode} ${DISTRO_SETUP_MANIFEST} >${outfile}-${mode}${ext}
				rc=$?
				if [ $rc -ne 0 ]; then
					break
				fi
			done
		done
    else
        if [ -z "${DISTRO_MANIFEST_GENERATOR}" ]; then
            echo "The name of the generation script is not defined."
        elif [ ! -f "${DISTRO_MANIFEST_GENERATOR}" ]; then
            echo "Generation script ${DISTRO_MANIFEST_GENERATOR} is missing."
        elif [ ! -x "${DISTRO_MANIFEST_GENERATOR}" ]; then
            echo "Generation script ${DISTRO_MANIFEST_GENERATOR} isn't executable."
        fi
        if [ -z "${DISTRO_SETUP_MANIFEST}" ]; then
            echo "The name of the data file is not defined."
        elif [ ! -f "${DISTRO_SETUP_MANIFEST}" ]; then
            echo "Data file ${DISTRO_SETUP_MANIFEST} is missing."
        fi
	echo "You can try to rerun aglsetup.sh to solve that issue."
	echo "You can also try to source agl-init-build-env instead of oe-init-build-env."
    fi

    if [ "$rc" -ne  0 ]; then
        echo "distro-build-manifest generation failed."
    fi
    return $rc
}

do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_DEPLOY}"
do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_TARGET}"
do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_SDK}"

# avoid errors "ERROR: When reparsing .../distro-build-manifest/distro-build-manifest.bb.do_compile, the basehash value changed from .... to .... . The metadata is not deterministic and this needs to be fixed."
do_compilestep2[vardepsexclude] = "DATETIME"

# combine the two steps
python do_compile() {
   bb.build.exec_func("do_compilestep1",d)
   bb.build.exec_func("do_compilestep2",d)
}

do_install () {
    # install in target dir
    install -d ${D}${sysconfdir}/platform-info
    install -m 0644 build-info-target ${D}${sysconfdir}/platform-info/build
    install -m 0644 build-info-target.json ${D}${sysconfdir}/platform-info/build.json

    # also copy in deploy dir
    install -d ${DEPLOY_DIR_IMAGE}
    install -m 0644 build-info-deploy ${DEPLOY_DIR_IMAGE}/build-info
    install -m 0644 build-info-deploy.json ${DEPLOY_DIR_IMAGE}/build-info.json

    # copy into sdk deploy dir
    install -d ${DEPLOY_DIR}/sdk
    install -m 0644 build-info-sdk ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info
    install -m 0644 build-info-sdk.json ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info.json

    # and copy to nativesdk package
    # TODO
}

# list of variables to add to the various manifests
# smalles one is 'target', then 'deploy' and finally 'sdk'
BUILD_MANIFEST_FIELDS_TARGET = "\
    MACHINE_ARCH \
    MACHINEOVERRIDES \
    MACHINE_FEATURES \
    DISTRO_CODENAME \
    DISTRO_FEATURES \
    DISTRO_BRANCH_VERSION_TAG \
    AGLVERSION \
    AGL_BRANCH \
    AGLRELEASETYPE \
"

BUILD_MANIFEST_FIELDS_DEPLOY = "\
    ${BUILD_MANIFEST_FIELDS_TARGET} \
    DISTRO \
    DISTRO_VERSION \
    DISTROOVERRIDES \
    TUNE_FEATURES \
    TUNE_PKGARCH \
    ALL_MULTILIB_PACKAGE_ARCHS \
"

BUILD_MANIFEST_FIELDS_SDK = "\
    ${BUILD_MANIFEST_FIELDS_DEPLOY} \
    HOST_SYS \
    TARGET_SYS \
    TARGET_VENDOR \
    SDK_ARCH \
    SDK_VENDOR \
    SDK_VERSION \
    SDK_OS \
"

# dont exec useless tasks
do_fetch[noexec] = "1"
do_unpack[noexec] = "1"
do_patch[noexec] = "1"
do_configure[noexec] = "1"