annotate SConstruct @ 232:af531fc3f280

- Massive refactoring to make module tree stuff work. In theory we now support configuration files again. The graphics stuff is untested as yet.
author tomwalters
date Mon, 18 Oct 2010 04:42:28 +0000
parents 73c6d61440ad
children d21844facd3a
rev   line source
tomwalters@163 1 # Copyright 2006-2010, Willem van Engen, Thomas Walters
tomwalters@163 2 #
tomwalters@163 3 # AIM-C: A C++ implementation of the Auditory Image Model
tomwalters@163 4 # http://www.acousticscale.org/AIMC
tomwalters@163 5 #
tomwalters@163 6 # Licensed under the Apache License, Version 2.0 (the "License");
tomwalters@163 7 # you may not use this file except in compliance with the License.
tomwalters@163 8 # You may obtain a copy of the License at
tomwalters@163 9 #
tomwalters@163 10 # http://www.apache.org/licenses/LICENSE-2.0
tomwalters@163 11 #
tomwalters@163 12 # Unless required by applicable law or agreed to in writing, software
tomwalters@163 13 # distributed under the License is distributed on an "AS IS" BASIS,
tomwalters@163 14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
tomwalters@163 15 # See the License for the specific language governing permissions and
tomwalters@163 16 # limitations under the License.
tomwalters@163 17
tomwalters@163 18 ## @author Thomas Walters <tom@acousticscale.org>
tomwalters@163 19 # @author Willem van Engen <cnbh@willem.engen.nl>
tomwalters@163 20 # @date created 2010/02/02
tomwalters@163 21 # @version \$Id$
tomwalters@163 22
tomwalters@163 23 """@package SConstruct
tomwalters@163 24 SConstruct file for the aimc project
tomwalters@163 25
tomwalters@163 26 """
tomwalters@163 27
tomwalters@163 28 import os
tomwalters@163 29 import shutil
tomwalters@163 30
tomwalters@163 31 # Location of libsndfile on Windows
tomwalters@163 32 windows_libsndfile_location = "C:\\Program Files\\Mega-Nerd\\libsndfile\\"
tomwalters@163 33
tomwalters@163 34 # Sources common to every version
tomwalters@163 35 common_sources = ['Support/Common.cc',
tomwalters@163 36 'Support/FileList.cc',
tomwalters@163 37 'Support/SignalBank.cc',
tomwalters@163 38 'Support/Parameters.cc',
tomwalters@163 39 'Support/Module.cc',
tomwalters@163 40 'Support/ModuleFactory.cc',
tomwalters@232 41 'Support/ModuleTree.cc',
tomwalters@163 42 'Modules/Input/ModuleFileInput.cc',
tomwalters@163 43 'Modules/BMM/ModuleGammatone.cc',
tomwalters@163 44 'Modules/BMM/ModulePZFC.cc',
tomwalters@163 45 'Modules/NAP/ModuleHCL.cc',
tomwalters@163 46 'Modules/Strobes/ModuleParabola.cc',
tomwalters@163 47 'Modules/Strobes/ModuleLocalMax.cc',
tomwalters@163 48 'Modules/SAI/ModuleSAI.cc',
tomwalters@163 49 'Modules/SSI/ModuleSSI.cc',
tomwalters@163 50 'Modules/Profile/ModuleSlice.cc',
tomwalters@163 51 'Modules/Profile/ModuleScaler.cc',
tomwalters@163 52 'Modules/Output/FileOutputHTK.cc',
tomwalters@187 53 'Modules/Output/FileOutputAIMC.cc',
tomwalters@232 54 'Modules/Features/ModuleGaussians.cc',
tomwalters@232 55 'Modules/Features/ModuleDCT.cc' ]
tomwalters@227 56
tomwalters@227 57 graphics_sources = [ 'Modules/Output/Graphics/GraphAxisSpec.cc',
tomwalters@227 58 'Modules/Output/Graphics/GraphicsView.cc',
tomwalters@227 59 'Modules/Output/Graphics/GraphicsViewTime.cc',
tomwalters@232 60 'Modules/Output/Graphics/Scale/Scale.cc',
tomwalters@227 61 'Modules/Output/Graphics/Devices/GraphicsOutputDevice.cc',
tomwalters@227 62 'Modules/Output/Graphics/Devices/GraphicsOutputDeviceCairo.cc',
tomwalters@232 63 'Modules/Output/Graphics/Devices/GraphicsOutputDeviceMovie.cc',]
tomwalters@232 64 #'Modules/Output/Graphics/Devices/GraphicsOutputDeviceMovieDirect.cc' ]
tomwalters@227 65 graphics_libraries = [ 'cairo',
tomwalters@232 66 ]
tomwalters@163 67
tomwalters@163 68 # List of currently incative source files which we may want to add back in
tomwalters@163 69 sources_disabled = ['Modules/SNR/ModuleNoise.cc',
tomwalters@187 70 ]
tomwalters@163 71
tomwalters@163 72 # File which contains main()
tomwalters@232 73 #sources = common_sources + graphics_sources + ['Main/AIMCopy_SSI_Features_v3.cc']
tomwalters@163 74 #sources = common_sources + ['Main/AIMCopy_SSI_Features_v4_PZFC.cc']
tomwalters@232 75 sources = common_sources + graphics_sources + ['Main/AIMCopy.cc']
tomwalters@186 76 #sources = common_sources + ['Main/aimc.cc']
tomwalters@163 77
tomwalters@163 78 # Test sources
tomwalters@163 79 test_sources = ['Modules/Profile/ModuleSlice_unittest.cc']
tomwalters@163 80 test_sources += common_sources
tomwalters@163 81
tomwalters@163 82 # Define the command-line options for running scons
tomwalters@163 83 options = Variables()
tomwalters@163 84 options.Add(BoolVariable('mingw',
tomwalters@163 85 'Compile on Windows using mingw rather than msvc',
tomwalters@163 86 False))
tomwalters@163 87 options.Add(BoolVariable('symbols',
tomwalters@163 88 'Add debuging symbols when compiling on gcc',
tomwalters@163 89 False))
tomwalters@163 90
tomwalters@163 91 # Environment variables
tomwalters@163 92 env = Environment(options = options, ENV = os.environ)
tomwalters@163 93 if env['mingw']:
tomwalters@163 94 # SCons Defaults to MSVC if installed on Windows.
tomwalters@163 95 env = Environment(options = opts, ENV = os.environ, tools = ['mingw'])
tomwalters@163 96
tomwalters@163 97 # Platform
tomwalters@163 98 build_platform = env['PLATFORM']
tomwalters@163 99 target_platform = build_platform
tomwalters@163 100
tomwalters@163 101 # Build products location and executable name
tomwalters@163 102 build_dir = os.path.join('build', target_platform + '-release')
tomwalters@186 103 #target_executable = 'aimc'
tomwalters@186 104 target_executable = 'AIMCopy'
tomwalters@163 105 test_executable = 'aimc_tests'
tomwalters@163 106
tomwalters@163 107 # Create build products directory if necessary
tomwalters@163 108 if not os.path.exists(build_dir):
tomwalters@163 109 os.makedirs(build_dir)
tomwalters@163 110 env.SConsignFile(os.path.join(build_dir,'.sconsign'))
tomwalters@163 111
tomwalters@163 112 # Set any platform-specific environment variables and options
tomwalters@163 113 if target_platform == 'win32':
tomwalters@163 114 env.AppendUnique(CPPDEFINES = ['_WINDOWS', 'WIN32',
tomwalters@163 115 'WINVER=0x0400', '_CONSOLE'])
tomwalters@163 116 elif target_platform == 'darwin':
tomwalters@163 117 env.AppendUnique(CPPDEFINES = ['_MACOSX'])
tomwalters@163 118
tomwalters@163 119 # Compiler selection based on platform
tomwalters@163 120 # compiler can be one of: gcc msvc
tomwalters@163 121 compiler = 'gcc'
tomwalters@163 122 if (build_platform == 'win32'
tomwalters@163 123 and target_platform == 'win32'
tomwalters@163 124 and not env['mingw']):
tomwalters@163 125 compiler = 'msvc'
tomwalters@163 126
tomwalters@163 127 # Compiler-specific options:
tomwalters@163 128 # Microsoft visual studio
tomwalters@163 129 if compiler == 'msvc':
tomwalters@163 130 env.AppendUnique(CPPFLAGS = ['/arch:SSE2', '/nologo', '/W3', '/EHsc'])
tomwalters@163 131 env.AppendUnique(CPPDEFINES = ['_CRT_SECURE_NO_DEPRECATE',
tomwalters@163 132 '_RINT_REQUIRED'])
tomwalters@163 133 env.AppendUnique(CPPFLAGS = ['/Ox'])
tomwalters@163 134 env.AppendUnique(CPPDEFINES = ['NDEBUG', '_ATL_MIN_CRT'])
tomwalters@163 135
tomwalters@163 136 # GNU compiler collection
tomwalters@163 137 elif compiler == 'gcc':
tomwalters@163 138 env['STRIP'] = 'strip'
tomwalters@163 139 env.AppendUnique(CPPFLAGS = ['-Wall'])
tomwalters@232 140 env.AppendUnique(CPPFLAGS = ['-O2',])# '-fomit-frame-pointer'])
tomwalters@163 141 if env['symbols']:
tomwalters@163 142 env.AppendUnique(CPPFLAGS = ['-g'])
tomwalters@163 143 if env['mingw']:
tomwalters@163 144 if not env['PLATFORM'] == 'win32':
tomwalters@163 145 print('Cross-compilation for Windows is not supported')
tomwalters@163 146 Exit(1)
tomwalters@163 147 else:
tomwalters@163 148 print('Unsupported compiler: ' + compiler)
tomwalters@163 149 Exit(1)
tomwalters@163 150
tomwalters@163 151 # To make a statically-linked version for os 10.4 and up...
tomwalters@163 152 #if build_platform == 'darwin':
tomwalters@163 153 # env.AppendUnique(CPPFLAGS = ['-arch', 'i386'])
tomwalters@163 154 # env.AppendUnique(LINKFLAGS = ['-arch', 'i386'])
tomwalters@163 155 # env.AppendUnique(LINKFLAGS = ['-Wl'])
tomwalters@163 156 # env.AppendUnique(LINKFLAGS = ['-search_paths_first'])
tomwalters@163 157 # env.AppendUnique(MACOSX_DEPLOYMENT_TARGET = ['10.4'])
tomwalters@163 158 # env.AppendUnique(GCC_VERSION = ['4.0'])
tomwalters@163 159 # env.Replace(CC = ['gcc-4.0'])
tomwalters@163 160 # env.Replace(CXX = ['gcc-4.0'])
tomwalters@163 161 # env.AppendUnique(CPPFLAGS = ['-fno-stack-protector','-isysroot', '/Developer/SDKs/MacOSX10.5.sdk', '-mmacosx-version-min=10.4'])
tomwalters@163 162 # deplibs = ['sndfile', 'flac', 'vorbis', 'vorbisenc', 'ogg']
tomwalters@163 163 if not target_platform == 'win32':
tomwalters@163 164 # On windows, utf support is builtin for SimpleIni
tomwalters@163 165 # but not on other platforms
tomwalters@163 166 sources += ['Support/ConvertUTF.c']
tomwalters@163 167
tomwalters@163 168 # Place the build products in the corect place
tomwalters@163 169 env.VariantDir('#' + build_dir, '#', duplicate = 0)
tomwalters@163 170
tomwalters@163 171 # Look for the sources in the correct place
tomwalters@163 172 env.Append(CPPPATH = ['#src'])
tomwalters@163 173
tomwalters@163 174 # Dependencies
tomwalters@163 175 deplibs = ['sndfile']
tomwalters@232 176 deplibs += graphics_libraries
tomwalters@163 177
tomwalters@163 178 if target_platform != 'win32':
tomwalters@163 179 for depname in deplibs:
tomwalters@163 180 env.ParseConfig('pkg-config --cflags --libs ' + depname)
tomwalters@163 181 else:
tomwalters@163 182 #env.AppendUnique(LIBS = ['wsock32', 'winmm'])
tomwalters@163 183 if 'sndfile' in deplibs:
tomwalters@163 184 ###### libsndfile ########################################
tomwalters@163 185 # This one is only valid for win32 and already precompiled
tomwalters@163 186 # Only need to create .lib file from .def
tomwalters@163 187 shutil.copyfile(windows_libsndfile_location + '/libsndfile-1.dll',
tomwalters@163 188 build_dir+'/libsndfile-1.dll')
tomwalters@163 189 if compiler=='msvc':
tomwalters@163 190 shutil.copyfile(windows_libsndfile_location + '/libsndfile-1.def',
tomwalters@163 191 build_dir+'/libsndfile-1.def')
tomwalters@163 192 env.Command(build_dir + '/libsndfile-1.lib', build_dir + '/libsndfile-1.def',
tomwalters@163 193 env['AR'] + ' /nologo /machine:i386 /def:$SOURCE /out:$TARGET')
tomwalters@163 194 env.Append(CPPPATH = [windows_libsndfile_location + '/include/'])
tomwalters@163 195 env.AppendUnique(LIBPATH = [build_dir])
tomwalters@163 196 # Replace 'sndfile' with 'sndfile-1'
tomwalters@163 197 deplibs.remove('sndfile')
tomwalters@163 198 deplibs.append('libsndfile-1')
tomwalters@163 199 env.AppendUnique(LIBS = deplibs)
tomwalters@163 200
tomwalters@163 201
tomwalters@163 202
tomwalters@163 203 # Builder for the main program
tomwalters@163 204 program = env.Program(target = os.path.join(build_dir, target_executable),
tomwalters@163 205 source = map(lambda x: '#' + build_dir + '/src/' + x,
tomwalters@163 206 sources))
tomwalters@163 207 env.Alias(target_executable, os.path.join(build_dir, target_executable))
tomwalters@163 208 env.Default(program)
tomwalters@163 209
tomwalters@163 210 #test_env = env.Clone()
tomwalters@163 211 #test_libs = ['gtest', 'gtest_main']
tomwalters@163 212 ##for depname in test_libs:
tomwalters@163 213 ## test_env.ParseConfig('pkg-config --cflags --libs ' + depname)
tomwalters@163 214 #test_env.AppendUnique(LIBPATH = ['/usr/local/lib'],
tomwalters@163 215 # CPPPATH = ['/usr/local/lib'],
tomwalters@163 216 # LIBS = test_libs)
tomwalters@163 217 #
tomwalters@163 218 #test = test_env.Program(target = os.path.join(build_dir, test_executable),
tomwalters@163 219 # source = map(lambda x: '#' + build_dir + '/src/' + x,
tomwalters@163 220 # test_sources))
tomwalters@163 221 #env.Alias('test', os.path.join(build_dir, test_executable))