Packaging golang for secondary architectures, go-srpm-macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

at the moment golang packages are built only on primary architectures (defined by %go_arches macro) due to golang compiler architecture support. For secondary architectures gcc-go is available. In order to provide an easy way for packagers to package golang projects for secondary architectures as well, go-srpm-macros packages is introduced. It provides basic macros that can be used within spec files. Currently golang package ships /usr/lib/rpm/macros.d/macros.golang file, which defines %gopath and %go_arches macros. As secondary architectures has no golang package these macros are not available. Thus I am proposing to move these macros to go-srpm-macros package and provide additional ones:

# Define arches for PA and SA
%golang_arches   %{ix86} x86_64 %{arm}
%gccgo_arches    %{power64} s390x aarch64
%go_arches       %{golang_arches} %{gccgo_arches}

# Where to set GOPATH for builds
%gopath          %{_datadir}/gocode

# Minimal version of gcc providing gcc-go
%gccgo_min_vers  5.0.0

# Define commands for building
%golang_build    go build -compiler gc
%gcc_go_build    go build -compiler gccgo -gccgoflags "$RPM_OPT_FLAGS"

# Define commands for testing
%golang_test     go test -compiler gc
%gcc_go_test     go test -compiler gccgo -gccgoflags "$RPM_OPT_FLAGS"


Meaning of %golang_arches and %gccgo_arches is obvious. %go_arches is extended for secondary architectures. Spec files using %go_arches macros will not get touched by this change as it takes effect only on secondary architectures. %golang_build, resp. %golang_test and %gcc_go_build, resp. %gcc_go_test macros provides an easy way to run go build, resp. go test commands for golang and gcc-go compiler without typing the minimal list of options. The reason to define %golang_build and %gcc_go_build instead of %go_build for both compilers is to cover a case when gcc-go and golang have a different set of options. So packagers are aware of which compiler/command they use for building. The same holds for the 'go test' command.

Recommended use in spec file:
1) To choose the correct compiler:
%ifarch %{golang_arches}
BuildRequires: golang
%else
BuildRequires: gcc-go >= %{gccgo_min_vers}
%endif

2) To choose the correct command for building and testing:
%ifarch %{golang_arches}
%{golang_build} -o bin/binary %{import_path}/binary
%{golang_test} %{import_path}/binary
%else
%{gcc_go_build} -o bin/binary %{import_path}/binary
%{gcc_go_test} %{import_path}/binary
%endif


At the same time packaging guidelines for golang will be extended to provide information about secondary architectures.

What are the steps to accomplish this task?
1) finish review of go-srpm-macros [1]
2) add go-srpm-macros as a run-time dependency of redhat-rpm-config for f21-f23 and el6
3) remove /usr/lib/rpm/macros.d/macros.golang from golang
4) update packaging guidelines

I will fill all necessary bugs/tickets if needed and update packaging guidelines.

Florian, I would like to make go-srpm-macros a run-time dependency of redhat-rpm-config. Thus I believe go-srpm-macros needs an extra caution so it does not break minimal buildroot. Can you check out the macros.go-srpm file in the package [1]? The file define only one line macros, no %if nor %ifarch.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1241156

Any feedback and questions are welcomed and appreciated.

Thanks to all involved in helping us.

Kind Regards
Jan Chaloupka
--
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/devel
Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux