Commit Graph

185 Commits

Author SHA1 Message Date
Siddharth Purohit c137ca5a42 waf: add support for extra messages from AP_UAVCAN 2019-05-15 16:01:53 +09:00
Jonathan Challinger fea82dc360 waf: support building headers from uavcan_vendor_specific_types directory 2019-05-15 16:01:53 +09:00
Peter Barker a23a60d1ea wscript: add option to enable sfml audio 2019-03-23 07:10:50 +11:00
Andrew Tridgell 9e50c1b64e waf: fixed case insensitive board name 2019-03-07 08:36:01 +11:00
Andrew Tridgell 102141756a waf: make board name case insensitive in waf configure 2019-03-05 08:43:14 +11:00
Peter Barker 88e3f6f78c wscript: add slowdown and timeout to coverage autotest commandline
The optimisation / compiler flags required slow things down somewhat
2019-03-04 23:46:40 +11:00
Buzz 31697a3b0c Tools: add support for GCOV code coverage tool and HTML reporting with LCOV.
first, "apt install gcovr lcov" as new prerequisites
then run:
./waf configure --enable-gcov
./waf build --lcov-report
and after much waiting review the report in HTML format with your preferred browser eg:
firefox reports/lcov-report/index.html
2019-03-04 23:46:40 +11:00
Francisco Ferreira 03ed67a996 waf: add option to override toolchain 2019-02-22 08:27:08 +11:00
Andrew Tridgell 1f28994bae waf: added --sitl-flash-storage option 2019-01-21 20:59:00 +11:00
Andrew Tridgell 646c6f4361 waf: point developers at the new build 2018-12-22 11:06:59 +11:00
Michael du Breuil dcfc90b911 wscript: Add a runtime scripting check flag 2018-11-14 01:41:35 +00:00
Francisco Ferreira ff77000d93 waf: support changing board to build without re-configure
This allows to use the board option when building as long as it has been configured before

As we don't want to force configuration of all boards each single time, auto-configuration support now has to be done per-board
2018-11-13 10:30:34 +11:00
Francisco Ferreira 389a9ee88b waf: add option to disable gccdeps 2018-11-13 10:30:34 +11:00
Francisco Ferreira 10ff67d71e waf: fix method name
Add underscore prefix so that method isn't identified as a waf command
2018-11-13 10:30:34 +11:00
Andrew Tridgell b3b5415081 waf: added --use-nuttx-iofw configure option
this allows building with the old NuttX based IO firmware. The default
is the ChibiOS based firmware
2018-10-30 13:00:48 +11:00
Peter Barker fb3b976aa2 wscript: add enable-math-check-indexes configure option 2018-10-19 08:46:43 +11:00
Michael du Breuil 82dad7b732 wscript: Add enable-scripting option 2018-10-09 10:08:52 +11:00
Siddharth Purohit 19d9982ac1 waf: only add support for iofirmware build if the board supports it 2018-09-19 12:14:15 +10:00
Andrew Tridgell 17112c8988 waf: allow build with "./waf iofirmware" 2018-09-19 12:14:15 +10:00
Siddharth Purohit 746ed2be79 wscript: add support for iofirmware as target 2018-09-19 12:14:15 +10:00
Andrew Tridgell 36af9eecdf waf: fixes for python 3.7 2018-08-07 14:40:36 +10:00
Andrew Tridgell c5f3beb297 waf: added --enable-asserts option for ChibiOS 2018-08-03 13:44:59 +10:00
Andrew Tridgell b527dce08d autotest: use --enable-sfml for graphics 2018-07-02 10:43:48 +10:00
Andrew Tridgell 355269115e waf: support --enable-osd option 2018-07-01 21:21:28 +10:00
Andrew Tridgell 88ec03ce5a waf: don't build mavlink for bootloader 2018-06-25 21:22:31 +10:00
Andrew Tridgell b3bbb0c389 waf: removed bootloader variant directory
too painful to maintain
2018-06-22 08:00:31 +10:00
Andrew Tridgell a0e17ab1ed waf: avoid formatting issue in emacs
python mode doesn't understand the embedded apostrophe
2018-06-22 08:00:31 +10:00
Andrew Tridgell 4c2c2012a6 waf: allow for "./waf bootloader"
easier build of the bootloader
2018-06-22 08:00:31 +10:00
Andrew Tridgell 0ae25787c0 waf: added a --bootloader configure option
this selects hwdef-bl.dat instead of hwdef.dat, allowing for
bootloader config to be kept in the same directory as the main
hwdef.dat
2018-06-22 08:00:31 +10:00
Lucas De Marchi 2916a3f40c build: add --apstatedir for Linux boards
This is the --localstatedir that is found on other
buildsystems/programs + the package directory. We could provide a
--localstatedir instead to be similar to the others, but I thought it
would be too confusing for the help message.
2018-05-24 08:00:33 -07:00
Lucas De Marchi 98c741803f build: change default installation prefix to /usr 2018-05-04 11:47:50 -07:00
Lucas De Marchi 997d9f58de build: invert default for header checks
In the end the build time is always almost the same, but it's a pain to
change one header and have it check the world. CI continues to use the
check so we can get any mistake before merging.
2018-05-04 11:47:04 -07:00
Lucas De Marchi 7c068ee8ef build: add command to output currently configured board
./waf board now shows what's the currently configured board. Same as
    grep "'board':" build/.lock-waf*

