Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: pylib/gyp/generator/ninja.py

Issue 10833021: Honor $CC/$CC_host and friends in make generator. (Closed) Base URL: http://git.chromium.org/external/gyp.git@master
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pylib/gyp/generator/ninja.py
diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py
index 3c41dacf5027984e3f81f07446d516c290920dd4..5516a7d701c87dd26ea5f08eb27df1d1f32ec08b 100644
--- a/pylib/gyp/generator/ninja.py
+++ b/pylib/gyp/generator/ninja.py
@@ -3,18 +3,19 @@
# found in the LICENSE file.
import copy
+import hashlib
+import os.path
+import re
+import subprocess
+import sys
import gyp
import gyp.common
import gyp.msvs_emulation
import gyp.MSVSVersion
import gyp.system_test
import gyp.xcode_emulation
-import hashlib
-import os.path
-import re
-import subprocess
-import sys
+from gyp.common import GetEnvironFallback
import gyp.ninja_syntax as ninja_syntax
generator_default_variables = {
@@ -1201,7 +1202,6 @@ def CalculateVariables(default_variables, params):
"""Calculate additional variables for use in the build (called by gyp)."""
global generator_additional_non_configuration_keys
global generator_additional_path_sections
- cc_target = os.environ.get('CC.target', os.environ.get('CC', 'cc'))
flavor = gyp.common.GetFlavor(params)
if flavor == 'mac':
default_variables.setdefault('OS', 'mac')
@@ -1272,13 +1272,6 @@ def OpenOutput(path, mode='w'):
return open(path, mode)
-def GetEnvironFallback(var_list, default):
- for var in var_list:
- if var in os.environ:
- return os.environ[var]
- return default
-
-
def GenerateOutputForConfig(target_list, target_dicts, data, params,
config_name):
options = params['options']
@@ -1307,11 +1300,16 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# 'CC_host'/'CXX_host' enviroment variable, cc_host/cxx_host should be set
# to cc/cxx.
if flavor == 'win':
- cc = cxx = 'cl.exe'
+ cc = 'cl.exe'
+ cxx = 'cl.exe'
+ ld = 'link.exe'
gyp.msvs_emulation.GenerateEnvironmentFiles(
toplevel_build, generator_flags, OpenOutput)
else:
- cc, cxx = 'gcc', 'g++'
+ cc = 'gcc'
+ cxx = 'g++'
+ ld = '$cxx'
+
cc_host = None
cxx_host = None
cc_host_global_setting = None
@@ -1321,12 +1319,16 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
make_global_settings = data[build_file].get('make_global_settings', [])
build_to_root = InvertRelativePath(build_dir)
for key, value in make_global_settings:
- if key == 'CC': cc = os.path.join(build_to_root, value)
- if key == 'CXX': cxx = os.path.join(build_to_root, value)
- if key == 'CC.host': cc_host = os.path.join(build_to_root, value)
- if key == 'CXX.host': cxx_host = os.path.join(build_to_root, value)
- if key == 'CC.host': cc_host_global_setting = value
- if key == 'CXX.host': cxx_host_global_setting = value
+ if key == 'CC':
+ cc = os.path.join(build_to_root, value)
+ if key == 'CXX':
+ cxx = os.path.join(build_to_root, value)
+ if key == 'CC.host':
+ cc_host = os.path.join(build_to_root, value)
+ cc_host_global_setting = value
+ if key == 'CXX.host':
+ cxx_host = os.path.join(build_to_root, value)
+ cxx_host_global_setting = value
flock = 'flock'
if flavor == 'mac':
@@ -1335,12 +1337,13 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
master_ninja.variable('cc', cc)
cxx = GetEnvironFallback(['CXX_target', 'CXX'], cxx)
master_ninja.variable('cxx', cxx)
+ ld = GetEnvironFallback(['LD_target', 'LD'], ld)
if not cc_host: cc_host = cc
if not cxx_host: cxx_host = cxx
if flavor == 'win':
- master_ninja.variable('ld', 'link.exe')
+ master_ninja.variable('ld', ld)
master_ninja.variable('idl', 'midl.exe')
master_ninja.variable('ar', 'lib.exe')
master_ninja.variable('rc', 'rc.exe')
@@ -1348,7 +1351,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
master_ninja.variable('mt', 'mt.exe')
master_ninja.variable('use_dep_database', '1')
else:
- master_ninja.variable('ld', flock + ' linker.lock $cxx')
+ master_ninja.variable('ld', flock + ' linker.lock ' + ld)
master_ninja.variable('ar', GetEnvironFallback(['AR_target', 'AR'], 'ar'))
master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], 'ar'))
@@ -1356,16 +1359,17 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
cxx_host = GetEnvironFallback(['CXX_host'], cxx_host)
# The environment variable could be used in 'make_global_settings', like
# ['CC.host', '$(CC)'] or ['CXX.host', '$(CXX)'], transform them here.
- if cc_host.find('$(CC)') != -1 and cc_host_global_setting:
+ if '$(CC)' in cc_host and cc_host_global_setting:
cc_host = cc_host_global_setting.replace('$(CC)', cc)
- if cxx_host.find('$(CXX)') != -1 and cxx_host_global_setting:
+ if '$(CXX)' in cxx_host and cxx_host_global_setting:
cxx_host = cxx_host_global_setting.replace('$(CXX)', cxx)
master_ninja.variable('cc_host', cc_host)
master_ninja.variable('cxx_host', cxx_host)
if flavor == 'win':
master_ninja.variable('ld_host', os.environ.get('LD_host', '$ld'))
else:
- master_ninja.variable('ld_host', flock + ' linker.lock $cxx_host')
+ ld_host = os.environ.get('LD_host', '$cxx_host')
+ master_ninja.variable('ld_host', flock + ' linker.lock ' + ld_host)
if flavor == 'mac':
master_ninja.variable('mac_tool', os.path.join('.', 'gyp-mac-tool'))
@@ -1516,14 +1520,19 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
restat=True)
# Note that ldflags goes at the end so that it has the option of
# overriding default settings earlier in the command line.
+ command = ('%s gyp-win-tool link-wrapper $arch '
+ '$ld /nologo /OUT:$out /PDB:$out.pdb @$out.rsp' %
+ sys.executable)
+ if ('LD_target' not in os.environ
+ and 'LD' not in os.environ
+ and 'LD_host' not in os.environ):
+ command += (' && %s gyp-win-tool manifest-wrapper $arch '
+ '$mt -nologo -manifest $manifests -out:$out.manifest' %
Nico 2012/08/13 23:14:07 nit: Windows doesn't do cross-compiling, this isn'
Sam Clegg 2012/08/14 21:10:32 Done
+ sys.executable)
master_ninja.rule(
'link',
description='LINK $out',
- command=('%s gyp-win-tool link-wrapper $arch '
- '$ld /nologo /OUT:$out /PDB:$out.pdb @$out.rsp && '
- '%s gyp-win-tool manifest-wrapper $arch '
- '$mt -nologo -manifest $manifests -out:$out.manifest' %
- (sys.executable, sys.executable)),
+ command=command,
rspfile='$out.rsp',
rspfile_content='$in_newline $libs $ldflags')
else:

Powered by Google App Engine
This is Rietveld 408576698