Cross Compiler
Bài từ dự án mở SysNet Wiki.
Cross Compiler là một cách thực hiện việc viết code, và compile chương trình trên máy tính chạy trên những kiến trúc khác nhau và những hệ điều hành khác nhau. Chẳng hạn ta có thể lập trình và compile chương trình trên Linux x86, để chạy được trên Solaris Ultra Sparc. Một trong những công cụ lập trình hỗ trợ vấn đề này GCC.
[Sửa] Ngôn ngữ GCC hỗ trợ
- C
- C++ (g++)
- Java (gcj)
- Ada (gnat)
- Objective-C
- Objective-C++
- Fortran (gfortran)
Ngoài ra còn hỗ trợ thêm: Modula-2, Modula-3, Pascal, PL/I, D, Mercury, VHDL
[Sửa] Các kiến trúc máy mà GCC hỗ trợ
Version 4.1 đã hỗ trợ các vi xử lý: Tiêu bản:Multicol
Ngoài ra còn hỗ trợ thêm: Tiêu bản:Multicol
Khi thay đổi GCC cho hệ máy mới, bootstrapping được sử dụng.
[Sửa] Tại sao lại Cross Compiler
Khi thực hiện port MINIX trên sparc64, máy Sun Sparc có thể sẽ không có hệ điều hành cài sẵn trên đó (Solaris, Linux) hoặc là những hệ điều hành cũ hoặc là khả năng tính toán trên máy tính Sparc sẽ chậm hơn trên máy tính cài đặt cross compiler. Bản thân người viết cũng đã từng sử dụng máy UltraSparc 1 cài đặt Solaris 2.8, tuy nhiên do máy khá chậm (143MHZ) và hệ điều hành không thật sự thuận tiện để thiết kế và compile một OS mới trên đó nên lựa chơn Cross Compiler là một lựa chọn hợp lý.
Không nhất thiết phải thực hiện cross compiler trên máy tính Sparc nếu hệ điều hành Solaris có sẵn compiler GCC và chương trỉnh GNU Make. Việc này có thể thực hiện bằng cách soạn thảo các file source code trên máy tính thuận tiện sau đó chép các file source code vào máy tính Sparc để thực hiện việc compile source code đó trên máy Sparc. Để thực hiện điều đó cầ phải có SSH, hoặc ftp hoặc NFS. Đó là vấn đề khác sẽ bàn đến sau.
[Sửa] Làm sao để tạo 1 Cross Compiler trên Linux
Các bước thực hiện tạo 1 cross compiler trong Linux được thực hiện theo 2 bước:
[Sửa] Chuẩn bị cho việc cài đặt Binutils và GCC trên Linux
Thực hiện điền này cần có 1 Terminal(Console) trên đó có thể đánh những dòng lệnh cho hệ điều hành Linux thực hiện.
Người viết đã sử dụng GNOME Terminal để thực hiện.
- Thiết lập các biến môi trường:
- host=i686-pc-linux-gnu (máy cài đặt cross compiler).
- target=sparc-sun-solaris2.8 (máy mà cross compiler sẽ compile chương trình chạy trên đó).
- prefix=/home/foo/sparcdev/build-install (thư mục muốn cài đặt cross compiler vào).
- sysroot=/home/foo/spardev (thư mục gốc mày cross compiler sẽ xem xét các thư việc hoặc các header file trong đó).
- Nếu muốn sử dụng cái thư viện chuẩn do hệ điều hành máy đích cung cấp ta cần sao chép thêm các file đó và trong thư mục /home/foo/sparcdev/usr/include hoặc /home/foo/sparcdev/usr/lib
- Việc cài đặt cross compiler phải được thực hiện 1 cách tuần tự, trước tiên là cài đặt binutils sau đó là GCC.
- Tạo các thư mục con trong sysroot dùng để thực hiện việc configure và make: /home/foo/sparcdev/build-binutils, home/foo/sparcdev/build-gcc
[Sửa] Cài đặt Binutils trên Linux
- Vào trang web chính thức của Binutils chọn phiên bản mới nhất down về.
- Giải nén gói dữ liệu vào thư mục home/foo/sparcdev/binutils.
- Trong console ta nhập vào các lệnh:
# cd /home/foo/sparcdev/build-binutils # ../binutils/configure --host=$host --target=$target --prefix=$prefix --with-sysroot=$sysroot -v # make | tee &> make.log # make install | tee &> install.log
Nếu khi cần thư viện hay file headers từ Solaris đổi lệnh configure thành:
# ../binutils/configure --host=$host --target=$target --prefix=$prefix --disable-nls -v
Để biết thêm chi tiết các tùy chọn vào trang web chính thức của Binutils tham khảo
[Sửa] Cài đặt GCC trên Linux
- Vào trang web chính thức của GCC chọn phiên bản mới nhất down về.
- Giải nén gói dữ liệu vào thư mục home/foo/sparcdev/gcc
- Trong console ta nhập vào các lệnh:
# cd /home/foo/sparcdev/build-gcc # ../gcc/configure --host=$host --target=$target --prefix=$prefix --with-sysroot=$sysroot --with-gnu-as --with-gnu-ld --enable-languages=c,objc,c++,obj-c++ --disable-libgcj # make | tee &> make.log # make install | tee &> install.log
Nếu khi cần thư viện hay file headers từ Solaris đổi lệnh configure thành:
# ../gcc/configure --host=$host --target=$target --prefix=$prefix --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared
Gcc theo configure ở trên chỉ dùng để compile các file mã nguồn của C, C++.
Thông tin chi tiết về các tùy chọn trong configure xem trên trang web chính thức của GCC
[Sửa] Xóa những thư mục không cần thiết sau khi cài đặt
Xóa các thư mục:
/home/foo/sparcdev/build-gcc
/home/foo/sparcdev/build-binutils
/home/foo/sparcdev/build-gcc
/home/foo/sparcdev/build-binutils
[Sửa] Những lưu ý khi thực hiện cài đặt
- Cái file thư việc hoặc headers trong OS (Solaris) thường nằm trong thư mục /usr/include, /usr/lib hoặc /usr/local/include, /usr/local/lib
- Khi thực hiện cái lệnh configure nếu không có tùy chọn --prefix=$prefix thì mặc định chương trình cài đặt nằm trong /usr/local. Thực hiện lệnh make install phải có quyền root.
</nowiki>#sudo make install </nowiki>

