From 67c6cfce71112ecc2a18327d5da467527c339bd0 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 11 Sep 2019 18:47:44 +0300 Subject: [PATCH] waf: strip installed binaries to reduce size --- scripts/waifulib/strip_on_install.py | 38 ++++++++++++++++++++++++++++ scripts/waifulib/xcompile.py | 11 +++++++- wscript | 2 +- 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 scripts/waifulib/strip_on_install.py diff --git a/scripts/waifulib/strip_on_install.py b/scripts/waifulib/strip_on_install.py new file mode 100644 index 00000000..52da526e --- /dev/null +++ b/scripts/waifulib/strip_on_install.py @@ -0,0 +1,38 @@ +#! /usr/bin/env python +# Modified: Alibek Omarov +# Originally taken from Thomas Nagy's blogpost + +""" +Strip executables upon installation +""" + +import shutil, os +from waflib import Build, Utils, Context, Errors, Logs + +def configure(conf): + if conf.env.DEST_BINFMT in ['elf', 'mac-o']: + conf.find_program('strip') + if not conf.env.STRIPFLAGS: + conf.env.STRIPFLAGS = os.environ['STRIPFLAGS'] if 'STRIPFLAGS' in os.environ else [] + +def copy_fun(self, src, tgt): + inst_copy_fun(self, src, tgt) + + if self.env.KEEP_DEBUG_INFO: + return # don't strip debug information in debug mode + + if getattr(self.generator, 'link_task', None) and self.generator.link_task.outputs[0] in self.inputs: + cmd = self.env.STRIP + self.env.STRIPFLAGS + [tgt] + try: + if not self.generator.bld.progress_bar: + c1 = Logs.colors.NORMAL + c2 = Logs.colors.CYAN + + Logs.info('%s+ strip %s%s%s', c1, c2, tgt, c2) + self.generator.bld.cmd_and_log(cmd, output=Context.BOTH, quiet=Context.BOTH) + except Errors.WafError as e: + print(e.stdout, e.stderr) + +inst_copy_fun = Build.inst.copy_fun +Build.inst.copy_fun = copy_fun + diff --git a/scripts/waifulib/xcompile.py b/scripts/waifulib/xcompile.py index c0365ddd..96f9450b 100644 --- a/scripts/waifulib/xcompile.py +++ b/scripts/waifulib/xcompile.py @@ -156,7 +156,7 @@ class Android: toolchain_host += '-' # Assuming we are building on x86 - if sys.maxsize > 2**32: + if sys.maxsize > 2**32: toolchain_host += 'x86_64' else: toolchain_host += 'x86' @@ -187,6 +187,9 @@ class Android: triplet = self.ndk_triplet() + '-' return os.path.join(self.gen_gcc_toolchain_path(), 'bin', triplet) + def gen_binutils_path(self): + return os.path.join(self.gen_gcc_toolchain_path(), self.ndk_triplet(), 'bin') + def cc(self): if self.is_host(): return 'clang' @@ -197,6 +200,11 @@ class Android: return 'clang++' return self.toolchain_path + ('clang++' if self.is_clang() else 'g++') + def strip(self): + if self.is_host(): + return 'strip' + return os.path.join(self.gen_binutils_path(), 'strip') + def system_stl(self): # TODO: proper STL support return os.path.abspath(os.path.join(self.ndk_home, 'sources', 'cxx-stl', 'system', 'include')) @@ -305,6 +313,7 @@ def configure(conf): setattr(conf, 'android', android) conf.environ['CC'] = android.cc() conf.environ['CXX'] = android.cxx() + conf.environ['STRIP'] = android.strip() conf.env.CFLAGS += android.cflags() conf.env.CXXFLAGS += android.cflags() conf.env.LINKFLAGS += android.linkflags() diff --git a/wscript b/wscript index 52380847..05188c79 100644 --- a/wscript +++ b/wscript @@ -90,7 +90,7 @@ def configure(conf): conf.env.MSVC_TARGETS = ['x86'] # explicitly request x86 target for MSVC if sys.platform == 'win32': conf.load('msvc msvcfix msdev msvs') - conf.load('xcompile compiler_c compiler_cxx gitversion clang_compilation_database') + conf.load('xcompile compiler_c compiler_cxx gitversion clang_compilation_database strip_on_install') # Every static library must have fPIC if conf.env.DEST_OS != 'win32' and '-fPIC' in conf.env.CFLAGS_cshlib: