প্রকল্প সম্পর্কে
# 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++ কোডজেন হলো `engine/vendor/csharpcodegen`-এ একটি git সাবমডিউল, যা ইঞ্জিন কমিট দ্বারা পিন করা। বিল্ড স্ক্রিপ্ট এটি এডিটরের পাশে একটি `codegen/` ডিরেক্টরিতে প্রকাশ করে, যা প্ল্যাটফর্ম বিল্ডে ব্যবহৃত হয়। প্ল্যাটফর্ম এন্ট্রিগুলো আর `codegenToolPath` বহন করে না; রিমাইন্ডারগুলো একটি সতর্কবার্তাসহ উপেক্ষা করা হয়। ক্লোন বা ব্রাঞ্চ পরিবর্তনের পরে `git submodule update --init --recursive` চালান।
## যাচাইকৃত বিল্ড ওয়েটিং
`tools/build-waiter` এক্সিট কোড, একটি বর্তমান `.helengine-build-state.json`, এবং প্রয়োজনীয় আর্টিফ্যাক্টের সতেজতা (যেমন `game.iso`, `disc/SYSTEM.CNF`) ক্যাপচার করে একটি বিল্ড সফলভাবে সম্পন্ন হওয়ার জন্য অপেক্ষা করে। এটি একটি স্বীকৃতি পর্যায়ের মাধ্যমে র্যাপারের সাথে সমন্বয় করে। ওয়েটার-নিয়ন্ত্রিত কলগুলিতে, স্বীকৃতি অনুপস্থিত থাকলে ৩০ সেকেন্ড পরে র্যাপার এক্সিট কোড `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` এবং একটি বর্তমান বিল্ড-স্টেট ফাইল প্রত্যাশা করে। স্পষ্টভাবে চালান; এটি ডিফল্ট স্যুটে নেই।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.