but in a more pleasant way.
2018-05-04 11:47:04 -07:00
Lucas De Marchi 3ecc138c86 build: move more Linux-only options inside group
prefix, destdir, libdir, bindir only make sense for Linux targets.
2018-05-04 11:47:04 -07:00
Lucas De Marchi 73edda697d build: align help options
While it's aesthetically nice to start the help message in a new line
looking at the code, the first \n screws the output leaving them not
aligned.
2018-05-04 11:47:04 -07:00
Lucas De Marchi 9342bc5050 build: invert default for lttng
Since it's a debug option, particularly for the scheduler, leave it
disabled by default and let the user enable on demand.
2018-05-04 11:47:04 -07:00
Lucas De Marchi 4697089a82 build: move Linux configuration options to its own sections 2018-05-04 11:47:04 -07:00
Andrew Tridgell 9aa0ddfa54 waf: don't make --debug create a build varient
this behaviour is really quite annoying for developers
2018-05-04 18:33:53 +10:00
Andrew Tridgell 9c040105d6 waf: split copter and heli builds
this makes things less confusing for users
2018-04-08 21:26:16 +10:00
Andrew Tridgell 2476a51908 waf: allow for pre_build hook in board modules 2018-03-02 12:52:50 +11:00
Andrew Tridgell 48422e1038 waf: added --default-parameters option 2018-01-15 11:46:02 +11:00
Andrew Tridgell 1901cb6c7f waf: added --disable-header-checks
the headers checks are most of the re-build time when editing class
headers. Disabling them makes development much faster
2017-08-08 00:42:19 -07:00
Lucas De Marchi e68a3e2687 build: rename linstall to localinstall 2017-07-02 08:58:26 -07:00
Gustavo Sousa 374556df22 build: add rsync command
The original proposal was to add this functionality to the --upload option, but
it turns out that --upload seems something slightly different from what the
functionality added with patch does.

The issue motivating this patch is at
https://github.com/ArduPilot/ardupilot/issues/6283
2017-07-02 08:58:26 -07:00
Gustavo Sousa 923e62cb74 build: add linstall command
Command for a local installation under BLD/install, where BLD is the build
variant. This will be useful for commands that depends on the install command.
2017-07-02 08:58:26 -07:00
Eugene Shamaev 59ef501a19 waf: add support for building with UAVCAN 2017-04-10 22:38:13 +01:00
Jacob Walser 25663f5740 wscript: Add Sub 2017-02-25 17:50:18 +11:00
Lucas De Marchi c430bb29e3 build: allow to have unit tests in HAL implementations
Allow a tests/ directory in the hal implementations.
2016-11-02 16:28:20 -02:00
Gustavo Jose de Sousa a98c42fef9 waf: define ap_groups in ardupilotwaf tool
That makes more sense, since that module is supposed to have basic Ardupilot
specific features. The root wscript should be a mere user of those features.
2016-08-24 10:46:23 -03:00
Gustavo Jose de Sousa b8e518a533 waf: use ap_library tool
That way we avoid recompiling source files that don't depend on vehicles.
Change notes:
- UTILITY_SOURCE_EXTS: moved to ap_library
- Task generators indexes: ap_library handles that now and in a better way
- Use of AP_STLIB_FEATURES: it doesn't make sense anymore, since the stlib
  taskgen has empty source list
- Flags and defines: passed down to ap_library through AP_LIBRARIES_OBJECTS_KW
- Set use='mavlink' in AP_LIBRARIES_OBJECTS_KW instead of calls to
  bld.ap_stlib().
