SDCC移植 – 環境設定

要移植的第一件事,應該是要先看一下 document
這邊有官網上的連結,裡面有文件及原始碼可以下載

把原始碼及文件載下來後
先看到第二章 Installing SDCC 裡面的內容
直接拉到 2.4 節,那個才是環境架設的第一個重點

裡面有說到要在 Mac OS 或是 linux 上要怎麼 build 類的
我這邊直接選我手邊有的電腦環境來架設 Win10 + Cygwin + MinGW
這樣 Build 出來就可以直接在 Windows 的電腦上使用

所以接下來就是去 Cygwin 的官網上下載 Cygwin
這邊我的電腦是 64bit 的,所以就直接下載給 64bit 版本

下載完成後,回到剛的文件上
在 2.4.4 節中,有提到需要安裝某些基本的元件
flex, bison, make, libboost-dev, gdb, gcc-core, gcc-g++
compiler 部份則選擇 mingw64-x86_64-gcc-core, mingw64-x86_64-gcc-g++, mingw64-x86_64-binutils, mingw64_x86_64-boost
另外有加選一個 texinfo

在安裝 Cygwin 過程中,把剛的那些元件都裝上後
再將 SDCC 的原始碼放至到 Cygwin 安裝目錄中的 home 資料匣
然後點擊剛剛安裝完 Cygwin 後建立的桌面捷徑,進入 Cygwin 環境

進入後,找到 home 的目錄
流程上可以參考 2.4.1 Building SDCC on Linux
輸入 tar -xvjf sdcc-src-20210515-12365.tar.bz2 (後面的 sdcc 壓縮檔名看你下載的是啥)
解壓縮完可以在 home 裡面看到 sdcc 的資料匣

接下來是設定 configure 檔案
在 2.1 節中,有說明怎麼設定
比如說你只想要產生 8051 的 c compiler,那就可以把其它的 disable
以我的例子來說,可能我機乎都不要,只留我想要參考的那一家
所以我可以先在記事本中打上下列的內容
如果你想要全都要,也可以不加下列這些 disable 的選項,這樣裡面預設已經被 porting 好的就會被 build 出來

./configure --disable-mcs51-port --disable-stm8-port --disable-z80-port --disable-z180-port --disable-avr-port --disable-ez80_z80-port --disable-r2k-port --disable-r3ka-port --disable-gbz80-port --disable-ds390-port --disable-ds400-port --disable-hc08-port --disable-tlcs90-port --disable-s08-port --disable-pic14-port --disable-pic16-port --disable-xa51-port

然後呢,我可能也不需要 simulator
不需要打包最終的 .ihx 檔(我用自己寫的 hex2bin 來取代)
及一些要錢的 lib (像 pic 系列的就不是免費讓你使用的)
所以我就在後面再加上底下的內容

--disable-ucsim --disable-packihx --disable-non-free 

最終呢,因為我們是用 mingw64-i686 的 gcc compiler 來 build 我們的 sdcc compiler
還有因為我們最終是要在 windows 的電腦上面執行,有路徑上搜尋的問題,所以最後面要再加上

sdccconf_h_dir_separator="\\\\" --host=x86_64-w64-mingw32

最後把所有在記事本上寫上的內容全部複製到 cygwin 的視窗下執行
主是要會動態產生之後要用的 makefile 內容
花一小段時間跑完後,如果沒什麼問題

另外要補充一點,用 mingw build 出來的執行檔,還需要先將部份 dll 先放到 sdcc > bin 資料匣內
libgcc_s_seh-1.dll, libstdc++-6.dll, libwinpthread-1.dll, zlib1.dll
這幾個 dll 可以在 Cygwin 安裝目錄 > usr > x86_64-w64-mingw32 > sys-root > mingw > bin 找到

如果不想在最終資料匣內包上 libgcc_s_seh-1.dll, libstdc++-6.dll, libwinpthread-1.dll
可以開啟 sdcc > Makefile.common 檔案進行修改
在前面約 16 行的地方將 「CXX = x86_64-w64-mingw32-g++」 這行後面補上底下的參數
這樣就可以不用連同這個 dll 給第三方的人才可以執行 sdcc 的執行檔了

-static -static-libgcc -static-libstdc++

然後就可以再用 make 指令開始 build
-j4 是可以用多執行緒去跑,簡單的來說就是可以 build 的比較快

make -j4

如果可以順利 build 成功,就可以在 sdcc > bin 資料匣內看到 sdcc 相關的執行檔
接下來可以自己寫個 c 檔案去測試看看

下次再開始講怎麼用 eclipse debug sdcc 原始碼
如此才可以開始 porting 的動作

發佈留言