From bebec0702c4cbe1170e3172c59b641f3635e1153 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Wed, 12 Jul 2017 14:26:16 +0200 Subject: [PATCH 1/3] CMakeBuilder and MesonBuilder respect the force_native_build flag. We must not use crossfile if we are building a native dependency. --- dependency_utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dependency_utils.py b/dependency_utils.py index a74b1d7d..e1b3b0d8 100644 --- a/dependency_utils.py +++ b/dependency_utils.py @@ -274,6 +274,9 @@ def _install(self, context): class CMakeBuilder(MakeBuilder): def _configure(self, context): context.try_skip(self.build_path) + cross_option = "" + if not self.target.force_native_build and self.buildEnv.cmake_crossfile: + cross_option = "-DCMAKE_TOOLCHAIN_FILE={}".format(self.buildEnv.cmake_crossfile) command = ("cmake {configure_option}" " -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" " -DCMAKE_INSTALL_PREFIX={install_dir}" @@ -285,7 +288,7 @@ def _configure(self, context): install_dir=self.buildEnv.install_dir, libdir=self.buildEnv.libprefix, source_path=self.source_path, - cross_option="-DCMAKE_TOOLCHAIN_FILE={}".format(self.buildEnv.cmake_crossfile) if self.buildEnv.cmake_crossfile else "" + cross_option=cross_option ) env = Defaultdict(str, os.environ) if self.buildEnv.platform_info.static: @@ -313,6 +316,10 @@ def _configure(self, context): shutil.rmtree(self.build_path) os.makedirs(self.build_path) configure_option = self.configure_option.format(buildEnv=self.buildEnv) + cross_option = "" + if not self.target.force_native_build and self.buildEnv.meson_crossfile: + cross_option = "--cross-file {}".format( + self.buildEnv.meson_crossfile) command = ("{command} . {build_path}" " --default-library={library_type}" " {configure_option}" @@ -325,7 +332,7 @@ def _configure(self, context): configure_option=configure_option, build_path=self.build_path, buildEnv=self.buildEnv, - cross_option="--cross-file {}".format(self.buildEnv.meson_crossfile) if self.buildEnv.meson_crossfile else "" + cross_option=cross_option ) self.buildEnv.run_command(command, self.source_path, context, cross_env_only=True) From 1fda64670868ca7585b2ecb5c47d0785c21eb4b8 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Wed, 12 Jul 2017 14:30:55 +0200 Subject: [PATCH 2/3] Always build ctpp2c for the host and static. We are using `ctpp2c` when building kiwix-lib to compile embedded resources. As `ctpp2c` will be used in the host machine, it always need to be compiled for the host (native). But we still want tho ctpp2 library compiled for the target platform. As we don't want handle the conflict between two dynamic lib with the same name but for two different platforms, we build ctpp2c statically. --- dependencies.py | 26 +++++++++++++++++++++-- patches/ctpp2_compile_ctpp2c_static.patch | 13 ++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 patches/ctpp2_compile_ctpp2c_static.patch diff --git a/dependencies.py b/dependencies.py index b22ce2e4..606bd75c 100644 --- a/dependencies.py +++ b/dependencies.py @@ -143,12 +143,34 @@ class Source(ReleaseDownload): "ctpp2_mingw32.patch", "ctpp2_dll_export_VMExecutable.patch", "ctpp2_win_install_lib_in_lib_dir.patch", - "ctpp2_iconv_support.patch"] + "ctpp2_iconv_support.patch", + "ctpp2_compile_ctpp2c_static.patch", + ] class Builder(CMakeBuilder): configure_option = "-DMD5_SUPPORT=OFF" +class CTPP2C(CTPP2): + name = "ctpp2c" + force_native_build = True + + class Builder(CTPP2.Builder): + make_target = "ctpp2c" + + @property + def build_path(self): + return super().build_path+"_native" + + def _install(self, context): + context.try_skip(self.build_path) + command = "cp {ctpp2c}* {install_dir}".format( + ctpp2c=pj(self.build_path, 'ctpp2c'), + install_dir=pj(self.buildEnv.install_dir, 'bin') + ) + self.buildEnv.run_command(command, self.build_path, context) + + class Pugixml(Dependency): name = "pugixml" version = "1.2" @@ -272,7 +294,7 @@ class Kiwixlib(Dependency): def dependencies(self): base_dependencies = ["pugixml", "libzim", "zlib", "lzma"] if self.buildEnv.platform_info.build != 'android': - base_dependencies += ['ctpp2'] + base_dependencies += ['ctpp2', 'ctpp2c'] if self.buildEnv.platform_info.build != 'native': return base_dependencies + ["icu4c_cross-compile"] else: diff --git a/patches/ctpp2_compile_ctpp2c_static.patch b/patches/ctpp2_compile_ctpp2c_static.patch new file mode 100644 index 00000000..398d306e --- /dev/null +++ b/patches/ctpp2_compile_ctpp2c_static.patch @@ -0,0 +1,13 @@ +diff -u ctpp2-2.8.3/CMakeLists.txt ctpp2-2.8.3-static/CMakeLists.txt +--- ctpp2-2.8.3/CMakeLists.txt 2017-07-12 11:53:28.656535071 +0200 ++++ ctpp2-2.8.3-static/CMakeLists.txt 2017-07-12 11:52:15.358692988 +0200 +@@ -464,7 +464,8 @@ + + # CTPP Compiler + ADD_EXECUTABLE(ctpp2c tests/CTPP2Compiler.cpp) +-TARGET_LINK_LIBRARIES(ctpp2c ctpp2) ++TARGET_LINK_LIBRARIES(ctpp2c ctpp2-static) ++TARGET_LINK_LIBRARIES(ctpp2c "-static") + + # CTPP2 Interpreter + ADD_EXECUTABLE(ctpp2i tests/CTPP2Interpreter.cpp) From 0671712753d4c950b1326acd15afebec5ae2805e Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Wed, 12 Jul 2017 14:51:00 +0200 Subject: [PATCH 3/3] Install ctpp2-utils to have ctpp2 compiler installed. ctpp2c is available in debian, so no need to compile it. --- kiwix-build.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/kiwix-build.py b/kiwix-build.py index c7e70bc8..a37019e1 100755 --- a/kiwix-build.py +++ b/kiwix-build.py @@ -79,6 +79,7 @@ 'zlib': ['zlib1g-dev'], 'uuid': ['uuid-dev'], 'ctpp2': ['libctpp2-dev'], + 'ctpp2c': ['ctpp2-utils'], 'libmicrohttpd': ['libmicrohttpd-dev', 'ccache'] }, 'debian_native_static': { @@ -86,21 +87,27 @@ 'zlib': ['zlib1g-dev'], 'uuid': ['uuid-dev'], 'ctpp2': ['libctpp2-dev'], + 'ctpp2c': ['ctpp2-utils'], }, 'debian_win32_dyn': { - 'COMMON': _debian_common + ['g++-mingw-w64-i686', 'gcc-mingw-w64-i686', 'gcc-mingw-w64-base', 'mingw-w64-tools'] + 'COMMON': _debian_common + ['g++-mingw-w64-i686', 'gcc-mingw-w64-i686', 'gcc-mingw-w64-base', 'mingw-w64-tools'], + 'ctpp2c': ['ctpp2-utils'], }, 'debian_win32_static': { - 'COMMON': _debian_common + ['g++-mingw-w64-i686', 'gcc-mingw-w64-i686', 'gcc-mingw-w64-base', 'mingw-w64-tools'] + 'COMMON': _debian_common + ['g++-mingw-w64-i686', 'gcc-mingw-w64-i686', 'gcc-mingw-w64-base', 'mingw-w64-tools'], + 'ctpp2c': ['ctpp2-utils'], }, 'debian_armhf_static': { - 'COMMON': _debian_common + 'COMMON': _debian_common, + 'ctpp2c': ['ctpp2-utils'], }, 'debian_armhf_dyn': { - 'COMMON': _debian_common + 'COMMON': _debian_common, + 'ctpp2c': ['ctpp2-utils'], }, 'debian_android': { - 'COMMON': _debian_common + ['default-jdk'] + 'COMMON': _debian_common + ['default-jdk'], + 'ctpp2c': ['ctpp2-utils'], }, }