146 filename=os.path.join(LOGS_ROOT,
"packaging.log"),
148 format=
"%(asctime)s %(levelname)s: %(message)s",
150 logging.info(
"=== SDK Packaging Started ===")
156 sdk_name = f
"RenderingEngine-v{version}-SDK-{platform}"
157 sdk_root = os.path.join(SDK_TEMP_ROOT, sdk_name)
160 if os.path.exists(sdk_root):
161 shutil.rmtree(sdk_root)
164 logging.info(f
"Version : {version}")
165 logging.info(f
"Platform: {platform}")
166 logging.info(f
"SDK root: {sdk_root}")
169 sdk_rendering_engine_root =
ensure_dir(os.path.join(sdk_root,
"RenderingEngine"))
170 sdk_render_lib_root =
ensure_dir(os.path.join(sdk_rendering_engine_root,
"RenderingLibrary"))
171 sdk_material_compiler_root =
ensure_dir(os.path.join(sdk_rendering_engine_root,
"MaterialCompiler"))
172 sdk_scripts_root =
ensure_dir(os.path.join(sdk_rendering_engine_root,
"Scripts"))
177 installed_engine_root = os.path.join(INSTALL_ROOT,
"RenderingEngine")
180 installed_render_lib = os.path.join(installed_engine_root,
"RenderingLibrary")
182 for required_dir
in (
"Include",
"Library"):
183 required_path = os.path.join(installed_render_lib, required_dir)
185 if not os.path.isdir(required_path):
186 raise FileNotFoundError(
187 f
"Required SDK component not found: {required_path}"
191 os.path.join(installed_render_lib,
"Include"),
192 os.path.join(sdk_render_lib_root,
"Include"),
196 os.path.join(installed_render_lib,
"Library"),
197 os.path.join(sdk_render_lib_root,
"Library"),
203 installed_mc_root = os.path.join(installed_engine_root,
"MaterialCompiler")
204 copy_tree(installed_mc_root, sdk_material_compiler_root)
209 installed_external_root = os.path.join(installed_engine_root,
"External")
210 copy_tree(installed_external_root, os.path.join(sdk_rendering_engine_root,
"External"))
217 os.path.join(REPO_ROOT,
"RenderingEngine",
"Scripts",
"Templates"),
218 os.path.join(sdk_scripts_root,
"Templates"),
223 "register_project.py",
226 for script_name
in project_scripts:
227 script_src = os.path.join(
234 if os.path.isfile(script_src):
237 os.path.join(sdk_scripts_root, script_name),
239 logging.info(f
"Copied script: {script_name}")
241 raise FileNotFoundError(
242 f
"Required SDK script not found: {script_src}"
249 doc_dst =
ensure_dir(os.path.join(sdk_root,
"Doc"))
250 for doc
in DOC_FILES:
251 src = os.path.join(REPO_ROOT, doc)
252 if os.path.isfile(src):
253 shutil.copy2(src, doc_dst)
254 logging.info(f
"Copied documentation: {src}")
256 logging.warning(f
"Documentation file missing, skipped: {src}")
261 examples_src_root = os.path.join(REPO_ROOT,
"ContentExamples")
262 examples_dst_root =
ensure_dir(os.path.join(sdk_root,
"ContentExamples"))
264 def ignore_example(dirpath, names):
267 if n
in (
"Build",
"Intermediate",
"Local",
".vs",
".vscode",
"x64"):
269 elif n.endswith(
".user")
or n.endswith(
".vcxproj")
or n.endswith(
".vcxproj.filters"):
273 if os.path.isdir(examples_src_root):
277 ignore=ignore_example,
279 logging.info(
"Copied ContentExamples folder.")
281 logging.warning(
"No ContentExamples folder found.")
286 ensure_dir(os.path.join(sdk_root,
"UserApplications"))
291 write_manifest(os.path.join(sdk_root,
"Manifest.txt"), version, platform)
297 archive_path = os.path.join(PACKAGE_ROOT, sdk_name)
300 for ext
in (
".tar.gz",
".zip",
".tgz"):
301 old = archive_path + ext
302 if os.path.exists(old):
308 root_dir=SDK_TEMP_ROOT,
311 logging.info(f
"Archive created: {archive_path}.tar.gz")
312 logging.info(
"=== SDK Packaging Complete ===")
314 except Exception
as e:
315 logging.error(f
"SDK packaging failed: {e}", exc_info=
True)
316 print(f
"SDK packaging failed: {e}")