mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-04-21 13:07:19 +00:00

Builds use a mix of styles for the hash table in the ELF header. Only one style of table is necessary, and the GNU one is more performant for lookups. Eliminating the SysV style hash table trims ~450kb. This is done via setting the default linker in gcc instead of LDFLAGS as some packages ignore LDFLAGS. Note that if MIPS is ever added as a supported architecture, it does not support hash-style=gnu at this time. Signed-off-by: Ian Leonard <antonlacon@gmail.com>
96 lines
2.9 KiB
Plaintext
96 lines
2.9 KiB
Plaintext
GCC_OPTIM="-Os"
|
|
# Linker hash-style is set to gnu via gcc default
|
|
LD_OPTIM="-Wl,--as-needed"
|
|
|
|
if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
|
|
TARGET_CFLAGS="$TARGET_CFLAGS -ggdb"
|
|
TARGET_CXXFLAGS="$TARGET_CXXFLAGS -ggdb"
|
|
TARGET_LDFLAGS="$TARGET_LDFLAGS -ggdb"
|
|
else
|
|
TARGET_CFLAGS="$TARGET_CFLAGS -fomit-frame-pointer"
|
|
TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fomit-frame-pointer"
|
|
TARGET_LDFLAGS="$TARGET_LDFLAGS"
|
|
fi
|
|
|
|
NINJA_OPTS=""
|
|
|
|
TARGET_CPPFLAGS=""
|
|
TARGET_CFLAGS="$TARGET_CFLAGS -Wall -pipe $GCC_OPTIM $PROJECT_CFLAGS"
|
|
TARGET_CXXFLAGS="$TARGET_CFLAGS"
|
|
TARGET_LDFLAGS="$TARGET_LDFLAGS $LD_OPTIM"
|
|
TARGET_LIBDIR="$SYSROOT_PREFIX/lib $SYSROOT_PREFIX/usr/lib"
|
|
TARGET_INCDIR="$SYSROOT_PREFIX/include $SYSROOT_PREFIX/usr/include"
|
|
|
|
HOST_CPPFLAGS=""
|
|
HOST_CFLAGS="-O2 -Wall -pipe -I$TOOLCHAIN/include"
|
|
HOST_CXXFLAGS="$HOST_CFLAGS"
|
|
HOST_LDFLAGS="-Wl,-rpath,$TOOLCHAIN/lib -L$TOOLCHAIN/lib"
|
|
HOST_INCDIR="$TOOLCHAIN/include /usr/include"
|
|
|
|
# work around Ubuntu default C*FLAGS
|
|
# see https://wiki.ubuntu.com/ToolChain/CompilerFlags#A-Wformat_-Wformat-security
|
|
HOST_CFLAGS="$HOST_CFLAGS -Wno-format-security"
|
|
HOST_CXXFLAGS="$HOST_CXXFLAGS -Wno-format-security"
|
|
|
|
# lto flags
|
|
FLAGS_OPTIM_LTO_NO_PARALLEL="-flto"
|
|
FLAGS_OPTIM_LTO_PARALLEL="-flto=${CONCURRENCY_MAKE_LEVEL}"
|
|
FLAGS_OPTIM_LTO_NO_FAT="-fno-fat-lto-objects"
|
|
FLAGS_OPTIM_LTO_FAT="-ffat-lto-objects"
|
|
FLAGS_OPTIM_LTO_OFF="-fno-lto"
|
|
LDFLAGS_OPTIM_LTO_COMMON="-fuse-linker-plugin"
|
|
|
|
# gold flags
|
|
LDFLAGS_OPTIM_GOLD="-fuse-ld=gold"
|
|
|
|
# position-independent code
|
|
CFLAGS_OPTIM_PIC="-fPIC -DPIC"
|
|
CXXFLAGS_OPTIM_PIC="-fPIC -DPIC"
|
|
LDFLAGS_OPTIM_PIC="-fPIC"
|
|
|
|
# hardening support
|
|
# TODO: basiclly copied from debian 9, should adjust for LE
|
|
CFLAGS_OPTIM_HARDENING="-fstack-protector-strong -Wformat -Werror=format-security -fPIE"
|
|
CXXFLAGS_OPTIM_HARDENING="-fstack-protector-strong -Wformat -Werror=format-security -fPIE"
|
|
CPPFLAGS_OPTIM_HARDENING="-D_FORTIFY_SOURCE=2"
|
|
LDFLAGS_OPTIM_HARDENING="-Wl,-z,relro -Wl,-z,now"
|
|
|
|
# add distro specific library dirs
|
|
if [ -z "$HOST_LIBDIR" ]; then
|
|
HOST_LIBDIR="$TOOLCHAIN/lib"
|
|
|
|
# ubuntu/debian specific "multiarch support"
|
|
MACHINE_HARDWARE_NAME="$(uname -m)"
|
|
MACHINE_HARDWARE_PLATFORM="$(uname -i)"
|
|
FAMILY_TRIPLET=${HOST_NAME/${MACHINE_HARDWARE_NAME}/${MACHINE_HARDWARE_PLATFORM}}
|
|
if [ -d /lib/$FAMILY_TRIPLET ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /lib/$FAMILY_TRIPLET"
|
|
fi
|
|
if [ -d /usr/lib/$FAMILY_TRIPLET ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /usr/lib/$FAMILY_TRIPLET"
|
|
fi
|
|
|
|
# default multiarch support
|
|
case "${MACHINE_HARDWARE_NAME}" in
|
|
i*86)
|
|
if [ -d /lib32 ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /lib32"
|
|
fi
|
|
if [ -d /usr/lib32 ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /usr/lib32"
|
|
fi
|
|
;;
|
|
x86_64)
|
|
if [ -d /lib64 ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /lib64"
|
|
fi
|
|
if [ -d /usr/lib64 ]; then
|
|
HOST_LIBDIR="$HOST_LIBDIR /usr/lib64"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# default dirs
|
|
export HOST_LIBDIR="$HOST_LIBDIR /lib /usr/lib"
|
|
fi
|