From b7c9f55e51aa11e9d897d9904a10e653a11d60fe Mon Sep 17 00:00:00 2001 From: Jacob Dufault Date: Thu, 16 Mar 2017 19:55:59 -0700 Subject: [PATCH] easy building on linux/mac --- wscript | 78 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 11 deletions(-) diff --git a/wscript b/wscript index bb87ee01..ff9cb462 100644 --- a/wscript +++ b/wscript @@ -1,7 +1,11 @@ #! /usr/bin/env python # encoding: utf-8 -import urllib2 +from urllib2 import urlopen # Python 2 +# from urllib.request import urlopen # Python 3 +import os.path +from subprocess import call +import sys VERSION='0.0.1' APPNAME='indexer' @@ -9,6 +13,38 @@ APPNAME='indexer' top = '.' out = 'build' + +# Example URLs +# http://releases.llvm.org/4.0.0/clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz +# http://releases.llvm.org/4.0.0/clang+llvm-4.0.0-x86_64-apple-darwin.tar.xz +# http://releases.llvm.org/4.0.0/LLVM-4.0.0-win64.exe +# TODO: windows support (it's an exe!) + +global CLANG_PLATFORM_NAME +global CLANG_TARBALL_PLATFORM_NAME + +if sys.platform == 'linux' or sys.platform == 'linux2': + CLANG_PLATFORM_NAME = 'x86_64-linux-gnu-ubuntu-14.04' + CLANG_TARBALL_PLATFORM_NAME = 'clang+llvm' +elif sys.platform == 'darwin': + CLANG_PLATFORM_NAME = 'x86_64-apple-darwin' + CLANG_TARBALL_PLATFORM_NAME = 'clang+llvm' +else: + sys.stderr.write('ERROR: Unknown platform {0}\n'.format(sys.platform)) + sys.exit(1) + +# Version of clang to download and use. +CLANG_VERSION = '4.0.0' +# Tarball name on clang servers that should be used. +CLANG_TARBALL_NAME = '{0}-{1}-{2}'.format(CLANG_TARBALL_PLATFORM_NAME, CLANG_VERSION, CLANG_PLATFORM_NAME) +# Directory clang has been extracted to. +CLANG_DIRECTORY = '{0}/{1}'.format(out, CLANG_TARBALL_NAME) +# URL of the tarball to download. +CLANG_TARBALL_URL = 'http://releases.llvm.org/{0}/{1}.tar.xz'.format(CLANG_VERSION, CLANG_TARBALL_NAME) +# Path to locally tarball. +CLANG_TARBALL_LOCAL_PATH = '{0}.tar.xz'.format(CLANG_DIRECTORY) + + from waflib.Tools.compiler_cxx import cxx_compiler cxx_compiler['linux'] = ['clang++', 'g++'] @@ -19,24 +55,44 @@ def configure(conf): conf.load('compiler_cxx') conf.check(header_name='stdio.h', features='cxx cxxprogram', mandatory=True) -# https://github.com/Andersbakken/rtags/blob/master/scripts/getclang.sh -def download_clang(conf): - url = 'http://releases.llvm.org/3.9.0/clang+llvm-3.9.0-x86_64-apple-darwin.tar.xz' - response = urllib2.urlopen(url) - html = response.read() - pass + # Download and save the compressed tarball as |compressed_file_name|. + if not os.path.isfile(CLANG_TARBALL_LOCAL_PATH): + print('Downloading clang tarball') + print(' destination: {0}'.format(CLANG_TARBALL_LOCAL_PATH)) + print(' source: {0}'.format(CLANG_TARBALL_URL)) + # TODO: verify checksum + response = urlopen(CLANG_TARBALL_URL) + with open(CLANG_TARBALL_LOCAL_PATH, 'wb') as f: + f.write(response.read()) + else: + print('Found clang tarball at {0}'.format(CLANG_TARBALL_LOCAL_PATH)) + + # Extract the tarball. + if not os.path.isdir(CLANG_DIRECTORY): + print('Extracting clang') + # TODO: make portable. + call(['tar', 'xf', CLANG_TARBALL_LOCAL_PATH, '-C', out]) + else: + print('Found extracted clang at {0}'.format(CLANG_DIRECTORY)) def build(bld): + # todo: configure vars + CLANG_INCLUDE_DIR = '{0}/include'.format(CLANG_DIRECTORY) + CLANG_LIB_DIR = '{0}/lib'.format(CLANG_DIRECTORY) + CLANG_INCLUDE_DIR = os.path.abspath(CLANG_INCLUDE_DIR) + CLANG_LIB_DIR = os.path.abspath(CLANG_LIB_DIR) + print('CLANG_INCLUDE_DIR: {0}'.format(CLANG_INCLUDE_DIR)) + print('CLANG_LIB_DIR: {0}'.format(CLANG_LIB_DIR)) + cc_files = bld.path.ant_glob(['**/*.cpp', '**/*.cc'], excl=['*tests/*', 'third_party/*']) bld.program( source=cc_files, cxxflags=['-std=c++11'], - includes=['third_party/rapidjson/include', - '/usr/local/google/home/jdufault/super-clang-index/clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04/include'], + includes=['third_party/rapidjson/include', CLANG_INCLUDE_DIR], lib=['clang', 'rt', 'pthread'], - libpath=['/usr/local/google/home/jdufault/super-clang-index/clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04/lib'], - rpath=['/usr/local/google/home/jdufault/super-clang-index/clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04/lib'], + libpath=[CLANG_LIB_DIR], + rpath=[CLANG_LIB_DIR], target='app') #bld.shlib(source='a.cpp', target='mylib', vnum='9.8.7')