मैं अपनी परियोजना के संकलन समय में सुधार करना चाहता हूं। मैं कई प्लेटफार्मों का समर्थन करता हूं: ओएसएक्स, लिनक्स, एंड्रॉइड, आईओएस। उनमें से प्रत्येक के लिए मैं डीबग और रिलीज के लिए प्रोजेक्ट बनाता हूं।

आइए मान लें कि मेरे कोड में कोई प्लेटफ़ॉर्म विशिष्ट नहीं है और न ही कॉन्फ़िगरेशन विशिष्ट कोड है।

क्या किसी कंपाइलर द्वारा इसके मध्यवर्ती प्रतिनिधित्व को सहेजना संभव है:

1) पार्सिंग कोड या

2) अनुकूलन चरण

ताकि मैं (क्रमशः) परिणामों का पुन: उपयोग करके संकलन समय में सुधार कर सकूं:

1) डिबग/रिलीज़ कॉन्फ़िगरेशन

2) प्लेटफॉर्म (एंड्रॉइड, आईओएस, ओएसएक्स, लिनक्स की रिलीज)?

1
mkk 4 अप्रैल 2019, 10:46

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप क्लैंग का उपयोग करते हैं - इसका उत्तर हां है, यह संभव है:

clang -S -emit-llvm something.c

something.ll उत्पन्न करता है जो LLVM IR फ़ाइल है। अगला चरण असेंबली फ़ाइल बनाने के लिए llc उपयोगिता का उपयोग करना है:

llc -march=x86 something.ll

X86-विशिष्ट असेंबली के साथ something.s बनाना चाहिए।

हालांकि मैं सलाह दूंगा कि इसे एक बड़ी परियोजना के लिए उपयोग न करें (यदि आप संकलन को तेज करने के विकल्प की तलाश में हैं, तो संभवतः आपके पास एक बड़ा है)। इसका कारण यह है कि आपके कोड में या तृतीय-पक्ष में प्लेटफ़ॉर्म-विशिष्ट मैक्रोज़ का उपयोग किया जा सकता है। उदाहरण के लिए:

#ifdef UNIX
...
#else
...

प्रीप्रोसेसर चरण पहला है, यह आईआर उत्सर्जित करने से पहले जाता है। तो यदि आप किसी अन्य प्लेटफॉर्म के लिए असेंबली जेनरेट करेंगे तो यह खराब हो सकता है।

2
Dmitry Gordon 4 अप्रैल 2019, 08:07