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 += [ 'windows_icon.rc' ]
else:
obj.linkflags += ' -zexecstack'
obj.source += [ 'bundle_env_linux.cc' ]
obj.use += [ 'X11' ]

View file

@ -21,6 +21,7 @@ def build(bld):
obj.source = hardour_sources
obj.target = 'hardour-' + bld.env['VERSION']
obj.includes = ['.']
obj.linkflags= ''
obj.use = [ 'libpbd',
'libardour',
'libardour_cp',
@ -51,11 +52,13 @@ def build(bld):
if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility'
elif bld.env['build_target'] == 'mingw':
if bld.env['DEBUG'] == False:
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
obj.includes += ['../libs']
if bld.env['build_target'] == 'mingw':
if bld.env['DEBUG'] == False:
obj.linkflags = ['-mwindows']
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.target = 'ardour-vst3-scanner'
obj.includes = [ '../pbd/', '../ardour/', '../vst3/', '..' ]
obj.linkflags = ''
obj.defines = [
'VST3_SCANNER_APP',
'VERSIONSTRING="' + bld.env['VERSION'] + '"',
@ -31,11 +32,14 @@ def build(bld):
if bld.is_defined('HAVE_USB'):
obj.uselib += ' USB'
if sys.platform == 'darwin':
obj.uselib += ' OSX'
if bld.env['build_target'] == 'mingw':
obj.uselib += ' GDI32'
obj.linkflags = ['-mwindows']
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
if re.search ("bsd", sys.platform) != None:
obj.defines.append('_POSIX_C_SOURCE=200809L')
@ -47,10 +51,10 @@ def build(bld):
obj = bld (features = 'cxx c cxxprogram')
obj.source = ( 'vst2-scanner.cc' )
obj.target = 'ardour-vst-scanner'
obj.linkflags= ''
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.linkflags = ['-mwindows']
obj.use = [ 'libpbd', 'libtemporal', 'libevoral', 'vstwin' ]
else:
obj.uselib = ['GIOMM', 'DL', 'OSX', 'ARCHIVE', 'CURL', 'XML' ]
@ -59,6 +63,13 @@ def build(bld):
if bld.is_defined('HAVE_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.defines = [
'_POSIX_SOURCE',

View file

@ -1,5 +1,6 @@
#!/usr/bin/env python
import os
import sys
def options(opt):
pass
@ -10,6 +11,7 @@ def configure(conf):
def build(bld):
if bld.env['build_target'] == 'mingw':
return
obj = bld (features = 'c cprogram')
obj.source = 'exec_wrapper.c'
obj.target = 'ardour-exec-wrapper'
@ -18,3 +20,8 @@ def build(bld):
'_POSIX_SOURCE',
'_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.target = 'luasession'
obj.includes = ['../libs']
obj.linkflags = ''
obj.use = ['liblua',
'libpbd',
'libardour',
@ -66,12 +67,13 @@ def build(bld):
if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility'
if bld.env['build_target'] == 'mingw':
obj.linkflags = ['-mwindows']
elif bld.env['build_target'] == 'mingw':
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
if bld.is_defined('NEED_INTL'):
obj.linkflags = ' -lintl'
obj.linkflags += ' -lintl'
if bld.env['build_target'] == 'mingw':
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.target = pgmprefix + '-' + util
obj.includes = ['.']
obj.linkflags= ''
obj.use = [ 'libpbd',
'libardour',
'libardour_cp',
@ -56,13 +57,18 @@ def build_ardour_util(bld, util):
if sys.platform == 'darwin':
obj.uselib += ' AUDIOUNITS OSX'
obj.use += ' libappleutility'
elif bld.env['build_target'] == 'mingw':
obj.linkflags += ' -mwindows'
else:
obj.linkflags += ' -zexecstack'
obj.includes += ['../libs']
if bld.env['build_target'] == 'mingw':
obj.install_path = bld.env['BINDIR']
if bld.is_defined('NEED_INTL'):
obj.linkflags = ' -lintl'
obj.linkflags += ' -lintl'
def build(bld):
# session-utils depend on the dummy backend