Skip to content

VC編譯時期傳入的檢測參數 /arch:AVX2 問題 #351

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
orzuk-lmj opened this issue Feb 14, 2019 · 12 comments
Closed

VC編譯時期傳入的檢測參數 /arch:AVX2 問題 #351

orzuk-lmj opened this issue Feb 14, 2019 · 12 comments
Milestone

Comments

@orzuk-lmj
Copy link
Contributor

orzuk-lmj commented Feb 14, 2019

腳本內同時置入 sse/ sse2/ avx/ avx2 的時候,gcc/clang 都正常,但是 vc 會有警告,然而造成設置警告等同錯誤的時候造成麻煩。

``` lua
add_vectorexts("mmx", "avx", "avx2")
add_vectorexts("sse", "sse2", "sse3", "ssse3")
```
  • cl.exe 不能傳入多個 /arch:sse2 /arch:avx2 ,後面的會蓋掉前面的設置,且會跳出警告,造成 /wx 使用出問題
  • yasm 設置的源碼,無法在 vc project 生成後編譯,期望能有 custom build 命令正確生成。
    產生出來的 custom build 命令有問題 :
    ml /nologo /c -D__config_debug__ -f win32 -D__config_debug__ -Fo..\..\.objs\vpx\windows\x86\debug\libsrc\vp8\encoder\x86\copy_sse2.asm.obj ..\..\..\..\sources\libsrc\vp8\encoder\x86\copy_sse2.asm
    
@waruqi
Copy link
Member

waruqi commented Feb 14, 2019

cl.exe 不能傳入多個 /arch:sse2 /arch:avx2 ,後面的會蓋掉前面的設置,且會跳出警告,造成 /wx 使用出問題

这块目前用户自己控制下就行了,is_plat win就 只确保添加一个

yasm 設置的源碼,無法在 vc project 生成後編譯,期望能有 custom build 命令正確生成。

目前.asm是支持vc project生成的,就是用的custom build,不过默认调用的 ml/ml64 可能没对yasm等第三方as进行处理 后两天有时间我看看,或者你这帮忙看看vc插件那块 应该改动不大

@waruqi waruqi added this to the v2.2.5 milestone Feb 15, 2019
@waruqi
Copy link
Member

waruqi commented Mar 4, 2019

vs201x工程生成,我支持其他as汇编器了,yasm测试ok。。你可以试试,在dev分支

@orzuk-lmj
Copy link
Contributor Author

orzuk-lmj commented Mar 4, 2019

VC生成的命令是:

D:\\Tools\\yasm.exe -Ilib -I..\\\\_build\\\\vs2015-x64-debug/generated -D__platform_windows__ -D__config_x64__ -D__config_debug__ -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DDEBUG -D_DEBUG -f win64 -o ..\..\.objs\vpx\windows\x64\debug\lib\vp9\common\x86\vp9_mfqe_sse2.asm.obj ..\..\..\..\sources\lib\vp9\common\x86\vp9_mfqe_sse2.asm

編譯後報錯:

