chore: update build script.
This commit is contained in:
parent
e72102496b
commit
7e7b21544d
3
Scripts/.gitignore
vendored
Normal file
3
Scripts/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Disable output
|
||||
win_build.bat
|
||||
linux_build.sh
|
67
Scripts/gen_build_script.py
Normal file
67
Scripts/gen_build_script.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
import os
|
||||
import argparse
|
||||
import jinja2
|
||||
|
||||
def get_root_directory() -> str:
|
||||
return os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
class ScriptSettings:
|
||||
m_BuildDoc: bool
|
||||
|
||||
def __init__(self, build_doc: bool):
|
||||
self.m_BuildDoc = build_doc
|
||||
|
||||
class TemplateRender:
|
||||
m_Loader: jinja2.BaseLoader
|
||||
m_Environment: jinja2.Environment
|
||||
|
||||
m_WinTemplate: jinja2.Template
|
||||
m_LinuxTemplate: jinja2.Template
|
||||
|
||||
m_Settings: ScriptSettings
|
||||
|
||||
def __init__(self, settings: ScriptSettings) -> None:
|
||||
self.m_Loader = jinja2.FileSystemLoader(self.__get_dir())
|
||||
self.m_Environment = jinja2.Environment(loader=self.m_Loader)
|
||||
|
||||
self.m_WinTemplate = self.m_Environment.get_template('win_build.template.bat')
|
||||
self.m_LinuxTemplate = self.m_Environment.get_template('linux_build.template.sh')
|
||||
|
||||
self.m_Settings = settings
|
||||
|
||||
def __get_dir(self) -> str:
|
||||
return os.path.dirname(__file__)
|
||||
|
||||
def __render(self, template: jinja2.Template, dest_file: str, is_win: bool) -> None:
|
||||
with open(os.path.join(self.__get_dir(), dest_file), 'w', encoding='utf-8') as f:
|
||||
f.write(template.render(
|
||||
repo_root_dir = os.path.dirname(self.__get_dir()),
|
||||
build_doc = self.m_Settings.m_BuildDoc
|
||||
))
|
||||
|
||||
def render_win_script(self) -> None:
|
||||
self.__render(self.m_WinTemplate, 'win_build.bat', True)
|
||||
|
||||
def render_linux_script(self) -> None:
|
||||
self.__render(self.m_LinuxTemplate, 'linux_build.sh', False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
# parse argument
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='LibCmo Windows Build Script',
|
||||
description='LibCmo Windows Build Script'
|
||||
)
|
||||
parser.add_argument(
|
||||
'-d', '--build-doc',
|
||||
action='store_true', dest='build_doc',
|
||||
help='Build LibCmo without documentation.'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# build settings
|
||||
settings = ScriptSettings(args.build_doc)
|
||||
# build template render and render result
|
||||
render = TemplateRender(settings)
|
||||
render.render_win_script()
|
||||
render.render_linux_script()
|
||||
|
0
Scripts/linux_build.template.sh
Normal file
0
Scripts/linux_build.template.sh
Normal file
|
@ -1,38 +0,0 @@
|
|||
@ECHO OFF
|
||||
:: Check environment
|
||||
SET README_PATH=%CD%\README.md
|
||||
IF EXIST %README_PATH% (
|
||||
REM DO NOTHING
|
||||
) ELSE (
|
||||
ECHO Error: You must run this script at the root folder of this project!
|
||||
EXIT /b
|
||||
)
|
||||
|
||||
:: Create main binary directory
|
||||
MKDIR bin
|
||||
CD bin
|
||||
:: Create build and install folder
|
||||
MKDIR build
|
||||
MKDIR install
|
||||
|
||||
:: Check build doc switch
|
||||
IF NOT "%1"=="NODOC" (
|
||||
SET BUILD_DOC_SWITCH=ON
|
||||
) ELSE (
|
||||
SET BUILD_DOC_SWITCH=OFF
|
||||
)
|
||||
|
||||
:: Build project
|
||||
CD build
|
||||
cmake -G "Visual Studio 16 2019" -A x64 -DNEMO_BUILD_UNVIRT=ON -DNEMO_BUILD_BMAP=ON -DNEMO_BUILD_DOC=%BUILD_DOC_SWITCH% -DSTB_IMAGE_PATH="D:\CppLib\stb" -DYYCC_PATH="J:\YYCCommonplace\bin\cpp20\install\x64_Debug" -DZLIB_HEADER_PATH="D:\zlib" -DZLIB_BINARY_PATH="D:\zlib\contrib\vstudio\vc14\x64\ZlibDllRelease" ../..
|
||||
pause
|
||||
cmake --build . --config Release
|
||||
IF NOT "%1"=="NODOC" (
|
||||
cmake --build . --target NeMoDocuments
|
||||
)
|
||||
cmake --install . --prefix=../install --config Release
|
||||
CD ..
|
||||
|
||||
:: Exit to original path
|
||||
CD ..
|
||||
ECHO Windows CMake Build Done
|
|
@ -1,48 +0,0 @@
|
|||
import subprocess
|
||||
import os
|
||||
import shutil
|
||||
import argparse
|
||||
|
||||
def get_root_directory() -> str:
|
||||
return os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
def execute_cmd(prog: str, args: tuple[str, ...], cwd: str) -> None:
|
||||
# find program first
|
||||
found_prog = shutil.which(prog)
|
||||
if found_prog is None:
|
||||
raise RuntimeError(f'Fail to find program {prog}')
|
||||
# run command
|
||||
subprocess.run(
|
||||
list((found_prog, ) + args), # program + arguments
|
||||
stdin=subprocess.PIPE, # redirect
|
||||
stdout=subprocess.PIPE, # redirect
|
||||
stderr=subprocess.STDOUT, # stderr use the same output with stdout
|
||||
cwd=cwd, # work directory
|
||||
shell=True, # enable shell feature
|
||||
check=True, # if program failed, raise exception and exit
|
||||
)
|
||||
|
||||
def build(no_doc: bool) -> None:
|
||||
# create directory
|
||||
root_dir: str = get_root_directory()
|
||||
os.makedirs(os.path.join(root_dir, 'Bin', 'build'))
|
||||
os.makedirs(os.path.join(root_dir, 'Bin', 'install'))
|
||||
|
||||
# build project
|
||||
args = [
|
||||
''
|
||||
]
|
||||
|
||||
if __name__ == '__main__':
|
||||
# parse argument
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='LibCmo Windows Build Script',
|
||||
description='LibCmo Windows Build Script'
|
||||
)
|
||||
parser.add_argument(
|
||||
'-d', '--no-doc',
|
||||
action='store_true', dest='no_doc',
|
||||
help='Build LibCmo without documentation.'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
build(args.no_doc)
|
24
Scripts/win_build.template.bat
Normal file
24
Scripts/win_build.template.bat
Normal file
|
@ -0,0 +1,24 @@
|
|||
@ECHO OFF
|
||||
:: Navigate to root directory
|
||||
CD /d {{ repo_root_dir }}
|
||||
|
||||
:: Create main binary directory
|
||||
MKDIR bin
|
||||
CD bin
|
||||
:: Create build and install folder
|
||||
MKDIR build
|
||||
MKDIR install
|
||||
|
||||
:: Build project
|
||||
CD build
|
||||
cmake -A x64 -DNEMO_BUILD_UNVIRT=ON -DNEMO_BUILD_BMAP=ON {{ '-DNEMO_BUILD_DOC=ON' if build_doc }} -DSTB_IMAGE_PATH="D:\CppLib\stb" -DYYCC_PATH="J:\YYCCommonplace\bin\cpp20\install\x64_Release" -DZLIB_HEADER_PATH="D:\zlib" -DZLIB_BINARY_PATH="D:\zlib\contrib\vstudio\vc14\x64\ZlibDllRelease" ../..
|
||||
cmake --build . --config RelWithDebInfo
|
||||
{% if build_doc %}
|
||||
cmake --build . --target NeMoDocuments
|
||||
{% endif %}
|
||||
cmake --install . --prefix=../install --config RelWithDebInfo
|
||||
CD ..
|
||||
|
||||
:: Exit to original path
|
||||
CD ..
|
||||
ECHO Windows CMake Build Done
|
Loading…
Reference in New Issue
Block a user