منصوبے کے بارے میں

# helengine helengine ایک مشترکہ انجن اور ایڈیٹر ورک اسپیس ہے جو پروجیکٹ `.heproj` فائلوں سے پلیٹ فارم پیکجز بناتا ہے۔ یہ محدود ہارڈویئر (مثلاً DS اور PS2 جیسے ریٹرو کنسولز) کو ہدف بنانے کے لیے ڈیزائن کیا گیا ہے جبکہ جدید اثاثہ پائپ لائنز اور ٹولنگ استعمال کرتا ہے۔ ## ایڈیٹر CLI پلیٹ فارم بلڈز پلیٹ فارم بلڈز ایک PowerShell ریپر اسکرپٹ `scripts/build-platform.ps1` کے ذریعے ترتیب دیے جاتے ہیں، جو ایڈیٹر CLI کو بحال اور شائع کرتا ہے، پھر تصنیف شدہ پروجیکٹ کو براہ راست بناتا ہے۔ مثال کا استعمال: ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File C:\dev\helworks\helengine\scripts\build-platform.ps1 ` -Project C:\dev\helprojs\city\project.heproj ` -Platform ds ` -Output C:\dev\helprojs\city\ds-build ` -BuildProfile release ` -CacheRoot D:\helengine-cache ``` اہم پیرامیٹرز میں `-Project` (`.heproj` کا راستہ)، `-Platform` (جیسا کہ پروجیکٹ کی `settings/platforms.json` میں اعلان کیا گیا ہو)، `-Output` (آؤٹ پٹ ڈائریکٹری)، `-BuildProfile` (مثلاً `debug` یا `release`)، `-CacheRoot` (دوبارہ قابل استعمال کیش مقام)، `-LockTimeout`، `-Clean`، `-PruneCacheOlderThanDays`، اور اضافی ایڈیٹر CLI آرگیومنٹس کے لیے `-AdditionalArgs` شامل ہیں۔ ریپر تصدیق شدہ تکمیل کے لیے بلڈ ویٹنگ کو بھی سپورٹ کرتا ہے۔ ## ماڈیول اور بلڈ موڈز پروجیکٹ کوڈ `code.module.json` اعلانات استعمال کرتا ہے۔ رن ٹائم ماڈیولز صرف رن ٹائم ماڈیولز پر منحصر ہوتے ہیں؛ صرف ایڈیٹر کے ماڈیولز `"moduleKind": "editor"` استعمال کرتے ہیں اور رن ٹائم ماڈیولز پر منحصر ہو سکتے ہیں۔ ٹیسٹ فولڈرز کا نام `<module-id>.tests` ہونا چاہیے اور یہ کسی اعلان شدہ پروڈکشن ماڈیول سے مماثل ہونا چاہیے۔ انٹرایکٹو ایڈیٹر سیشنز اور ایڈیٹر کمانڈز `EditorFull` استعمال کرتے ہیں (جس میں رن ٹائم + ایڈیٹر ماڈیولز + ٹیسٹ شامل ہیں)، جبکہ پلیٹ فارم بلڈز `RuntimeOnly` استعمال کرتے ہیں (ٹیسٹ/ایڈیٹر کمانڈز کو خارج کرتے ہوئے)۔ پلیٹ فارم بلڈ پروفائلز `editorPrebuildCommandIdsByBuildProfileId` کے ذریعے ترتیب وار پری بلڈ کمانڈز کا اعلان کر سکتے ہیں۔ ## کیش اور انوکیشن کنٹریکٹ دوبارہ قابل استعمال `v2` کیش ایک متعین شناخت استعمال کرتا ہے جو کینونیکل پروجیکٹ پاتھ اور ایڈیٹر چیک آؤٹ سے ماخوذ ہے۔ بلڈز فی پروجیکٹ ایک پروجیکٹ لاک کے ذریعے اور فی آؤٹ پٹ ایک آؤٹ پٹ لاک کے ذریعے سیریلائز کیے جاتے ہیں؛ مختلف پروجیکٹس صرف اسی صورت میں اوورلیپ ہو سکتے ہیں جب مختلف آؤٹ پٹس استعمال ہوں۔ ریپر پروجیکٹ کو کاپی نہیں کرتا؛ یہ اسی جگہ بلڈ کرتا ہے اور انٹرمیڈیٹس کو کیش میں رکھتا ہے۔ `HELENGINE_BUILD_INVOCATION_ID` ایک اندرونی ارتباطی GUID ہے، نہ کہ صارف کی ترتیب۔ ایگزٹ کوڈز (`0`، `2`، `3`، `4`، `5`، `6`، `10`) ریپر اور توثیق کی ناکامیوں کو بیان کرتے ہیں؛ چائلڈ پروسیس کے ایگزٹ کوڈز مماثل ہو سکتے ہیں، لہٰذا کال کرنے والوں کو تشخیصات اور `.helengine-build-state.json` کا معائنہ کرنا چاہیے۔ ## کوڈ جنریشن C# سے C++ کوڈ جنریشن ایک git سب ماڈیول ہے جو `engine/vendor/csharpcodegen` پر موجود ہے، جو انجن کمٹ کے ذریعے پن کیا گیا ہے۔ بلڈ اسکرپٹ اسے ایڈیٹر کے ساتھ `codegen/` ڈائریکٹری میں شائع کرتا ہے، جو پلیٹ فارم بلڈز کے لیے استعمال ہوتی ہے۔ پلیٹ فارم انٹریز اب `codegenToolPath` نہیں رکھتیں؛ یاد دہانیاں انتباہ کے ساتھ نظر انداز کر دی جاتی ہیں۔ کلوننگ یا برانچ سوئچنگ کے بعد، `git submodule update --init --recursive` چلائیں۔ ## تصدیق شدہ بلڈ ویٹنگ `tools/build-waiter` ایگزٹ کوڈ، موجودہ `.helengine-build-state.json`، اور مطلوبہ آرٹیفیکٹ کی تازگی (مثلاً `game.iso`، `disc/SYSTEM.CNF`) کو حاصل کر کے بلڈ کے کامیابی سے مکمل ہونے کا انتظار کرتا ہے۔ یہ ایک اعترافی مرحلے کے ذریعے ریپر کے ساتھ ہم آہنگ ہوتا ہے۔ ویٹر کے زیر کنٹرول کالز میں، ریپر 30 سیکنڈ کے بعد ایگزٹ کوڈ `10` کے ساتھ ناکام ہو جاتا ہے اگر اعتراف موجود نہ ہو۔ PS2 بلڈ کی مثال: ```powershell dotnet run --project ...\helengine.buildwaiter.csproj -- ` --output ...\output\ps2 ` --require game.iso ` --require disc/SYSTEM.CNF ` --require disc/HELENGIN.ELF ` -- powershell ... -File ...\build-platform.ps1 -Project ... -Platform ps2 -Output ... ``` ## نیٹو اسٹیبل-کیش اسموک ایک Windows نیٹو اسموک ٹیسٹ (`scripts/tests/build-platform-native-cache-smoke.tests.ps1`) کے لیے بیرونی ہم مرتبہ پلیٹ فارم سورس، Visual Studio C++ ٹولز، CMake، Ninja، اور Windows بلڈر درکار ہیں۔ یہ ایک چھوٹی فکسچر کو ایک ہی کیش کے ساتھ دو بار بناتا ہے، غیر خالی `helengine_windows.exe` اور موجودہ بلڈ-اسٹیٹ فائل کی توقع کرتا ہے۔ اسے واضح طور پر چلائیں؛ یہ ڈیفالٹ سوٹ میں شامل نہیں ہے۔