blob: 31269521f1edf7221140e2e7cf27cc2c37fac6ab [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Module for the target platform support."""
from importlib import import_module
import os
import cr
DEFAULT = cr.Config.From(
DEPOT_TOOLS=os.path.join('{GOOGLE_CODE}', 'depot_tools'),
CHROMIUM_OUT_DIR='{CR_OUT_BASE}',)
class Platform(cr.Plugin, cr.Plugin.Type):
"""Base class for implementing cr platforms.
A platform is the target operating system being compiled for (linux android).
"""
_platform_module = import_module('platform', None)
SELECTOR = 'CR_PLATFORM'
@classmethod
def AddArguments(cls, parser):
parser.add_argument(
'--platform', dest=cls.SELECTOR,
choices=cls.Choices(),
default=None,
help='Sets the target platform to use. Overrides ' + cls.SELECTOR
)
@classmethod
def System(cls):
return cls._platform_module.system()
def __init__(self):
super(Platform, self).__init__()
def Activate(self):
super(Platform, self).Activate()
if _PathFixup not in cr.context.fixup_hooks:
cr.context.fixup_hooks.append(_PathFixup)
@cr.Plugin.activemethod
def Prepare(self):
pass
@property
def paths(self):
return []
def _PathFixup(base, key, value):
"""A context fixup that does platform specific modifications to the PATH."""
if key == 'PATH':
paths = []
for entry in Platform.GetActivePlugin().paths:
entry = base.Substitute(entry)
if entry not in paths:
paths.append(entry)
for entry in value.split(os.path.pathsep):
if entry.endswith(os.path.sep + 'goma'):
pass
elif entry not in paths:
paths.append(entry)
value = os.path.pathsep.join(paths)
return value