summaryrefslogtreecommitdiffstats
path: root/docs/dev_guide/5_autobuild.md
blob: 6977e0953c1e5d340666f4de65c629c28e123c7e (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
# Autobuild script

The Applications based on AGL framework should have a full packaging solution,
independently of yocto workflow.

Unfortunately the build part of the Applications is only in documentation or in
yocto recipes.

The Applications build with AGL framework must be automated without any yocto
recipes.

A script named **autobuild** is used to control applications build operations.
The bbclass aglwgt.bbclass will call the **autobuild** script for all operations
and is located at the top level of the application repository.

This script could be written in one of the following languages:

* Makefile
* Bash
* Python

The script will be executed directly after a chmod() on it (this implies that the caller should make the script executable before calling it: caller could be aglwgt.bbclass, a jenkins job, a 'real' developer ...)
An appropriate shebang is required to make the script callable directly:

* '#!/usr/bin/make -f' for Makefile format,
* '#!/usr/bin/bash' for Bash
* etc.

The calling convention is close to the one from make, in particular to pass arguments through env variables. This is also easy for bash, as a simple eval on arguments will set environment variables correctly.
The generic call has the following format:

```bash
autobuild/agl/autobuild <command> [ARG1="value1" [ARG2="value2" ... ]]
```

autobuild can be invoked from any directory and all relative paths are
considered to be relative to the location of autobuild.

For makefile scripts, this is the usual behaviour.

For bash scripts, running a 'cd $(dirname $0)' at the beginning is mandatory.

At build time, the following calls must be made in the following order:

```bash
autobuild/agl/autobuild configure CONFIGURE_ARGS="..."
```

initializes the build environment (ex: if app uses cmake, the 'configure''
step will run cmake)

```bash
autobuild/agl/autobuild build BUILD_ARGS="...."
```

builds the application (compile, link binaries, assembles javascript etc.)

```bash
autobuild/agl/autobuild package PACKAGE_ARGS="..." DEST=<path for resulting wgt
file(s)>
```

creates the widget package(s) in the specified destination path prepared by the
caller

```bash
autobuild/agl/autobuild package-test PACKAGE_ARGS="..." DEST=<path for resulting wgt
file(s)>
```

creates the test widget package(s) in the specified destination path prepared by the
caller

```bash
autobuild/agl/autobuild clean CLEAN_ARGS="..."
```

clean the built files (removes the result of autobuild build)

```bash
autobuild/agl/autobuild distclean DISTCLEAN_ARGS="..."
```

clean everything (removes the result of autobuild build + autobuild configure)

## Generation

To be integrated in the Yocto build workflow you have to generate `autobuild`
scripts using _autobuild_ target.

To generate those scripts proceeds:

```bash
mkdir -p build
cd build
cmake .. && make autobuild
```

You should see _autobuild/agl/autobuild_ file now.

## Available targets

Here are the available targets available from _autobuild_ scripts:

- **clean** : clean build directory from object file and targets results.
- **distclean** : delete build directory
- **configure** : generate project Makefile from CMakeLists.txt files.
- **build** : compile all project targets.
- **package** : build and output a wgt package.
- **package-test** : build and output the test wgt as well as the normal wgt
 package.
- **install** : install the project in your filesystem

You can specify variables that modify the behavior of compilation using
the following variables:

- **CLEAN_ARGS** : Variable used at **clean** time.
- **DISTCLEAN_ARGS** : Variable used at **distclean** time.
- **CONFIGURE_ARGS** : Variable used at **configure** time.
- **BUILD_ARGS** : Variable used at **build** time.
- **DEST** : Directory where to output ***wgt*** file (default at build root
 directory).

Variable as to be in CMake format. (ie: BUILD_ARGS="-DC_FLAGS='-g -O2'")

Usage example:

```bash
./autobuild/wgt/autobuild package DEST=/tmp
```