summaryrefslogblamecommitdiff
path: root/Mk/Uses/go.mk
blob: 21ef428722dc1a734461341bf3df2c3e12eb8733 (plain) (tree)
1
2
3
4
5
6
7

           

                                                                   


                       




                                                                         
 
                                                             
 
            





                                                                           

           

                                                                    







                                                                             
 


                                                                           





                                                                          



                                  
 

                                                      

      
                    






                                      
                             
                                 
                 

                                      


                                        


                                   
                             
 



                                              






                                        
                             



                                              
 

                                    
                                        
 





                                                                  
                                           

                                
                                         
      
 

                     
                           
                                                                                                




                            
                                                                                 
       
      
 
                                                                       
# $FreeBSD$
#
# This file contains logic to ease porting of Go binaries using the
# `go` command.
#
# Feature:	go
# Usage:	USES=go
# Valid ARGS:	(none), modules
#
# (none)	Setup GOPATH and build in GOPATH mode.
# modules	If the upstream uses Go modules, this can be set to build
#		in modules-aware mode.
#
# You can set the following variables to control the process.
#
# GO_PKGNAME
#	The name of the package. When building in GOPATH mode, this is
#	the directory that will be created in GOPATH/src and seen by the
#	`go` command. When building in modules-aware mode, no directories
#	will be created and GO_PKGNAME value will be only used as a default
#	for GO_TARGET. If not set explicitly and GH_SUBDIR is present,
#	GO_PKGNAME will be inferred from GH_SUBDIR.
#
# GO_TARGET
#	The names of the package(s) to build. If not set explicitly,
#	defaults to GO_PKGNAME.
#
# CGO_CFLAGS
#	Addional CFLAGS variables to be passed to the C compiler by the `go`
#	command
#
# CGO_LDFLAGS
#	Addional LDFLAGS variables to be passed to the C compiler by the `go`
#	command
#
# GO_BUILDFLAGS
#	Additional build arguments to be passed to the `go install` command
#
# GO_PORT
#	The Go port to use.  By default this is lang/go but can be set
#	to lang/go-devel in make.conf for testing with future Go versions.
#
#	This variable should not be set by individual ports!
#
# MAINTAINER: jlaffaye@FreeBSD.org

.if !defined(_INCLUDE_USES_GO_MK)
_INCLUDE_USES_GO_MK=	yes

.if !empty(go_ARGS) && ${go_ARGS:Nmodules}
IGNORE=	USES=go only accepts no arguments or 'modules'
.endif

# Settable variables
.if empty(GO_PKGNAME)
.  if !empty(GH_SUBDIR)
GO_PKGNAME=	${GH_SUBDIR:S|^src/||}
.  else
GO_PKGNAME=	${PORTNAME}
.  endif
.endif
GO_TARGET?=	${GO_PKGNAME}
GO_BUILDFLAGS+=	-v -buildmode=exe
CGO_ENABLED?=	1
CGO_CFLAGS+=	-I${LOCALBASE}/include
CGO_LDFLAGS+=	-L${LOCALBASE}/lib
.if ${ARCH} == armv6 || ${ARCH} == armv7
GOARM?=		${ARCH:C/armv//}
.endif

# Read-only variables
GO_CMD=		${LOCALBASE}/bin/go
GO_WRKDIR_BIN=	${WRKDIR}/bin

GO_ENV+=	CGO_ENABLED=${CGO_ENABLED} \
		CGO_CFLAGS="${CGO_CFLAGS}" \
		CGO_LDFLAGS="${CGO_LDFLAGS}" \
		GOARM=${GOARM}

.if ${go_ARGS:Mmodules}
GO_BUILDFLAGS+=	-mod=vendor
GO_WRKSRC=	${WRKSRC}
GO_ENV+=	GOPATH="" \
		GOBIN="${GO_WRKDIR_BIN}"
.else
GO_WRKDIR_SRC=	${WRKDIR}/src
GO_WRKSRC=	${GO_WRKDIR_SRC}/${GO_PKGNAME}
GO_ENV+=	GOPATH="${WRKDIR}" \
		GOBIN=""
.endif

GO_PORT?=	lang/go
BUILD_DEPENDS+=	${GO_CMD}:${GO_PORT}
PLIST_SUB+=	GO_PKGNAME=${GO_PKGNAME}

_USES_POST+=	go
.endif # !defined(_INCLUDE_USES_GO_MK)

.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_GO_POST_MK)
_INCLUDE_USES_GO_POST_MK=	yes

.if !target(post-extract) && empty(go_ARGS)
post-extract:
	@${MKDIR} ${GO_WRKSRC:H}
	@${LN} -sf ${WRKSRC} ${GO_WRKSRC}
.endif

.if !target(do-build)
do-build:
	(cd ${GO_WRKSRC}; \
		${SETENV} ${MAKE_ENV} ${GO_ENV} ${GO_CMD} install ${GO_BUILDFLAGS} ${GO_TARGET})
.endif

.if !target(do-install)
do-install:
.for _TARGET in ${GO_TARGET}
	${INSTALL_PROGRAM} ${GO_WRKDIR_BIN}/${_TARGET:T} ${STAGEDIR}${PREFIX}/bin
.endfor
.endif

.endif # defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_GO_POST_MK)