yasm: FATAL: unable to open include file `vpx_ports/x86_abi_support.asm'
  • command 模式可以正確編譯
  • 目錄結構多層,像是根目錄有 xmake.lua ,然後 includes("lib") 把子目路中的target包進來。
    root   
        + lib (目錄)
        |        | + vpx_port (目錄) / x86_abi_support.asm
        |        |                                   
        |        | + *.c
        |        | + xmake.lua (這裡有 static target)
        |
        + xmake.lua (這裡只有 includes)
        |
        + Tools  (目錄)  / xmake.lua (這裡有工具的 target)
    
    

@waruqi
Copy link
Member

waruqi commented Mar 4, 2019

命令编译的完整参数选项给我看下。-v的

@orzuk-lmj
Copy link
Contributor Author

orzuk-lmj commented Mar 5, 2019

直接命令編譯的-v內容我挑上述同一個檔案,其他有點多暫時先略過。

[ 33%]: compiling.debug lib\vp9\common\x86\vp9_mfqe_sse2.asm
D:\\Tools\\yasm.exe -Ilib -I..\\\\_build\\\\vs2015-x64-debug/generated -D__platform_windows__ -D__config_x64__ -D__config_debug__ -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DDEBUG -D_DEBUG -f win64 -o ..\\_build\\vs2015-x64-debug\\.objs\\vpx\\windows\\x64\\debug\\lib\\vp9\\common\\x86\\vp9_mfqe_sse2.asm.obj lib\\vp9\\common\\x86\\vp9_mfqe_sse2.asm
  • 簡單看了一下,參數幾乎都一樣,只有相對路徑不同

  • 為了方便,再次附上生成的VC中命令:

D:\\Tools\\yasm.exe -Ilib -I..\\\\_build\\\\vs2015-x64-debug/generated -D__platform_windows__ -D__config_x64__ -D__config_debug__ -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DDEBUG -D_DEBUG -f win64 -o ..\..\.objs\vpx\windows\x64\debug\lib\vp9\common\x86\vp9_mfqe_sse2.asm.obj ..\..\..\..\sources\lib\vp9\common\x86\vp9_mfqe_sse2.asm

@waruqi
Copy link
Member

waruqi commented Mar 5, 2019

dev上我改了下。。你再试试

@orzuk-lmj
Copy link
Contributor Author

orzuk-lmj commented Mar 6, 2019

  • 更新dev後再試了下,發現還是會出現 yasm: FATAL: unable to open include file vpx_ports/x86_abi_support.asm'` 這種錯誤訊息。但是仔細檢查後確認基於*.vcxproj的根目錄,設置出來的相對路徑是正確的。 (因為可以正確指向.asm源碼本體,從而推導出其他的路徑也正確)

  • 手動修改生成的VC project中yasm命令,將 /I 改成 -I 後就完全正常了,因此回頭看了一下老版本也是-I,是最近才變更的。 (附註: 最新版command模式為-I ,但是vcproj 裡是/I)

  • yasm 有限制一次只能給予一個 -I 否則會出警告,不知道有沒有好辦法解決?

    yasm : warning : can open only one input file, only the last file will be processed
    

@waruqi
Copy link
Member

waruqi commented Mar 6, 2019

那应该-I的路径修复可以了,只是yasm不支持/I 我vcproj里面默认替换成了/I ,这个可以稍微处理下就好

至于-I次数限制 只能用户自己控制了 可以只添加一个includedir xmake里面不太好处理这些

@waruqi
Copy link
Member

waruqi commented Mar 6, 2019

dev我改了 你再试试

@orzuk-lmj
Copy link
Contributor Author

感謝,抓了最新的 dev 測試可用。

關於-I的次數限制,其實是有一些實務上的狀況想讓你了解一下:
專案內容 .c / .asm 並存時候,對於 .c 需要兩個以上 include 路徑,但是對於 .asm 只需要一個。
基於上述狀況,為了.c多次使用 add_includedirs 必定會影響 .asm 的部分。

  1. 不使用add_includedirs 了,對單檔案 add_files 的時候明確指定需要的 includedirs
  2. 拆分成兩個專案,一個維護.asm變成 object 中間資料,然後另一個只維護 .c 且整合前者編譯。

現階段還沒支持覆蓋模式 #324 ,實際使用上多少都有些不方便,但還是有解法。

@waruqi
Copy link
Member

waruqi commented Mar 6, 2019

嗯 add_files的 includedirs等覆盖设置 暂时还不支持,你先凑活着处理下吧,最近没什么时间,等以后有时间了改进支持下。。

@waruqi
Copy link
Member

waruqi commented Mar 6, 2019

此处先close了,如果需要对add_files("", {xxx= ss}) 的方式做覆盖设置支持,可以提个新的issues来跟进维护。

@waruqi waruqi closed this as completed Mar 6, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants