From a8d2b269b15cba12fb11dc986e5685dc12fec928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20B=C3=A1lint=20Misius?= Date: Thu, 6 Oct 2022 07:41:08 +0200 Subject: [PATCH] Move tricky compiler options over to build.sh All of these are options that are specific to our ghactions builds and not something we want downstream and package maintainers to be locked into using. --- .github/build.sh | 54 +++++++++++++++++++++++++++++++++++------------- meson.build | 29 +++----------------------- 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/.github/build.sh b/.github/build.sh index ddd42a9cc..6ea2ec925 100755 --- a/.github/build.sh +++ b/.github/build.sh @@ -138,24 +138,32 @@ if [[ -d build ]]; then rm -r build fi +c_args= +c_link_args= +if [[ $BSH_HOST_PLATFORM-$BSH_HOST_LIBC != windows-msvc ]]; then + c_args+=\'-ffunction-sections\', + c_args+=\'-fdata-sections\', + if [[ $BSH_HOST_PLATFORM == darwin ]]; then + c_link_args+=\'-Wl,-dead_strip\', + else + c_link_args+=\'-Wl,--gc-sections\', + fi +fi +if [[ $BSH_HOST_PLATFORM == darwin ]]; then + if [[ $BSH_HOST_ARCH == aarch64 ]]; then + c_args+=\'-mmacosx-version-min=11.0\', + c_link_args+=\'-mmacosx-version-min=11.0\', + else + c_args+=\'-mmacosx-version-min=10.9\', + c_link_args+=\'-mmacosx-version-min=10.9\', + fi +fi + meson_configure=meson if [[ $BSH_DEBUG_RELEASE == release ]]; then meson_configure+=$'\t'-Dbuildtype=debugoptimized fi meson_configure+=$'\t'-Db_strip=false -meson_configure+=$'\t'-Db_pie=false -if [[ $BSH_HOST_PLATFORM-$BSH_HOST_LIBC != windows-msvc ]]; then - meson_configure+=$'\t'-Dc_args=[\'-ffunction-sections\',\'-fdata-sections\'] - meson_configure+=$'\t'-Dcpp_args=[\'-ffunction-sections\',\'-fdata-sections\'] - if [[ $BSH_HOST_PLATFORM == darwin ]]; then - meson_configure+=$'\t'-Dc_link_args=[\'-Wl,-dead_strip\'] - meson_configure+=$'\t'-Dcpp_link_args=[\'-Wl,-dead_strip\'] - else - meson_configure+=$'\t'-Dc_link_args=[\'-Wl,--gc-sections\'] - meson_configure+=$'\t'-Dcpp_link_args=[\'-Wl,--gc-sections\'] - fi -fi -meson_configure+=$'\t'-Dworkaround_gcc_no_pie=true meson_configure+=$'\t'-Db_staticpic=false meson_configure+=$'\t'-Dinstall_check=true meson_configure+=$'\t'-Dmod_id=$MOD_ID @@ -166,9 +174,23 @@ fi if [[ $BSH_STATIC_DYNAMIC == static ]]; then meson_configure+=$'\t'-Dstatic=prebuilt if [[ $BSH_HOST_PLATFORM == windows ]]; then - meson_configure+=$'\t'-Db_vscrt=static_from_buildtype + if [[ $BSH_HOST_LIBC == msvc ]]; then + meson_configure+=$'\t'-Db_vscrt=static_from_buildtype + else + c_link_args+=\'-static\', + c_link_args+=\'-static-libgcc\', + c_link_args+=\'-static-libstdc++\', + fi + elif [[ $BSH_HOST_PLATFORM == linux ]]; then + c_link_args+=\'-static-libgcc\', + c_link_args+=\'-static-libstdc++\', fi fi +if [[ $BSH_HOST_PLATFORM == linux ]] && [[ $BSH_HOST_ARCH != aarch64 ]]; then + # certain file managers can't run PIEs https://bugzilla.gnome.org/show_bug.cgi?id=737849 + meson_configure+=$'\t'-Db_pie=false + c_link_args+=\'-no-pie\', +fi stable_or_beta=no if [[ $RELEASE_TYPE == beta ]]; then meson_configure+=$'\t'-Dbeta=true @@ -274,6 +296,10 @@ ANDROID_INI meson_configure+=$'\t'--cross-file=.github/android-ghactions.ini meson_configure+=$'\t'-Dhttp=false fi +meson_configure+=$'\t'-Dc_args=[$c_args] +meson_configure+=$'\t'-Dcpp_args=[$c_args] +meson_configure+=$'\t'-Dc_link_args=[$c_link_args] +meson_configure+=$'\t'-Dcpp_link_args=[$c_link_args] $meson_configure build cd build if [[ $BSH_BUILD_PLATFORM == windows ]]; then diff --git a/meson.build b/meson.build index 6930aefb5..c2cc196db 100644 --- a/meson.build +++ b/meson.build @@ -208,9 +208,6 @@ else '-DUNICODE', '-D_UNICODE', ] - if is_static and host_platform != 'android' - project_link_args += [ '-static', '-static-libgcc', '-static-libstdc++' ] - endif endif if not is_debug args_ccomp += [ @@ -220,30 +217,14 @@ else '-fomit-frame-pointer', ] endif - if host_platform == 'darwin' - if host_arch == 'aarch64' - macosx_version_min = [ '-mmacosx-version-min=11.0' ] - else - macosx_version_min = [ '-mmacosx-version-min=10.9' ] - endif - args_ccomp += macosx_version_min - project_link_args += macosx_version_min - endif if host_platform == 'android' if not is_64bit args_ccomp += [ '-U_FILE_OFFSET_BITS' ] endif + # android doesn't ship libc++_shared.so, so we might as well link it statically; + # the alternative would be to grab libc++_shared.so from the NDK and ship it with + # the app alongside libpowder.so, and possibly add it to SDL's list of libraries to load project_link_args += [ '-static-libstdc++' ] - else - if not get_option('b_pie') and get_option('workaround_gcc_no_pie') # nice one, meson - if host_arch != 'aarch64' # no position independent executable for aarch64 - if c_compiler.get_id() in [ 'clang' ] - project_link_args += [ '-Wl,-no_pie' ] - else - project_link_args += [ '-no-pie' ] - endif - endif - endif endif project_c_args += args_ccomp + [ '-Wno-implicit-fallthrough', @@ -285,10 +266,6 @@ if host_platform == 'windows' endif endforeach endif -elif host_platform == 'linux' - if is_static - project_link_args += [ '-static-libgcc', '-static-libstdc++' ] - endif endif if host_platform == 'darwin' and lua_variant == 'luajit' and host_arch != 'aarch64'