2016-08-24 10:46:23 -03:00
Gustavo Jose de Sousa 6834308fbf waf: always load git_submodule tool
That was a silly mistake done by 65e19fd ("waf: don't update submodules if not
a git repository").
2016-08-19 10:23:43 -03:00
Gustavo Jose de Sousa 5ccd3dfec8 waf: create ap_version taskgen in the corresponding function 2016-08-01 22:04:16 -03:00
Gustavo Jose de Sousa f2dec971e7 waf: add "ap_" prefix to keywords "libraries" and "vehicle"
As an effort to keep things specific to ardupilot API in the build system
consistent and easy way to identify.
2016-08-01 22:04:16 -03:00
Gustavo Jose de Sousa 5edb03d184 waf: add option --no-autoconfig
That is useful for developers working on the build system, so that they can
test the build without having to wait for a reconfiguration.
2016-07-29 16:25:33 -03:00
Gustavo Jose de Sousa b65f63ffc1 waf: keep non-variant options definitions together
Keep definition of options that are stored in the "non-variant" configuration
together.
2016-07-29 16:25:33 -03:00
Gustavo Jose de Sousa f936291a52 waf: set variant of BuildContext classes in configure
Otherwise, a call like `waf configure --board <foo> <command1>` will make
`<command1>` run on wrong variant if there was a different variant configured
previously, or an empty variant if the project is "distcleaned".
2016-07-29 13:06:35 -03:00
Gustavo Jose de Sousa cb1c7b66cb waf: add post build callbacks in separate function
That makes it easier see what callbacks are or not being added and the order
they are executed. While at it, don't add build summary callback when in a
check command.
2016-07-28 17:50:19 -03:00
Gustavo Jose de Sousa ef0fb97fe4 waf: reduce scope of ant_glob() patterns
And reduce pre-build execution time.
2016-07-25 17:45:38 -03:00
Gustavo Jose de Sousa 1ad0c685eb waf: add git_submodule post build callback
So that the user is warned about skipped submodule updates.
2016-07-25 16:45:57 -03:00
Gustavo Jose de Sousa 65e19fd9af waf: don't update submodules if not a git repository
That is useful for releases tarballs.
2016-07-25 16:45:57 -03:00
Lucas De Marchi 2b1b23cabf build: fix static linking through --static option 2016-07-20 18:03:20 -03:00
Lucas De Marchi b375b33189 waf: allow to disable tests
This allows to completely disable the tests. Even the gtest submodule is
not checked out allowing integration on build servers without needing to
download one more submodule.

This is different from the --notests flag. The latter only disables
executing the tests, but always use the submodule.
2016-07-13 15:38:50 -03:00
Andrew Tridgell 55e91f0325 waf: added --static option
this forces a static build
2016-07-13 15:24:41 -03:00
Lucas De Marchi a9919420c6 waf: allow to disable libiio at configuration
We default to autodetection for libiio so if the libraries are available
we enable it. However this may not always be desired.
2016-06-23 19:08:13 -03:00
Lucas De Marchi 348678888b waf: allow to disable lttng at configuration
We default to autodetection for LTTNG so if the libraries are available
we enable it. However this may not always be desired.
2016-06-23 19:07:26 -03:00
Gustavo Jose de Sousa d3ed17f047 waf: reconfigure for any changes in loaded modules
Waf's autoconfig feature works only for wscripts loaded by the recurse()
function. This patch extends that functionality to all loaded modules, which
includes Waf tools.
2016-06-23 18:22:55 -03:00
Gustavo Jose de Sousa 2566a13e1b waf: use Configure.autoconfig = 'clobber'
That makes reconfiguration be automatically triggered when wscripts used in
configuration are changed.
2016-06-23 18:22:55 -03:00
Lucas De Marchi 0af8b42ade build: include ap_config.h in libgtest
This is also needed while compiling libgtest because it's using our
cmath wrapper header. Otherwise it will end up entering the
"ifndef WAF_BUILD" part and fail to compile on gcc 5.3.1.
2016-06-14 15:42:43 -03:00
Gustavo Jose de Sousa 260de62f94 waf: print build summary 2016-05-25 17:47:00 -03:00
Gustavo Jose de Sousa afcabda21c waf: use better style for add_option() calls
Setting the "help" keyword argument may not fit in one line sometimes. This
patch adds the following convention to calls to add_option() in order to
address that issue in a better way:

    1) The "help" keyword must always be the last argument to be passed.

    2) If the help string is a literal string or a literal string with some
    operation (e.g. "%" operator) and setting the "help" keyword in the code
    doesn't fit a line (considering the limit of characters in a line), then
    the help string must be a triple-quoted string. That has the advantage of
    not having to have several "+" operations for long help strings. In that
    case, the help message must start on the next line and the closing
    triple-quotes must be on a separate line together with the closing
    parenthesis.

