2013-12-12 57 views
0

我爲Android使用libjpeg-turbo端口。這不是從基JPEG-渦輪很大不同以源代碼術語:http://git.linaro.org/gitweb?p=people/tomgall/libjpeg-turbo/libjpeg-turbo.git;a=shortlog;h=refs/heads/androidAndroid的libjpeg-turbo:如何組織運行時選擇NEON/non-NEON代碼?

有由2個CPU特性依賴文件的模塊(靜態庫):jsimd_arm_neon.S和jsimd_arm.c。我想用NEON支持編譯jpeg-turbo,我必須定義__ARM_HAVE_NEON並編譯這個模塊爲-march=armv7-a -mfpu=neon。我希望庫在沒有霓虹支持(如Tegra 2)的較舊硬件上運行,我應該刪除霓虹燈編譯器標誌,並且不要剔除__ARM_HAVE_NEON

我的問題是:如何編譯它,以便在運行時可以選擇霓虹燈或非霓虹燈路徑,而無需在非霓虹燈硬件上使用SIGILL?我知道如何在運行時檢查NEON,但我不知道如何修改libjpeg-turbo並組織庫。

+0

構建相同庫的兩個不同版本,然後在運行時加載正確的版本。 – auselen

+0

@auselen:這是一個明顯的解決方案,但我想避免動態加載庫(或將它構建到.so,對於這一點,但這不是什麼大不了的)。 –

+0

我只是溝渠沒有霓虹燈的設備:ARMv6太老了。即使有人仍在使用搭載ARMv6的Android手機,他幾乎不會下載任何內容。 Tegra2並不是那麼古老,但太小了,放棄它會傷害那麼多。 –

回答

1

一個古老的問題,但無論如何我會加入以防萬一。有人詳細介紹了其中的一個問題是動態選擇NEON。這裏解釋:https://stackoverflow.com/a/20697814/712413

相關部分是項目4,用於修改init_simd()方法中的某些行。