diff --git a/build.pro b/build.pro deleted file mode 100644 index c2ad71c..0000000 --- a/build.pro +++ /dev/null @@ -1,149 +0,0 @@ -TEMPLATE = subdirs - -ROOT_DIR=$$PWD/.. -DEPLOY_DIR=$$PWD/deploy -CORE_ROOT_DIR=$$ROOT_DIR/core - -include($$PWD/common.pri) - -CONFIG += ordered - -core:CONFIG += core_libraries -builder:CONFIG += core_libraries -desktop:CONFIG += core_libraries -server:CONFIG += core_libraries -mobile:CONFIG += core_libraries - -!core_libraries:CONFIG += no_x2t -!core_libraries:CONFIG += no_use_common_binary -!core_libraries:CONFIG += no_tests - -core_windows { - desktop:CONFIG += core_and_multimedia -} -core_linux { - desktop:CONFIG += core_and_multimedia -} -core_mac { - CONFIG += no_desktop_apps -} -core_ios { - CONFIG += no_use_common_binary - CONFIG += no_desktop_apps - CONFIG += no_tests -} -core_android { - CONFIG += no_use_common_binary - CONFIG += no_desktop_apps - CONFIG += no_tests -} - -core_libraries { - addSubProject(cryptopp, $$CORE_ROOT_DIR/Common/3dParty/cryptopp/project/cryptopp.pro) - addSubProject(cfcpp, $$CORE_ROOT_DIR/Common/cfcpp/cfcpp.pro) - addSubProject(unicodeconverter, $$CORE_ROOT_DIR/UnicodeConverter/UnicodeConverter.pro,\ - cryptopp) - addSubProject(kernel, $$CORE_ROOT_DIR/Common/kernel.pro,\ - unicodeconverter) - addSubProject(network, $$CORE_ROOT_DIR/Common/Network/network.pro,\ - kernel unicodeconverter) - addSubProject(graphics, $$CORE_ROOT_DIR/DesktopEditor/graphics/pro/graphics.pro,\ - kernel unicodeconverter) - addSubProject(pdffile, $$CORE_ROOT_DIR/PdfFile/PdfFile.pro,\ - kernel unicodeconverter graphics) - addSubProject(djvufile, $$CORE_ROOT_DIR/DjVuFile/DjVuFile.pro,\ - kernel unicodeconverter graphics pdffile) - addSubProject(xpsfile, $$CORE_ROOT_DIR/XpsFile/XpsFile.pro,\ - kernel unicodeconverter graphics pdffile) - addSubProject(htmlrenderer, $$CORE_ROOT_DIR/HtmlRenderer/htmlrenderer.pro,\ - kernel unicodeconverter graphics) - addSubProject(docxrenderer, $$CORE_ROOT_DIR/DocxRenderer/DocxRenderer.pro,\ - kernel unicodeconverter graphics) - addSubProject(htmlfile2, $$CORE_ROOT_DIR/HtmlFile2/HtmlFile2.pro,\ - kernel unicodeconverter graphics network) - addSubProject(doctrenderer, $$CORE_ROOT_DIR/DesktopEditor/doctrenderer/doctrenderer.pro,\ - kernel unicodeconverter graphics) - addSubProject(fb2file, $$CORE_ROOT_DIR/Fb2File/Fb2File.pro,\ - kernel unicodeconverter graphics) - addSubProject(epubfile, $$CORE_ROOT_DIR/EpubFile/CEpubFile.pro,\ - kernel unicodeconverter graphics htmlfile2) -} -!no_x2t { - addSubProject(docxformat, $$CORE_ROOT_DIR/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro) - addSubProject(pptxformat, $$CORE_ROOT_DIR/OOXML/Projects/Linux/PPTXFormatLib/PPTXFormatLib.pro) - addSubProject(xlsbformat, $$CORE_ROOT_DIR/OOXML/Projects/Linux/XlsbFormatLib/XlsbFormatLib.pro) - - addSubProject(docformat, $$CORE_ROOT_DIR/MsBinaryFile/Projects/DocFormatLib/Linux/DocFormatLib.pro) - addSubProject(pptformat, $$CORE_ROOT_DIR/MsBinaryFile/Projects/PPTFormatLib/Linux/PPTFormatLib.pro) - addSubProject(xlsformat, $$CORE_ROOT_DIR/MsBinaryFile/Projects/XlsFormatLib/Linux/XlsFormatLib.pro) - addSubProject(vbaformat, $$CORE_ROOT_DIR/MsBinaryFile/Projects/VbaFormatLib/Linux/VbaFormatLib.pro) - - addSubProject(txtxmlformat, $$CORE_ROOT_DIR/TxtFile/Projects/Linux/TxtXmlFormatLib.pro) - addSubProject(rtfformat, $$CORE_ROOT_DIR/RtfFile/Projects/Linux/RtfFormatLib.pro) - addSubProject(odffile, $$CORE_ROOT_DIR/OdfFile/Projects/Linux/OdfFormatLib.pro) - - addSubProject(bindocument, $$CORE_ROOT_DIR/OOXML/Projects/Linux/BinDocument/BinDocument.pro) - - addSubProject(x2t, $$CORE_ROOT_DIR/X2tConverter/build/Qt/X2tConverter.pro,\ - docxformat pptxformat xlsbformat docformat pptformat xlsformat vbaformat txtxmlformat rtfformat odffile cfcpp bindocument fb2file epubfile docxrenderer) -} - -!no_use_common_binary { - addSubProject(allfontsgen, $$CORE_ROOT_DIR/DesktopEditor/AllFontsGen/AllFontsGen.pro,\ - kernel unicodeconverter graphics) - addSubProject(allthemesgen, $$CORE_ROOT_DIR/DesktopEditor/allthemesgen/allthemesgen.pro,\ - kernel unicodeconverter graphics) - addSubProject(docbuilder, $$CORE_ROOT_DIR/DesktopEditor/doctrenderer/app_builder/docbuilder.pro,\ - kernel unicodeconverter graphics doctrenderer) - addSubProject(pluginsmanager, $$CORE_ROOT_DIR/DesktopEditor/pluginsmanager/pluginsmanager.pro,\ - kernel) - addSubProject(vboxtester, $$CORE_ROOT_DIR/DesktopEditor/vboxtester/vboxtester.pro,\ - kernel) -} - -!no_tests { - addSubProject(standardtester, $$CORE_ROOT_DIR/Test/Applications/StandardTester/standardtester.pro) - addSubProject(x2ttester, $$CORE_ROOT_DIR/Test/Applications/x2tTester/x2ttester.pro) - addSubProject(metafiletester, $$CORE_ROOT_DIR/Test/Applications/MetafileTester/MetafileTester.pro) - - #TODO: - !linux_arm64:addSubProject(ooxml_crypt, $$CORE_ROOT_DIR/OfficeCryptReader/ooxml_crypt/ooxml_crypt.pro) -} - -core_and_multimedia { - addSubProject(videoplayer, $$ROOT_DIR/desktop-sdk/ChromiumBasedEditors/videoplayerlib/videoplayerlib.pro,\ - kernel unicodeconverter graphics) -} -desktop { - message(desktop) - addSubProject(hunspell, $$CORE_ROOT_DIR/Common/3dParty/hunspell/qt/hunspell.pro) - addSubProject(ooxmlsignature, $$CORE_ROOT_DIR/DesktopEditor/xmlsec/src/ooxmlsignature.pro,\ - kernel unicodeconverter graphics) - addSubProject(documentscore, $$ROOT_DIR/desktop-sdk/ChromiumBasedEditors/lib/ascdocumentscore.pro,\ - kernel unicodeconverter graphics hunspell ooxmlsignature htmlrenderer pdffile djvufile xpsfile) - addSubProject(documentscore_helper, $$ROOT_DIR/desktop-sdk/ChromiumBasedEditors/lib/ascdocumentscore_helper.pro,\ - documentscore) - !core_mac { - addSubProject(qtdocumentscore, $$ROOT_DIR/desktop-sdk/ChromiumBasedEditors/lib/qt_wrapper/qtascdocumentscore.pro,\ - documentscore) - } - - !no_desktop_apps { - core_windows:addSubProject(projicons, $$ROOT_DIR/desktop-apps/win-linux/extras/projicons/ProjIcons.pro,\ - documentscore videoplayer) - core_windows:!build_xp:addSubProject(updatedaemon, $$ROOT_DIR/desktop-apps/win-linux/extras/update-daemon/UpdateDaemon.pro) - addSubProject(desktopapp, $$ROOT_DIR/desktop-apps/win-linux/ASCDocumentEditor.pro,\ - documentscore videoplayer) - } -} - -mobile { - message(mobile) - !desktop { - addSubProject(hunspell, $$CORE_ROOT_DIR/Common/3dParty/hunspell/qt/hunspell.pro) - } -} - -osign { - addSubProject(osign, $$CORE_ROOT_DIR/DesktopEditor/xmlsec/src/osign/lib/osign.pro) -} diff --git a/make.py b/make.py index fe5b572..3f169cb 100755 --- a/make.py +++ b/make.py @@ -1,11 +1,14 @@ #!/usr/bin/env python +import os import sys -sys.path.append('scripts') -sys.path.append('scripts/develop') -sys.path.append('scripts/develop/vendor') -sys.path.append('scripts/core_common') -sys.path.append('scripts/core_common/modules') +__dir__name__ = os.path.dirname(__file__) +sys.path.append(__dir__name__ + '/scripts') +sys.path.append(__dir__name__ + '/scripts/develop') +sys.path.append(__dir__name__ + '/scripts/develop/vendor') +sys.path.append(__dir__name__ + '/scripts/core_common') +sys.path.append(__dir__name__ + '/scripts/core_common/modules') +sys.path.append(__dir__name__ + '/scripts/core_common/modules/android') import config import base import build diff --git a/scripts/base.py b/scripts/base.py index 249b297..cbce14b 100644 --- a/scripts/base.py +++ b/scripts/base.py @@ -697,6 +697,22 @@ def check_congig_option_with_platfom(platform, option_name): return True return False +def correct_makefile_after_qmake(platform, file): + if (0 == platform.find("android")): + if ("android_arm64_v8a" == platform): + replaceInFile(file, "_arm64-v8a.a", ".a") + replaceInFile(file, "_arm64-v8a.so", ".so") + if ("android_armv7" == platform): + replaceInFile(file, "_armeabi-v7a.a", ".a") + replaceInFile(file, "_armeabi-v7a.so", ".so") + if ("android_x86_64" == platform): + replaceInFile(file, "_x86_64.a", ".a") + replaceInFile(file, "_x86_64.so", ".so") + if ("android_x86" == platform): + replaceInFile(file, "_x86.a", ".a") + replaceInFile(file, "_x86.so", ".so") + return + def qt_config_platform_addon(platform): config_addon = "" if (0 == platform.find("win")): @@ -751,6 +767,21 @@ def qt_major_version(): qt_dir = qt_version() return qt_dir.split(".")[0] +def qt_version_decimal(): + qt_dir = qt_version() + return 10 * int(qt_dir.split(".")[0]) + int(qt_dir.split(".")[1]) + +def qt_config_as_param(value): + qt_version = qt_version_decimal() + ret_params = [] + if (66 > qt_version): + ret_params.append("CONFIG+=" + value) + else: + params = value.split() + for name in params: + ret_params.append("CONFIG+=" + name) + return ret_params + def qt_copy_lib(lib, dir): qt_dir = get_env("QT_DEPLOY") if ("windows" == host_platform()): @@ -1429,6 +1460,9 @@ def make_sln_project(directory, sln_path): make_sln(directory, args + ["\"Release|Win32\""], True) return +def get_android_ndk_version(): + return "26.2.11394342" + def get_android_sdk_home(): ndk_root_path = get_env("ANDROID_NDK_ROOT") if (-1 != ndk_root_path.find("/ndk/")): diff --git a/scripts/build.py b/scripts/build.py index a473eab..69f99c5 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -3,9 +3,13 @@ import config import base import os -import multiprocessing +import sys +sys.path.append(os.path.dirname(__file__) + "/..") +import sources +import qmake -def make_pro_file(makefiles_dir, pro_file, qmake_config_addon=""): +# make solution +def make(): platforms = config.option("platform").split() for platform in platforms: if not platform in config.platforms: @@ -14,94 +18,14 @@ def make_pro_file(makefiles_dir, pro_file, qmake_config_addon=""): print("------------------------------------------") print("BUILD_PLATFORM: " + platform) print("------------------------------------------") - old_env = dict(os.environ) - # if you need change output libraries path - set the env variable - # base.set_env("DESTDIR_BUILD_OVERRIDE", os.getcwd() + "/out/android/" + config.branding() + "/mobile") + projects = sources.get_projects(platform) - isAndroid = False if (-1 == platform.find("android")) else True - if isAndroid: - toolchain_platform = "linux-x86_64" - if ("mac" == base.host_platform()): - toolchain_platform = "darwin-x86_64" - base.set_env("ANDROID_NDK_HOST", toolchain_platform) - old_path = base.get_env("PATH") - new_path = base.qt_setup(platform) + "/bin:" - new_path += (base.get_env("ANDROID_NDK_ROOT") + "/toolchains/llvm/prebuilt/" + toolchain_platform + "/bin:") - new_path += old_path - base.set_env("PATH", new_path) - base.set_env("ANDROID_NDK_PLATFORM", "android-21") - - if (-1 != platform.find("ios")): - base.hack_xcode_ios() - - # makefile suffix - file_suff = platform - if (config.check_option("config", "debug")): - file_suff += "_debug_" - file_suff += config.option("branding") - - # setup qt - qt_dir = base.qt_setup(platform) - base.set_env("OS_DEPLOY", platform) - - # qmake CONFIG+=... - config_param = base.qt_config(platform) - if ("" != qmake_config_addon): - config_param += (" " + qmake_config_addon) - - # qmake ADDON - qmake_addon = [] - if ("" != config.option("qmake_addon")): - qmake_addon = config.option("qmake_addon").split() - - if not base.is_file(qt_dir + "/bin/qmake") and not base.is_file(qt_dir + "/bin/qmake.exe"): - print("THIS PLATFORM IS NOT SUPPORTED") - continue - - # non windows platform - if not base.is_windows(): - if base.is_file(makefiles_dir + "/build.makefile_" + file_suff): - base.delete_file(makefiles_dir + "/build.makefile_" + file_suff) - print("make file: " + makefiles_dir + "/build.makefile_" + file_suff) - base.cmd(qt_dir + "/bin/qmake", ["-nocache", pro_file, "CONFIG+=" + config_param] + qmake_addon) - if ("1" == config.option("clean")): - base.cmd_and_return_cwd(base.app_make(), ["clean", "-f", makefiles_dir + "/build.makefile_" + file_suff], True) - base.cmd_and_return_cwd(base.app_make(), ["distclean", "-f", makefiles_dir + "/build.makefile_" + file_suff], True) - base.cmd(qt_dir + "/bin/qmake", ["-nocache", pro_file, "CONFIG+=" + config_param] + qmake_addon) - if not base.is_file(pro_file): - base.cmd(qt_dir + "/bin/qmake", ["-nocache", pro_file, "CONFIG+=" + config_param] + qmake_addon) - if ("0" != config.option("multiprocess")): - base.cmd_and_return_cwd(base.app_make(), ["-f", makefiles_dir + "/build.makefile_" + file_suff, "-j" + str(multiprocessing.cpu_count())]) - else: - base.cmd_and_return_cwd(base.app_make(), ["-f", makefiles_dir + "/build.makefile_" + file_suff]) - else: - qmake_bat = [] - qmake_bat.append("call \"" + config.option("vs-path") + "/vcvarsall.bat\" " + ("x86" if base.platform_is_32(platform) else "x64")) - qmake_bat.append("if exist ./" + makefiles_dir + "/build.makefile_" + file_suff + " del /F ./" + makefiles_dir + "/build.makefile_" + file_suff) - qmake_addon_string = "" - if ("" != config.option("qmake_addon")): - qmake_addon_string = " " + (" ").join(["\"" + addon + "\"" for addon in qmake_addon]) - qmake_bat.append("call \"" + qt_dir + "/bin/qmake\" -nocache " + pro_file + " \"CONFIG+=" + config_param + "\"" + qmake_addon_string) - if ("1" == config.option("clean")): - qmake_bat.append("call nmake clean -f " + makefiles_dir + "/build.makefile_" + file_suff) - qmake_bat.append("call nmake distclean -f " + makefiles_dir + "/build.makefile_" + file_suff) - qmake_bat.append("call \"" + qt_dir + "/bin/qmake\" -nocache " + pro_file + " \"CONFIG+=" + config_param + "\"" + qmake_addon_string) - if ("0" != config.option("multiprocess")): - qmake_bat.append("set CL=/MP") - qmake_bat.append("call nmake -f " + makefiles_dir + "/build.makefile_" + file_suff) - base.run_as_bat(qmake_bat) - - os.environ.clear() - os.environ.update(old_env) - - base.delete_file(".qmake.stash") - -# make build.pro -def make(): - make_pro_file("makefiles", "build.pro") - if config.check_option("platform", "ios") and config.check_option("config", "bundle_xcframeworks"): - make_pro_file("makefiles", "build.pro", "xcframework_platform_ios_simulator") + for pro in projects: + pro_file = os.path.abspath("../" + pro) + qmake.make(platform, pro_file) + if config.check_option("platform", "ios") and config.check_option("config", "bundle_xcframeworks"): + qmake.make(platform, pro_file, "xcframework_platform_ios_simulator") if config.check_option("module", "builder") and base.is_windows() and "onlyoffice" == config.branding(): # check replace diff --git a/scripts/core_common/modules/android/android_ndk.py b/scripts/core_common/modules/android/android_ndk.py new file mode 100755 index 0000000..789dd87 --- /dev/null +++ b/scripts/core_common/modules/android/android_ndk.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python + +import sys +sys.path.append('../../../scripts') +import base +import os + +global archs +archs = ["arm64", "arm", "x86_64", "x86"] + +global platforms +platforms = { + "arm64" : { + "abi" : "arm64-v8a", + "target" : "aarch64-linux-android", + "dst" : "arm64_v8a", + "api" : "23" + }, + "arm" : { + "abi" : "armeabi-v7a", + "target" : "armv7a-linux-androideabi", + "dst" : "armv7", + "api" : "23" + }, + "x86_64" : { + "arch" : "x86_64", + "target" : "x86_64-linux-android", + "dst" : "x86_64", + "api" : "23" + }, + "x86" : { + "arch" : "x86", + "target" : "i686-linux-android", + "dst" : "x86", + "api" : "23" + } +} + +# todo: check arm host! +global host + +if ("linux" == base.host_platform()): + host = { + "name" : "linux", + "arch" : "linux-x86_64" + } +else: + host = { + "name" : "darwin", + "arch" : "darwin-x86_64" + } + +def get_options_dict_as_array(opts): + value = [] + for key in opts: + value.append(key + "=" + opts[key]) + return value + +def get_options_array_as_string(opts): + return " ".join(opts) + +def ndk_dir(): + return base.get_env("ANDROID_NDK_ROOT") + +def sdk_dir(): + ndk_path = ndk_dir() + if (-1 != ndk_path.find("/ndk/")): + return ndk_path + "/../.." + return ndk_path + "/.." + +def toolchain_dir(): + return ndk_dir() + "/toolchains/llvm/prebuilt/" + host["arch"] + +def prepare_platform(arch, cpp_standard=11): + target = platforms[arch]["target"] + api = platforms[arch]["api"] + + ndk_directory = ndk_dir() + toolchain = toolchain_dir() + + base.set_env("TARGET", target) + base.set_env("TOOLCHAIN", toolchain) + base.set_env("NDK_STANDARD_ROOT", toolchain) + base.set_env("ANDROIDVER", api) + base.set_env("ANDROID_API", api) + + base.set_env("AR", toolchain + "/bin/llvm-ar") + base.set_env("AS", toolchain + "/bin/llvm-as") + base.set_env("LD", toolchain + "/bin/ld") + base.set_env("RANLIB", toolchain + "/bin/llvm-ranlib") + base.set_env("STRIP", toolchain + "/bin/llvm-strip") + + base.set_env("CC", target + api + "-clang") + base.set_env("CXX", target + api + "-clang++") + + base.set_env("LDFLAGS", "-lc -lstdc++ -Wl,--gc-sections,-rpath-link=" + toolchain + "/sysroot/usr/lib/") + base.set_env("PATH", toolchain + "/bin" + os.pathsep + base.get_env("PATH")) + + cflags = [ + "-Os", + "-ffunction-sections", + "-fdata-sections", + "-fvisibility=hidden", + + "-Wno-unused-function", + + "-fPIC", + + "-I" + toolchain + "/sysroot/usr/include", + + "-D__ANDROID_API__=" + api, + "-DANDROID" + ] + + cflags_string = " ".join(cflags) + cppflags_string = cflags_string + + if (cpp_standard >= 11): + cppflags_string += " -std=c++11" + + base.set_env("CFLAGS", cflags_string) + base.set_env("CXXFLAGS", cppflags_string) + base.set_env("CPPPLAGS", cflags_string) + return + +def extend_cflags(params): + base.set_env("CFLAGS", base.get_env("CFLAGS") + " " + params) + base.set_env("CPPFLAGS", base.get_env("CFLAGS")) + return + +def extend_cxxflags(params): + base.set_env("CXXFLAGS", base.get_env("CXXFLAGS") + " " + params) + return + +def extend_ldflags(params): + base.set_env("LDFLAGS", base.get_env("LDFLAGS") + " " + params) + return diff --git a/scripts/core_common/modules/android/curl_android.py b/scripts/core_common/modules/android/curl_android.py new file mode 100755 index 0000000..cb4674c --- /dev/null +++ b/scripts/core_common/modules/android/curl_android.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +import sys +sys.path.append('../../../scripts') +import base +import os +import android_ndk + +current_dir = base.get_script_dir() + "/../../core/Common/3dParty/curl" +current_dir = os.path.abspath(current_dir) +if not current_dir.endswith("/"): + current_dir += "/" + +lib_version = "curl-7_68_0" +lib_name = "curl-7.68.0" + +def fetch(): + if not base.is_dir(current_dir + lib_name): + base.cmd("curl", ["-L", "-s", "-o", current_dir + lib_name + ".tar.gz", + "https://github.com/curl/curl/releases/download/" + lib_version + "/" + lib_name + ".tar.gz"]) + base.cmd("tar", ["xfz", current_dir + lib_name + ".tar.gz", "-C", current_dir]) + return + +def build_host(): + return + +def build_arch(arch): + dst_dir = current_dir + "build/android/" + android_ndk.platforms[arch]["dst"] + if base.is_dir(dst_dir): + return + + android_ndk.prepare_platform(arch) + + ndk_dir = android_ndk.ndk_dir() + toolchain = android_ndk.toolchain_dir() + + base.set_env("ANDROID_NDK_HOME", ndk_dir) + base.set_env("ANDROID_NDK", ndk_dir) + + arch_build_dir = os.path.abspath(current_dir + "build/android/tmp") + base.create_dir(arch_build_dir) + + old_cur = os.getcwd() + os.chdir(current_dir + lib_name) + + params = [] + if ("arm64" == arch): + params.append("--host=aarch64-linux-android") + elif ("arm" == arch): + params.append("--host=arm-linux-androideabi") + elif ("x86_64" == arch): + params.append("--host=x86_64-linux-android") + elif ("x86" == arch): + params.append("--host=i686-linux-android") + + openssl_dir = os.path.abspath(current_dir + "../openssl/build/android/" + android_ndk.platforms[arch]["dst"]) + + params.append("--enable-ipv6") + params.append("--enable-static") + params.append("--disable-shared") + params.append("--prefix=" + arch_build_dir) + params.append("--with-ssl=" + openssl_dir) + + base.cmd("./configure", params) + + base.cmd("make", ["clean"]) + base.cmd("make", ["-j4"]) + base.cmd("make", ["install"]) + + os.chdir(old_cur) + + base.create_dir(dst_dir) + base.copy_file(arch_build_dir + "/lib/libcurl.a", dst_dir) + base.copy_dir(arch_build_dir + "/include", current_dir + "build/android/include") + + base.delete_dir(arch_build_dir) + return + +def make(): + old_env = dict(os.environ) + + fetch() + + build_host() + + for arch in android_ndk.archs: + build_arch(arch) + + os.environ.clear() + os.environ.update(old_env) + return + +if __name__ == "__main__": + make() diff --git a/scripts/core_common/modules/android/icu_android.py b/scripts/core_common/modules/android/icu_android.py new file mode 100755 index 0000000..dac8e7a --- /dev/null +++ b/scripts/core_common/modules/android/icu_android.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python + +import sys +sys.path.append('../../../scripts') +import base +import os +import android_ndk + +current_dir = base.get_script_dir() + "/../../core/Common/3dParty/icu/android" +current_dir = os.path.abspath(current_dir) +if not current_dir.endswith("/"): + current_dir += "/" + +icu_major = "58" +icu_minor = "3" + +options = { + "--enable-strict" : "no", + "--enable-extras" : "no", + "--enable-draft" : "yes", + "--enable-samples" : "no", + "--enable-tests" : "no", + "--enable-renaming" : "yes", + "--enable-icuio" : "no", + "--enable-layoutex" : "no", + "--with-library-bits" : "nochange", + "--with-library-suffix" : "", + "--enable-static" : "yes", + "--enable-shared" : "no", + "--with-data-packaging" : "archive" +} + +cpp_flags_base = [ + "-Os", + "-ffunction-sections", + "-fdata-sections", + "-fvisibility=hidden", + "-fPIC" +] + +cpp_flags = [ + "-fno-short-wchar", + "-fno-short-enums", + + "-DU_USING_ICU_NAMESPACE=0", + "-DU_HAVE_NL_LANGINFO_CODESET=0", + "-DU_TIMEZONE=0", + "-DU_DISABLE_RENAMING=0", + + "-DUCONFIG_NO_COLLATION=0", + "-DUCONFIG_NO_FORMATTING=0", + "-DUCONFIG_NO_LEGACY_CONVERSION=1", + "-DUCONFIG_NO_REGULAR_EXPRESSIONS=0", + "-DUCONFIG_NO_TRANSLITERATION=0", + + "-DU_STATIC_IMPLEMENTATION" +] + +def fetch_icu(): + if not base.is_dir(current_dir + "icu"): + base.cmd("git", ["clone", "--depth", "1", "--branch", "maint/maint-" + icu_major, "https://github.com/unicode-org/icu.git", current_dir + "icu2"]) + base.copy_dir(current_dir + "icu2/icu4c", current_dir + "icu") + base.delete_dir_with_access_error(current_dir + "icu2") + if False: + if ("linux" == base.host_platform()): + base.replaceInFile(current_dir + "/icu/source/i18n/digitlst.cpp", "xlocale", "locale") + if ("mac" == base.host_platform()): + base.replaceInFile(current_dir + "/icu/source/tools/pkgdata/pkgdata.cpp", "cmd, \"%s %s -o %s%s %s %s%s %s %s\",", "cmd, \"%s %s -o %s%s %s %s %s %s %s\",") + return + +def build_host(): + cross_build_dir = os.path.abspath(current_dir + "icu/cross_build") + if not base.is_dir(cross_build_dir): + base.create_dir(cross_build_dir) + os.chdir(cross_build_dir) + + ld_flags = "-pthread" + if ("linux" == base.host_platform()): + ld_flags += " -Wl,--gc-sections" + else: + # gcc on OSX does not support --gc-sections + ld_flags += " -Wl,-dead_strip" + + base.set_env("LDFLAGS", ld_flags) + base.set_env("CPPFLAGS", android_ndk.get_options_array_as_string(cpp_flags_base + cpp_flags)) + + host_type = "Linux" + if ("mac" == base.host_platform()): + host_type = "MacOSX/GCC" + + base.cmd("../source/runConfigureICU", [host_type, "--prefix=" + cross_build_dir] + android_ndk.get_options_dict_as_array(options)) + base.cmd("make", ["-j4"]) + base.cmd("make", ["install"]) + + base.create_dir(current_dir + "build") + base.copy_dir(cross_build_dir + "/include", current_dir + "build/include") + + os.chdir(current_dir) + return + +def build_arch(arch): + dst_dir = current_dir + "build/" + android_ndk.platforms[arch]["dst"] + if base.is_dir(dst_dir): + return + + android_ndk.prepare_platform(arch) + android_ndk.extend_cflags(" ".join(cpp_flags)) + + ndk_dir = android_ndk.ndk_dir() + toolchain = android_ndk.toolchain_dir() + + cross_build_dir = os.path.abspath(current_dir + "icu/cross_build") + arch_build_dir = os.path.abspath(current_dir + "build/tmp") + base.create_dir(arch_build_dir) + + os.chdir(arch_build_dir) + base.cmd("./../../icu/source/configure", ["--with-cross-build=" + cross_build_dir] + + android_ndk.get_options_dict_as_array(options) + ["--host=" + android_ndk.platforms[arch]["target"], "--prefix=" + arch_build_dir]) + base.cmd("make", ["-j4"]) + os.chdir(current_dir) + + base.create_dir(dst_dir) + base.copy_file(arch_build_dir + "/lib/libicuuc.a", dst_dir) + base.copy_file(arch_build_dir + "/stubdata/libicudata.a", dst_dir) + base.copy_file(arch_build_dir + "/data/out/icudt" + icu_major + "l.dat", dst_dir) + + base.delete_dir(arch_build_dir) + return + +def make(): + if not base.is_dir(current_dir): + base.create_dir(current_dir) + + old_env = dict(os.environ) + + fetch_icu() + + build_host() + + for arch in android_ndk.archs: + build_arch(arch) + + os.environ.clear() + os.environ.update(old_env) + return + +if __name__ == "__main__": + make() diff --git a/scripts/core_common/modules/android/openssl_android.py b/scripts/core_common/modules/android/openssl_android.py new file mode 100755 index 0000000..1a76ff5 --- /dev/null +++ b/scripts/core_common/modules/android/openssl_android.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +import sys +sys.path.append('../../../scripts') +import base +import os +import android_ndk + +current_dir = base.get_script_dir() + "/../../core/Common/3dParty/openssl" +current_dir = os.path.abspath(current_dir) +if not current_dir.endswith("/"): + current_dir += "/" + +lib_name="openssl-1.1.1t" + +options = [ + "no-shared", + "no-tests", + "enable-ssl3", + "enable-ssl3-method", + "enable-md2", + "no-asm" +] + +def fetch(): + if not base.is_dir(current_dir + lib_name): + base.cmd("curl", ["-L", "-s", "-o", current_dir + lib_name + ".tar.gz", + "https://www.openssl.org/source/" + lib_name + ".tar.gz"]) + base.cmd("tar", ["xfz", current_dir + lib_name + ".tar.gz", "-C", current_dir]) + return + +def build_host(): + # not needed, just create directories + if not base.is_dir(current_dir + "/build"): + base.create_dir(current_dir + "/build") + if not base.is_dir(current_dir + "/build/android"): + base.create_dir(current_dir + "/build/android") + return + +def build_arch(arch): + dst_dir = current_dir + "build/android/" + android_ndk.platforms[arch]["dst"] + if base.is_dir(dst_dir): + return + + android_ndk.prepare_platform(arch) + + ndk_dir = android_ndk.ndk_dir() + toolchain = android_ndk.toolchain_dir() + + base.set_env("ANDROID_NDK_HOME", ndk_dir) + base.set_env("ANDROID_NDK", ndk_dir) + + arch_build_dir = os.path.abspath(current_dir + "build/android/tmp") + base.create_dir(arch_build_dir) + + old_cur = os.getcwd() + os.chdir(current_dir + lib_name) + + base.cmd("./Configure", ["android-" + arch, "--prefix=" + arch_build_dir, "-D__ANDROID_API__=" + android_ndk.platforms[arch]["api"]] + options) + + base.replaceInFile("./Makefile", "LIB_CFLAGS=", "LIB_CFLAGS=-fvisibility=hidden ") + base.replaceInFile("./Makefile", "LIB_CXXFLAGS=", "LIB_CXXFLAGS=-fvisibility=hidden ") + + base.cmd("make", ["clean"]) + base.cmd("make", ["-j4"]) + base.cmd("make", ["install"]) + + os.chdir(old_cur) + + base.create_dir(dst_dir) + base.create_dir(dst_dir + "/lib") + base.copy_file(arch_build_dir + "/lib/libcrypto.a", dst_dir + "/lib") + base.copy_file(arch_build_dir + "/lib/libssl.a", dst_dir + "/lib") + base.copy_dir(arch_build_dir + "/include", dst_dir + "/include") + + base.delete_dir(arch_build_dir) + return + +def make(): + old_env = dict(os.environ) + + fetch() + + build_host() + + for arch in android_ndk.archs: + build_arch(arch) + + os.environ.clear() + os.environ.update(old_env) + return + +if __name__ == "__main__": + make() diff --git a/scripts/core_common/modules/boost_android.py b/scripts/core_common/modules/boost_android.py deleted file mode 100644 index a4fdcfc..0000000 --- a/scripts/core_common/modules/boost_android.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python - -import sys -sys.path.append('../..') -import config -import base -import os - -platforms = { - "arm64_v8a" : { - "name" : "arm64-v8a", - "toolset" : "arm64v8a", - "clang_triple" : "aarch64-linux-android21", - "tool_triple" : "aarch64-linux-android", - "abi" : "aapcs", - "arch" : "arm", - "address_model" : "64", - "compiler_flags" : "", - "linker_flags" : "" - }, - "armv7" : { - "name" : "armeabi-v7a", - "toolset" : "armeabiv7a", - "clang_triple" : "armv7a-linux-androideabi16", - "tool_triple" : "arm-linux-androideabi", - "abi" : "aapcs", - "arch" : "arm", - "address_model" : "32", - "compiler_flags" : "-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp", - "linker_flags" : "-Wl,--fix-cortex-a8" - }, - "x86" : { - "name" : "x86", - "toolset" : "x86", - "clang_triple" : "i686-linux-android16", - "tool_triple" : "i686-linux-android", - "abi" : "sysv", - "arch" : "x86", - "address_model" : "32", - "compiler_flags" : "", - "linker_flags" : "" - }, - "x86_64" : { - "name" : "x86_64", - "toolset" : "x8664", - "clang_triple" : "x86_64-linux-android21", - "tool_triple" : "x86_64-linux-android", - "abi" : "sysv", - "arch" : "x86", - "address_model" : "64", - "compiler_flags" : "", - "linker_flags" : "" - } -} - -base_dir = base.get_script_dir() - -def make(platform): - tmp_build_dir = base_dir + "/core_common/modules/boost" - if (base.is_dir(tmp_build_dir)): - base.delete_dir(tmp_build_dir) - base.copy_dir(base_dir + "/../tools/android/boost", tmp_build_dir) - - current_platform = platforms[platform] - - if (base.host_platform() == "mac"): - source = "prebuilt/linux-x86_64" - dest = "prebuilt/darwin-x86_64" - base.replaceInFile(tmp_build_dir + "/user-config.jam", source, dest) - base.replaceInFile(tmp_build_dir + "/bin/hide/as", source, dest) - base.replaceInFile(tmp_build_dir + "/bin/hide/strip", source, dest) - base.replaceInFile(tmp_build_dir + "/bin/ar", source, dest) - base.replaceInFile(tmp_build_dir + "/bin/clang++", source, dest) - base.replaceInFile(tmp_build_dir + "/bin/ranlib", source, dest) - - build_dir_tmp = tmp_build_dir + "/tmp" - - base.cmd("./bootstrap.sh", ["--with-libraries=filesystem,system,date_time,regex", "--prefix=../build/android_" + platform]) - base.cmd("./b2", ["headers"]) - base.cmd("./b2", ["--clean"]) - - old_path = base.get_env("PATH") - base.set_env("PATH", tmp_build_dir + "/bin:" + old_path) - base.set_env("NDK_DIR", base.get_env("ANDROID_NDK_ROOT")) - - base.set_env("BFA_CLANG_TRIPLE_FOR_ABI", current_platform["clang_triple"]) - base.set_env("BFA_TOOL_TRIPLE_FOR_ABI", current_platform["tool_triple"]) - base.set_env("BFA_COMPILER_FLAGS_FOR_ABI", current_platform["compiler_flags"]) - base.set_env("BFA_LINKER_FLAGS_FOR_ABI", current_platform["linker_flags"]) - - print(current_platform) - base.cmd("./b2", ["-q", "-j4", - "toolset=clang-" + current_platform["toolset"], - "binary-format=elf", - "address-model=" + current_platform["address_model"], - "architecture=" + current_platform["arch"], - "abi=" + current_platform["abi"], - "link=static", - "threading=multi", - "target-os=android", - "--user-config=" + tmp_build_dir + "/user-config.jam", - "--ignore-site-config", - "--layout=system", - "install"], True) - - base.set_env("PATH", old_path) - base.delete_dir(tmp_build_dir) - return diff --git a/scripts/core_common/modules/boost_qt.py b/scripts/core_common/modules/boost_qt.py index 35191ad..2a1a44d 100644 --- a/scripts/core_common/modules/boost_qt.py +++ b/scripts/core_common/modules/boost_qt.py @@ -5,7 +5,7 @@ sys.path.append('../..') import config import base import os -import build +import qmake def make(src_dir, modules, build_platform="android", qmake_addon=""): old_cur = os.getcwd() @@ -23,17 +23,13 @@ def make(src_dir, modules, build_platform="android", qmake_addon=""): pro_file_content.append("TARGET = boost_" + module) pro_file_content.append("TEMPLATE = lib") pro_file_content.append("CONFIG += staticlib") + if (build_platform == "android"): + pro_file_content.append("DEFINES += \"_HAS_AUTO_PTR_ETC=0\"") pro_file_content.append("") pro_file_content.append("CORE_ROOT_DIR = $$PWD/../../../../../..") pro_file_content.append("PWD_ROOT_DIR = $$PWD") pro_file_content.append("include($$PWD/../../../../../base.pri)") pro_file_content.append("") - pro_file_content.append("MAKEFILE=$$PWD/build.makefile_$$CORE_BUILDS_PLATFORM_PREFIX") - pro_file_content.append("core_debug:MAKEFILE=$$join(MAKEFILE, MAKEFILE, \"\", \"_debug_\")") - pro_file_content.append("build_xp:MAKEFILE=$$join(MAKEFILE, MAKEFILE, \"\", \"_xp\")") - pro_file_content.append("OO_BRANDING_SUFFIX = $$(OO_BRANDING)") - pro_file_content.append("!isEmpty(OO_BRANDING_SUFFIX):MAKEFILE=$$join(MAKEFILE, MAKEFILE, \"\", \"$$OO_BRANDING_SUFFIX\")") - pro_file_content.append("") pro_file_content.append("BOOST_SOURCES=$$PWD/../..") pro_file_content.append("INCLUDEPATH += $$BOOST_SOURCES") pro_file_content.append("INCLUDEPATH += $$PWD/include") @@ -43,7 +39,7 @@ def make(src_dir, modules, build_platform="android", qmake_addon=""): pro_file_content.append("DESTDIR = $$BOOST_SOURCES/../build/" + build_platform + "/lib/$$CORE_BUILDS_PLATFORM_PREFIX") base.save_as_script(module_dir + "/" + module + ".pro", pro_file_content) os.chdir(module_dir) - build.make_pro_file("./", module + ".pro", qmake_addon) + qmake.make_all_platforms(module_dir + "/" + module + ".pro", qmake_addon) os.chdir(old_cur) return diff --git a/scripts/core_common/modules/curl.py b/scripts/core_common/modules/curl.py index 219b3ad..2dcb039 100644 --- a/scripts/core_common/modules/curl.py +++ b/scripts/core_common/modules/curl.py @@ -2,21 +2,19 @@ import sys sys.path.append('../..') +sys.path.append('android') import config import subprocess import os import base +import curl_android def make(): path = base.get_script_dir() + "/../../core/Common/3dParty/curl" old_cur = os.getcwd() os.chdir(path) if (-1 != config.option("platform").find("android")): - if base.is_dir(path + "/build/android"): - os.chdir(old_cur) - return - subprocess.call(["./build-android-curl.sh"]) - + curl_android.make() elif (-1 != config.option("platform").find("ios")): if base.is_dir(path + "/build/ios"): os.chdir(old_cur) diff --git a/scripts/core_common/modules/icu.py b/scripts/core_common/modules/icu.py index 7864024..f3b74b6 100755 --- a/scripts/core_common/modules/icu.py +++ b/scripts/core_common/modules/icu.py @@ -2,6 +2,7 @@ import sys sys.path.append('../..') +sys.path.append('android') import config import base import os diff --git a/scripts/core_common/modules/icu_android.py b/scripts/core_common/modules/icu_android.py deleted file mode 100755 index 6b743bb..0000000 --- a/scripts/core_common/modules/icu_android.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python - -import sys -sys.path.append('../..') -import base -import os - -def fetch_icu(major, minor): - base.cmd("git", ["clone", "--depth", "1", "--branch", "maint/maint-" + major, "https://github.com/unicode-org/icu.git", "./icu2"]) - base.copy_dir("./icu2/icu4c", "./icu") - base.delete_dir_with_access_error("icu2") - #base.cmd("svn", ["export", "https://github.com/unicode-org/icu/tags/release-" + icu_major + "-" + icu_minor + "/icu4c", "./icu", "--non-interactive", "--trust-server-cert"]) - return - -current_dir = base.get_script_dir() + "/../../core/Common/3dParty/icu/android" - -toolshains_dir = current_dir + "/toolchains" -icu_major = "58" -icu_minor = "3" -icu_is_shared = False - -current_path = base.get_env("PATH") - -platforms = { - "arm64" : { - "arch" : "aarch64-linux-android", - "bin" : "aarch64-linux-android" - }, - "arm" : { - "arch" : "arm-linux-androideabi", - "bin" : "arm-linux-androideabi" - }, - "x86_64" : { - "arch" : "x86_64-linux-android", - "bin" : "x86_64-linux-android" - }, - "x86" : { - "arch" : "x86-linux-android", - "bin" : "i686-linux-android" - } -} - -def build_arch(arch, api_version): - print("icu build: " + arch + " ----------------------------------------") - - if base.is_dir(current_dir + "/icu/" + arch): - base.delete_dir(current_dir + "/icu/" + arch) - base.create_dir(current_dir + "/icu/" + arch) - os.chdir(current_dir + "/icu/" + arch) - - base.cmd(base.get_env("ANDROID_NDK_ROOT") + "/build/tools/make-standalone-toolchain.sh", [ - "--platform=android-" + api_version, - "--install-dir=" + current_dir + "/toolchain/" + arch, - "--toolchain=" + platforms[arch]["arch"], - "--force" - ]) - - base.set_env("PATH", current_dir + "/toolchain/" + arch + "/bin:" + current_path) - - command_args = "--prefix=" + current_dir + "/build_tmp/" + arch + " --host=!!!MASK!!! --with-cross-build=" + current_dir + "/icu/cross_build CFLAGS=-Os CXXFLAGS=--std=c++11 CC=!!!MASK!!!-clang CXX=!!!MASK!!!-clang++ AR=!!!MASK!!!-ar RANLIB=!!!MASK!!!-ranlib" - if not icu_is_shared: - command_args += " --enable-static --enable-shared=no --with-data-packaging=archive CFLAGS=-fPIC CXXFLAGS=-fPIC" - command_args = command_args.replace("!!!MASK!!!", platforms[arch]["bin"]) - - base.cmd("../source/configure", command_args.split()) - base.cmd("make", ["-j4"]) - base.cmd("make", ["install"]) - - base.set_env("PATH", current_path) - os.chdir(current_dir) - - return - -def make(): - if not base.is_dir(current_dir): - base.create_dir(current_dir) - - if base.is_dir(current_dir + "/build"): - return - - current_dir_old = os.getcwd() - - print("[fetch & build]: icu_android") - os.chdir(current_dir) - - if not base.is_dir("icu"): - fetch_icu(icu_major, icu_minor) - if ("linux" == base.host_platform()): - base.replaceInFile(current_dir + "/icu/source/i18n/digitlst.cpp", "xlocale", "locale") - if ("mac" == base.host_platform()): - base.replaceInFile(current_dir + "/icu/source/tools/pkgdata/pkgdata.cpp", "cmd, \"%s %s -o %s%s %s %s%s %s %s\",", "cmd, \"%s %s -o %s%s %s %s %s %s %s\",") - - if not base.is_dir(current_dir + "/icu/cross_build"): - base.create_dir(current_dir + "/icu/cross_build") - os.chdir(current_dir + "/icu/cross_build") - base.cmd("../source/runConfigureICU", ["Linux" if "linux" == base.host_platform() else "MacOSX", - "--prefix=" + current_dir + "/icu/cross_build", "CFLAGS=-Os CXXFLAGS=--std=c++11"]) - base.cmd("make", ["-j4"]) - base.cmd("make", ["install"], True) - - os.chdir(current_dir) - - build_arch("arm64", "21") - build_arch("arm", "16") - build_arch("x86_64","21") - build_arch("x86", "16") - - os.chdir(current_dir) - - base.create_dir(current_dir + "/build") - base.copy_dir(current_dir + "/build_tmp/arm64/include", current_dir + "/build/include") - - if icu_is_shared: - base.create_dir(current_dir + "/build/arm64_v8a") - base.copy_file(current_dir + "/build_tmp/arm64/lib/libicudata.so." + icu_major + "." + icu_minor, current_dir + "/build/arm64_v8a/libicudata.so") - base.copy_file(current_dir + "/build_tmp/arm64/lib/libicuuc.so." + icu_major + "." + icu_minor, current_dir + "/build/arm64_v8a/libicuuc.so") - - base.create_dir(current_dir + "/build/armv7") - base.copy_file(current_dir + "/build_tmp/arm/lib/libicudata.so." + icu_major + "." + icu_minor, current_dir + "/build/armv7/libicudata.so") - base.copy_file(current_dir + "/build_tmp/arm/lib/libicuuc.so." + icu_major + "." + icu_minor, current_dir + "/build/armv7/libicuuc.so") - - base.create_dir(current_dir + "/build/x86_64") - base.copy_file(current_dir + "/build_tmp/x86_64/lib/libicudata.so." + icu_major + "." + icu_minor, current_dir + "/build/x86_64/libicudata.so") - base.copy_file(current_dir + "/build_tmp/x86_64/lib/libicuuc.so." + icu_major + "." + icu_minor, current_dir + "/build/x86_64/libicuuc.so") - - base.create_dir(current_dir + "/build/x86") - base.copy_file(current_dir + "/build_tmp/x86/lib/libicudata.so." + icu_major + "." + icu_minor, current_dir + "/build/x86/libicudata.so") - base.copy_file(current_dir + "/build_tmp/x86/lib/libicuuc.so." + icu_major + "." + icu_minor, current_dir + "/build/x86/libicuuc.so") - - # patch elf information - os.chdir(current_dir + "/build") - base.cmd("git", ["clone", "https://github.com/NixOS/patchelf.git"]) - os.chdir("./patchelf") - base.cmd("./bootstrap.sh") - base.cmd("./configure", ["--prefix=" + current_dir + "/build/patchelf/usr"]) - base.cmd("make") - base.cmd("make", ["install"]) - - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicudata.so", "./../arm64_v8a/libicudata.so"]) - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicuuc.so", "./../arm64_v8a/libicuuc.so"]) - base.cmd("./usr/bin/patchelf", ["--replace-needed", "libicudata.so." + icu_major, "libicudata.so", "./../arm64_v8a/libicuuc.so"]) - - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicudata.so", "./../armv7/libicudata.so"]) - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicuuc.so", "./../armv7/libicuuc.so"]) - base.cmd("./usr/bin/patchelf", ["--replace-needed", "libicudata.so." + icu_major, "libicudata.so", "./../armv7/libicuuc.so"]) - - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicudata.so", "./../x86_64/libicudata.so"]) - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicuuc.so", "./../x86_64/libicuuc.so"]) - base.cmd("./usr/bin/patchelf", ["--replace-needed", "libicudata.so." + icu_major, "libicudata.so", "./../x86_64/libicuuc.so"]) - - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicudata.so", "./../x86/libicudata.so"]) - base.cmd("./usr/bin/patchelf", ["--set-soname", "libicuuc.so", "./../x86/libicuuc.so"]) - base.cmd("./usr/bin/patchelf", ["--replace-needed", "libicudata.so." + icu_major, "libicudata.so", "./../x86/libicuuc.so"]) - - base.delete_dir(current_dir + "/build/patchelf") - - if not icu_is_shared: - base.create_dir(current_dir + "/build/arm64_v8a") - base.copy_file(current_dir + "/build_tmp/arm64/lib/libicudata.a", current_dir + "/build/arm64_v8a/libicudata.a") - base.copy_file(current_dir + "/build_tmp/arm64/lib/libicuuc.a", current_dir + "/build/arm64_v8a/libicuuc.a") - base.copy_file(current_dir + "/icu/arm64/data/out/icudt58l.dat", current_dir + "/build/arm64_v8a/icudt58l.dat") - - base.create_dir(current_dir + "/build/armv7") - base.copy_file(current_dir + "/build_tmp/arm/lib/libicudata.a", current_dir + "/build/armv7/libicudata.a") - base.copy_file(current_dir + "/build_tmp/arm/lib/libicuuc.a", current_dir + "/build/armv7/libicuuc.a") - base.copy_file(current_dir + "/icu/arm/data/out/icudt58l.dat", current_dir + "/build/armv7/icudt58l.dat") - - base.create_dir(current_dir + "/build/x86_64") - base.copy_file(current_dir + "/build_tmp/x86_64/lib/libicudata.a", current_dir + "/build/x86_64/libicudata.a") - base.copy_file(current_dir + "/build_tmp/x86_64/lib/libicuuc.a", current_dir + "/build/x86_64/libicuuc.a") - base.copy_file(current_dir + "/icu/x86_64/data/out/icudt58l.dat", current_dir + "/build/x86_64/icudt58l.dat") - - base.create_dir(current_dir + "/build/x86") - base.copy_file(current_dir + "/build_tmp/x86/lib/libicudata.a", current_dir + "/build/x86/libicudata.a") - base.copy_file(current_dir + "/build_tmp/x86/lib/libicuuc.a", current_dir + "/build/x86/libicuuc.a") - base.copy_file(current_dir + "/icu/x86/data/out/icudt58l.dat", current_dir + "/build/x86/icudt58l.dat") - - os.chdir(current_dir_old) - return diff --git a/scripts/core_common/modules/openssl_mobile.py b/scripts/core_common/modules/openssl_mobile.py index 6f1d52e..7989c52 100755 --- a/scripts/core_common/modules/openssl_mobile.py +++ b/scripts/core_common/modules/openssl_mobile.py @@ -1,18 +1,19 @@ #!/usr/bin/env python - +import sys +sys.path.append('../..') +sys.path.append('android') import base import config import os import subprocess +import openssl_android def make(): path = base.get_script_dir() + "/../../core/Common/3dParty/openssl" old_cur = os.getcwd() os.chdir(path) - base.set_env("ANDROID_HOME", base.get_android_sdk_home()) - - if (-1 != config.option("platform").find("android") and not base.is_dir("./build/android")): - subprocess.call(["./build-android-openssl.sh"]) + if (-1 != config.option("platform").find("android")): + openssl_android.make() if (-1 != config.option("platform").find("ios") and not base.is_dir("./build/ios")): subprocess.call(["./build-ios-openssl.sh"]) diff --git a/scripts/qmake.py b/scripts/qmake.py new file mode 100644 index 0000000..26a874b --- /dev/null +++ b/scripts/qmake.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +import os +import sys + +__dir__name__ = os.path.dirname(__file__) +sys.path.append(__dir__name__ + '/core_common/modules/android') + +import base +import config +import android_ndk +import multiprocessing + +def get_make_file_suffix(platform): + suffix = platform + if config.check_option("config", "debug"): + suffix += "_debug_" + suffix += config.option("branding") + return suffix + +def get_j_num(): + if ("0" != config.option("multiprocess")): + return ["-j" + str(multiprocessing.cpu_count())] + return [] + +def check_support_platform(platform): + qt_dir = base.qt_setup(platform) + if not base.is_file(qt_dir + "/bin/qmake") and not base.is_file(qt_dir + "/bin/qmake.exe"): + return False + return True + +def make(platform, project, qmake_config_addon=""): + # check platform + if not check_support_platform(platform): + print("THIS PLATFORM IS NOT SUPPORTED") + return + + old_env = dict(os.environ) + + # qt + qt_dir = base.qt_setup(platform) + base.set_env("OS_DEPLOY", platform) + + # pro & makefile + file_pro = os.path.abspath(project) + + pro_dir = os.path.dirname(file_pro) + if (pro_dir.endswith("/.")): + pro_dir = pro_dir[:-2] + if (pro_dir.endswith("/")): + pro_dir = pro_dir[:-1] + + makefile_name = "Makefile." + get_make_file_suffix(platform) + makefile = pro_dir + "/" + makefile_name + stash_file = pro_dir + "/.qmake.stash" + + old_cur = os.getcwd() + os.chdir(pro_dir) + + if (base.is_file(stash_file)): + base.delete_file(stash_file) + if (base.is_file(makefile)): + base.delete_file(makefile) + + base.set_env("DEST_MAKEFILE_NAME", "./" + makefile_name) + + # setup android env + if (-1 != platform.find("android")): + base.set_env("ANDROID_NDK_HOST", android_ndk.host["arch"]) + base.set_env("ANDROID_NDK_PLATFORM", "android-23") + base.set_env("PATH", qt_dir + "/bin:" + android_ndk.toolchain_dir() + "/bin:" + base.get_env("PATH")) + + # setup ios env + if (-1 != platform.find("ios")): + base.hack_xcode_ios() + + if base.is_file(makefile): + base.delete_file(makefile) + + config_param = base.qt_config(platform) + if ("" != qmake_config_addon): + config_param += (" " + qmake_config_addon) + + # qmake ADDON + qmake_addon = [] + if ("" != config.option("qmake_addon")): + qmake_addon = config.option("qmake_addon").split() + + clean_params = ["clean", "-f", makefile] + distclean_params = ["distclean", "-f", makefile] + build_params = ["-nocache", file_pro] + base.qt_config_as_param(config_param) + qmake_addon + + qmake_app = qt_dir + "/bin/qmake" + # non windows platform + if not base.is_windows(): + base.cmd(qmake_app, build_params) + base.correct_makefile_after_qmake(platform, makefile) + if ("1" == config.option("clean")): + base.cmd_and_return_cwd("make", clean_params, True) + base.cmd_and_return_cwd("make", distclean_params, True) + base.cmd(qmake_app, build_params) + base.correct_makefile_after_qmake(platform, makefile) + base.cmd_and_return_cwd("make", ["-f", makefile] + get_j_num()) + else: + config_params_array = base.qt_config_as_param(config_param) + config_params_string = "" + for item in config_params_array: + config_params_string += (" \"" + item + "\"") + qmake_addon_string = " ".join(qmake_addon) + if ("" != qmake_addon_string): + qmake_addon_string = " " + qmake_addon_string + + qmake_bat = [] + qmake_bat.append("call \"" + config.option("vs-path") + "/vcvarsall.bat\" " + ("x86" if base.platform_is_32(platform) else "x64")) + qmake_addon_string = "" + if ("" != config.option("qmake_addon")): + qmake_addon_string = " " + (" ").join(["\"" + addon + "\"" for addon in qmake_addon]) + qmake_bat.append("call \"" + qmake_app + "\" -nocache " + pro_file + config_params_string + qmake_addon_string) + if ("1" == config.option("clean")): + qmake_bat.append("call nmake " + " ".join(clean_params)) + qmake_bat.append("call nmake " + " ".join(distclean_params)) + qmake_bat.append("call \"" + qmake_app + "\" -nocache " + pro_file + config_params_string + qmake_addon_string) + if ("0" != config.option("multiprocess")): + qmake_bat.append("set CL=/MP") + qmake_bat.append("call nmake -f " + makefile) + base.run_as_bat(qmake_bat) + + if (base.is_file(stash_file)): + base.delete_file(stash_file) + + os.chdir(old_cur) + + os.environ.clear() + os.environ.update(old_env) + return + +def make_all_platforms(project, qmake_config_addon=""): + platforms = config.option("platform").split() + for platform in platforms: + if not platform in config.platforms: + continue + + print("------------------------------------------") + print("BUILD_PLATFORM: " + platform) + print("------------------------------------------") + make(platform, project, qmake_config_addon) + return diff --git a/sources.py b/sources.py new file mode 100644 index 0000000..352795c --- /dev/null +++ b/sources.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python + +import config +import base + +solution = { + "core" : { + "all" : [ + "core/Common/3dParty/cryptopp/project/cryptopp.pro", + + "core/Common/cfcpp/cfcpp.pro", + + "core/UnicodeConverter/UnicodeConverter.pro", + "core/Common/kernel.pro", + "core/Common/Network/network.pro", + + "core/DesktopEditor/graphics/pro/graphics.pro", + + "core/PdfFile/PdfFile.pro", + "core/DjVuFile/DjVuFile.pro", + "core/XpsFile/XpsFile.pro", + + "core/HtmlRenderer/htmlrenderer.pro", + "core/DocxRenderer/DocxRenderer.pro", + + "core/HtmlFile2/HtmlFile2.pro", + "core/Fb2File/Fb2File.pro", + "core/EpubFile/CEpubFile.pro", + + "core/DesktopEditor/doctrenderer/doctrenderer.pro" + ], + "x2t" : [ + "core/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro", + "core/OOXML/Projects/Linux/PPTXFormatLib/PPTXFormatLib.pro", + "core/OOXML/Projects/Linux/XlsbFormatLib/XlsbFormatLib.pro", + + "core/MsBinaryFile/Projects/DocFormatLib/Linux/DocFormatLib.pro", + "core/MsBinaryFile/Projects/PPTFormatLib/Linux/PPTFormatLib.pro", + "core/MsBinaryFile/Projects/XlsFormatLib/Linux/XlsFormatLib.pro", + "core/MsBinaryFile/Projects/VbaFormatLib/Linux/VbaFormatLib.pro", + + "core/TxtFile/Projects/Linux/TxtXmlFormatLib.pro", + "core/RtfFile/Projects/Linux/RtfFormatLib.pro", + "core/OdfFile/Projects/Linux/OdfFormatLib.pro", + + "core/OOXML/Projects/Linux/BinDocument/BinDocument.pro", + + "core/X2tConverter/build/Qt/X2tConverter.pro" + ], + "utilities" : [ + "core/DesktopEditor/AllFontsGen/AllFontsGen.pro", + "core/DesktopEditor/allthemesgen/allthemesgen.pro", + + "core/DesktopEditor/doctrenderer/app_builder/docbuilder.pro", + + "core/DesktopEditor/pluginsmanager/pluginsmanager.pro" + ], + "utilities_no_linux_arm64" : [ + "core/OfficeCryptReader/ooxml_crypt/ooxml_crypt.pro" + ], + "tests" : [ + "core/DesktopEditor/vboxtester/vboxtester.pro", + "core/Test/Applications/StandardTester/standardtester.pro", + "core/Test/Applications/x2tTester/x2ttester.pro", + "core/Test/Applications/MetafileTester/MetafileTester.pro" + ] + }, + "multimedia" : { + "all" : [ + "desktop-sdk/ChromiumBasedEditors/videoplayerlib/videoplayerlib.pro" + ] + }, + "spell" : { + "all" : [ + "core/Common/3dParty/hunspell/qt/hunspell.pro" + ] + }, + "desktop" : { + "all" : [ + "core/DesktopEditor/xmlsec/src/ooxmlsignature.pro", + + "desktop-sdk/ChromiumBasedEditors/lib/ascdocumentscore.pro", + "desktop-sdk/ChromiumBasedEditors/lib/ascdocumentscore_helper.pro" + ], + "qt" : [ + "desktop-sdk/ChromiumBasedEditors/lib/qt_wrapper/qtascdocumentscore.pro" + "desktop-apps/win-linux/ASCDocumentEditor.pro" + ], + "qt_win" : [ + "desktop-apps/desktop-apps/win-linux/extras/projicons/ProjIcons.pro" + ], + "qt_win_update" : [ + "desktop-apps/desktop-apps/win-linux/extras/update-daemon/UpdateDaemon.pro" + ] + }, + "osign" : [ + "core/DesktopEditor/xmlsec/src/osign/lib/osign.pro" + ] +} + +# find name option in value +def check_configure(name, value): + tmp = " " + value + " " + if (-1 == tmp.find(" " + name + " ")): + return False + return True + +def check_configure_array(names, value): + for item in names: + if check_configure(item, value): + return True + return False + +def get_projects(platform): + configure = base.qt_config(platform) + projects = [] + + is_mobile_platform = False + if (0 == platform.find("ios")) or (0 == platform.find("android")): + is_mobile_platform = True + + is_desktop = check_configure("desktop", configure) + if (is_mobile_platform): + is_desktop = False + + if check_configure_array(["core", "builder", "desktop", "server", "mobile"], configure): + is_core = True + projects += solution["core"]["all"] + if not check_configure("no_x2t", configure): + projects += solution["core"]["x2t"] + if not is_mobile_platform: + projects += solution["core"]["utilities"] + if (platform != "linux_arm64"): + projects += solution["core"]["utilities_no_linux_arm64"] + + if check_configure_array(["mobile", "desktop"], configure): + projects += solution["spell"]["all"] + + if is_desktop: + projects += solution["desktop"]["all"] + if (0 == platform.find("win")) or (0 == platform.find("linux")): + projects += solution["multimedia"]["all"] + projects += solution["desktop"]["qt"] + if (0 == platform.find("win")): + projects += solution["desktop"]["qt_win"] + if (-1 == platform.find("_xp")): + projects += solution["desktop"]["qt_win_update"] + + if check_configure_array(["osign"], configure): + projects += solution["osign"] + + return projects