diff options
author | Todd Fiala <todd.fiala@gmail.com> | 2016-01-28 07:36:44 +0000 |
---|---|---|
committer | Todd Fiala <todd.fiala@gmail.com> | 2016-01-28 07:36:44 +0000 |
commit | 2c0802c559f1e1e24ef2044a2ff166284cd1255e (patch) | |
tree | d085809712254cb9d50bcfb6ed7f4127c0c9aeb0 /lldb/scripts/Xcode/lldbbuild.py | |
parent | bba248c36833b8a3ec8d245b14f72fa9b8a9c405 (diff) | |
download | bcm5719-llvm-2c0802c559f1e1e24ef2044a2ff166284cd1255e.tar.gz bcm5719-llvm-2c0802c559f1e1e24ef2044a2ff166284cd1255e.zip |
modify Xcode build to use cmake/ninja for internal llvm/clang
This change restores the Xcode build to working after Makefile support
was stripped from LLVM and clang recently.
With this change, the Xcode build now requires cmake (2.8.12.2+).
The cmake must either be on the path that Xcode sees, or it must
exist in one of the following locations:
* /usr/local/bin/cmake
* /opt/local/bin/cmake
* $HOME/bin/cmake
If the ninja build tool is present on the path, it will be used.
If not, ninja will be cloned (via git), bootstrap-built, and
used for the llvm/clang build.
LLDB now requires a minimum deployment target of OS X 10.9. Prior
to this, it was 10.8. The llvm/clang cmake build will not run
with Xcode 7.2 or Xcode 7.3 beta's compiler with the minimum
deployment target set to anything lower than 10.9. This is
related to #include <atomic>.
When llvm or clang source code does not exist in the lldb tree,
it will be cloned via git using http://llvm.org/git/{project}.git.
Previously it used SVN. If this causes any heartache, we can
make this smarter, autodetect an embedded svn and use svn instead.
(And/or use SVN if a git command is not available).
This change also fixes an lldb-mi linkage failure (needed
libncurses) as exposed by one of the LLVM libs.
llvm-svn: 259027
Diffstat (limited to 'lldb/scripts/Xcode/lldbbuild.py')
-rw-r--r-- | lldb/scripts/Xcode/lldbbuild.py | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/lldb/scripts/Xcode/lldbbuild.py b/lldb/scripts/Xcode/lldbbuild.py new file mode 100644 index 00000000000..cf79a3ea7d4 --- /dev/null +++ b/lldb/scripts/Xcode/lldbbuild.py @@ -0,0 +1,135 @@ +import os +import subprocess + +#### UTILITIES #### + +def enum (*sequential, **named): + enums = dict(zip(sequential, range(len(sequential))), **named) + return type('Enum', (), enums) + +#### SETTINGS #### + +#### INTERFACE TO THE XCODEPROJ #### + +def lldb_source_path (): + return os.environ.get('SRCROOT') + +def expected_llvm_build_path (): + if build_type() == BuildType.Xcode: + return package_build_path() + else: + return os.path.join(os.environ.get('LLDB_PATH_TO_LLVM_BUILD'), package_build_dir_name("llvm")) + +def archives_txt (): + return os.path.join(expected_package_build_path(), "archives.txt") + +def expected_package_build_path (): + return os.path.abspath(os.path.join(expected_llvm_build_path(), "..")) + +def architecture (): + platform_name = os.environ.get('RC_PLATFORM_NAME') + if not platform_name: + platform_name = os.environ.get('PLATFORM_NAME') + platform_arch = os.environ.get('ARCHS').split()[-1] + return platform_name + "-" + platform_arch + +def lldb_configuration (): + return os.environ.get('CONFIGURATION') + +def llvm_configuration (): + return os.environ.get('LLVM_CONFIGURATION') + +def llvm_build_dirtree (): + return os.environ.get('LLVM_BUILD_DIRTREE') + +# Edit the code below when adding build styles. + +BuildType = enum('Xcode') # (Debug,DebugClang,Release) + +def build_type (): + return BuildType.Xcode + +#### VCS UTILITIES #### + +VCS = enum('git', + 'svn') + +def run_in_directory(args, path): + return subprocess.check_output(args, cwd=path) + +class Git: + def __init__ (self, spec): + self.spec = spec + def status (self): + return run_in_directory(["git", "branch", "-v"], self.spec['root']) + def diff (self): + return run_in_directory(["git", "diff"], self.spec['root']) + def check_out (self): + run_in_directory(["git", "clone", self.spec['url'], self.spec['root']], lldb_source_path()) + run_in_directory(["git", "fetch", "--all"], self.spec['root']) + run_in_directory(["git", "checkout", self.spec['ref']], self.spec['root']) + +class SVN: + def __init__ (self, spec): + self.spec = spec + def status (self): + return run_in_directory(["svn", "info"], self.spec['root']) + def diff (self): + return run_in_directory(["svn", "diff"], self.spec['root']) + # TODO implement check_out + +def vcs (spec): + if spec['vcs'] == VCS.git: + return Git(spec) + elif spec['vcs'] == VCS.svn: + return SVN(spec) + else: + return None + +#### SOURCE PATHS #### + +def llvm_source_path (): + if build_type() == BuildType.Xcode: + return os.path.join(lldb_source_path(), "llvm") + +def clang_source_path (): + if build_type() == BuildType.Xcode: + return os.path.join(llvm_source_path(), "tools", "clang") + +def ninja_source_path (): + if build_type() == BuildType.Xcode: + return os.path.join(lldb_source_path(), "ninja") + +#### BUILD PATHS #### + +def packages (): + return ["llvm"] + +def package_build_dir_name (package): + return package + "-" + architecture() + +def expected_package_build_path_for (package): + if build_type() == BuildType.Xcode: + if package != "llvm": + raise("On Xcode build, we only support the llvm package: requested {}".format(package)) + return package_build_path() + return os.path.join(expected_package_build_path(), package_build_dir_name(package)) + +def expected_package_build_paths (): + return [expected_package_build_path_for(package) for package in packages()] + +def library_path (build_path): + return build_path + "/lib" + +def library_paths (): + if build_type() == BuildType.Xcode: + package_build_paths = [package_build_path()] + else: + package_build_paths = expected_package_build_paths() + return [library_path(build_path) for build_path in package_build_paths] + +def package_build_path (): + return os.path.join( + llvm_build_dirtree(), + os.environ["LLVM_CONFIGURATION"], + os.environ["CURRENT_ARCH"]) |