mirror of https://github.com/ArduPilot/ardupilot
waf: add cxx_checks tool
In order to start generating AP_Config header and detect parameter such as the existence of cmath functions.
This commit is contained in:
parent
14dbc16d46
commit
5e45c9dfb0
|
@ -104,6 +104,7 @@ def ap_program(bld,
|
||||||
if use_legacy_defines:
|
if use_legacy_defines:
|
||||||
kw['defines'].extend(_get_legacy_defines(bld.path.name))
|
kw['defines'].extend(_get_legacy_defines(bld.path.name))
|
||||||
|
|
||||||
|
kw['cxxflags'] = kw.get('cxxflags', []) + ['-include', 'AP_Config.h']
|
||||||
kw['features'] = kw.get('features', []) + bld.env.AP_PROGRAM_FEATURES
|
kw['features'] = kw.get('features', []) + bld.env.AP_PROGRAM_FEATURES
|
||||||
|
|
||||||
program_groups = Utils.to_list(program_groups)
|
program_groups = Utils.to_list(program_groups)
|
||||||
|
@ -167,6 +168,7 @@ def ap_stlib(bld, **kw):
|
||||||
lib_sources = lib_node.ant_glob(SOURCE_EXTS + UTILITY_SOURCE_EXTS)
|
lib_sources = lib_node.ant_glob(SOURCE_EXTS + UTILITY_SOURCE_EXTS)
|
||||||
sources.extend(lib_sources)
|
sources.extend(lib_sources)
|
||||||
|
|
||||||
|
kw['cxxflags'] = kw.get('cxxflags', []) + ['-include', 'AP_Config.h']
|
||||||
kw['features'] = kw.get('features', []) + bld.env.AP_STLIB_FEATURES
|
kw['features'] = kw.get('features', []) + bld.env.AP_STLIB_FEATURES
|
||||||
kw['source'] = sources
|
kw['source'] = sources
|
||||||
kw['target'] = kw['name']
|
kw['target'] = kw['name']
|
||||||
|
|
|
@ -52,6 +52,8 @@ class Board:
|
||||||
else:
|
else:
|
||||||
cfg.env[k] = val
|
cfg.env[k] = val
|
||||||
|
|
||||||
|
cfg.load('cxx_checks')
|
||||||
|
|
||||||
def configure_env(self, cfg, env):
|
def configure_env(self, cfg, env):
|
||||||
# Use a dictionary instead of the convetional list for definitions to
|
# Use a dictionary instead of the convetional list for definitions to
|
||||||
# make easy to override them. Convert back to list before consumption.
|
# make easy to override them. Convert back to list before consumption.
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
"""
|
||||||
|
WAF Tool that checks cxx parameters, creating the AP_Config
|
||||||
|
header file.
|
||||||
|
|
||||||
|
This tool needs compiler_cxx to be loaded, make sure you
|
||||||
|
load them before this tool.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
def configure(cfg):
|
||||||
|
cfg.load('cxx_checks')
|
||||||
|
"""
|
||||||
|
|
||||||
|
def configure(cfg):
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return std::isfinite(1.0f);
|
||||||
|
}''',
|
||||||
|
define_name="HAVE_CMATH_ISFINITE",
|
||||||
|
mandatory=False)
|
||||||
|
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return std::isinf(1.0f);
|
||||||
|
}''',
|
||||||
|
define_name="HAVE_CMATH_ISINF",
|
||||||
|
mandatory=False)
|
||||||
|
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return std::isnan(1.0f);
|
||||||
|
}''',
|
||||||
|
define_name="HAVE_CMATH_ISNAN",
|
||||||
|
mandatory=False)
|
||||||
|
|
||||||
|
# NEED_CMATH_FUNCTION_STD_NAMESPACE checks are needed due to
|
||||||
|
# new gcc versions being more restrictive.
|
||||||
|
#
|
||||||
|
# Here we check if we need to add 'using std::function' to
|
||||||
|
# the function.
|
||||||
|
#
|
||||||
|
# Without these checks, in some cases, gcc points this as
|
||||||
|
# overloads or function duplication in scope.
|
||||||
|
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <math.h>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
using std::isfinite;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return isfinite((double)1);
|
||||||
|
}''',
|
||||||
|
define_name="NEED_CMATH_ISFINITE_STD_NAMESPACE",
|
||||||
|
mandatory=False)
|
||||||
|
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <math.h>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
using std::isinf;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return isinf((double)1);
|
||||||
|
}''',
|
||||||
|
define_name="NEED_CMATH_ISINF_STD_NAMESPACE",
|
||||||
|
mandatory=False)
|
||||||
|
|
||||||
|
cfg.check_cxx(fragment='''
|
||||||
|
#include <math.h>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
using std::isnan;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return isnan((double)1);
|
||||||
|
}''',
|
||||||
|
define_name="NEED_CMATH_ISNAN_STD_NAMESPACE",
|
||||||
|
mandatory=False)
|
7
wscript
7
wscript
|
@ -114,6 +114,8 @@ def configure(cfg):
|
||||||
if cfg.options.submodule_update:
|
if cfg.options.submodule_update:
|
||||||
cfg.env.SUBMODULE_UPDATE = True
|
cfg.env.SUBMODULE_UPDATE = True
|
||||||
|
|
||||||
|
cfg.write_config_header(os.path.join(cfg.variant, 'AP_Config.h'))
|
||||||
|
|
||||||
def collect_dirs_to_recurse(bld, globs, **kw):
|
def collect_dirs_to_recurse(bld, globs, **kw):
|
||||||
dirs = []
|
dirs = []
|
||||||
globs = Utils.to_list(globs)
|
globs = Utils.to_list(globs)
|
||||||
|
@ -217,6 +219,11 @@ def _build_recursion(bld):
|
||||||
bld.recurse(d)
|
bld.recurse(d)
|
||||||
|
|
||||||
def build(bld):
|
def build(bld):
|
||||||
|
config_header = Utils.h_file(bld.bldnode.make_node('AP_Config.h').abspath())
|
||||||
|
|
||||||
|
bld.env.CCDEPS = config_header
|
||||||
|
bld.env.CXXDEPS = config_header
|
||||||
|
|
||||||
bld.post_mode = Build.POST_LAZY
|
bld.post_mode = Build.POST_LAZY
|
||||||
|
|
||||||
bld.load('ardupilotwaf')
|
bld.load('ardupilotwaf')
|
||||||
|
|
Loading…
Reference in New Issue