mirror of
https://github.com/0O0o0oOoO00/Alas.git
synced 2026-05-14 08:49:24 +08:00
add: use pydep to build c++ deps
This commit is contained in:
22
.gitmodules
vendored
Normal file
22
.gitmodules
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
[submodule "3rdparty/spdlog"]
|
||||
url = https://github.com/gabime/spdlog
|
||||
path = 3rdparty/spdlog
|
||||
[submodule "3rdparty/cpp-httplib"]
|
||||
url = https://github.com/yhirose/cpp-httplib
|
||||
path = 3rdparty/cpp-httplib
|
||||
[submodule "3rdparty/cryptopp"]
|
||||
url = https://github.com/weidai11/cryptopp
|
||||
path = 3rdparty/cryptopp
|
||||
[submodule "3rdparty/cryptopp-cmake"]
|
||||
url = https://github.com/abdes/cryptopp-cmake
|
||||
path = 3rdparty/cryptopp-cmake
|
||||
[submodule "3rdparty/cxxopts"]
|
||||
url = https://github.com/jarro2783/cxxopts
|
||||
path = 3rdparty/cxxopts
|
||||
[submodule "3rdparty/jsoncpp"]
|
||||
url = https://github.com/open-source-parsers/jsoncpp
|
||||
path = 3rdparty/jsoncpp
|
||||
[submodule "3rdparty/pybind11"]
|
||||
url = https://github.com/pybind/pybind11
|
||||
path = 3rdparty/pybind11
|
||||
branch = v2.13
|
||||
179
builddep.py
Normal file
179
builddep.py
Normal file
@@ -0,0 +1,179 @@
|
||||
import argparse
|
||||
import os.path
|
||||
from typing import List
|
||||
|
||||
from pydep.packages.cryptopp import CryptoppCMakePackage, CryptoppCMakeOptions
|
||||
from pydep.packages.cxxopts import CxxoptsPackage, CxxoptsOptions
|
||||
from pydep.packages.jsoncpp import JsonCppPackage, JsonCppOptions
|
||||
from pydep.packages.pybind11 import Pybind11Package, Pybind11Options
|
||||
from pydep.packages.spdlog import SpdlogPackage, SpdlogOptions
|
||||
from pydep.tools.builder import PackageBuilder
|
||||
from pydep.packages.cpphttplib import CppHttpLibPackage
|
||||
from pydep.tools.cmakelists import *
|
||||
|
||||
THIRD_PARTY_ROOT_DIR = "./3rdparty"
|
||||
BUILD_ROOT_DIR = f"{THIRD_PARTY_ROOT_DIR}/build"
|
||||
PKGS_ROOT_DIR = f"{THIRD_PARTY_ROOT_DIR}/pkgs"
|
||||
PYTHON_DIR = "./python"
|
||||
|
||||
ANDROID_ARCH_ABI = [
|
||||
"x86",
|
||||
"x86_64",
|
||||
"arm64-v8a",
|
||||
"armeabi-v7a",
|
||||
]
|
||||
|
||||
|
||||
def get_android_builder(cls, name, options=None) -> list:
|
||||
builders = []
|
||||
|
||||
cmake = CMakeLists()
|
||||
cmake.set_generator(CMakeGenerator.MinGW_Makefiles).add_option([
|
||||
CMakeSystemName("Android"),
|
||||
CMakeToolChainFile(f"{NDK_ROOT}/build/cmake/android.toolchain.cmake"),
|
||||
CMakeDefine("ANDROID_PLATFORM", "21"),
|
||||
])
|
||||
for abi in ANDROID_ARCH_ABI:
|
||||
android = cls()
|
||||
android.set_cmakelists(cmake) \
|
||||
.set_source_dir(f"{THIRD_PARTY_ROOT_DIR}/{name}") \
|
||||
.set_build_dir(f"{BUILD_ROOT_DIR}/{name}-android-{abi}") \
|
||||
.set_install_dir(f"{PKGS_ROOT_DIR}/{name}-android-{abi}") \
|
||||
.add_cmake_option(CMakeDefine("ANDROID_ABI", abi)) \
|
||||
.set_options(options)
|
||||
builders.append(android)
|
||||
return builders
|
||||
|
||||
|
||||
def get_windows_builder(cls, name, options=None) -> list:
|
||||
builders = []
|
||||
windows = cls()
|
||||
windows.set_source_dir(f"{THIRD_PARTY_ROOT_DIR}/{name}") \
|
||||
.set_build_dir(f"{BUILD_ROOT_DIR}/{name}-windows") \
|
||||
.set_install_dir(f"{PKGS_ROOT_DIR}/{name}-windows") \
|
||||
.set_options(options)
|
||||
builders.append(windows)
|
||||
return builders
|
||||
|
||||
|
||||
def get_linux_builder(cls, name, options=None) -> list:
|
||||
builders = []
|
||||
# TODO: linux platform package
|
||||
return builders
|
||||
|
||||
|
||||
def get_all_platform_builder(cls, name, options=None) -> list:
|
||||
builders = []
|
||||
|
||||
builders.extend(get_android_builder(cls, name, options))
|
||||
builders.extend(get_windows_builder(cls, name, options))
|
||||
builders.extend(get_linux_builder(cls, name, options))
|
||||
|
||||
return builders
|
||||
|
||||
|
||||
def get_cpp_httplib_builders() -> List[CppHttpLibPackage]:
|
||||
return get_all_platform_builder(CppHttpLibPackage, "cpp-httplib")
|
||||
|
||||
|
||||
def get_jsoncpp_builders() -> List[JsonCppPackage]:
|
||||
return get_all_platform_builder(JsonCppPackage, "jsoncpp", JsonCppOptions(
|
||||
JSONCPP_WITH_TESTS=False,
|
||||
JSONCPP_WITH_POST_BUILD_UNITTEST=False,
|
||||
BUILD_SHARED_LIBS=False,
|
||||
BUILD_OBJECT_LIBS=False,
|
||||
))
|
||||
|
||||
|
||||
def get_spdlog_builders() -> List[SpdlogPackage]:
|
||||
return get_all_platform_builder(SpdlogPackage, "spdlog", SpdlogOptions(
|
||||
SPDLOG_BUILD_EXAMPLE=False,
|
||||
))
|
||||
|
||||
|
||||
def get_cxxopts_builders() -> List[CxxoptsPackage]:
|
||||
return get_all_platform_builder(CxxoptsPackage, "cxxopts", CxxoptsOptions(
|
||||
CXXOPTS_BUILD_EXAMPLES=False,
|
||||
CXXOPTS_BUILD_TESTS=False,
|
||||
))
|
||||
|
||||
|
||||
def get_cryptopp_builders() -> List[CryptoppCMakePackage]:
|
||||
builders = []
|
||||
options = CryptoppCMakeOptions(
|
||||
CRYPTOPP_BUILD_TESTING=False,
|
||||
)
|
||||
|
||||
cmake = CMakeLists()
|
||||
cmake.set_generator(CMakeGenerator.MinGW_Makefiles).add_option([
|
||||
CMakeSystemName("Android"),
|
||||
CMakeToolChainFile(f"{NDK_ROOT}/build/cmake/android.toolchain.cmake"),
|
||||
CMakeDefine("ANDROID_PLATFORM", "21"),
|
||||
])
|
||||
for abi in ANDROID_ARCH_ABI:
|
||||
android = CryptoppCMakePackage()
|
||||
android.set_cmakelists(cmake) \
|
||||
.set_source_dir(f"{THIRD_PARTY_ROOT_DIR}/cryptopp", f"{THIRD_PARTY_ROOT_DIR}/cryptopp-cmake") \
|
||||
.set_build_dir(f"{BUILD_ROOT_DIR}/cryptopp-android-{abi}") \
|
||||
.set_install_dir(f"{PKGS_ROOT_DIR}/cryptopp-android-{abi}") \
|
||||
.add_cmake_option(CMakeDefine("ANDROID_ABI", abi)) \
|
||||
.set_options(options)
|
||||
builders.append(android)
|
||||
|
||||
windows = CryptoppCMakePackage()
|
||||
windows.set_source_dir(f"{THIRD_PARTY_ROOT_DIR}/cryptopp", f"{THIRD_PARTY_ROOT_DIR}/cryptopp-cmake") \
|
||||
.set_build_dir(f"{BUILD_ROOT_DIR}/cryptopp-windows") \
|
||||
.set_install_dir(f"{PKGS_ROOT_DIR}/cryptopp-windows") \
|
||||
.set_options(options)
|
||||
builders.append(windows)
|
||||
|
||||
# TODO: cryptopp on linux
|
||||
|
||||
return builders
|
||||
|
||||
|
||||
def get_pybind11_builders() -> List[Pybind11Package]:
|
||||
builders = []
|
||||
builders.extend(get_windows_builder(Pybind11Package, "pybind11", Pybind11Options(
|
||||
PYBIND11_TEST=False,
|
||||
PYBIND11_NOPYTHON=True,
|
||||
)))
|
||||
|
||||
# TODO: pybind11 on linux and macos
|
||||
|
||||
return builders
|
||||
|
||||
|
||||
NDK_ROOT = "E:/ndk"
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--ndk", type=str, help="ndk install dir")
|
||||
args = parser.parse_args()
|
||||
|
||||
global NDK_ROOT
|
||||
NDK_ROOT = args.ndk
|
||||
|
||||
if not os.path.exists(BUILD_ROOT_DIR):
|
||||
os.makedirs(BUILD_ROOT_DIR)
|
||||
if not os.path.exists(PKGS_ROOT_DIR):
|
||||
os.makedirs(PKGS_ROOT_DIR)
|
||||
|
||||
pkg_builders: List[PackageBuilder] = []
|
||||
|
||||
pkg_builders.extend(get_cpp_httplib_builders())
|
||||
pkg_builders.extend(get_jsoncpp_builders())
|
||||
pkg_builders.extend(get_spdlog_builders())
|
||||
pkg_builders.extend(get_cxxopts_builders())
|
||||
pkg_builders.extend(get_cryptopp_builders())
|
||||
pkg_builders.extend(get_pybind11_builders())
|
||||
|
||||
for p in pkg_builders:
|
||||
p.configure()
|
||||
p.build()
|
||||
p.install()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user