MSVC: update build-system, c-flags and libs

This commit is contained in:
EZ4Stephen
2026-04-16 15:16:05 +02:00
committed by Robin Gareus
parent 1243926672
commit 19a49fda02
8 changed files with 46 additions and 17 deletions
+7 -3
View File
@@ -683,6 +683,7 @@ def build(bld):
obj.use += ['liblua']
obj.uselib += ' PANGOCAIRO GDI32'
obj.lib = ['getopt']
obj.defines += ['NOMINMAX']
if False and bld.is_defined('USE_EXTERNAL_LIBS'):
obj.uselib += ' LIBAAF'
@@ -695,9 +696,12 @@ def build(bld):
obj.uselib += ' AUDIOUNITS OSX '
obj.use += ' libappleutility'
obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
elif bld.env['build_target'] == 'mingw' or bld.env['build_target'] == 'msvc':
elif bld.env['build_target'] == 'mingw':
obj.source += [ 'bundle_env_mingw.cc' ]
obj.source += [ 'windows_icon.rc' ]
elif bld.env['build_target'] == 'msvc':
obj.source += [ 'bundle_env_msvc2.cc' ]
obj.source += [ 'windows_icon.rc' ]
else:
obj.source += [ 'bundle_env_linux.cc' ]
obj.use += [ 'X11' ]
@@ -765,7 +769,7 @@ def build(bld):
'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + bld.env['VERSION']
}
if bld.env['build_target'] == 'mingw' and sys.platform == "win32":
if bld.env['build_target'] in ('mingw', 'msvc') and sys.platform == "win32":
wrapper_subst_dict.update({
'LD_LIBRARY_PATH': 'PATH'
})
@@ -908,7 +912,7 @@ def build(bld):
obj = bld(features = 'command-output')
if bld.env['build_target'] == 'msvc':
obj.command = 'cl'
obj.command = bld.env['CXX'][0]
else:
obj.command = 'cpp'
obj.command_is_external = True
+5 -1
View File
@@ -18,7 +18,8 @@ def build(bld):
# just the normal executable version of the GTK GUI
obj = bld (features = 'cxx c cxxprogram')
# this program does not do the whole hidden symbols thing
obj.cxxflags = [ '-fvisibility=default' ]
if bld.env['build_target'] != 'msvc':
obj.cxxflags = [ '-fvisibility=default' ]
obj.source = hardour_sources
obj.target = 'hardour-' + bld.env['VERSION']
obj.includes = ['.']
@@ -54,6 +55,9 @@ def build(bld):
if bld.env['DEBUG'] == False:
obj.linkflags += bld.env['compiler_flags_dict']['mwindows']
if bld.env['build_target'] == 'msvc':
obj.lib = ['getopt']
obj.includes += ['../libs']
if bld.is_defined('NEED_INTL'):
+1
View File
@@ -423,6 +423,7 @@ def build(bld):
obj.cxxflags += ['-Og']
else: # MSVC
obj.defines += ['NOMINMAX', '_WINSOCKAPI_']
obj.lib = ['OLE32']
if bld.is_defined('USE_EXTERNAL_LIBS'):
obj.uselib.extend(['VAMPSDK', 'LIBLTC', 'LIBFLUIDSYNTH'])
+1 -1
View File
@@ -35,6 +35,6 @@ def build(bld):
# Bit of a hack: make a symlink to the .dylib that meets GTK's criteria for finding it (namely that the library must be a *.so
# and that it must reside in a directory called `engines')
obj = bld(target = 'engines', rule = 'mkdir -p ${TGT} && rm -f ${TGT}/libclearlooks.so && ln -s ../libclearlooks.dylib ${TGT}/libclearlooks.so')
elif bld.env['build_target'] != 'mingw':
elif bld.env['build_target'] not in ('mingw', 'msvc'):
# this is a hack so that running ./ardev will work, since it sets GTK_PATH to include this dir and GTK will search {thisdir}/engines
obj = bld(target = 'engines', rule = 'mkdir -p ${TGT} && rm -f ${TGT}/libclearlooks.so && ln -s ../libclearlooks.so ${TGT}/libclearlooks.so')
+8 -3
View File
@@ -29,7 +29,7 @@ def build(bld):
'LOCALEDIR="' + os.path.join(autowaf.normpath(bld.env['DATADIR']), 'locale') + '"',
]
obj.use = [ 'libpbd' ]
obj.uselib = 'GIOMM DL UUID ARCHIVE CURL XML'
obj.uselib = 'GLIBMM GIOMM DL UUID ARCHIVE CURL XML'
if bld.is_defined('HAVE_USB'):
obj.uselib += ' USB'
@@ -39,6 +39,9 @@ def build(bld):
elif bld.env['build_target'] == 'mingw' or bld.env['build_target'] == 'msvc':
obj.uselib += ' GDI32'
obj.linkflags += bld.env['compiler_flags_dict']['mwindows']
if bld.env['build_target'] == 'msvc':
obj.lib = ['getopt', 'ole32']
obj.defines.append('LIBARDOUR_DLL_EXPORTS')
if re.search ("bsd", sys.platform) != None:
obj.defines.append('_POSIX_C_SOURCE=200809L')
@@ -53,10 +56,10 @@ def build(bld):
obj.linkflags= [ bld.env['compiler_flags_dict']['execstack'] ]
if bld.is_defined('WINDOWS_VST_SUPPORT'):
bld (features = 'c', name='vstwin', source='vstwin.c', uselib = 'GIOMM', includes = [ '../pbd/', '../ardour/', '.' ])
obj.uselib = ['GIOMM', 'DL', 'GDI32', 'ARCHIVE', 'CURL', 'XML']
obj.uselib = ['GLIBMM', 'GIOMM', 'DL', 'GDI32', 'ARCHIVE', 'CURL', 'XML']
obj.use = [ 'libpbd', 'libtemporal', 'libevoral', 'vstwin' ]
else:
obj.uselib = ['GIOMM', 'DL', 'OSX', 'ARCHIVE', 'CURL', 'XML' ]
obj.uselib = ['GLIBMM', 'GIOMM', 'DL', 'OSX', 'ARCHIVE', 'CURL', 'XML' ]
obj.use = [ 'libpbd', 'libtemporal', 'libevoral' ]
if bld.is_defined('HAVE_USB'):
@@ -66,6 +69,8 @@ def build(bld):
pass
elif bld.env['build_target'] == 'mingw' or bld.env['build_target'] == 'msvc':
obj.linkflags += bld.env['compiler_flags_dict']['mwindows']
if bld.env['build_target'] == 'msvc':
obj.lib = ['getopt']
obj.includes = [ '../pbd/', '../ardour/', '.' ]
obj.defines = [
+5 -1
View File
@@ -21,7 +21,8 @@ def build_ardour_util(bld, util):
# just the normal executable version of the GTK GUI
obj = bld (features = 'cxx c cxxprogram')
# this program does not do the whole hidden symbols thing
obj.cxxflags = [ '-fvisibility=default' ]
if bld.env['build_target'] != 'msvc':
obj.cxxflags = [ '-fvisibility=default' ]
obj.source = ['common.cc', util + '.cc' ]
obj.target = pgmprefix + '-' + util
obj.includes = ['.']
@@ -55,6 +56,9 @@ def build_ardour_util(bld, util):
elif bld.env['build_target'] == 'mingw' or bld.env['build_target'] == 'msvc':
obj.linkflags += bld.env['compiler_flags_dict']['mconsole']
if bld.env['build_target'] == 'msvc':
obj.lib = ['getopt']
obj.includes += ['../libs']
if bld.env['build_target'] == 'mingw' or bld.env['build_target'] == 'msvc':
+1 -1
View File
@@ -35,4 +35,4 @@ def add_def(self):
self.create_task('nm_def', obj_files, d) # Create the task
lt.dep_nodes.append(d) # Tell the linker to wait for the .def file before linking
lt.env.append_unique('LINKFLAGS', [f'/DEF:{d.abspath()}','/DLL']) # Pass the .def file to the linker, with /DLL.
lt.env.append_unique('LINKFLAGS', [f'/DEF:{d.abspath()}','/DLL']) # Pass the .def file to the linker, with /DLL.
+18 -7
View File
@@ -95,15 +95,15 @@ compiler_flags_dictionaries= {
'msvc' : {
'debuggable' : ['/DDEBUG', '/Od', '/Z7', '/MDd', '/Gd', '/EHsc', '/JMC'],
'linker-debuggable' : ['/DEBUG', '/INCREMENTAL' ],
'nondebuggable' : ['/DNDEBUG', '/Ob1', '/MD', '/Gd', '/EHsc'],
'nondebuggable' : ['/DNDEBUG', '/Ob2', '/MD', '/Gd', '/EHsc'],
'profile' : ['/Oy-'],
'silence-unused-arguments' : '',
'sse' : '',
'xsaveintrin' : '',
'fpmath-sse' : '',
'xmmintrinsics' : '',
'xmmintrinsics' : ['/DUSE_XMMINTRIN'],
'pipe' : '',
'full-optimization' : ['/O2'],
'full-optimization' : ['/O2', '/Oi', '/Ot', '/fp:fast', '/GS-', '/Gy', '/Gw', '/GF', '/favor:blend'],
'dsp-optimization' : ['/O2', '/fp:fast'],
'no-frame-pointer' : '',
'fast-math' : '',
@@ -489,8 +489,11 @@ int main() { return 0; }''',
if compiler_name == 'msvc':
compiler_flags.extend(['/nologo', '/FS', '/bigobj', '/FC',
'/diagnostics:column', '/Zc:__cplusplus'])
linker_flags.extend(['/guard:cf'])
'/diagnostics:column', '/Zc:__cplusplus',
'/Zc:inline', '/Zc:throwingNew', '/cgthreads8'])
linker_flags.append('/guard:cf')
if not conf.env['DEBUG']:
linker_flags.append('/OPT:REF,ICF')
autowaf.set_basic_compiler_flags (conf,flags_dict)
@@ -1641,8 +1644,16 @@ def build(bld):
bld.recurse(i)
if bld.env['build_target'] == 'msvc': #For using .def generator
for name in ['libydk-pixbuf', 'libydk', 'libytk']:
bld.get_tgen_by_name(name).features.append('gendef')
gendef_targets = ['libydk-pixbuf', 'libydk', 'libytk', 'libztkmm', 'libydkmm', 'libytkmm', 'libaaf']
if not Options.options.use_lld:
gendef_targets += ['libardourvampplugins', 'libardourvamppyin']
for name in gendef_targets:
tgen = bld.get_tgen_by_name(name) # Waf 'features' can be a list or a space separated string depending on the target
if isinstance(tgen.features, list):
tgen.features.append('gendef')
else:
tgen.features += ' gendef'
if bld.is_defined ('BEATBOX'):
bld.recurse('tools/bb')