mirror of https://gitlab.com/ita1024/waf.git
waflib: extras: add c_cross_gnu tool that shortcuts cross-compilation config
This commit is contained in:
parent
b2cd86fc21
commit
05ef26f3b8
|
@ -0,0 +1,147 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
# Tool to provide dedicated variables for cross-compilation
|
||||
|
||||
__author__ = __maintainer__ = "Jérôme Carretero <cJ-waf@zougloub.eu>"
|
||||
__copyright__ = "Jérôme Carretero, 2014"
|
||||
|
||||
"""
|
||||
|
||||
This tool allows to use environment variables to define cross-compilation things,
|
||||
mostly used when you use build variants.
|
||||
|
||||
Usage:
|
||||
|
||||
- In your build script::
|
||||
|
||||
def configure(cfg):
|
||||
...
|
||||
conf.load('c_cross_gnu')
|
||||
for variant in x_variants:
|
||||
conf.xcheck_cross()
|
||||
conf.xcheck_cross_var('POUET')
|
||||
...
|
||||
|
||||
...
|
||||
|
||||
- Then::
|
||||
|
||||
CHOST=arm-hardfloat-linux-gnueabi waf configure
|
||||
|
||||
env arm-hardfloat-linux-gnueabi-CC="clang -..." waf configure
|
||||
|
||||
CFLAGS=... CHOST=arm-hardfloat-linux-gnueabi HOST_CFLAGS=-g waf configure
|
||||
|
||||
HOST_CC="clang -..." waf configure
|
||||
|
||||
"""
|
||||
|
||||
import os, shutil
|
||||
from waflib import Utils, Configure
|
||||
|
||||
try:
|
||||
from shlex import quote
|
||||
except ImportError:
|
||||
from pipes import quote
|
||||
|
||||
@Configure.conf
|
||||
def xcheck_prog(conf, var, tool, cross=False):
|
||||
value = os.environ.get(var, '')
|
||||
value = Utils.to_list(value)
|
||||
|
||||
if not value:
|
||||
return
|
||||
|
||||
conf.env[var] = value
|
||||
if cross:
|
||||
pretty = 'cross-compilation %s' % var
|
||||
else:
|
||||
pretty = var
|
||||
conf.msg('Will use %s' % pretty,
|
||||
" ".join(quote(x) for x in value))
|
||||
|
||||
@Configure.conf
|
||||
def xcheck_envar(conf, name, wafname=None, cross=False):
|
||||
wafname = wafname or name
|
||||
value = os.environ.get(name, None)
|
||||
value = Utils.to_list(value)
|
||||
|
||||
if not value:
|
||||
return
|
||||
|
||||
conf.env[wafname] += value
|
||||
if cross:
|
||||
pretty = 'cross-compilation %s' % wafname
|
||||
else:
|
||||
pretty = wafname
|
||||
conf.msg('Will use %s' % pretty,
|
||||
" ".join(quote(x) for x in value))
|
||||
|
||||
@Configure.conf
|
||||
def xcheck_host_prog(conf, name, tool, wafname=None):
|
||||
wafname = wafname or name
|
||||
host = conf.env.CHOST
|
||||
specific = None
|
||||
if host:
|
||||
specific = os.environ.get('%s-%s' % (host[0], name), None)
|
||||
|
||||
if specific:
|
||||
value = Utils.to_list(specific)
|
||||
conf.env[wafname] += value
|
||||
conf.msg('Will use cross-compilation %s' % name,
|
||||
" ".join(quote(x) for x in value))
|
||||
return
|
||||
|
||||
conf.xcheck_prog('HOST_%s' % name, tool, cross=True)
|
||||
|
||||
if conf.env[wafname]:
|
||||
return
|
||||
|
||||
value = None
|
||||
if host:
|
||||
value = '%s-%s' % (host[0], tool)
|
||||
|
||||
if value:
|
||||
conf.env[wafname] = value
|
||||
conf.msg('Will use cross-compilation %s' % wafname, value)
|
||||
|
||||
@Configure.conf
|
||||
def xcheck_host_envar(conf, name, wafname=None):
|
||||
wafname = wafname or name
|
||||
|
||||
host = conf.env.CHOST
|
||||
specific = None
|
||||
if host:
|
||||
specific = os.environ.get('%s-%s' % (host[0], name), None)
|
||||
|
||||
if specific:
|
||||
value = Utils.to_list(specific)
|
||||
conf.env[wafname] += value
|
||||
conf.msg('Will use cross-compilation %s' % name,
|
||||
" ".join(quote(x) for x in value))
|
||||
return
|
||||
|
||||
conf.xcheck_envar('HOST_%s' % name, wafname, cross=True)
|
||||
|
||||
|
||||
@Configure.conf
|
||||
def xcheck_host(conf):
|
||||
conf.xcheck_envar('CHOST', cross=True)
|
||||
conf.xcheck_host_prog('CC', 'gcc')
|
||||
conf.xcheck_host_prog('CXX', 'g++')
|
||||
conf.xcheck_host_prog('LINK_CC', 'gcc')
|
||||
conf.xcheck_host_prog('LINK_CXX', 'g++')
|
||||
conf.xcheck_host_prog('AR', 'ar')
|
||||
conf.xcheck_host_prog('AS', 'as')
|
||||
conf.xcheck_host_prog('LD', 'ld')
|
||||
conf.xcheck_host_envar('CFLAGS')
|
||||
conf.xcheck_host_envar('CXXFLAGS')
|
||||
conf.xcheck_host_envar('LINKFLAGS', 'LDFLAGS')
|
||||
conf.xcheck_host_envar('LIB')
|
||||
conf.xcheck_host_envar('PKG_CONFIG_PATH')
|
||||
# TODO find a better solution than this ugliness
|
||||
if conf.env.PKG_CONFIG_PATH:
|
||||
conf.find_program('pkg-config', var='PKGCONFIG')
|
||||
conf.env.PKGCONFIG = [
|
||||
'env', 'PKG_CONFIG_PATH=%s' % (conf.env.PKG_CONFIG_PATH[0])
|
||||
] + conf.env.PKGCONFIG
|
Loading…
Reference in New Issue