From ec5b06e63d6927779415a50bb669a4c39da72221 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 11 May 2025 15:58:00 +0200 Subject: [PATCH] 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 --- gtk2_ardour/wscript | 1 + headless/wscript | 13 ++++++++----- libs/fst/wscript | 15 +++++++++++++-- libs/vfork/wscript | 7 +++++++ luasession/wscript | 10 ++++++---- session_utils/wscript | 8 +++++++- 6 files changed, 42 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index e037ada3b8..8bf1e1e817 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -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' ] diff --git a/headless/wscript b/headless/wscript index a22c589cb3..8e899e8f08 100644 --- a/headless/wscript +++ b/headless/wscript @@ -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' diff --git a/libs/fst/wscript b/libs/fst/wscript index d0d0ee72a0..2c52d8424c 100644 --- a/libs/fst/wscript +++ b/libs/fst/wscript @@ -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', diff --git a/libs/vfork/wscript b/libs/vfork/wscript index 9bd6a0f3ae..02e4b8c41e 100644 --- a/libs/vfork/wscript +++ b/libs/vfork/wscript @@ -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' diff --git a/luasession/wscript b/luasession/wscript index 0180f87b98..10527f717c 100644 --- a/luasession/wscript +++ b/luasession/wscript @@ -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'] diff --git a/session_utils/wscript b/session_utils/wscript index e15a4bb5ed..381c117e51 100644 --- a/session_utils/wscript +++ b/session_utils/wscript @@ -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