Build Image 到一半出現錯誤並停止
是build 到 BSP Caches 和 stall 的部份
看 build.log
mipsasm : Command line error D8016 : '/QMmips32' and '/QMmips2' command-line options are incompatible
原因是由於 mipsasm try to build *.s
但是 nmake 給它的 option 中 /QMmips32 和 /QMmips2 衝突
從 build.log 中 可以看到 makefile.def including 很多的檔案
/QMmips32 是來自於 \WINCE700\platform\DB1200\sources.cmn
找到 在\WINCE700\public\COMMON\oak\misc 下的 makefile.def
看到以下code
!ELSEIF "$(_TGTCPUFAMILY)" == "MIPS"
ASSEMBLER=mipsasm -nologo
! IF "$(_TGTCPUISA)" == "II"
C_ARCH_CMD_LINE=-QMmips2 -D_M_MRX000=4000
! ELSEIF "$(_TGTCPUISA)" == "IV"
C_ARCH_CMD_LINE=-QMmips4
CDEFINES=-D_MIPS64 $(CDEFINES)
! ELSEIF "$(_TGTCPUISA)" == "16"
CDEFINES=-DMIPS16SUPPORT $(CDEFINES)
! IF "$(NOMIPS16CODE)" == "1"
C_ARCH_CMD_LINE=-QMmips2 -D_M_MRX000=4000
CDEFINES=-DNOMIPS16CODE $(CDEFINES)
! ELSE
C_ARCH_CMD_LINE=-QMmips16 -D_M_MRX000=4000
! ENDIF
LDEFINES=-merge:.text16=.text $(LDEFINES)
! ENDIF
! IF "$(WINCECOD)" != ""
AFLAGS=-Fa$(_OBJDIR)\ -FAsc $(AFLAGS)
! ENDIF
! IF "$(_TGTCPUOPTIONS)" == "_FP"
C_ARCH_CMD_LINE=$(C_ARCH_CMD_LINE) -QMFPE-
! ELSE
C_ARCH_CMD_LINE=$(C_ARCH_CMD_LINE) -QMFPE
! ENDIF
ASM_ARCH_CMD_LINE=$(C_ARCH_CMD_LINE)
AFLAGS=-c $(CINCLUDES) $(CDEFINES) $(AFLAGS) $(ADEFINES)
!ELSEIF "$(_TGTCPUFAMILY)" == "ARM"
上面就是根據你的 Platform 然後定義 C_ARCH_CMD_LINE 及 ASM_ARCH_CMD_LINE
也就是如果你的 _TGTCPUFAMILY為 MIPSII_FP
就會在 mipsasm 後面加上 -QMmips2 -D_M_MRX000=4000 -QMFPE-
所以是 sources.cmn 中的 /QMmips32 及 makefile.def 中的 MIPSII ( -QMmips2 )
衝到
但是兩個都沒有錯,那麼要如何解決才完美呢
在 makefile.def 中後面又找到了一段
# Use C_ARCH_FLAGS and A_ARCH_FLAGS to override the default architecture
# flags passed to the compiler and assembler, respectively.
!IF "$(C_ARCH_FLAGS)" != ""
C_ARCH_CMD_LINE=$(C_ARCH_FLAGS)
!ENDIF
!IF "$(A_ARCH_FLAGS)" != ""
ASM_ARCH_CMD_LINE=$(A_ARCH_FLAGS)
!ENDIF
也就是說 使用 C_ARCH_FLAGS 和 A_ARCH_FLAGS override the default architecture
所以完美的解決方法就是在 sources.cmn 中指定
C_ARCH_FLAGS =/QMmips32 /QMFPE
A_ARCH_FLAGS = /QMmips32 /QMFPE 即可
再來繼續編譯後, 在 AES.c 發生錯誤
問題是在於 AES.c 中 有個函式宣告為 inline
而在 c 中,不能用 inline 而要改成 __inline
此問題就可解決了。