DepperDan/common/settings.py

91 lines
2.8 KiB
Python

# (c) 2025 by Stephan Menzel
# Licensed under the Apache License, Version 2.0.
# See attached file LICENSE for full details
import math
import multiprocessing
import os
from contextlib import contextmanager
from pathlib import Path
cmake_config_flag = ""
cmake_toolset = ""
boost_toolset = ""
boost_bootstrap_toolset = ""
build_dir = Path("raw")
install_prefix = Path(R"C:\devel\3rd_party")
rebuild = False
# Hard wire this. According to Azure docs here:
# https://github.com/MicrosoftDocs/azure-devops-docs/blob/main/docs/pipelines/agents/hosted.md
# they run with 2 cores, which gives us a suitable parallel count of 3
# num_cores = 3 if run_in_buildpipeline else 6
# doesn't seem to work
run_in_buildpipeline = "BUILD_ARTIFACTSTAGINGDIRECTORY" in os.environ
num_cores = 3 if run_in_buildpipeline else 6
if os.name == "posix":
cmake_config_flag = "CMAKE_BUILD_TYPE=Release"
cmake_toolset = ""
lib_wildcard = "*.a"
dll_wildcard = "*.so"
zlib_static_lib_name = "libz.a"
elif os.name == "nt": # Windows
cmake_config_flag = "CMAKE_CONFIGURATION_TYPES:STRING=Release"
cmake_toolset = "-T v143"
boost_toolset = "msvc-" + cmake_toolset[-3:-1] + "." + cmake_toolset[-1]
boost_bootstrap_toolset = "vc" + cmake_toolset[-3:-1] + cmake_toolset[-1]
lib_wildcard = "*.lib"
dll_wildcard = "*.dll"
zlib_static_lib_name = "zlibstatic.lib"
else:
print("Unsupported OS")
exit(1)
cpp_standard = "23"
number_of_jobs = max(1, math.floor(multiprocessing.cpu_count()))
cmake_global_flags = [
("BUILD_SHARED_LIBS:BOOL", "OFF"),
("BUILD_TESTING:BOOL", "OFF"),
("CMAKE_CXX_STANDARD_REQUIRED:BOOL", "ON"),
("CMAKE_MSVC_RUNTIME_LIBRARY:STRING", "\"MultiThreadedDLL\""),
("CMAKE_POSITION_INDEPENDENT_CODE:BOOL", "ON"),
("CMAKE_BUILD_TYPE:STRING", "Release")
]
def set_global_rebuild(new_rebuild: bool = False) -> None:
global rebuild
rebuild = new_rebuild
def set_global_install_prefix(new_prefix: Path) -> None:
global install_prefix
install_prefix = new_prefix
def set_global_build_dir(new_build_dir: Path) -> None:
global build_dir
build_dir = new_build_dir
def switch_shared_libs(shared: bool) -> None:
global cmake_global_flags
for i, (k, v) in enumerate(cmake_global_flags):
if k == "BUILD_SHARED_LIBS:BOOL":
cmake_global_flags[i] = ("BUILD_SHARED_LIBS:BOOL", "ON") if shared else ("BUILD_SHARED_LIBS:BOOL", "OFF")
@contextmanager
def temporarily_set_shared():
"""Create a scope in which we build dynamic"""
global cmake_global_flags
idx = 0
for idx, (k, v) in enumerate(cmake_global_flags):
if k == "BUILD_SHARED_LIBS:BOOL":
cmake_global_flags[idx] = ("BUILD_SHARED_LIBS:BOOL", "ON")
break
try:
yield # control goes to the inner `with` block
finally:
cmake_global_flags[idx] = ("BUILD_SHARED_LIBS:BOOL", "OFF")