Set executable stack flag when linking

This is required on some modern hardneded Linux systems to allow
to dlopen executable objects (load plugins).

https://discourse.ardour.org/t/tls-1295-lea-so-linux-vers-doesnt-work/111778/20?u=x42
This commit is contained in:
Robin Gareus 2025-05-11 15:58:00 +02:00
parent 1c0882ba56
commit ec5b06e63d
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
6 changed files with 42 additions and 12 deletions

View file

@ -678,6 +678,7 @@ def build(bld):
obj.source += [ 'bundle_env_mingw.cc' ] obj.source += [ 'bundle_env_mingw.cc' ]
obj.source += [ 'windows_icon.rc' ] obj.source += [ 'windows_icon.rc' ]
else: else:
obj.linkflags += ' -zexecstack'
obj.source += [ 'bundle_env_linux.cc' ] obj.source += [ 'bundle_env_linux.cc' ]
obj.use += [ 'X11' ] obj.use += [ 'X11' ]

View file

@ -21,6 +21,7 @@ def build(bld):
obj.source = hardour_sources obj.source = hardour_sources
obj.target = 'hardour-' + bld.env['VERSION'] obj.target = 'hardour-' + bld.env['VERSION']
obj.includes = ['.'] obj.includes = ['.']
obj.linkflags= ''
obj.use = [ 'libpbd', obj.use = [ 'libpbd',
'libardour', 'libardour',
'libardour_cp', 'libardour_cp',
@ -51,11 +52,13 @@ def build(bld):
if sys.platform == 'darwin': if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX' obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility' obj.use += ' libappleutility'
elif bld.env['build_target'] == 'mingw':
if bld.env['DEBUG'] == False:
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
obj.includes += ['../libs'] obj.includes += ['../libs']
if bld.env['build_target'] == 'mingw':
if bld.env['DEBUG'] == False:
obj.linkflags = ['-mwindows']
if bld.is_defined('NEED_INTL'): if bld.is_defined('NEED_INTL'):
obj.linkflags = ' -lintl' obj.linkflags += ' -lintl'

View file

@ -19,6 +19,7 @@ def build(bld):
obj.source = 'vst3-scanner.cc' obj.source = 'vst3-scanner.cc'
obj.target = 'ardour-vst3-scanner' obj.target = 'ardour-vst3-scanner'
obj.includes = [ '../pbd/', '../ardour/', '../vst3/', '..' ] obj.includes = [ '../pbd/', '../ardour/', '../vst3/', '..' ]
obj.linkflags = ''
obj.defines = [ obj.defines = [
'VST3_SCANNER_APP', 'VST3_SCANNER_APP',
'VERSIONSTRING="' + bld.env['VERSION'] + '"', 'VERSIONSTRING="' + bld.env['VERSION'] + '"',
@ -31,11 +32,14 @@ def build(bld):
if bld.is_defined('HAVE_USB'): if bld.is_defined('HAVE_USB'):
obj.uselib += ' USB' obj.uselib += ' USB'
if sys.platform == 'darwin': if sys.platform == 'darwin':
obj.uselib += ' OSX' obj.uselib += ' OSX'
if bld.env['build_target'] == 'mingw': if bld.env['build_target'] == 'mingw':
obj.uselib += ' GDI32' obj.uselib += ' GDI32'
obj.linkflags = ['-mwindows'] obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
if re.search ("bsd", sys.platform) != None: if re.search ("bsd", sys.platform) != None:
obj.defines.append('_POSIX_C_SOURCE=200809L') obj.defines.append('_POSIX_C_SOURCE=200809L')
@ -47,10 +51,10 @@ def build(bld):
obj = bld (features = 'cxx c cxxprogram') obj = bld (features = 'cxx c cxxprogram')
obj.source = ( 'vst2-scanner.cc' ) obj.source = ( 'vst2-scanner.cc' )
obj.target = 'ardour-vst-scanner' obj.target = 'ardour-vst-scanner'
obj.linkflags= ''
if bld.is_defined('WINDOWS_VST_SUPPORT'): if bld.is_defined('WINDOWS_VST_SUPPORT'):
bld (features = 'c', name='vstwin', source='vstwin.c', uselib = 'GIOMM', includes = [ '../pbd/', '../ardour/', '.' ]) bld (features = 'c', name='vstwin', source='vstwin.c', uselib = 'GIOMM', includes = [ '../pbd/', '../ardour/', '.' ])
obj.uselib = ['GIOMM', 'DL', 'GDI32', 'ARCHIVE', 'CURL', 'XML'] obj.uselib = ['GIOMM', 'DL', 'GDI32', 'ARCHIVE', 'CURL', 'XML']
obj.linkflags = ['-mwindows']
obj.use = [ 'libpbd', 'libtemporal', 'libevoral', 'vstwin' ] obj.use = [ 'libpbd', 'libtemporal', 'libevoral', 'vstwin' ]
else: else:
obj.uselib = ['GIOMM', 'DL', 'OSX', 'ARCHIVE', 'CURL', 'XML' ] obj.uselib = ['GIOMM', 'DL', 'OSX', 'ARCHIVE', 'CURL', 'XML' ]
@ -59,6 +63,13 @@ def build(bld):
if bld.is_defined('HAVE_USB'): if bld.is_defined('HAVE_USB'):
obj.uselib += ['USB'] obj.uselib += ['USB']
if sys.platform == 'darwin':
pass
elif bld.env['build_target'] == 'mingw':
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
obj.includes = [ '../pbd/', '../ardour/', '.' ] obj.includes = [ '../pbd/', '../ardour/', '.' ]
obj.defines = [ obj.defines = [
'_POSIX_SOURCE', '_POSIX_SOURCE',

View file

@ -1,5 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
import os import os
import sys
def options(opt): def options(opt):
pass pass
@ -10,6 +11,7 @@ def configure(conf):
def build(bld): def build(bld):
if bld.env['build_target'] == 'mingw': if bld.env['build_target'] == 'mingw':
return return
obj = bld (features = 'c cprogram') obj = bld (features = 'c cprogram')
obj.source = 'exec_wrapper.c' obj.source = 'exec_wrapper.c'
obj.target = 'ardour-exec-wrapper' obj.target = 'ardour-exec-wrapper'
@ -18,3 +20,8 @@ def build(bld):
'_POSIX_SOURCE', '_POSIX_SOURCE',
'_XOPEN_SOURCE=500', '_XOPEN_SOURCE=500',
] ]
if sys.platform == 'darwin':
pass
else:
obj.linkflags = ' -zexecstack'

View file

@ -34,6 +34,7 @@ def build(bld):
obj.source = 'luasession.cc' obj.source = 'luasession.cc'
obj.target = 'luasession' obj.target = 'luasession'
obj.includes = ['../libs'] obj.includes = ['../libs']
obj.linkflags = ''
obj.use = ['liblua', obj.use = ['liblua',
'libpbd', 'libpbd',
'libardour', 'libardour',
@ -66,12 +67,13 @@ def build(bld):
if sys.platform == 'darwin': if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX' obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility' obj.use += ' libappleutility'
elif bld.env['build_target'] == 'mingw':
if bld.env['build_target'] == 'mingw': obj.linkflags += ' -mwindows'
obj.linkflags = ['-mwindows'] else:
obj.linkflags += ' -zexecstack'
if bld.is_defined('NEED_INTL'): if bld.is_defined('NEED_INTL'):
obj.linkflags = ' -lintl' obj.linkflags += ' -lintl'
if bld.env['build_target'] == 'mingw': if bld.env['build_target'] == 'mingw':
obj.install_path = bld.env['BINDIR'] obj.install_path = bld.env['BINDIR']

View file

@ -25,6 +25,7 @@ def build_ardour_util(bld, util):
obj.source = ['common.cc', util + '.cc' ] obj.source = ['common.cc', util + '.cc' ]
obj.target = pgmprefix + '-' + util obj.target = pgmprefix + '-' + util
obj.includes = ['.'] obj.includes = ['.']
obj.linkflags= ''
obj.use = [ 'libpbd', obj.use = [ 'libpbd',
'libardour', 'libardour',
'libardour_cp', 'libardour_cp',
@ -56,13 +57,18 @@ def build_ardour_util(bld, util):
if sys.platform == 'darwin': if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX' obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility' obj.use += ' libappleutility'
elif bld.env['build_target'] == 'mingw':
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
obj.includes += ['../libs'] obj.includes += ['../libs']
if bld.env['build_target'] == 'mingw': if bld.env['build_target'] == 'mingw':
obj.install_path = bld.env['BINDIR'] obj.install_path = bld.env['BINDIR']
if bld.is_defined('NEED_INTL'): if bld.is_defined('NEED_INTL'):
obj.linkflags = ' -lintl' obj.linkflags += ' -lintl'
def build(bld): def build(bld):
# session-utils depend on the dummy backend # session-utils depend on the dummy backend