X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=SConstruct;h=15d7ac743698f1712dcee8656d402368664217fa;hb=2fba6d0925307abd11be9d8f7a8d2722a2b6ccbd;hp=2dfdd794768163cdb388a443fecc0734eb85e8ff;hpb=a9e38032a376df3c8a930457211813958f3ba73b;p=ardour.git diff --git a/SConstruct b/SConstruct index 2dfdd79476..15d7ac7436 100644 --- a/SConstruct +++ b/SConstruct @@ -7,13 +7,14 @@ import shutil import glob import errno import time +import platform from sets import Set import SCons.Node.FS SConsignFile() EnsureSConsVersion(0, 96) -version = '2.0alpha1' +version = '2.0alpha2' subst_dict = { } @@ -23,20 +24,19 @@ subst_dict = { } opts = Options('scache.conf') opts.AddOptions( - BoolOption('ALTIVEC', 'Compile using Altivec instructions', 0), ('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''), BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0), BoolOption('DEBUG', 'Set to build with debugging information and no optimizations', 0), PathOption('DESTDIR', 'Set the intermediate install "prefix"', '/'), - BoolOption('DEVBUILD', 'Use shared libardour (developers only)', 0), BoolOption('NLS', 'Set to turn on i18n support', 1), - BoolOption('NOARCH', 'Do not use architecture-specific compilation flags', 0), PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'), BoolOption('VST', 'Compile with support for VST', 0), BoolOption('VERSIONED', 'Add version information to ardour/gtk executable name inside the build directory', 0), - BoolOption('USE_SSE_EVERYWHERE', 'Ask the compiler to use x86/SSE instructions and also our hand-written x86/SSE optimizations when possible (off by default)', 0), - BoolOption('BUILD_SSE_OPTIMIZATIONS', 'Use our hand-written x86/SSE optimizations when possible (off by default)', 0), - BoolOption('BUILD_VECLIB_OPTIMIZATIONS', 'Build with Apple Accelerate/vecLib optimizations when possible (off by default)', 0) + EnumOption('DIST_TARGET', 'Build target for cross compiling packagers', 'auto', allowed_values=('auto', 'i386', 'i686', 'x86_64', 'powerpc', 'tiger', 'panther', 'none' ), ignorecase=2), + BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1), + BoolOption('FFT_ANALYSIS', 'Include FFT analysis window', 0), + BoolOption('SURFACES', 'Build support for control surfaces', 0), + BoolOption('DMALLOC', 'Compile and link using the dmalloc library', 0) ) #---------------------------------------------------------------------- @@ -231,17 +231,17 @@ def version_builder (target, source, env): try: o = file (target[0].get_path(), 'w') o.write (text) - o.close (); + o.close () except IOError: print "Could not open", target[0].get_path(), " for writing\n" sys.exit (-1) - text = "#ifndef __" + env['DOMAIN'] + "_version_h__\n"; - text += "#define __" + env['DOMAIN'] + "_version_h__\n"; + text = "#ifndef __" + env['DOMAIN'] + "_version_h__\n" + text += "#define __" + env['DOMAIN'] + "_version_h__\n" text += "extern int " + env['DOMAIN'] + "_major_version;\n" text += "extern int " + env['DOMAIN'] + "_minor_version;\n" text += "extern int " + env['DOMAIN'] + "_micro_version;\n" - text += "#endif /* __" + env['DOMAIN'] + "_version_h__ */\n"; + text += "#endif /* __" + env['DOMAIN'] + "_version_h__ */\n" try: o = file (target[1].get_path(), 'w') @@ -287,7 +287,7 @@ def versioned_builder(target,source,env): print "No SConscript CVS update info found - versioned executable cannot be built" return -1 - tag = time.strftime ('%Y%M%d%H%m', time.strptime (last_date)); + tag = time.strftime ('%Y%M%d%H%m', time.strptime (last_date)) print "The current build ID is " + tag tagged_executable = source[0].get_path() + '-' + tag @@ -323,7 +323,7 @@ def distcopy (target, source, env): cmd += " ".join ([ "'%s'" % quoted for quoted in all_files]) cmd += ' | (cd ' + treedir + ' && tar xf -)' p = os.popen (cmd) - return p.close (); + return p.close () def tarballer (target, source, env): cmd = 'tar -jcf ' + str (target[0]) + ' ' + str(source[0]) + " --exclude '*~'" @@ -349,7 +349,7 @@ env.Append (BUILDERS = {'Tarball' : tarball_bld}) libraries = { } -libraries['core'] = LibraryInfo (CPPPATH = [ '#libs']) +libraries['core'] = LibraryInfo (CCFLAGS = '-Ilibs') libraries['sndfile'] = LibraryInfo() libraries['sndfile'].ParseConfig('pkg-config --cflags --libs sndfile') @@ -363,12 +363,19 @@ libraries['raptor'].ParseConfig('pkg-config --cflags --libs raptor') libraries['samplerate'] = LibraryInfo() libraries['samplerate'].ParseConfig('pkg-config --cflags --libs samplerate') +if env['FFT_ANALYSIS']: + libraries['fftw3f'] = LibraryInfo() + libraries['fftw3f'].ParseConfig('pkg-config --cflags --libs fftw3f') + libraries['jack'] = LibraryInfo() libraries['jack'].ParseConfig('pkg-config --cflags --libs jack') libraries['xml'] = LibraryInfo() libraries['xml'].ParseConfig('pkg-config --cflags --libs libxml-2.0') +libraries['xslt'] = LibraryInfo() +libraries['xslt'].ParseConfig('pkg-config --cflags --libs libxslt') + libraries['glib2'] = LibraryInfo() libraries['glib2'].ParseConfig ('pkg-config --cflags --libs glib-2.0') libraries['glib2'].ParseConfig ('pkg-config --cflags --libs gobject-2.0') @@ -383,11 +390,15 @@ libraries['pango'].ParseConfig ('pkg-config --cflags --libs pango') libraries['libgnomecanvas2'] = LibraryInfo() libraries['libgnomecanvas2'].ParseConfig ('pkg-config --cflags --libs libgnomecanvas-2.0') -libraries['glade2'] = LibraryInfo() -libraries['glade2'].ParseConfig ('pkg-config --cflags --libs libglade-2.0') - #libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas') +# The Ardour Control Protocol Library + +libraries['ardour_cp'] = LibraryInfo (LIBS='ardour_cp', LIBPATH='#libs/surfaces/control_protocol', + CPPPATH='#libs/surfaces/control_protocol') + +# The Ardour backend/engine + libraries['ardour'] = LibraryInfo (LIBS='ardour', LIBPATH='#libs/ardour', CPPPATH='#libs/ardour') libraries['midi++2'] = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPPATH='#libs/midi++2') libraries['pbd3'] = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd3', CPPPATH='#libs/pbd3') @@ -398,6 +409,50 @@ libraries['fst'] = LibraryInfo() if env['VST']: libraries['fst'].ParseConfig('pkg-config --cflags --libs libfst') +# +# Check for libusb + +libraries['usb'] = LibraryInfo () + +conf = Configure (libraries['usb']) +if conf.CheckLib ('usb', 'usb_interrupt_write'): + have_libusb = True +else: + have_libusb = False + +libraries['usb'] = conf.Finish () + +# +# Check for liblo + +libraries['lo'] = LibraryInfo () + +conf = Configure (libraries['lo']) +if conf.CheckLib ('lo', 'lo_server_new') == False: + print "liblo does not appear to be installed." + exit (0) + +libraries['lo'] = conf.Finish () + +# +# Check for dmalloc + +libraries['dmalloc'] = LibraryInfo () + +# +# look for the threaded version +# + +conf = Configure (libraries['dmalloc']) +if conf.CheckLib ('dmallocth', 'dmalloc_shutdown'): + have_libdmalloc = True +else: + have_libdmalloc = False + +libraries['dmalloc'] = conf.Finish () + +# + # # Audio/MIDI library (needed for MIDI, since audio is all handled via JACK) # @@ -411,7 +466,7 @@ if conf.CheckCHeader('alsa/asoundlib.h'): subst_dict['%MIDITYPE%'] = "alsa/sequencer" elif conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'): # this line is needed because scons can't handle -framework in ParseConfig() yet. - libraries['sysmidi'] = LibraryInfo (LINKFLAGS= '-framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework CoreServices -framework AudioUnit -bind_at_load') + libraries['sysmidi'] = LibraryInfo (LINKFLAGS= '-framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework CoreServices -framework AudioUnit -framework AudioToolbox -bind_at_load') env['SYSMIDI'] = 'CoreMIDI' subst_dict['%MIDITAG%'] = "ardour" subst_dict['%MIDITYPE%'] = "coremidi" @@ -434,13 +489,14 @@ if env['SYSLIBS']: libraries['pangomm'].ParseConfig ('pkg-config --cflags --libs pangomm-1.4') libraries['libgnomecanvasmm'] = LibraryInfo() libraries['libgnomecanvasmm'].ParseConfig ('pkg-config --cflags --libs libgnomecanvasmm-2.6') - libraries['libglademm'] = LibraryInfo() - libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4') + +# libraries['libglademm'] = LibraryInfo() +# libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4') # libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas') - libraries['soundtouch'] = LibraryInfo(LIBS='soundtouch', - LIBPATH='#libs/soundtouch', - CPPPATH=['#libs', '#libs/soundtouch']) + libraries['soundtouch'] = LibraryInfo() + libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs soundtouch-1.0') + coredirs = [ 'templates' ] @@ -483,9 +539,9 @@ else: libraries['soundtouch'] = LibraryInfo(LIBS='soundtouch', LIBPATH='#libs/soundtouch', CPPPATH=['#libs', '#libs/soundtouch']) - libraries['libglademm'] = LibraryInfo(LIBS='libglademm', - LIBPATH='#libs/libglademm', - CPPPATH='#libs/libglademm') +# libraries['libglademm'] = LibraryInfo(LIBS='libglademm', +# LIBPATH='#libs/libglademm', +# CPPPATH='#libs/libglademm') coredirs = [ 'libs/soundtouch', @@ -493,7 +549,7 @@ else: ] subdirs = [ -# 'libs/cassowary', +# 'libs/cassowary', 'libs/sigc++2', 'libs/pbd3', 'libs/midi++2', @@ -506,13 +562,21 @@ else: 'libs/gtkmm2/atk', 'libs/gtkmm2/gdk', 'libs/gtkmm2/gtk', - 'libs/libglademm', 'libs/libgnomecanvasmm', # 'libs/flowcanvas', 'libs/gtkmm2ext', 'gtk2_ardour' ] +surface_subdirs = [] + +if env['SURFACES']: + surface_subdirs += [ 'libs/surfaces/control_protocol', 'libs/surfaces/generic_midi' ] + if have_libusb: + surface_subdirs += [ 'libs/surfaces/tranzport' ] + if os.access ('libs/surfaces/sony9pin', os.F_OK): + surface_subdirs += [ 'libs/surfaces/sony9pin' ] + opts.Save('scache.conf', env) Help(opts.GenerateHelpText(env)) @@ -535,6 +599,8 @@ if os.environ.has_key('DISTCC_HOSTS'): final_prefix = '$PREFIX' install_prefix = '$DESTDIR/$PREFIX' +subst_dict['INSTALL_PREFIX'] = install_prefix; + if env['PREFIX'] == '/usr': final_config_prefix = '/etc' else: @@ -547,10 +613,10 @@ config_prefix = '$DESTDIR' + final_config_prefix conf = Configure (env) -have_cxx = conf.TryAction (Action (env['CXX'] + ' --version')); +have_cxx = conf.TryAction (Action (env['CXX'] + ' --version')) if have_cxx[0] != 1: print "This system has no functional C++ compiler. You cannot build Ardour from source without one." - exit (1); + exit (1) else: print "Congratulations, you have a functioning C++ compiler." @@ -567,44 +633,61 @@ debug_flags = [ '-g' ] config_guess = os.popen("tools/config.guess").read()[:-1] -config_cpu = 0; -config_arch = 1; -config_kernel = 2; -config_os = 3; +config_cpu = 0 +config_arch = 1 +config_kernel = 2 +config_os = 3 config = config_guess.split ("-") -if config[config_arch] == 'apple': - if env['BUILD_VECLIB_OPTIMIZATIONS'] == 1: - opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS") - debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS") - libraries['core'].Append(LINKFLAGS= '-framework Accelerate') - -if config[config_cpu] == 'powerpc': +print "system triple: " + config_guess + +# Autodetect +if env['DIST_TARGET'] == 'auto': + if config[config_arch] == 'apple': + # The [.] matches to the dot after the major version, "." would match any character + if re.search ("darwin[0-7][.]", config[config_kernel]) != None: + env['DIST_TARGET'] = 'panther' + else: + env['DIST_TARGET'] = 'tiger' + else: + if re.search ("x86_64", config[config_cpu]) != None: + env['DIST_TARGET'] = 'x86_64' + elif re.search("i[0-5]86", config[config_cpu]) != None: + env['DIST_TARGET'] = 'i386' + elif re.search("powerpc", config[config_cpu]) != None: + env['DIST_TARGET'] = 'powerpc' + else: + env['DIST_TARGET'] = 'i686' + print "\n*******************************" + print "detected DIST_TARGET = " + env['DIST_TARGET'] + print "*******************************\n" + + +if config[config_cpu] == 'powerpc' and env['DIST_TARGET'] != 'none': # # Apple/PowerPC optimization options # # -mcpu=7450 does not reliably work with gcc 3.* # - if env['NOARCH'] == 0: - if env['ALTIVEC'] == 1: - if config[config_arch] == 'apple': - opt_flags.extend ([ "-mcpu=7450", "-faltivec"]) - else: - opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"]) - else: - opt_flags.extend([ "-mcpu=750", "-mmultiple" ]) - opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"]) + if env['DIST_TARGET'] == 'panther' or env['DIST_TARGET'] == 'tiger': + if config[config_arch] == 'apple': + opt_flags.extend ([ "-mcpu=7450", "-faltivec"]) + else: + opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"]) + else: + opt_flags.extend([ "-mcpu=750", "-mmultiple" ]) + opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"]) -elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)): +elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)) and env['DIST_TARGET'] != 'none': build_host_supports_sse = 0 - if env['NOARCH'] == 0: + debug_flags.append ("-DARCH_X86") + opt_flags.append ("-DARCH_X86") - debug_flags.append ("-DARCH_X86") - opt_flags.append ("-DARCH_X86") + if config[config_kernel] == 'linux' : - if config[config_kernel] == 'linux' : + if env['DIST_TARGET'] != 'i386': flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1] x86_flags = flag_line.split (": ")[1:][0].split (' ') @@ -612,7 +695,7 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6 if "mmx" in x86_flags: opt_flags.append ("-mmmx") if "sse" in x86_flags: - build_host_supports_sse = 1 + build_host_supports_sse = 1 if "3dnow" in x86_flags: opt_flags.append ("-m3dnow") @@ -621,20 +704,27 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6 elif config[config_cpu] == "i686": opt_flags.append ("-march=i686") - if env['USE_SSE_EVERYWHERE'] == 1: - opt_flags.extend (["-msse", "-mfpmath=sse"]) - debug_flags.extend (["-msse", "-mfpmath=sse"]) - if build_host_supports_sse != 1: - print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)" - - if env['BUILD_SSE_OPTIMIZATIONS'] == 1: - opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") - debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") - if build_host_supports_sse != 1: - print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)" - + if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) and build_host_supports_sse: + opt_flags.extend (["-msse", "-mfpmath=sse"]) + debug_flags.extend (["-msse", "-mfpmath=sse"]) # end of processor-specific section +# optimization section +if env['FPU_OPTIMIZATION']: + if env['DIST_TARGET'] == 'tiger': + opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS") + debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS") + libraries['core'].Append(LINKFLAGS= '-framework Accelerate') + elif env['DIST_TARGET'] == 'i686' or env['DIST_TARGET'] == 'x86_64': + opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") + debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") + if env['DIST_TARGET'] == 'x86_64': + opt_flags.append ("-DUSE_X86_64_ASM") + debug_flags.append ("-DUSE_X86_64_ASM") + if build_host_supports_sse != 1: + print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)" +# end optimization section + # # ARCH="..." overrides all # @@ -663,15 +753,6 @@ env.Append(CCFLAGS="-Wall") if env['VST']: env.Append(CCFLAGS="-DVST_SUPPORT") - -# check endianness -if sys.byteorder == "big": - print "Host is big endian" - env.Append(CCFLAGS="-DWORDS_BIGENDIAN") -else: - print "Host is little endian" - - # # everybody needs this # @@ -711,9 +792,11 @@ Export('env install_prefix final_prefix config_prefix final_config_prefix librar conf = env.Configure () if conf.CheckCHeader('/System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/CoreAudio.h'): - subst_dict['%JACK_BACKEND%'] = "coreaudio:Built-in Audio:in" + subst_dict['%JACK_INPUT%'] = "coreaudio:Built-in Audio:in" + subst_dict['%JACK_OUTPUT%'] = "coreaudio:Built-in Audio:out" else: - subst_dict['%JACK_BACKEND%'] = "alsa_pcm:playback_" + subst_dict['%JACK_INPUT%'] = "alsa_pcm:playback_" + subst_dict['%JACK_OUTPUT%'] = "alsa_pcm:capture_" # posix_memalign available if not conf.CheckFunc('posix_memalign'): @@ -725,8 +808,8 @@ env = conf.Finish() rcbuild = env.SubstInFile ('ardour.rc','ardour.rc.in', SUBST_DICT = subst_dict) -env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour_system.rc')) -env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour.rc')) +env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour_system.rc')) +env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.rc')) Default (rcbuild) @@ -769,10 +852,10 @@ env.AddPostAction (srcdist, Action ('rm -rf ' + str (File (env['DISTTREE'])))) for subdir in coredirs: SConscript (subdir + '/SConscript') -for sublistdir in [subdirs, gtk_subdirs]: - for subdir in sublistdir: - SConscript (subdir + '/SConscript') - +for sublistdir in [subdirs, gtk_subdirs, surface_subdirs]: + for subdir in sublistdir: + SConscript (subdir + '/SConscript') + # cleanup env.Clean ('scrub', [ 'scache.conf', '.sconf_temp', '.sconsign.dblite', 'config.log'])