The requirement (1) makes it easier to make the style exception in (2)
acceptable.
2016-05-25 17:47:00 -03:00
Gustavo Jose de Sousa 844222870c waf: boards: bind get_board() to configure and build contexts
A convenience, since we don't expect the board to change for a given
configuration.
2016-05-25 17:47:00 -03:00
Andrew Tridgell 7e7c21d114 waf: update for MAVLink2 build 2016-05-21 15:25:17 +10:00
Gustavo Jose de Sousa 0e09d0b996 waf: rename config_header variable to config_hash
That's a better name. The other name would give the wrong idea that that
variable would store a path to the header.
2016-05-20 09:45:53 -03:00
Lucas De Marchi a9ae5476f3 waf: fix configure not using WAF_BUILD
The configure phase need the WAF_BUILD var defined, otherwise it will
execute code that's only meant for the make build system.
2016-05-19 09:53:41 -03:00
Lucas De Marchi 11e508e3a6 waf: define WAF_BUILD to allow different behavior in make 2016-05-18 22:56:50 -03:00
Gustavo Jose de Sousa 472dae3ed9 waf: don't use hard-coded path for environment cache path
The path for the "non-board" environment cache file was hard-coded, which was
causing the error below when the build was configured with the --out option
value different from the default path.

Traceback (most recent call last):
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Scripting.py", line 161, in waf_entry_point
    run_commands()
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Scripting.py", line 263, in run_commands
    ctx = run_command(cmd_name)
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Scripting.py", line 247, in run_command
    ctx.execute()
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Scripting.py", line 598, in execute
    return execute_method(self)
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Build.py", line 250, in execute
    self.execute_build()
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Build.py", line 263, in execute_build
    self.recurse([self.run_dir])
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Context.py", line 304, in recurse
    user_function(self)
  File "/home/gjsousa/ardupilot/wscript", line 246, in build
    config_header = Utils.h_file(bld.bldnode.make_node('ap_config.h').abspath())
  File "/home/gjsousa/ardupilot/modules/waf/waflib/Utils.py", line 208, in h_file
    f = open(fname, 'rb')
IOError: [Errno 2] No such file or directory: '/tmp/build/ap_config.h'
2016-05-17 15:48:55 -03:00
Gustavo Jose de Sousa ff46384258 waf: add --debug configuration option
That sets a variant <board>-debug.
2016-05-07 22:55:03 -03:00
Lucas De Marchi 9e3ec3a16d waf: define git versions in a generated ap_version.h header 2016-05-06 13:11:28 -03:00
Lucas De Marchi 5f80858cba waf: use system extensions
In several places we use functions like asprintf() that are only
available in libc when _GNU_SOURCE is defined. Always define _GNU_SOURCE
since we always want to use them.

