youtubebeat/vendor/github.com/elastic/beats/dev-tools/mage/godaemon.go

81 lines
2.3 KiB
Go

// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package mage
import (
"errors"
"log"
"os"
)
var (
defaultCrossBuildGoDaemon = []CrossBuildOption{
ForPlatforms("linux"),
WithTarget("buildGoDaemon"),
}
)
// BuildGoDaemon builds the go-deamon binary.
func BuildGoDaemon() error {
if GOOS != "linux" {
return errors.New("go-daemon only builds for linux")
}
if os.Getenv("GOLANG_CROSSBUILD") != "1" {
return errors.New("Use the crossBuildGoDaemon target. buildGoDaemon can " +
"only be executed within the golang-crossbuild docker environment.")
}
// Test if binaries are up-to-date.
output := MustExpand("build/golang-crossbuild/god-{{.Platform.GOOS}}-{{.Platform.Arch}}")
input := MustExpand("{{ elastic_beats_dir }}/dev-tools/vendor/github.com/tsg/go-daemon/god.c")
if IsUpToDate(output, input) {
log.Println(">>> buildGoDaemon is up-to-date for", Platform.Name)
return nil
}
// Determine what compiler to use based on CC that is set by golang-crossbuild.
cc := os.Getenv("CC")
if cc == "" {
cc = "cc"
}
compileCmd := []string{
cc,
input,
"-o", createDir(output),
"-lpthread", "-static",
}
switch Platform.Name {
case "linux/amd64":
compileCmd = append(compileCmd, "-m64")
case "linux/386":
compileCmd = append(compileCmd, "-m32")
}
defer DockerChown(output)
return RunCmds(compileCmd)
}
// CrossBuildGoDaemon cross-build the go-daemon binary using the
// golang-crossbuild environment.
func CrossBuildGoDaemon(options ...CrossBuildOption) error {
opts := append(defaultCrossBuildGoDaemon, options...)
return CrossBuild(opts...)
}