আপনার B2G সোর্সের মধ্যে .userconfig
ফাইলে কিছু bash কোড যুক্ত করে আপনি বিল্ড প্রক্রিয়ার নির্দিষ্ট কিছু বিষয় কাস্টোমাইজ করতে পারেন। কিভাবে আপনি এই পরিবর্তন করবেন এবং এই পরিবর্তনের ফলে কি কি অর্জন করবেন, সে সম্পর্কে এই নিবন্ধটিতে বিস্তারিত আলোচনা করা হয়েছে।
.userconfig
ফাইল সোর্স কোড কন্ট্রোলের মধ্যে পরীক্ষা করা হয়না। তাই যখন আপনি আপনার সোর্স ট্রি আপডেট করবেন, তখন এটা ওভার রাইট হবেনা। এটা আপনার B2G ট্রি এর প্রধান ফোল্ডারের মধ্যে তৈরি করতে হবে; অর্থাৎ যে ফোল্ডারের মধ্যে flash.sh
, build.sh
, ইত্যাদি ফাইল রয়েছে। এটা আপনার কনফিগ এবং বিল্ডের কাজ করার আগে যোগ করতে হবে।
যদি .userconfig
ফাইল থাকে, তবে তা load-config.sh
স্ক্রিপ্টের মাধ্যমে লোড হয়। আর এই load-config.sh এর উৎস হচ্ছে এই স্ক্রিপ্ট সমূহঃ flash.sh
, build.sh
(setup.sh
এর মাধ্যমে), run-gdb.sh
, এবং run-emulator.sh
। আপনার বিল্ডের জন্য গেকো কোথায় রয়েছে, তা নির্ধারণের জন্য run-*.sh
স্ক্রিপ্ট সমূহ এটাকে ব্যবহার করে।
গুরুত্বপূর্ণঃ আপনার .userconfig ফাইল অবশ্যই আপনার হোম ফোল্ডারে না, বরং B2G সোর্সের প্রধান ফোল্ডারের মধ্যে থাকতে হবে!
গেকো সোর্স ট্রি পরিবর্তন করা
ডিফল্ট ভাবে, বিল্ড গেকোর ট্রি ব্যবহার করে, যেটা গিটহাবের একটি ট্রি থেকে ক্লোন করা। তবে কেউ কেউ mozilla-inbound, বা mozilla-central ব্যবহার করতে পছন্দ করে। এটা করার জন্য আপনার পছন্দ মত জায়গায় ক্লোন করুন এবং আপনার .userconfig
ফাইলে একটি লাইন যুক্ত করুন, যেটা GECKO_PATH
নির্দিষ্ট করে। যেমনঃ
export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)} echo "B2G_DIR = ${B2G_DIR}" export GECKO_PATH=${B2G_DIR}/mozilla-inbound echo "GECKO_PATH = ${GECKO_PATH}"
লক্ষ্য করুনঃ যদি আপনি ম্যাক ওএস এক্স এ একটি কাস্টম গেকোর বিপরীতে বিল্ডের কাজ করেন, তাহলে mozilla-central
ফোল্ডারটি অবশ্যই একটি কেস সেনসিটিভ ফাইল সিস্টেমে থাকতে হবে; নতুবা GECKO_PATH
ইগনোর করা হবে। বর্তমান ফাইল সিস্টেমটি কেস সেনসিটিভ কি না, তা পরীক্ষা করার জন্য একটি টার্মিনাল উইন্ডোতে নিচের কমান্ড টাইপ করতে পারেনঃ
echo -n This file system is case->tmp; echo -n in>>TMP; echo sensitive>>tmp; cat tmp
উপরের মত এভাবে B2G_DIR
পাওয়ার কারনে কোন প্রকার হার্ড কোডেড পাথ ছাড়াই আপনার .userconfig
কে কাজ করার সুবিধা প্রদান করে।
গায়া সেটিংস পরিবর্তন করা
মাঝে মাঝে আপনার গায়ার সেটিংস পরিবর্তন করার ইচ্ছা হতে পারে। যেমনঃ ব্যবহারকারীর বিল্ডে এডিবি সক্ষমতা প্রদান। আপনি যখন build/settings.py
কল করেন, তখন গায়া Makefile --override build/custom-settings.json
কমান্ড পাস করে; যাতে আমরা কিছু ব্যাশ লিখতে পারি যেটা, custom-settings.json
ফাইলের মধ্যে{"devtools.debugger.remote-enabled": true}
লিখবে। আমরা প্রয়োজন না হলে custom-settings.json
এ পরিবর্তন করা এড়িয়ে চলবো। মানে আমরা লিখবো custom-settings.json.new
এর মধ্যে এবং কন্টেন্ট গুলো custom-settings.json
থেকে আলাদা হয়, তবে আমরা এটাকে রিপ্লেস করে দেব।
export GAIA_PATH=${GAIA_PATH:-$(cd gaia; pwd)} export CUSTOM_SETTINGS="${GAIA_PATH}/build/config/custom-settings.json" cat > "${CUSTOM_SETTINGS}.new" <<EOF {"devtools.debugger.remote-enabled": true} EOF if [[ -f ${CUSTOM_SETTINGS} ]] && cmp "${CUSTOM_SETTINGS}" "${CUSTOM_SETTINGS}.new" >& /dev/null; then rm "${CUSTOM_SETTINGS}.new" else mv "${CUSTOM_SETTINGS}.new" "${CUSTOM_SETTINGS}" fi
একটি build/config/custom-prefs.js
ফাইল কনফিগার করার আরেকটি সহজ পদ্ধতি হচ্ছে গায়া ওয়ার্কিং ডিরেকটোরি অর্থাৎ gaia/build/config/custom-prefs.js
যদি আপনি B2G ডিরেকটোরিতে থাকেন। গায়া বিল্ড সিস্টেম প্রাইমার, প্রেফারেন্স কাস্টোমাইজ করা দেখুন।
লক্ষ্য করুনঃ বর্তমান বিল্ডটি এখনো এতটা চৌকস নয় যে GAIA_PATH
এর উপর ভিত্তি করে বিভিন্ন ডিরেক্টরি খুঁজে দেখবে। GECKO_PATH
behaves যেভাবে আচরন করে, এটা তার থেকে আলাদা। যদি আপনি আলাদা একটি গায়া ক্লোন ব্যবহার করতে চান, তাহলে আপনি সেই ডিরেক্টরি থেকে ম্যানুয়ালি make চালাতে পারেন।
ডিবাগ বিল্ড তৈরি করা
ডিবাগ বিল্ড তৈরি করার জন্য নিচের লাইনটি আপনার .userconfig
ফাইলে লিখুনঃ
export B2G_DEBUG=1
বিল্ড প্রোফাইল করা
প্রোফাইলিং চালু করার জন্য (বিল্ট-ইন (SPS) প্লাটফর্ম প্রোফাইলারের সাথে সর্বোত্তম ফলাফলের জন্য) নিচের লাইন সমূহ আপনার .userconfig
ফাইলে লিখুন এবং পুনরায় বিল্ড করুনঃ
export MOZ_PROFILING=1
B2G_NOOPT এর সাথে পেয়ার করবেন না। এর ফলাফল অর্থহীন হবে!
অপটিমাইজার নিষ্ক্রিয় করা
অপটিমাইজার নিষ্ক্রিয় করার জন্য (যেটা এমন বিল্ড তৈরি করবে, যা নিরীক্ষণ তুলনামূলক সহজ) আপনার .userconfig
ফাইলে নিম্নোক্ত লাইন লিখুন এবং পুনরায় বিল্ড করুনঃ
export B2G_NOOPT=1
প্রথমবারের জন্য ইউজার এক্সপেরিয়েন্স নিষ্ক্রিয় করা
যদি আপনি অনেক বেশি বিল্ড এবং রিফ্ল্যাশ করেন, তাহলে প্রত্যেকবার "ফাস্ট টাইম ইউজার এক্সপেরিয়েন্স" এর মধ্যে দিয়ে যাওয়াটা বিরক্তিকর লাগতে পারে। নিচের লাইনটি আপনার .userconfig এ যোগ করে আপনি এটা বন্ধ করতে পারেনঃ
export NOFTU=1
গায়া ডেভেলপার মোড চালু করা
যদি আপনি গায়া অ্যাপ ডেভেলপ বা হ্যাক করার পরিকল্পনা করে থাকেন, তাহলে ডিভাইসের সাথে কাজ করা আরও সহজ করার জন্য আপনি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় বিভিন্ন সেটিংস ও প্রেফারেন্স নির্দিষ্ট করতে পারবেন। যেমনঃ এটা স্বয়ংক্রিয়ভাবে রিমোট ডিবাগিং ফিচার সক্রিয় করবে এবং যখন একটি ইনকামিং ডিবাগিং কানেকশন চালু হবে তখন কোন প্রম্পট দেখাবে না।
আপনার দরকার শুধু নিচের এই লাইনটুকু আপনার .userconfig এ যোগ করাঃ
export DEVICE_DEBUG=1
ভালগ্রিন্ড সক্রিয় করা
আপনার অ্যাপলিকেশনের সাথে মেমোরি এবং থ্রেডিং সংক্রান্ত সমস্যা নিরীক্ষণের জন্য ভাল্গ্রিন্ড উপকারি। ভাল্গ্রিন্ড চালানো সংক্রান্ত আরও তথ্যের জন্য Debugging B2G using valgrind [en-US]দেখুন।
B2G এর অধীনে ভাল্গ্রিন্ড ব্যবহার করতে আপনার .userconfig এ নিচের লাইন যুক্ত করুনঃ
export B2G_VALGRIND=1
ডিফল্ট হোস্ট কম্পাইলার পরিবর্তন করা
সামসময়িক কিছু ডিস্ট্রিবিউশন, যেগুলো GCC 4.7 ডিফল্ট কম্পাইলার হিসেবে ব্যবহার করে, বিল্ড করার জন্য সেখানে আপনাকে পুরাতন একটি ভার্শন বলে দিতে হবে। এমনটা করার জন্য আপনার .userconfig
এ যথাক্রমে বিকল্প C এবং C++ কম্পাইলার নির্দিষ্ট করতে CC
এবং CXX
ভ্যারিয়েবল দুইটি যোগ করুন। যেমনঃ উবুন্টু ১২.১০ এ GCC 4.6 কম্পাইলার সেট করার জন্য ব্যবহার করতে হবেঃ
export CC=gcc-4.6 export CXX=g++-4.6
বা যদি এমন হয় যে, আপনি এমন একটি সংস্করণ ব্যবহার করছেন, যেটার মধ্যে এক্সিকিউটেবল ফাইল সমুহের সম্পূর্ণ পাথ দেয়া আছেঃ
export CC=/opt/gcc-4.6.4/bin/gcc export CXX=/opt/gcc-4.6.4/bin/g++
একটি কাস্টম গেকো অবজেক্ট ট্রি লোকেশন নির্দিষ্ট করা
একবার আপনি যখন গেকো সোর্স ট্রি সমূহ এবং অন্যান্য বিল্ড অপশন পরিবর্তন করা শুরু করে দেবেন, আপনি এটাও পরিবর্তন করতে চাইতে পারেন, যে আপনার অবজেক্ট গুলো কোথায় সংরক্ষন করা হবে (যেমনঃ আপনার সকল ডিবাগ অবজেক্ট আপনার নন-ডিবাগ অবজেক্ট থেকে আলাদা ট্রি-তে যাবে)। তাহলে আপনার এমনটি করা লাগতে পারেঃ
export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk-debug
${GECKO_PATH}
ব্যবহার করাটা গেকো ট্রি গুলোর মধ্যে সুইচ করা সহজ করেছে (যেমনঃ central, beta, aurora ইত্যাদি)।
ডিবাগ এবং নন-ডিবাগ উভয় অবজেক্ট রাখা
প্রত্যেকবার পুনরায় বিল্ড করা ছাড়াই নিরীক্ষণ এবং রিলিজ বিল্ড সমূহের মধ্যে সামনে পেছনে সুইচ করার জন্য আপনি আপনার .userconfig
ফাইল ব্যবহার করতে পারেন!
export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)} echo "B2G_DIR = ${B2G_DIR}" export GECKO_PATH=${B2G_DIR}/mozilla-inbound echo "GECKO_PATH = ${GECKO_PATH}" export B2G_DEBUG=1 echo "B2G_DEBUG = ${B2G_DEBUG}" export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk if [[ "${B2G_DEBUG}" != "0" ]]; then export GECKO_OBJDIR=${GECKO_OBJDIR}-debug fi if [[ "${GECKO_PATH/*mozilla-inbound*/mozilla-inbound}" == "mozilla-inbound" ]]; then export GECKO_OBJDIR=${GECKO_OBJDIR}-m-i fi echo "GECKO_OBJDIR = ${GECKO_OBJDIR}"
echo
কমান্ড সমূহ আপনাকে বর্তমান সেটিংস মনে করতে সাহায্য করে। ডিবাগ এবং রিলিজ বিল্ডের মধ্যে সুইচ করার জন্য ৭ নম্বর লাইনে B2G_DEBUG
এর মান পরিবর্তন করে দিন।