Bada IDEのハック:必要に応じて収集します

こんにちは

この短い記事は、Samsungが「何が必要かをよく知っている」という考えに我慢したくないSamsung Badaモバイルプラットフォームのアプリケーションの開発者、およびGNU Compiler Collectionを使用してARMのコードを構築する関係者を対象としています。



Target-ReleaseまたはTarget-Debugでプロジェクトをビルドすると、ログが次のように書き込まれることに多くの人が気づいたと思います



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







通常は静的で、常に右側に追加されます。IDEでは、それについての言葉はありません。 さらに、「-Os」オプションはプロジェクトプロパティで不変です(「灰色」)。 何が起こっているのか説明します。





そのため、次の不正が見られます。

  1. 実行可能ファイルのサイズの最適化は常に望ましいとは限りません(特にシステム、アルゴリズムの場合)!
  2. もちろん、mfpu = vfpv3は良好ですが、皮質にはNEONがあります
  3. プロジェクトは、「ダム」Thumbの代わりにARM命令のセットにコンパイルされます




サムスンの位置は理解できます:遊び心のある手、言及された旗を変えることは、プロジェクトのアセンブリを簡単に台無しにします、そして、彼らは本当に韓国のサポートチームに彼らが本当であると証明できます。 しかし、私たちは何をしているかを知っています。 状況を修正できますか? はい!



ファイル<Bada SDKのルート> /IDE/buildoptions.xmlに注目しましょう。 IDEを介して通常の人間の方法で変更できないフラグのセットが含まれているだけです。 このファイルを編集したら、必ずEclipseを再起動してください。 完全に引き離します:



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





-mthumbは Thumbコードをコンパイルすることを強制し、 -O2は通常プログラムを最適化し、今では意味のない-mthumb-interworkが削除されます。 多くのプログラムでこのようなフラグを使用して動作を確認しましたが、すべて正常に機能しています。 次の2つのことに注意してください。

  1. -mfpu = neonを実行すると、デバイスで起動したときにアプリケーションがクラッシュします。 なぜ-はっきりしない、私はこの瞬間を探っている。 テストボードの仕事で、私は何度もやりました。
  2. -mthumb-interworkは、いくつかの特別な場合に必要になる場合があります。 私はテストを実行しました-それなしですべてがうまく動作します。


Bada 1.1デバイス(52xのような予算の波のライン)のアセンブリフラグには何が表示されますか?



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





まず、Samsungの公式Webサイトの仕様にまったく記述されていない貧弱なプロセッサと-mfloat-abi = softがあります 。これは、FPUがまったく使用されていないためです。 arm.comのARM9仕様では、FPUは実際にオプションであると記載されています。 私はこれらのデバイスを持っていません。このフラグを-mfloat-abi = softfpまたは-mfloat-abi = hardに変更することをお勧めするかどうかはわかりません 。 しかし、再び-mthumbを追加することをお勧めします



多くの浮動小数点計算を行う人にアドバイスをします: -funsafe-math-optimizations -ffast-mathフラグを(通常の方法で)プロジェクトフラグに追加します。 後悔することはありません。



最後に、 ARM固有のすべてのGCCフラグへリンク



開発に成功していただきありがとうございます!



All Articles