2023-09-03 18:20:20 +08:00
|
|
|
|
set_xmakever("2.8.2")
|
2023-10-01 22:16:04 +08:00
|
|
|
|
|
2023-10-02 03:41:45 +08:00
|
|
|
|
option("hdf5")
|
|
|
|
|
set_default(true)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable hdf5 kdata engine.")
|
|
|
|
|
option_end()
|
|
|
|
|
|
|
|
|
|
option("mysql")
|
|
|
|
|
set_default(true)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable mysql kdata engine.")
|
|
|
|
|
if is_plat("macosx") then
|
|
|
|
|
if os.exists("/usr/local/opt/mysql-client/lib") then
|
|
|
|
|
add_includedirs("/usr/local/opt/mysql-client/include/mysql")
|
|
|
|
|
add_includedirs("/usr/local/opt/mysql-client/include")
|
|
|
|
|
add_linkdirs("/usr/local/opt/mysql-client/lib")
|
|
|
|
|
add_rpathdirs("/usr/local/opt/mysql-client/lib")
|
|
|
|
|
end
|
|
|
|
|
if os.exists("/usr/local/mysql/lib") then
|
|
|
|
|
add_linkdirs("/usr/local/mysql/lib")
|
|
|
|
|
add_rpathdirs("/usr/local/mysql/lib")
|
|
|
|
|
end
|
|
|
|
|
if not os.exists("/usr/local/include/mysql") then
|
|
|
|
|
if os.exists("/usr/local/mysql/include") then
|
|
|
|
|
os.run("ln -s /usr/local/mysql/include /usr/local/include/mysql")
|
|
|
|
|
else
|
|
|
|
|
print("Not Found MySQL include dir!")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
add_links("mysqlclient")
|
|
|
|
|
elseif is_plat("windows") then
|
|
|
|
|
add_defines("NOMINMAX")
|
|
|
|
|
end
|
|
|
|
|
option_end()
|
|
|
|
|
|
|
|
|
|
option("sqlite")
|
|
|
|
|
set_default(true)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable sqlite kdata engine.")
|
|
|
|
|
option_end()
|
|
|
|
|
|
|
|
|
|
option("tdx")
|
|
|
|
|
set_default(true)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable tdx kdata engine.")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2024-03-25 00:55:35 +08:00
|
|
|
|
-- 注意:stacktrace 在 windows 下会严重影响性能
|
2023-10-15 00:30:45 +08:00
|
|
|
|
option("stacktrace")
|
2024-03-24 14:50:14 +08:00
|
|
|
|
set_default(false)
|
2023-10-01 22:16:04 +08:00
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
2023-10-15 00:30:45 +08:00
|
|
|
|
set_description("Enable check/assert with stack trace info.")
|
|
|
|
|
add_defines("HKU_ENABLE_STACK_TRACE")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2024-02-23 21:40:06 +08:00
|
|
|
|
option("spend_time")
|
|
|
|
|
set_default(true)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable spend time.")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2023-10-15 00:30:45 +08:00
|
|
|
|
option("feedback")
|
2023-11-03 00:03:30 +08:00
|
|
|
|
set_default(true)
|
2023-10-15 00:30:45 +08:00
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
2023-10-01 22:16:04 +08:00
|
|
|
|
set_description("Enable send feedback.")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2024-02-27 16:38:12 +08:00
|
|
|
|
option("low_precision")
|
|
|
|
|
set_default(false)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable send feedback.")
|
|
|
|
|
option_end()
|
2018-11-17 20:22:06 +08:00
|
|
|
|
|
2024-03-11 19:40:40 +08:00
|
|
|
|
option("log_level")
|
|
|
|
|
set_default("info")
|
|
|
|
|
set_values("trace", "debug", "info", "warn", "error", "fatal", "off")
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("set log level")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2024-05-30 15:03:51 +08:00
|
|
|
|
option("leak_check")
|
|
|
|
|
set_default(false)
|
|
|
|
|
set_showmenu(true)
|
|
|
|
|
set_category("hikyuu")
|
|
|
|
|
set_description("Enable leak check for test")
|
|
|
|
|
option_end()
|
|
|
|
|
|
2018-08-19 16:51:10 +08:00
|
|
|
|
-- project
|
|
|
|
|
set_project("hikyuu")
|
|
|
|
|
|
2021-11-21 21:39:35 +08:00
|
|
|
|
add_rules("mode.debug", "mode.release")
|
|
|
|
|
|
2018-08-19 16:51:10 +08:00
|
|
|
|
-- version
|
2024-06-18 00:34:43 +08:00
|
|
|
|
set_version("2.1.0", {build = "%Y%m%d%H%M"})
|
2024-03-11 19:40:40 +08:00
|
|
|
|
|
2024-05-30 15:03:51 +08:00
|
|
|
|
if get_config("leak_check") then
|
2024-06-12 03:03:25 +08:00
|
|
|
|
-- 需要 export LD_PRELOAD=libasan.so
|
2024-05-30 15:03:51 +08:00
|
|
|
|
set_policy("build.sanitizer.address", true)
|
|
|
|
|
set_policy("build.sanitizer.leak", true)
|
|
|
|
|
-- set_policy("build.sanitizer.memory", true)
|
|
|
|
|
-- set_policy("build.sanitizer.thread", true)
|
|
|
|
|
end
|
|
|
|
|
|
2024-03-11 19:40:40 +08:00
|
|
|
|
local level = get_config("log_level")
|
|
|
|
|
if is_mode("debug") then
|
|
|
|
|
level = "trace"
|
|
|
|
|
end
|
|
|
|
|
if level == "trace" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 0)
|
|
|
|
|
elseif level == "debug" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 1)
|
|
|
|
|
elseif level == "info" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 2)
|
|
|
|
|
elseif level == "warn" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 3)
|
|
|
|
|
elseif level == "error" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 4)
|
|
|
|
|
elseif level == "fatal" then
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 5)
|
|
|
|
|
else
|
|
|
|
|
set_configvar("LOG_ACTIVE_LEVEL", 6)
|
|
|
|
|
end
|
|
|
|
|
|
2024-03-24 14:50:14 +08:00
|
|
|
|
if is_mode("debug") then
|
|
|
|
|
set_configvar("HKU_DEBUG_MODE", 1)
|
|
|
|
|
else
|
|
|
|
|
set_configvar("HKU_DEBUG_MODE", 0)
|
|
|
|
|
end
|
2020-05-19 23:31:19 +08:00
|
|
|
|
set_configvar("USE_SPDLOG_LOGGER", 1) -- 是否使用spdlog作为日志输出
|
2024-03-27 02:06:02 +08:00
|
|
|
|
set_configvar("USE_SPDLOG_ASYNC_LOGGER", 0) -- 使用异步的spdlog
|
2019-06-16 20:49:20 +08:00
|
|
|
|
set_configvar("CHECK_ACCESS_BOUND", 1)
|
2024-06-12 03:03:25 +08:00
|
|
|
|
if is_plat("macosx") or get_config("leak_check") then
|
2023-10-02 03:41:45 +08:00
|
|
|
|
set_configvar("SUPPORT_SERIALIZATION", 0)
|
2020-08-15 15:51:08 +08:00
|
|
|
|
else
|
2023-10-02 03:41:45 +08:00
|
|
|
|
set_configvar("SUPPORT_SERIALIZATION", is_mode("release") and 1 or 0)
|
2020-08-15 15:51:08 +08:00
|
|
|
|
end
|
2019-06-16 20:49:20 +08:00
|
|
|
|
set_configvar("SUPPORT_TEXT_ARCHIVE", 0)
|
|
|
|
|
set_configvar("SUPPORT_XML_ARCHIVE", 1)
|
|
|
|
|
set_configvar("SUPPORT_BINARY_ARCHIVE", 1)
|
2023-10-01 22:32:29 +08:00
|
|
|
|
set_configvar("ENABLE_MSVC_LEAK_DETECT", 0)
|
2024-06-01 14:41:32 +08:00
|
|
|
|
set_configvar("HKU_ENABLE_LEAK_DETECT", get_config("leak_check") and 1 or 0)
|
2023-10-03 01:34:03 +08:00
|
|
|
|
set_configvar("HKU_ENABLE_SEND_FEEDBACK", get_config("feedback") and 1 or 0)
|
|
|
|
|
|
|
|
|
|
set_configvar("HKU_ENABLE_HDF5_KDATA", get_config("hdf5") and 1 or 0)
|
|
|
|
|
set_configvar("HKU_ENABLE_MYSQL_KDATA", get_config("mysql") and 1 or 0)
|
|
|
|
|
set_configvar("HKU_ENABLE_SQLITE_KDATA", get_config("sqlite") and 1 or 0)
|
|
|
|
|
set_configvar("HKU_ENABLE_TDX_KDATA", get_config("tdx") and 1 or 0)
|
2018-08-19 16:51:10 +08:00
|
|
|
|
|
2024-02-27 16:38:12 +08:00
|
|
|
|
set_configvar("HKU_USE_LOW_PRECISION", get_config("low_precision") and 1 or 0)
|
|
|
|
|
|
2024-07-17 11:08:04 +08:00
|
|
|
|
set_configvar("HKU_CLOSE_SPEND_TIME", get_config("spend_time") and 0 or 1)
|
|
|
|
|
|
2023-11-27 18:04:08 +08:00
|
|
|
|
set_warnings("all")
|
2018-08-19 16:51:10 +08:00
|
|
|
|
|
|
|
|
|
-- set language: C99, c++ standard
|
2023-03-16 00:03:51 +08:00
|
|
|
|
set_languages("cxx17", "c99")
|
2018-08-19 16:51:10 +08:00
|
|
|
|
|
2024-01-24 13:41:56 +08:00
|
|
|
|
if is_plat("windows") then
|
|
|
|
|
if is_mode("release") then
|
|
|
|
|
set_runtimes("MD")
|
|
|
|
|
else
|
|
|
|
|
set_runtimes("MDd")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-06-11 09:50:55 +08:00
|
|
|
|
local boost_version = "1.85.0"
|
2022-10-18 01:35:53 +08:00
|
|
|
|
local hdf5_version = "1.12.2"
|
2024-01-11 19:53:31 +08:00
|
|
|
|
local fmt_version = "10.2.1"
|
2024-06-10 10:06:12 +08:00
|
|
|
|
local flatbuffers_version = "24.3.25"
|
2024-06-11 10:22:08 +08:00
|
|
|
|
local nng_version = "1.8.0"
|
2024-04-14 04:04:55 +08:00
|
|
|
|
local cpp_httplib_version = "0.14.3"
|
2024-06-11 09:50:55 +08:00
|
|
|
|
local sqlite_version = "3.46.0+0"
|
2023-10-02 03:41:45 +08:00
|
|
|
|
local mysql_version = "8.0.31"
|
|
|
|
|
if is_plat("windows") or (is_plat("linux", "cross") and is_arch("aarch64", "arm64.*")) then
|
|
|
|
|
mysql_version = "8.0.21"
|
|
|
|
|
end
|
2022-11-09 01:11:07 +08:00
|
|
|
|
|
2024-05-27 17:25:21 +08:00
|
|
|
|
add_repositories("hikyuu-repo https://github.com/fasiondog/hikyuu_extern_libs.git")
|
|
|
|
|
-- add_repositories("hikyuu-repo https://gitee.com/fasiondog/hikyuu_extern_libs.git")
|
2022-01-06 00:41:15 +08:00
|
|
|
|
if is_plat("windows") then
|
2023-10-03 01:34:03 +08:00
|
|
|
|
if get_config("hdf5") then
|
|
|
|
|
if is_mode("release") then
|
|
|
|
|
add_requires("hdf5 " .. hdf5_version)
|
|
|
|
|
else
|
2024-06-11 00:03:38 +08:00
|
|
|
|
add_requires("hdf5_d " .. hdf5_version)
|
2023-10-03 01:34:03 +08:00
|
|
|
|
end
|
2023-10-02 03:41:45 +08:00
|
|
|
|
end
|
|
|
|
|
if get_config("mysql") then
|
|
|
|
|
add_requires("mysql " .. mysql_version)
|
|
|
|
|
end
|
|
|
|
|
|
2023-03-25 23:59:56 +08:00
|
|
|
|
elseif is_plat("linux", "cross") then
|
2023-10-03 01:34:03 +08:00
|
|
|
|
if get_config("hdf5") then
|
|
|
|
|
add_requires("hdf5 " .. hdf5_version, { system = false })
|
|
|
|
|
end
|
2023-10-02 03:41:45 +08:00
|
|
|
|
if get_config("mysql") then
|
|
|
|
|
add_requires("mysql " .. mysql_version, { system = false })
|
|
|
|
|
end
|
|
|
|
|
|
2022-11-15 00:42:08 +08:00
|
|
|
|
elseif is_plat("macosx") then
|
2023-10-03 01:34:03 +08:00
|
|
|
|
if get_config("hdf5") then
|
|
|
|
|
add_requires("brew::hdf5")
|
|
|
|
|
end
|
2023-10-02 03:41:45 +08:00
|
|
|
|
if get_config("mysql") then
|
|
|
|
|
add_requires("brew::mysql-client")
|
|
|
|
|
end
|
2022-01-06 00:41:15 +08:00
|
|
|
|
end
|
2023-03-27 02:37:01 +08:00
|
|
|
|
|
2024-01-11 19:53:31 +08:00
|
|
|
|
add_requires("boost " .. boost_version, {
|
2023-08-08 11:30:10 +08:00
|
|
|
|
system = false,
|
2023-09-16 15:12:42 +08:00
|
|
|
|
debug = is_mode("debug"),
|
2023-08-08 11:30:10 +08:00
|
|
|
|
configs = {
|
2024-01-29 17:00:29 +08:00
|
|
|
|
shared = is_plat("windows"),
|
2024-07-12 12:21:08 +08:00
|
|
|
|
runtimes = get_config("runtimes"),
|
2024-01-24 11:55:32 +08:00
|
|
|
|
multi = true,
|
2023-10-18 19:14:29 +08:00
|
|
|
|
date_time = true,
|
2024-06-12 18:13:35 +08:00
|
|
|
|
filesystem = false,
|
2023-08-08 11:30:10 +08:00
|
|
|
|
serialization = true,
|
2023-08-13 01:59:00 +08:00
|
|
|
|
system = false,
|
2024-01-09 16:58:03 +08:00
|
|
|
|
python = false,
|
2023-08-08 11:30:10 +08:00
|
|
|
|
},
|
2023-06-14 16:37:10 +08:00
|
|
|
|
})
|
2023-12-26 18:25:50 +08:00
|
|
|
|
|
2024-07-12 12:21:08 +08:00
|
|
|
|
add_requires("fmt " .. fmt_version, {system = false})
|
2024-01-24 13:41:56 +08:00
|
|
|
|
add_requires("spdlog", {system = false, configs = {header_only = true, fmt_external = true}})
|
2024-07-12 12:21:08 +08:00
|
|
|
|
add_requireconfs("spdlog.fmt", {override = true, version = fmt_version, system = false})
|
2024-02-23 23:44:29 +08:00
|
|
|
|
add_requires("sqlite3 " .. sqlite_version, {system = false, configs = {shared = true, cxflags = "-fPIC"}})
|
2024-07-12 12:21:08 +08:00
|
|
|
|
add_requires("flatbuffers v" .. flatbuffers_version, {system = false, configs= {runtimes = get_config("runtimes")}})
|
2024-06-11 10:22:08 +08:00
|
|
|
|
add_requires("nng " .. nng_version, {system = false, configs = {cxflags = "-fPIC"}})
|
2023-06-14 16:37:10 +08:00
|
|
|
|
add_requires("nlohmann_json", {system = false})
|
2024-04-14 04:04:55 +08:00
|
|
|
|
add_requires("cpp-httplib " .. cpp_httplib_version, {system = false, configs = {zlib = true, ssl = true}})
|
2023-06-14 16:37:10 +08:00
|
|
|
|
add_requires("zlib", {system = false})
|
2024-02-24 23:34:50 +08:00
|
|
|
|
|
2024-03-11 21:15:58 +08:00
|
|
|
|
add_defines("SPDLOG_DISABLE_DEFAULT_LOGGER") -- 禁用 spdlog 默认ogger
|
2019-08-03 21:53:24 +08:00
|
|
|
|
|
2018-08-19 16:51:10 +08:00
|
|
|
|
set_objectdir("$(buildir)/$(mode)/$(plat)/$(arch)/.objs")
|
|
|
|
|
set_targetdir("$(buildir)/$(mode)/$(plat)/$(arch)/lib")
|
|
|
|
|
|
2020-11-01 12:28:23 +08:00
|
|
|
|
-- modifed to use boost static library, except boost.python, serialization
|
2024-01-28 23:38:03 +08:00
|
|
|
|
if is_plat("windows") and get_config("kind") == "shared" then
|
|
|
|
|
add_defines("BOOST_ALL_DYN_LINK")
|
|
|
|
|
end
|
2018-08-19 16:51:10 +08:00
|
|
|
|
|
|
|
|
|
-- is release now
|
|
|
|
|
if is_mode("release") then
|
2023-08-08 11:30:10 +08:00
|
|
|
|
if is_plat("windows") then
|
|
|
|
|
-- Unix-like systems hidden symbols will cause the link dynamic libraries to failed!
|
|
|
|
|
set_symbols("hidden")
|
|
|
|
|
end
|
2018-08-19 16:51:10 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- for the windows platform (msvc)
|
2023-06-14 16:37:10 +08:00
|
|
|
|
if is_plat("windows") then
|
2023-08-08 11:30:10 +08:00
|
|
|
|
-- add some defines only for windows
|
|
|
|
|
add_defines("NOCRYPT", "NOGDI")
|
|
|
|
|
add_cxflags("-EHsc", "/Zc:__cplusplus", "/utf-8")
|
|
|
|
|
add_cxflags("-wd4819") -- template dll export warning
|
|
|
|
|
add_defines("WIN32_LEAN_AND_MEAN")
|
2024-01-24 13:41:56 +08:00
|
|
|
|
if is_mode("debug") then
|
2023-08-08 11:30:10 +08:00
|
|
|
|
add_cxflags("-Gs", "-RTC1", "/bigobj")
|
|
|
|
|
end
|
2023-06-14 16:37:10 +08:00
|
|
|
|
end
|
2019-09-22 23:02:08 +08:00
|
|
|
|
|
|
|
|
|
if not is_plat("windows") then
|
2023-08-08 11:30:10 +08:00
|
|
|
|
-- disable some compiler errors
|
|
|
|
|
add_cxflags("-Wno-error=deprecated-declarations", "-fno-strict-aliasing")
|
|
|
|
|
add_cxflags("-ftemplate-depth=1023", "-pthread")
|
|
|
|
|
add_shflags("-pthread")
|
|
|
|
|
add_ldflags("-pthread")
|
2018-08-19 16:51:10 +08:00
|
|
|
|
end
|
2024-02-23 22:50:01 +08:00
|
|
|
|
|
2024-02-25 14:10:55 +08:00
|
|
|
|
-- if not is_plat("cross") and (os.host() == "linux" and is_arch("x86_64", "x64")) then
|
|
|
|
|
-- -- fedora或者ubuntu,并且不是交叉编译
|
|
|
|
|
-- add_vectorexts("sse", "sse2", "ssse3", "avx", "avx2")
|
|
|
|
|
-- -- add_defines("HKU_ENABLE_SSE2", "HKU_ENABLE_SSE3", "HKU_ENABLE_SSE41", "HKU_ENABLE_AVX", "HKU_ENABLE_AVX2")
|
|
|
|
|
-- end
|
2018-08-19 16:51:10 +08:00
|
|
|
|
|
2024-07-11 12:41:23 +08:00
|
|
|
|
includes("./copy_dependents.lua")
|
2023-09-03 18:20:20 +08:00
|
|
|
|
includes("./hikyuu_cpp/hikyuu")
|
|
|
|
|
includes("./hikyuu_pywrap")
|
|
|
|
|
includes("./hikyuu_cpp/unit_test")
|
2024-01-30 10:54:34 +08:00
|
|
|
|
includes("./hikyuu_cpp/demo")
|