SConstruct 4.32 KB
import os
import platform

opts = Options('DefaultOptions.py')
opts.Add(BoolOption('DEBUG', 'Set to 1 to build with debug symbols', 0))
opts.Add(BoolOption('GUI', 'Set to 1 to build with graphical interface support', 1))

debug = ARGUMENTS.get('DEBUG', 0)
gui = ARGUMENTS.get('GUI', 1)

env = Environment(options = opts, ENV = os.environ)

if debug:
  env.Append(CPPDEFINES = {'DEBUG': None})

if gui:
  env.Append(CPPDEFINES = {'_WITH_GRAPHISM_': None})

if env['PLATFORM'] == 'posix':
  host = 'linux'
  env.Append(CPPDEFINES = {'_LINUX_': None})
  env.Append(CCFLAGS = ' -O2 -c -Wall -Wstrict-prototypes')
  sqliteFlags = ' -O2 -c'
  vm_output_name = 'anbexec_with_symbols'
elif env['PLATFORM'] == 'win32':
  host = 'win32'
  sqliteFlags = ' -O2 -c'
  vm_output_name = 'anbexec'



env['DEVDIR'] = os.path.join('..')
env['BASEDIR'] = os.path.join(env['DEVDIR'], '..')
env['TRDDIR'] = os.path.join(env['BASEDIR'], 'third_dev')
env['BINDIR'] = os.path.join(env['ENV']['HOME'], 'bin')

env.Append(CPPPATH = [os.path.join(env['DEVDIR'], 'include'), 
                      '.',
                      'src',
                      os.path.join(env['TRDDIR'], 'sqlite3'),
                      ])
if env['PLATFORM'] == 'win32':
  env.Append(CPPPATH = [os.path.join(env['TRDDIR'], 'openssl', 'include')])
  env.Append(LIBPATH = [os.path.join(env['TRDDIR'], 'openssl', 'lib', 'win32')])


env.BuildDir('build', 'src', duplicate=0)
env.BuildDir(os.path.join('build', 'share'), os.path.join(env['DEVDIR'], 'share'), duplicate=0)
env.BuildDir(os.path.join('build', 'cipher'), os.path.join(env['DEVDIR'], 'cipher'), duplicate=0)
env.BuildDir(os.path.join('build', 'graph'), os.path.join('src', host), duplicate=0)
env.BuildDir(os.path.join('build', 'openssl'), os.path.join(env['TRDDIR'], 'openssl'), duplicate=0)
env.BuildDir(os.path.join('build', 'sqlite'), os.path.join(env['TRDDIR'], 'sqlite3'), duplicate=0)

main_src = [os.path.join('build', x) for x in Split("""
  vmalloc.cpp vm.cpp vmtools.cpp graphics.cpp sslstuff.cpp time.c linuxstuff.cpp
  AnubisAllocator.cpp AnubisFileLocker.cpp AnubisProcess.cpp 
  syscall.cpp serialize.cpp
""")]

share_src = [os.path.join('build', 'share', x) for x in Split("""
  FileIO.cpp
  IniFile.cpp
  String.cpp
  DebugLog.cpp
  MultiPath.cpp
  StringList.cpp
  List.cpp
""")]

special_src = [os.path.join('build', x) for x in Split("""
  anbexec.cpp
""")]

cipher_src = [os.path.join('build', 'cipher', x) for x in Split("""
  blowfish.c sha1.c
""")]

graph_src = [os.path.join('build', 'graph', x) for x in Split("""
  host_graph.cpp
""")]

sqlite3_src = [os.path.join('build', 'sqlite', x) for x in Split("""
  alter.c analyze.c attach.c auth.c btree.c build.c callback.c complete.c
  date.c delete.c expr.c
  fts1.c fts1_hash.c fts1_porter.c fts1_tokenizer1.c
  func.c hash.c insert.c legacy.c loadext.c main.c opcodes.c
  os.c os_os2.c os_unix.c os_win.c pager.c parse.c pragma.c prepare.c
  printf.c random.c select.c table.c tokenize.c trigger.c update.c
  utf.c util.c vacuum.c vdbe.c vdbeapi.c vdbeaux.c vdbefifo.c vdbemem.c
  vtab.c where.c
""")]

sqliteDefs = env['CPPDEFINES'].copy()
sqliteDefs['NO_TCL'] = None

#
# 
#
main_obj = env.Object(main_src)
share_obj = env.Object(share_src)
special_obj = env.Object(special_src)
cipher_obj = env.Object(cipher_src)
graph_obj = env.Object(graph_src)
sqlite3_obj = env.Object(sqlite3_src, CCFLAGS = sqliteFlags, CPPDEFINES = sqliteDefs)

env.Append(LIBS=['ssl', 'crypto', 'jpeg'])
if env['PLATFORM'] == 'posix':
  env.Append(LIBPATH = [os.path.join('/', 'usr', 'X11R6', 'lib')])
  env.Append(LIBS=['X11'])

anbexec = env.Program(vm_output_name, main_obj + share_obj + special_obj + cipher_obj + graph_obj + sqlite3_obj)

if env['PLATFORM'] == 'posix':
  anbexec = env.Command('anbexec', vm_output_name, 'strip -o $TARGET $SOURCE')

if env['PLATFORM'] == 'posix':
  installPath = os.path.join(env['BASEDIR'], 'anubis_distrib', 'linux_install')
elif env['PLATFORM'] == 'win32':
  installPath = os.path.join(env['BASEDIR'], 'anubis_distrib', 'win32_install')

env.Install(installPath, anbexec)
env.Install(env['BINDIR'], anbexec)
env.Alias('install', [installPath, env['BINDIR']])

env.Alias('all', [anbexec, 'install'])

Default(anbexec)




Help("""
Type: 'scons vm' to build the production program,
      'scons debug' to build the debug version.
"""
  + opts.GenerateHelpText(env))

print 'BUILD_TARGETS is', map(str, BUILD_TARGETS)