143
144 ensure_dir(LOGS_ROOT)
145 logging.basicConfig(
146 filename=os.path.join(LOGS_ROOT, "packaging.log"),
147 level=logging.INFO,
148 format="%(asctime)s %(levelname)s: %(message)s",
149 )
150 logging.info("=== SDK Packaging Started ===")
151
152 try:
153 version = read_version()
154 platform = detect_platform()
155
156 sdk_name = f"RenderingEngine-v{version}-SDK-{platform}"
157 sdk_root = os.path.join(SDK_TEMP_ROOT, sdk_name)
158
159
160 if os.path.exists(sdk_root):
161 shutil.rmtree(sdk_root)
162 ensure_dir(sdk_root)
163
164 logging.info(f"Version : {version}")
165 logging.info(f"Platform: {platform}")
166 logging.info(f"SDK root: {sdk_root}")
167
168
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"))
173
174
175
176
177 installed_engine_root = os.path.join(INSTALL_ROOT, "RenderingEngine")
178
179
180 installed_render_lib = os.path.join(installed_engine_root, "RenderingLibrary")
181
182 for required_dir in ("Include", "Library"):
183 required_path = os.path.join(installed_render_lib, required_dir)
184
185 if not os.path.isdir(required_path):
186 raise FileNotFoundError(
187 f"Required SDK component not found: {required_path}"
188 )
189
190 copy_tree(
191 os.path.join(installed_render_lib, "Include"),
192 os.path.join(sdk_render_lib_root, "Include"),
193 )
194
195 copy_tree(
196 os.path.join(installed_render_lib, "Library"),
197 os.path.join(sdk_render_lib_root, "Library"),
198 )
199
200
201
202
203 installed_mc_root = os.path.join(installed_engine_root, "MaterialCompiler")
204 copy_tree(installed_mc_root, sdk_material_compiler_root)
205
206
207
208
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"))
211
212
213
214
215
216 copy_tree(
217 os.path.join(REPO_ROOT, "RenderingEngine", "Scripts", "Templates"),
218 os.path.join(sdk_scripts_root, "Templates"),
219 )
220
221 project_scripts = [
222 "create_project.py",
223 "register_project.py",
224 ]
225
226 for script_name in project_scripts:
227 script_src = os.path.join(
228 REPO_ROOT,
229 "RenderingEngine",
230 "Scripts",
231 script_name,
232 )
233
234 if os.path.isfile(script_src):
235 shutil.copy2(
236 script_src,
237 os.path.join(sdk_scripts_root, script_name),
238 )
239 logging.info(f"Copied script: {script_name}")
240 else:
241 raise FileNotFoundError(
242 f"Required SDK script not found: {script_src}"
243 )
244
245
246
247
248
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}")
255 else:
256 logging.warning(f"Documentation file missing, skipped: {src}")
257
258
259
260
261 examples_src_root = os.path.join(REPO_ROOT, "ContentExamples")
262 examples_dst_root = ensure_dir(os.path.join(sdk_root, "ContentExamples"))
263
264 def ignore_example(dirpath, names):
265 ignore = []
266 for n in names:
267 if n in ("Build", "Intermediate", "Local", ".vs", ".vscode", "x64"):
268 ignore.append(n)
269 elif n.endswith(".user") or n.endswith(".vcxproj") or n.endswith(".vcxproj.filters"):
270 ignore.append(n)
271 return ignore
272
273 if os.path.isdir(examples_src_root):
274 copy_tree(
275 examples_src_root,
276 examples_dst_root,
277 ignore=ignore_example,
278 )
279 logging.info("Copied ContentExamples folder.")
280 else:
281 logging.warning("No ContentExamples folder found.")
282
283
284
285
286 ensure_dir(os.path.join(sdk_root, "UserApplications"))
287
288
289
290
291 write_manifest(os.path.join(sdk_root, "Manifest.txt"), version, platform)
292
293
294
295
296 ensure_dir(PACKAGE_ROOT)
297 archive_path = os.path.join(PACKAGE_ROOT, sdk_name)
298
299
300 for ext in (".tar.gz", ".zip", ".tgz"):
301 old = archive_path + ext
302 if os.path.exists(old):
303 os.remove(old)
304
305 shutil.make_archive(
306 archive_path,
307 "gztar",
308 root_dir=SDK_TEMP_ROOT,
309 base_dir=sdk_name,
310 )
311 logging.info(f"Archive created: {archive_path}.tar.gz")
312 logging.info("=== SDK Packaging Complete ===")
313
314 except Exception as e:
315 logging.error(f"SDK packaging failed: {e}", exc_info=True)
316 print(f"SDK packaging failed: {e}")
317 sys.exit(1)
318
319
int main(int argc, char *argv[])