From c95c2872c48b768e39eea1f2fef029c73ca878cf Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 9 Feb 2022 07:53:31 +0800 Subject: [PATCH] add v8 (#971) * add v8 * improve v8 * Update xmake.lua * Update xmake.lua * fix gclient config * improve v8 * improve v8 * improve v8 * improve v8 * improve v8 * improve v8 * improve v8 * Update xmake.lua * Update xmake.lua * Create xmake.lua * Create xmake.lua * Update xmake.lua * Update xmake.lua * improve v8 * Update xmake.lua * improve gn configs * fix gn configs * fix copy libs * improve links * add bsd * improve gclient * disable bsd for depot_tools * Update xmake.lua * Update xmake.lua --- packages/d/depot_tools/xmake.lua | 28 ++++++++-- packages/v/v8/xmake.lua | 91 ++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 packages/v/v8/xmake.lua diff --git a/packages/d/depot_tools/xmake.lua b/packages/d/depot_tools/xmake.lua index dc8e87dcc..8ea5336ff 100644 --- a/packages/d/depot_tools/xmake.lua +++ b/packages/d/depot_tools/xmake.lua @@ -12,20 +12,40 @@ package("depot_tools") package:addenv("PATH", "python-bin") package:addenv("DEPOT_TOOLS_UPDATE", "0") package:addenv("DEPOT_TOOLS_METRICS", "0") + package:addenv("DEPOT_TOOLS_WIN_TOOLCHAIN", "0") end) on_install("linux", "macosx", "windows", function (package) + import("core.base.global") os.cp("*", package:installdir()) os.cd(package:installdir()) - if package:is_plat("windows") then - os.vrunv("gclient.bat") + -- maybe we need set proxy, e.g. `xmake g --proxy=http://127.0.0.1:xxxx` + -- @note we must use http proxy instead of socks5 proxy + local envs = {} + local proxy = global.get("proxy") + if proxy then + envs.HTTP_PROXY = proxy + envs.HTTPS_PROXY = proxy + envs.ALL_PROXY = proxy + end + -- we need fetch some files when running gclient for the first time + if is_host("windows") then + os.vrunv("gclient.bat", {"--verbose"}, {envs = envs}) else - os.vrunv("sh", {"./gclient"}) + os.vrunv("sh", {"./gclient", "--verbose"}, {envs = envs}) end end) on_test(function (package) + import("core.base.global") os.vrun("python3 --version") os.vrun("ninja --version") - os.vrunv(package:is_plat("windows") and "gclient.bat" or "gclient", {"--version"}) + local envs = {} + local proxy = global.get("proxy") + if proxy then + envs.HTTP_PROXY = proxy + envs.HTTPS_PROXY = proxy + envs.ALL_PROXY = proxy + end + os.vrunv(is_host("windows") and "gclient.bat" or "gclient", {"--version"}, {envs = envs}) end) diff --git a/packages/v/v8/xmake.lua b/packages/v/v8/xmake.lua new file mode 100644 index 000000000..4f4aab064 --- /dev/null +++ b/packages/v/v8/xmake.lua @@ -0,0 +1,91 @@ +package("v8") + set_homepage("https://chromium.googlesource.com/v8/v8.git") + set_description("V8 JavaScript Engine") + + add_urls("https://github.com/v8/v8.git") + add_versions("10.0.58", "d75903764c8547b6fc35c7a3fe4991320be03135") + + add_deps("depot_tools") + + if is_plat("linux", "bsd") then + add_syslinks("pthread", "dl") + end + + add_links("v8_monolith", + "v8_initializers", + "v8_init", + "v8_compiler", + "v8_compiler_opt", + "v8_cppgc_shared", + "v8_bigint", + "v8_snapshot", + "v8_base_without_compiler", + "v8_libplatform", + "v8_libbase", + "torque_base", + "torque_generated_definitions", + "cppgc_base", + "torque_ls_base") + + on_install("linux", "macosx", function (package) + import("core.base.global") + + -- maybe we need set proxy, e.g. `xmake g --proxy=http://127.0.0.1:xxxx` + local envs = {} + local proxy = global.get("proxy") + if proxy then + envs.HTTP_PROXY = proxy + envs.HTTPS_PROXY = proxy + envs.ALL_PROXY = proxy + end + io.writefile(".gclient", [=[solutions = [ + { + "name": ".", + "url": "https://github.com/v8/v8.git", + "deps_file": "DEPS", + "managed": False, + "custom_deps": {}, + }]]=]) + local gclient = is_host("windows") and "gclient.bat" or "gclient" + os.vrunv(gclient, {"sync", "-v"}, {envs = envs}) + local configs = { + is_official_build = false, + is_component_build = false, + is_debug = package:debug(), + is_shared_library = package:config("shared"), + symbol_level = 0, + treat_warnings_as_errors = false, + use_custom_libcxx = false, + v8_static_library = not package:config("shared"), + v8_monolithic = true, + v8_use_external_startup_data = false, + v8_enable_test_features = false, + v8_enable_i18n_support = false} + if package:is_arch("x86", "i386") then + configs.target_cpu = "x86" + elseif package:is_arch("x64", "x86_64") then + configs.target_cpu = "x64" + elseif package:is_arch("arm64", "arm64-v8a") then + configs.target_cpu = "arm64" + end + if not package:is_plat("windows") then + configs.cc = package:build_getenv("cc") + configs.cxx = package:build_getenv("cxx") + else + configs.extra_cflags = {(package:config("vs_runtime"):startswith("MT") and "/MT" or "/MD")} + end + if package:is_plat("macosx") then + configs.extra_ldflags = {"-lstdc++"} + local xcode = import("core.tool.toolchain").load("xcode", {plat = package:plat(), arch = package:arch()}) + configs.xcode_sysroot = xcode:config("xcode_sysroot") + end + import("package.tools.gn").build(package, configs, {buildir = "out"}) + os.cp("include", package:installdir()) + os.trycp("out/obj/*.a", package:installdir("lib")) + os.trycp("out/obj/*.lib", package:installdir("lib")) + os.trycp("out/obj/*.dll", package:installdir("bin")) + end) + + on_test(function (package) + assert(package:has_cxxfuncs("v8::V8::InitializePlatform(0)", {configs = {languages = "c++17"}, includes = "v8.h"})) + end)