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

Unified Diff: dart/tools/build.py

Issue 119673004: Version 1.1.0-dev.5.2 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 11 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
« no previous file with comments | « dart/tools/android_link.py ('k') | dart/tools/dom/scripts/systemnative.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/tools/build.py
===================================================================
--- dart/tools/build.py (revision 31530)
+++ dart/tools/build.py (working copy)
@@ -30,8 +30,9 @@
$ chmod u+x install-build-deps.sh
$ ./install-build-deps.sh --arm --no-chromeos-fonts
"""
-DEFAULT_ARM_CROSS_COMPILER_PATH = '/usr'
+DEFAULT_ARM_CROSS_COMPILER_PATH = '/usr/bin'
+
def BuildOptions():
result = optparse.OptionParser()
result.add_option("-m", "--mode",
@@ -49,6 +50,9 @@
help='Target OSs (comma-separated).',
metavar='[all,host,android]',
default='host')
+ result.add_option("-t", "--toolchain",
+ help='Cross-compiler toolchain path',
+ default=None)
result.add_option("-j",
help='The number of parallel jobs to run.',
metavar=HOST_CPUS,
@@ -101,14 +105,14 @@
print ("Cross-compilation to %s is not supported on host os %s."
% (os, HOST_OS))
return False
- if not arch in ['ia32']:
+ if not arch in ['ia32', 'arm']:
print ("Cross-compilation to %s is not supported for architecture %s."
% (os, arch))
return False
# We have not yet tweaked the v8 dart build to work with the Android
# NDK/SDK, so don't try to build it.
if args == []:
- print "For android builds you must specify a target, such as 'samples'."
+ print "For android builds you must specify a target, such as 'runtime'."
return False
if 'v8' in args:
print "The v8 target is not supported for android builds."
@@ -116,19 +120,42 @@
return True
-def SetTools(arch, toolchainprefix):
+def SetTools(arch, target_os, toolchainprefix):
toolsOverride = None
+
+ # For Android, by default use the toolchain from third_party/android_tools.
+ if target_os == 'android' and toolchainprefix == None:
+ android_toolchain = GetAndroidToolchainDir(HOST_OS, arch)
+ if arch == 'arm':
+ toolchainprefix = os.path.join(
+ android_toolchain, 'arm-linux-androideabi')
+ if arch == 'ia32':
+ toolchainprefix = os.path.join(
+ android_toolchain, 'i686-linux-android')
+
+ # For ARM Linux, by default use the Linux distribution's cross-compiler.
if arch == 'arm' and toolchainprefix == None:
- # Here, we specify the hf compiler. If this changes, we must also remove
+ # We specify the hf compiler. If this changes, we must also remove
# the ARM_FLOAT_ABI_HARD define in configurations_make.gypi.
toolchainprefix = (DEFAULT_ARM_CROSS_COMPILER_PATH +
- "/bin/arm-linux-gnueabihf")
+ "/arm-linux-gnueabihf")
+
+ # TODO(zra): Find a default MIPS Linux cross-compiler?
+
+ # Override the Android toolchain's linker to handle some complexity in the
+ # linker arguments that gyp has trouble with.
+ linker = ""
+ if target_os == 'android':
+ linker = os.path.join(DART_ROOT, 'tools', 'android_link.py')
+ elif toolchainprefix:
+ linker = toolchainprefix + "-g++"
+
if toolchainprefix:
toolsOverride = {
"CC.target" : toolchainprefix + "-gcc",
"CXX.target" : toolchainprefix + "-g++",
"AR.target" : toolchainprefix + "-ar",
- "LINK.target": toolchainprefix + "-g++",
+ "LINK.target": linker,
"NM.target" : toolchainprefix + "-nm",
}
return toolsOverride
@@ -140,101 +167,40 @@
% (docstring, path))
-def SetCrossCompilationEnvironment(host_os, target_os, target_arch, old_path):
+def GetAndroidToolchainDir(host_os, target_arch):
global THIRD_PARTY_ROOT
if host_os not in ['linux']:
raise Exception('Unsupported host os %s' % host_os)
- if target_os not in ['android']:
- raise Exception('Unsupported target os %s' % target_os)
- if target_arch not in ['ia32']:
+ if target_arch not in ['ia32', 'arm']:
raise Exception('Unsupported target architecture %s' % target_arch)
+ # Set up path to the Android NDK.
CheckDirExists(THIRD_PARTY_ROOT, 'third party tools');
android_tools = os.path.join(THIRD_PARTY_ROOT, 'android_tools')
CheckDirExists(android_tools, 'Android tools')
android_ndk_root = os.path.join(android_tools, 'ndk')
CheckDirExists(android_ndk_root, 'Android NDK')
- android_sdk_root = os.path.join(android_tools, 'sdk')
- CheckDirExists(android_sdk_root, 'Android SDK')
- os.environ['ANDROID_NDK_ROOT'] = android_ndk_root
- os.environ['ANDROID_SDK_ROOT'] = android_sdk_root
-
- toolchain_arch = 'x86-4.4.3'
- toolchain_dir = 'linux-x86'
+ # Set up the directory of the Android NDK cross-compiler toolchain.
+ toolchain_arch = 'arm-linux-androideabi-4.6'
+ if target_arch == 'ia32':
+ toolchain_arch = 'x86-4.6'
+ toolchain_dir = 'linux-x86_64'
android_toolchain = os.path.join(android_ndk_root,
'toolchains', toolchain_arch,
'prebuilt', toolchain_dir, 'bin')
CheckDirExists(android_toolchain, 'Android toolchain')
- os.environ['ANDROID_TOOLCHAIN'] = android_toolchain
+ return android_toolchain
- android_sdk_version = 15
- android_sdk_tools = os.path.join(android_sdk_root, 'tools')
- CheckDirExists(android_sdk_tools, 'Android SDK tools')
-
- android_sdk_platform_tools = os.path.join(android_sdk_root, 'platform-tools')
- CheckDirExists(android_sdk_platform_tools, 'Android SDK platform tools')
-
- pathList = [old_path,
- android_ndk_root,
- android_sdk_tools,
- android_sdk_platform_tools,
- # for Ninja - maybe don't need?
- android_toolchain
- ]
- os.environ['PATH'] = ':'.join(pathList)
-
- gypDefinesList = [
- 'target_arch=ia32',
- 'OS=%s' % target_os,
- 'android_build_type=0',
- 'host_os=%s' % host_os,
- 'linux_fpic=1',
- 'release_optimize=s',
- 'linux_use_tcmalloc=0',
- 'android_sdk=%s', os.path.join(android_sdk_root, 'platforms',
- 'android-%d' % android_sdk_version),
- 'android_sdk_tools=%s' % android_sdk_platform_tools
- ]
-
- os.environ['GYP_DEFINES'] = ' '.join(gypDefinesList)
-
-
def Execute(args):
process = subprocess.Popen(args)
process.wait()
if process.returncode != 0:
- raise Exception(args[0] + " failed")
+ raise Exception(args[0] + " failed")
-def GClientRunHooks():
- Execute(['gclient', 'runhooks'])
-
-
-def RunhooksIfNeeded(host_os, mode, arch, target_os):
- if host_os != 'linux':
- return
- build_root = utils.GetBuildRoot(host_os)
- build_cookie_path = os.path.join(build_root, 'lastHooksTargetOS.txt')
-
- old_target_os = None
- try:
- with open(build_cookie_path) as f:
- old_target_os = f.read(1024)
- except IOError as e:
- pass
- if target_os != old_target_os:
- try:
- os.mkdir(build_root)
- except OSError as e:
- pass
- with open(build_cookie_path, 'w') as f:
- f.write(target_os)
- GClientRunHooks()
-
-
def CurrentDirectoryBaseName():
"""Returns the name of the current directory"""
return os.path.relpath(os.curdir, start=os.pardir)
@@ -353,15 +319,13 @@
targets = args
filter_xcodebuild_output = False
- # Remember path
- old_path = os.environ['PATH']
# Build all targets for each requested configuration.
for target in targets:
for target_os in options.os:
for mode in options.mode:
for arch in options.arch:
os.environ['DART_BUILD_MODE'] = mode
- build_config = utils.GetBuildConf(mode, arch)
+ build_config = utils.GetBuildConf(mode, arch, target_os)
if HOST_OS == 'macos':
filter_xcodebuild_output = True
project_file = 'dart.xcodeproj'
@@ -412,22 +376,12 @@
args += [target]
- if target_os != HOST_OS:
- SetCrossCompilationEnvironment(
- HOST_OS, target_os, arch, old_path)
-
- RunhooksIfNeeded(HOST_OS, mode, arch, target_os)
-
- toolchainprefix = None
- if target_os == 'android':
- toolchainprefix = ('%s/i686-linux-android'
- % os.environ['ANDROID_TOOLCHAIN'])
- toolsOverride = SetTools(arch, toolchainprefix)
+ toolchainprefix = options.toolchain
+ toolsOverride = SetTools(arch, target_os, toolchainprefix)
if toolsOverride:
- printToolOverrides = target_os != 'android'
for k, v in toolsOverride.iteritems():
args.append( k + "=" + v)
- if printToolOverrides:
+ if options.verbose:
print k + " = " + v
if not os.path.isfile(toolsOverride['CC.target']):
if arch == 'arm':
« no previous file with comments | « dart/tools/android_link.py ('k') | dart/tools/dom/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698