हैक बडा आईडीई: जैसा हम चाहते हैं हम इकट्ठा करते हैं

नमस्ते!
यह छोटा लेख सैमसंग बाडा मोबाइल प्लेटफॉर्म के लिए अनुप्रयोगों के डेवलपर्स को संबोधित किया गया है जो इस विचार के साथ नहीं रखना चाहते हैं कि सैमसंग "बेहतर जानता है कि क्या जरूरत है", साथ ही ऐसे लोग जो जीआरयू कंपाइलर संग्रह का उपयोग करके एआरएम के लिए कोड का निर्माण करते हैं।

मुझे लगता है कि कई लोगों ने देखा कि टारगेट-रिलीज़ या टारगेट-डीबग में प्रोजेक्ट बनाते समय एक लॉग लिखा जाता है

arm-samsung-nucleuseabi-g++ -DSHP -I"D:/Work/Bada/1.2.1/include" -I"???/inc" -Os -Wall -E -fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard -mlittle-endian -mthumb-interwork -o"???/Target-Release/dirent.i" "../src/bada/dirent.cpp"
'Finished building: ../src/bada/dirent.cpp'

हमें विधानसभा के झंडे में दिलचस्पी होगी, अर्थात का हिस्सा

-Os -Wall -E -fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard -mlittle-endian -mthumb-interwork

आप परियोजना के गुणों में अपने स्वयं के झंडे जोड़ सकते हैं, लेकिन यह बुरा है: वे सभी बाईं ओर, और एक टुकड़े के लिए जिम्मेदार हैं

-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard -mlittle-endian -mthumb-interwork

आम तौर पर स्थिर और हमेशा दाईं ओर जोड़ा जाता है, और आईडीई में इसके बारे में एक शब्द भी नहीं है। इसके अलावा, "-ओ" विकल्प परियोजना के गुणों ("ग्रे") में अपरिवर्तनीय है। मैं समझाऊंगा कि क्या हो रहा है।


तो, हम निम्नलिखित अन्याय देखते हैं:
  1. निष्पादन योग्य फ़ाइल के आकार पर अनुकूलन हमेशा बेहतर नहीं होता है (विशेषकर सिस्टम, एल्गोरिदमिक चीजों के लिए!)
  2. mfpu = vfpv3, अच्छा है, लेकिन कोर्टेक्स में नीयन है
  3. परियोजनाओं को "गूंगा" अंगूठे के बजाय एआरएम निर्देशों के एक सेट में संकलित किया गया है


सैमसंग की स्थिति को समझा जा सकता है: चंचल हाथ, उल्लिखित झंडे को बदलना, परियोजना की विधानसभा को आसानी से बर्बाद कर सकता है, और फिर वे कोरियाई समर्थन टीम को साबित कर सकते हैं कि वे वास्तव में कौन हैं। हालाँकि, हम जानते हैं कि हम क्या कर रहे हैं। क्या हम स्थिति को ठीक कर सकते हैं? हाँ!

आइए फ़ाइल पर ध्यान दें <bada SDK की जड़> /IDE/buildoptions.xml। इसमें बस उन झंडों का एक सेट होता है जिन्हें आईडीई के माध्यम से सामान्य मानव तरीके से नहीं बदला जा सकता है। इस फ़ाइल को संपादित करने के बाद, ग्रहण को फिर से शुरू करना सुनिश्चित करें। हम पूरा खींच लेते हैं:

 <comp>-fpic -mthumb -fshort-wchar -O2 -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard</comp> 

थम्ब कोड को संकलित करने के लिए -थुंब बल, -ओ 2 आमतौर पर कार्यक्रम का अनुकूलन करता है, और अब अर्थहीन -मथुम-इंटरवर्क हटा दिया जाता है। मैंने कई कार्यक्रमों पर इस तरह के झंडे के साथ ऑपरेशन की जांच की, और वे सभी काम करते हैं जैसे उन्हें चाहिए। मैं दो बातें नोट करता हूं:
  1. यदि आप -mfpu = नियॉन करते हैं , तो डिवाइस पर लॉन्च होने पर एप्लिकेशन क्रैश हो जाते हैं। क्यों - यह स्पष्ट नहीं है, मैं इस क्षण की खोज कर रहा हूं। परीक्षण बोर्डों पर काम करते समय, मैंने ऐसा कई बार किया।
  2. -मथुम्ब-इंटरवर्क अभी भी कुछ विशेष मामलों में आवश्यक हो सकता है। मैंने परीक्षण चलाए - इसके बिना सब कुछ ठीक काम करता है।

बडा 1.1 उपकरणों (52x की तरह बजट लहरों की एक पंक्ति) के लिए हम विधानसभा के झंडे में क्या देखते हैं?

 <comp>-fpic -fshort-wchar -mcpu=arm9 -mfloat-abi=soft -mlittle-endian -mthumb-interwork</comp> 

सबसे पहले, एक खराब प्रोसेसर जो आधिकारिक सैमसंग वेबसाइट पर विनिर्देश में बिल्कुल भी नहीं लिखा गया है, साथ ही -mfloat-abi = soft , जिसके कारण FPU का उपयोग बिल्कुल नहीं किया जाता है, हड़ताली है । Arm.com पर ARM9 कल्पना बताती है कि FPU वास्तव में वैकल्पिक है। मेरे पास ये उपकरण नहीं हैं, और मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि क्या इस ध्वज को -mfloat-abi = softfp या -mfloat-abi = हार्ड में बदलना अच्छा है। लेकिन फिर से मैं -मथुम जोड़ने की सलाह देता हूं।

मैं उन लोगों को सलाह दूंगा जिनके पास बहुत सारे फ्लोटिंग-पॉइंट गणनाएँ हैं: -funsafe-math-ऑप्टिमाइज़ेशन -ffast-math फ्लैग को प्रोजेक्ट फ्लैग (सामान्य तरीके से) में जोड़ें। आपको इसका पछतावा नहीं होगा।

अंत में, एआरएम के लिए विशिष्ट सभी जीसीसी झंडे का लिंक

आपके सफल विकास के लिए धन्यवाद!

Source: https://habr.com/ru/post/In112931/


All Articles