The Chromium Chronicle #7: प्रीप्रोसेसिंग सोर्स

एपिसोड 7: सिऐटल, वॉशिंगटन में ब्रूस डॉसन की पेशकश (अक्टूबर, 2019)
पिछले एपिसोड

कभी-कभी किसी एक Chromium सोर्स फ़ाइल को हाथ से कंपाइल करना मददगार होता है, ऐसा हो सकता है कि कंपाइलर ऑप्टिमाइज़ेशन के विकल्पों के साथ प्रयोग करके, उसे प्रीप्रोसेस किया जा सके करने के लिए एक फ़ाइल बनाई जा सकती है, ताकि आप कुछ जटिल मैक्रो विवरण को समझ सकें या कंपाइलर बग.

कुछ ट्रिक की मदद से, Chromium डेवलपर यह एक खास सोर्स फ़ाइल को कंपाइल करता है, जिसमें ज़रूरत के हिसाब से बदलाव किए जाते हैं.

सबसे पहले, अपनी आउटपुट डायरेक्ट्री पर जाएं और ऑटो निंजा (या निंजा) का इस्तेमाल करें ^ प्रत्यय का इस्तेमाल करके पसंद की फ़ाइल कंपाइल करें (और किसी भी निर्भरता). यह प्रत्यय निंजा को बताए गए file—version.o का आउटपुट बनाने के लिए कहता है मामले में शामिल है. फिर, फ़ाइल को स्पर्श करें और उसे (और केवल उसे) फिर से कंपाइल करें निंजा के लिए -v (वर्बोज़) फ़्लैग:

Linux या OSX पर:

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

Windows cmd शेल में ^ एक खास वर्ण है और इसे एस्केप करना ज़रूरी है:

C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^

autoninja -v निर्देश का सामान्य आउटपुट ऐसा दिखता है (बहुत ज़्यादा) काट-छांट की गई):

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...

इस निर्देश की मदद से, अपनी पसंद की फ़ाइल इकट्ठा की जा सकती है. पहले से प्रोसेस किया गया अपडेट पाने के लिए आउटपुट के लिए, नीचे दिया गया तरीका अपनाएं:

Linux या OSX पर, -o obj/base/base/version.o ब्लॉक को आखिर से हटा दें, और -E जोड़ें. यह कंपाइलर को यह बताता है कि वह पहले से प्रोसेस की गई फ़ाइल को stdout.

आउटपुट को किसी फ़ाइल पर रीडायरेक्ट करें, जैसे कि:

../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i

Windows पर, /showIncludes विकल्प को शुरुआत से हटा दें (यह प्रिंट करता है) हर #include के लिए आउटपुट की एक लाइन) और फिर /P जोड़ें फ़ाइल को कंपाइल करने के बजाय उसे प्रीप्रोसेस करें. नतीजे इसमें सेव किए जाएंगे: version.i में मौजूदा डायरेक्ट्री:

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

अब आप पहले से प्रोसेस की गई फ़ाइल की जांच करके देख सकते हैं कि मैक्रो असल में क्या कर रहे हैं. इस सुविधा की मदद से, प्रयोग के तौर पर कंपाइलर-स्विच में बदलाव करके उसे फिर से कंपाइल किया जा सकता है.

अतिरिक्त संसाधन

  • Chrome बिल्ड तेज़ी से करता है: बिल्ड को ऑप्टिमाइज़ करने से जुड़ी ज़्यादा सलाह पाने के लिए (Windows पर फ़ोकस).
  • ETW: Chrome में Windows की परफ़ॉर्मेंस से जुड़ी समस्याओं का पता लगाने का तरीका जानें या बिल्ड में दिया गया है. इसके लिए, ETW (जिसे Xperf भी कहा जाता है) दस्तावेज़ पढ़ें.