Đóng góp cho gccgo frontend
Giới thiệu
Đây là một số ghi chú về việc đóng góp cho gccgo frontend của GCC. Để biết thông tin về việc đóng góp cho các phần khác của Go ngoài gccgo, xem Đóng góp cho dự án Go. Để biết thông tin về việc xây dựng gccgo cho bản thân bạn, xem Cài đặt và sử dụng gccgo. Để biết thêm các chi tiết kỹ càng về quy trình phát triển với gccgo frontend, xem tệp HACKING trong kho lưu trữ gofrontend.
Yêu cầu pháp lý
Bạn phải tuân theo các quy tắc bản quyền Go cho tất cả các thay đổi đối với gccgo frontend và thư viện libgo đi kèm. Mã là một phần của GCC thay vì gccgo phải tuân theo các quy tắc đóng góp GCC chung.
Mã
Mã nguồn chính cho gccgo frontend có thể tìm thấy tại
https://go.googlesource.com/gofrontend.
Chúng được mirror tại
https://github.com/golang/gofrontend.
Mã nguồn chính không thể tự xây dựng được, mà chỉ kết hợp
với GCC (trong tương lai, các trình biên dịch khác có thể được
hỗ trợ). Các thay đổi được thực hiện cho gccgo frontend cũng được áp dụng vào
kho lưu trữ mã nguồn GCC được lưu trữ tại gcc.gnu.org. Trong
kho lưu trữ gofrontend, thư mục go
được mirror vào thư mục gcc/go/gofrontend trong kho lưu trữ GCC,
và thư mục libgo của gofrontend
được mirror vào thư mục libgo của GCC. Ngoài ra,
thư mục test
từ kho lưu trữ Go chính
được mirror vào thư mục gcc/testsuite/go.test/test
trong kho lưu trữ GCC.
Các thay đổi đối với các thư mục này luôn chảy từ mã nguồn chính vào kho lưu trữ GCC. Các tệp không bao giờ nên được thay đổi trong kho lưu trữ GCC ngoại trừ bằng cách thay đổi chúng trong mã nguồn chính và mirror chúng.
gccgo frontend được viết bằng C++.
Nó tuân theo các tiêu chuẩn code GNU và GCC cho C++.
Khi viết mã cho frontend, hãy tuân theo định dạng của
mã xung quanh.
Hầu hết mã dành riêng cho GCC không nằm trong frontend chính và thay vào đó nằm
trong mã nguồn GCC trong thư mục gcc/go.
Thư viện runtime cho gccgo về cơ bản giống với thư viện
trong kho lưu trữ Go chính.
Mã thư viện trong kho lưu trữ Go được định kỳ merge vào
thư mục libgo/go của gofrontend và
sau đó là kho lưu trữ GCC, sử dụng shell script libgo/merge.sh.
Theo đó, hầu hết các thay đổi thư viện
nên được thực hiện trong kho lưu trữ Go chính. Các tệp ngoài
libgo/go là dành riêng cho gccgo; điều đó nói rằng, một số tệp
trong libgo/runtime dựa trên các tệp
trong src/runtime của kho lưu trữ Go chính.
Kiểm thử
Tất cả các patch phải được kiểm thử. Một patch gây ra các lỗi mới không thể chấp nhận được.
Để chạy bộ kiểm thử gccgo, chạy make check-go trong
thư mục build của bạn. Điều này sẽ chạy các kiểm thử khác nhau
trong gcc/testsuite/go.* và cũng sẽ chạy
bộ kiểm thử libgo. Bản sao các kiểm thử từ
kho lưu trữ Go chính này được chạy bằng script DejaGNU có trong
gcc/testsuite/go.test/go-test.exp.
Hầu hết các kiểm thử mới nên được gửi vào kho lưu trữ Go chính để sau đó
được mirror vào kho lưu trữ GCC. Nếu có nhu cầu về các kiểm thử cụ thể
cho gccgo, chúng nên đặt trong
thư mục gcc/testsuite/go.go-torture
hoặc gcc/testsuite/go.dg trong kho lưu trữ GCC.
Gửi thay đổi
Các thay đổi cho Go frontend nên tuân theo cùng quy trình như đối với
kho lưu trữ Go chính, chỉ là cho dự án gofrontend và
danh sách gửi thư gofrontend-dev@googlegroups.com
thay vì dự án go và
danh sách gửi thư golang-dev@googlegroups.com. Những thay đổi đó
sau đó sẽ được merge vào mã nguồn GCC.