2016-03-12 13:50:43 -05:00
|
|
|
#!/usr/bin/python
|
|
|
|
|
|
|
|
import os
|
2016-12-23 17:28:59 -05:00
|
|
|
import platform
|
2016-03-12 13:50:43 -05:00
|
|
|
import sys
|
|
|
|
|
|
|
|
options = Variables('options.cache', ARGUMENTS)
|
2018-01-16 20:30:25 -05:00
|
|
|
options.AddVariables(PathVariable('uv', 'Location of libuv', 'deps/%s/uv' % sys.platform))
|
2017-05-16 12:57:45 -04:00
|
|
|
options.AddVariables(PathVariable('v8', 'Location of v8', 'deps/%s/v8' % sys.platform))
|
|
|
|
options.AddVariables(PathVariable('lmdb', 'Location of liblmdb', 'deps/%s/lmdb' % sys.platform))
|
2016-03-12 13:50:43 -05:00
|
|
|
options.AddVariables(BoolVariable('package', 'Build a package', False))
|
|
|
|
|
|
|
|
VariantDir('build/src', 'src', duplicate=0)
|
|
|
|
VariantDir('build/deps', 'deps', duplicate=0)
|
|
|
|
kwargs = {}
|
|
|
|
if sys.platform == 'darwin':
|
|
|
|
kwargs['CXX'] = 'clang++'
|
|
|
|
|
|
|
|
env = Environment(options=options, tools=['default', 'packaging'], **kwargs)
|
|
|
|
options.Save('options.cache', env)
|
|
|
|
Help(options.GenerateHelpText(env))
|
|
|
|
|
|
|
|
v8 = env['v8']
|
|
|
|
uv = env['uv']
|
2017-05-16 12:57:45 -04:00
|
|
|
liblmdb = env['lmdb']
|
2016-03-12 13:50:43 -05:00
|
|
|
env.Append(CPPPATH=[
|
|
|
|
os.path.join(v8, 'include'),
|
|
|
|
v8,
|
|
|
|
os.path.join(uv, 'include'),
|
2017-05-16 12:57:45 -04:00
|
|
|
os.path.join(liblmdb, 'libraries', 'liblmdb'),
|
2016-03-12 13:50:43 -05:00
|
|
|
])
|
2016-12-20 09:22:47 -05:00
|
|
|
|
|
|
|
objectSuffix = '.obj' if sys.platform == 'win32' else '.o'
|
2016-12-23 17:28:59 -05:00
|
|
|
raspi = platform.machine() == 'armv7l'
|
|
|
|
if raspi:
|
2018-01-17 22:12:25 -05:00
|
|
|
env.Append(LIBS = [
|
2016-12-23 17:28:59 -05:00
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'src', 'libv8_libplatform.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'src', 'libv8_base.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'src', 'libv8_libbase.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'src', 'libv8_libsampler.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'src', 'libv8_nosnapshot.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'third_party', 'icu', 'libicui18n.a'),
|
|
|
|
os.path.join(v8, 'out', 'arm.release', 'obj.target', 'third_party', 'icu', 'libicuuc.a'),
|
2018-01-17 22:12:25 -05:00
|
|
|
])
|
2016-12-23 17:28:59 -05:00
|
|
|
else:
|
2018-01-20 20:23:37 -05:00
|
|
|
env.Append(LIBPATH = [
|
|
|
|
os.path.join(v8, 'out', 'obj'),
|
|
|
|
os.path.join(v8, 'out', 'obj', 'third_party', 'icu'),
|
|
|
|
])
|
|
|
|
if sys.platform == 'win32':
|
|
|
|
env.Append(LIBS = [
|
|
|
|
'v8_base_0',
|
|
|
|
'v8_base_1',
|
|
|
|
])
|
|
|
|
else:
|
|
|
|
env.Append(LIBS = [
|
|
|
|
'v8_base',
|
|
|
|
])
|
2018-01-17 22:12:25 -05:00
|
|
|
env.Append(LIBS = [
|
2018-01-20 20:23:37 -05:00
|
|
|
'v8_libplatform',
|
|
|
|
'v8_libbase',
|
|
|
|
'v8_libsampler',
|
|
|
|
'v8_snapshot',
|
|
|
|
'icui18n',
|
|
|
|
'icuuc',
|
2018-01-17 22:12:25 -05:00
|
|
|
])
|
2016-12-20 09:22:47 -05:00
|
|
|
|
2016-03-12 13:50:43 -05:00
|
|
|
if sys.platform == 'win32':
|
2016-12-18 19:21:51 -05:00
|
|
|
env.Append(LIBS=['libuv', 'advapi32', 'winmm', 'wsock32', 'ws2_32', 'psapi', 'iphlpapi', 'userenv', 'user32', 'dbghelp', 'shlwapi'])
|
|
|
|
env.Append(CXXFLAGS=['/EHsc', '/MTd', '/Zi', '/Gy'])
|
|
|
|
env.Append(CFLAGS=['/EHsc', '/MTd', '/Zi', '/Gy'])
|
2016-03-12 13:50:43 -05:00
|
|
|
env.Append(LIBPATH=[
|
|
|
|
os.path.join(uv, 'Release/lib'),
|
|
|
|
])
|
2016-12-18 19:21:51 -05:00
|
|
|
env.Append(LINKFLAGS=['/RELEASE', '/OPT:REF', '/OPT:ICF', '/NODEFAULTLIB:libcmt', '/LTCG'])
|
2016-03-12 13:50:43 -05:00
|
|
|
elif sys.platform == 'darwin':
|
2016-12-20 09:22:47 -05:00
|
|
|
env.Append(LIBS=['pthread', 'uv'])
|
2016-07-23 13:02:15 -04:00
|
|
|
env.Append(CXXFLAGS=['--std=c++11', '-g', '-Wall', '-stdlib=libc++'])
|
2016-03-12 13:50:43 -05:00
|
|
|
env.Append(CFLAGS=['-g', '-Wall'])
|
2016-07-23 13:02:15 -04:00
|
|
|
env.Append(LINKFLAGS=['-g', '-stdlib=libc++'])
|
2016-03-12 13:50:43 -05:00
|
|
|
env.Append(LIBPATH=[
|
|
|
|
os.path.join(uv, 'build/Release'),
|
|
|
|
])
|
|
|
|
else:
|
2017-11-18 17:45:00 -05:00
|
|
|
env.Append(LIBS=['uv', 'rt', 'dl', 'pthread'])
|
|
|
|
env.Append(CXXFLAGS=['--std=c++11', '-g', '-Wall'])
|
2016-03-12 13:50:43 -05:00
|
|
|
env.Append(CFLAGS=['-g', '-Wall'])
|
|
|
|
env.Append(LINKFLAGS=['-g'])
|
|
|
|
env.Append(LIBPATH=[
|
|
|
|
os.path.join(uv, 'out/Debug/obj.target'),
|
|
|
|
])
|
2016-09-19 09:19:23 -04:00
|
|
|
|
2016-12-23 17:28:59 -05:00
|
|
|
env.Command('icudtl.dat', os.path.join(v8, 'out/arm.release/icudtl.dat' if raspi else 'out/icudtl.dat'), Copy("$TARGET", "$SOURCE"))
|
2016-03-12 13:50:43 -05:00
|
|
|
|
|
|
|
ldapEnv = env.Clone()
|
|
|
|
if sys.platform == 'win32':
|
|
|
|
ldapEnv.Append(CPPPATH=['deps/win32'])
|
|
|
|
lmdb = ldapEnv.Library('build/lmdb', [
|
2017-05-16 12:57:45 -04:00
|
|
|
os.path.join(liblmdb, 'libraries', 'liblmdb', 'mdb.c'),
|
|
|
|
os.path.join(liblmdb, 'libraries', 'liblmdb', 'midl.c'),
|
2016-03-12 13:50:43 -05:00
|
|
|
])
|
|
|
|
env.Append(LIBS=[lmdb])
|
|
|
|
|
|
|
|
if sys.platform == 'linux2':
|
|
|
|
env.Append(LIBS=['crypto', 'ssl'])
|
2017-11-18 17:45:00 -05:00
|
|
|
env.Append(LINKFLAGS=['-std=c++0x'])
|
2016-03-12 13:50:43 -05:00
|
|
|
|
2019-10-06 18:19:08 -04:00
|
|
|
quickjsEnv = env.Clone()
|
|
|
|
quickjsEnv.Append(CPPDEFINES=[
|
|
|
|
'CONFIG_VERSION=\\"' + open('deps/quickjs/VERSION').read().strip() + '\\"',
|
|
|
|
'_GNU_SOURCE',
|
|
|
|
])
|
|
|
|
quickjs = quickjsEnv.Library('build/quickjs', [
|
|
|
|
'build/deps/quickjs/bjson.c',
|
|
|
|
'build/deps/quickjs/cutils.c',
|
|
|
|
'build/deps/quickjs/jscompress.c',
|
|
|
|
'build/deps/quickjs/libbf.c',
|
|
|
|
'build/deps/quickjs/libregexp.c',
|
|
|
|
'build/deps/quickjs/libunicode.c',
|
|
|
|
'build/deps/quickjs/quickjs-libc.c',
|
|
|
|
'build/deps/quickjs/quickjs.c',
|
|
|
|
'build/deps/quickjs/unicode_gen.c',
|
|
|
|
])
|
|
|
|
env.Append(LIBS=[quickjs])
|
|
|
|
env.Append(CPPPATH=['deps/quickjs'])
|
|
|
|
|
|
|
|
env.Program('qjst', ['build/src/quickjstest.c'], LIBS=['m', 'dl', quickjs])
|
|
|
|
|
2016-03-12 13:50:43 -05:00
|
|
|
source = [s for s in Glob('build/src/*.cpp') if not os.path.basename(str(s)).startswith("SecureSocket_")]
|
2019-10-06 18:19:08 -04:00
|
|
|
|
2016-03-12 13:50:43 -05:00
|
|
|
if sys.platform == 'darwin':
|
|
|
|
env.Append(FRAMEWORKS=['CoreFoundation', 'Security'])
|
|
|
|
elif sys.platform == 'win32':
|
|
|
|
env.Append(LIBS=['Crypt32'])
|
2018-01-17 22:12:25 -05:00
|
|
|
env.Program('tildefriends', source)
|
2016-03-12 13:50:43 -05:00
|
|
|
|
|
|
|
def listAllFiles(root):
|
|
|
|
for root, dirs, files in os.walk(root):
|
|
|
|
for f in files:
|
|
|
|
if not f.startswith('.'):
|
|
|
|
yield os.path.join(root, f)
|
|
|
|
hidden = [d for d in dirs if d.startswith('.')]
|
|
|
|
for d in hidden:
|
|
|
|
dirs.remove(d)
|
|
|
|
|
|
|
|
if env['package'] and sys.platform == 'win32':
|
|
|
|
files = [
|
|
|
|
'COPYING',
|
|
|
|
'LICENSE',
|
|
|
|
'SConstruct',
|
2016-03-12 13:55:55 -05:00
|
|
|
'tildefriends.exe',
|
2017-03-07 12:54:31 -05:00
|
|
|
'icudtl.dat',
|
2016-03-12 13:50:43 -05:00
|
|
|
]
|
|
|
|
files += listAllFiles('src')
|
|
|
|
files += listAllFiles('packages')
|
|
|
|
files += listAllFiles('core')
|
|
|
|
env.Package(
|
2016-03-12 14:00:07 -05:00
|
|
|
NAME='TildeFriends',
|
|
|
|
target='dist/TildeFriends-win32.zip',
|
2016-03-12 13:50:43 -05:00
|
|
|
PACKAGETYPE='zip',
|
2016-03-12 14:00:07 -05:00
|
|
|
PACKAGEROOT='TildeFriends-win32',
|
2016-03-12 13:50:43 -05:00
|
|
|
source=files
|
|
|
|
)
|