This fixes the build on Windows using cygwin.
2016-04-19 19:02:25 -03:00
Lucas De Marchi 169c350e85 waf: rename AP_Config.h to ap_config.h
The usual name for this header is config.h, but that's already used by
vehicles. Using uppercase could give the impression this is a
file to be modified, but it's not. Use lowercase instead.
2016-04-05 21:06:25 -07:00
Ricardo de Almeida Gonzaga 5e45c9dfb0 waf: add cxx_checks tool
In order to start generating AP_Config header and detect
parameter such as the existence of cmath functions.
2016-04-05 20:44:15 -07:00
Gustavo Jose de Sousa 93473f68ce waf: use program group for main products build commands
Use program group name instead of task generator name. That way all programs
belonging to a product are built. That will be the case for different frames
for copter.
2016-03-26 15:43:08 -03:00
Gustavo Jose de Sousa 0883fb72ac waf: add shortcut for antennatracker 2016-03-24 12:27:58 -03:00
Gustavo Jose de Sousa 841771096d waf: let toolchain loading in charge of the Board class
That allows boards (i.e. subclasses of Board) to use toolchain related
information for configuration. The upcoming PX4 build is an example.
2016-03-14 11:54:31 -03:00
Gustavo Jose de Sousa 8664c0344d waf: allow boards to tweak build
We define a function build() that can be overrode by Board subclasses.
2016-03-14 11:54:30 -03:00
Gustavo Jose de Sousa 76bae701a8 waf: exclude build directory in collect_dirs_to_recurse()
Without this patch, if nodes that don't yet exist in the filesystem in
bld.bldnode were created before calls to this function, they'll be removed from
the tree in memory because "*" is passed to ant_glob() and the "remove" keyword
argument defaults to True.
2016-03-14 11:54:29 -03:00
Gustavo Jose de Sousa 86c1c6da5c waf: fix environment boolean values
It is more natural to use `env.FOO = True` then `env.foo = [True]`.
2016-03-03 14:58:03 -03:00
Gustavo Jose de Sousa c609b27afc waf: gbenchmark: use cmake tool
A little addition in the root wscript was also necessary.
2016-02-22 15:36:48 -03:00
Gustavo Jose de Sousa b7d97b6354 waf: add option --enable-benchmarks
In the future, gbenchmark will be build using a cmake waf tool, which will
require cmake to be installed. We add this option so that users without cmake
can continue use the build system with no problems.
2016-02-22 15:36:48 -03:00
Gustavo Jose de Sousa 662e45fda2 waf: move --check-verbose option declaration
We move it to the correct "scope", that is, ardupilotwaf.py, where it's really
used.
2016-02-22 15:36:48 -03:00
Gustavo Jose de Sousa 8c4d4f3f2a waf: make options groups accessible for any tool
That allows options being declared where they're really used. Additionally, we
load ardupilotwaf after the other tools so that we can create our groups after
all non-ardupilot option groups are created. That makes our groups appear as
the last ones in the help message, which makes it easier to locate them.
2016-02-22 15:36:48 -03:00
Gustavo Jose de Sousa fd88e39408 waf: make all options belong to an option group
That makes it easier for the user to distinguish between a general waf option
and project specific option.
2016-02-22 15:36:47 -03:00
Gustavo Jose de Sousa 3566052d6a waf: add option --no-submodule-update
That is useful when the user wants to build with one or more submodules at a
specific revision. In case of a developer, that is useful for when a submodule
is in modification process and she needs to (constantly) test the build.
2016-02-19 19:19:25 -02:00
Gustavo Jose de Sousa 393bea8945 waf: boards: use classes for boards definition
In order to provide board-specific behavior. For example, the incoming PX4
build will require custom build behavior.
2016-02-18 14:33:46 -02:00
Gustavo Jose de Sousa 8655fdfd7f waf: use git_submodule tool through GIT_SUBMODULES variable
With this change, there's no need to verify if the submodule is initialized,
because the submodules in GIT_SUBMODULES are automatically initialized and
updated if necessary before the build tasks are performed.

One downside of this change is that Google Benchmark configuration is now done
only during build. However that is minor, since now there are easy ways to
separately build different targets and program groups, so that a fail in
benchmark build doesn't really affect the other targets.
2016-02-06 10:25:08 -02:00
Gustavo Jose de Sousa fdc87df074 waf: create taskgen for gtest in _build_common_taskgens
So that it belongs to 'build' group.
2016-02-06 10:25:08 -02:00
Gustavo Jose de Sousa 264c3e2d28 waf: prepare for using git_submodule tool
We define three build groups and set post_mode as POST_LAZY, which makes one
group be posted only after the previous one. That enables us to correctly
define dynamic sources with submodules and generators that may or may not
depend on submodules (e.g. mavgen - this one depends on mavlink submodule).

The groups are defined below, in that order:
 1. git_submodules: contains taskgens that initialize and update submodules.
 2. dynamic_sources: contains taskgens that generate sources used by the build.
 3. build: contains the normal taskgens.
2016-02-06 10:25:08 -02:00
Gustavo Jose de Sousa 1a17d63114 waf: reorganize imports in main wscript 2016-02-06 10:25:08 -02:00
Gustavo Jose de Sousa f13e71a80c waf: explicitly distinct routines in build
That enhances readability and defines a clear separation of responsibilities of
build routines.
2016-02-03 12:24:21 -02:00
Gustavo Jose de Sousa 1d92a54429 waf: reorganize recursion
That makes the code cleaner and better readable. Futhermore, it's easier to add
a pattern for recursion.

Additionally, this commit remove Tools from the exclusion list as that is not
necessary.
2016-02-03 12:24:21 -02:00