ff092863b3
In addition to running with `go run` and creating a microfactory binary, allow microfactory to be used as a package from other go tools as well. To allow other packages to use this, it needs to be in a non-main package, but `go run` requires a main package. So microfactory.bash runs a sed script before running microfactory with `go run`. This could also be solved by using a relative import, but neither blueprint nor microfactory currently support that. Change-Id: I084163b14720102b3fb93a3c9d44b5d0225ff2c8
71 lines
2.4 KiB
Bash
71 lines
2.4 KiB
Bash
# Copyright 2017 Google Inc. All rights reserved.
|
|
#
|
|
# Licensed 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.
|
|
|
|
# Set of utility functions to build and run go code with microfactory
|
|
#
|
|
# Inputs:
|
|
# ${GOROOT}
|
|
# ${BUILDDIR}
|
|
# ${BLUEPRINTDIR}
|
|
# ${SRCDIR}
|
|
|
|
# Bootstrap microfactory from source if necessary and use it to build the
|
|
# requested binary.
|
|
#
|
|
# Arguments:
|
|
# $1: name of the requested binary
|
|
# $2: package name
|
|
# ${EXTRA_ARGS}: extra arguments to pass to microfactory (-pkg-path, etc)
|
|
function build_go
|
|
{
|
|
# Increment when microfactory changes enough that it cannot rebuild itself.
|
|
# For example, if we use a new command line argument that doesn't work on older versions.
|
|
local mf_version=3
|
|
|
|
local mf_src="${BLUEPRINTDIR}/microfactory"
|
|
local mf_bin="${BUILDDIR}/microfactory_$(uname)"
|
|
local mf_version_file="${BUILDDIR}/.microfactory_$(uname)_version"
|
|
local built_bin="${BUILDDIR}/$1"
|
|
local from_src=1
|
|
|
|
if [ -f "${mf_bin}" ] && [ -f "${mf_version_file}" ]; then
|
|
if [ "${mf_version}" -eq "$(cat "${mf_version_file}")" ]; then
|
|
from_src=0
|
|
fi
|
|
fi
|
|
|
|
local mf_cmd
|
|
if [ $from_src -eq 1 ]; then
|
|
# `go run` requires a single main package, so create one
|
|
local gen_src_dir="${BUILDDIR}/.microfactory_$(uname)_intermediates/src"
|
|
mkdir -p "${gen_src_dir}"
|
|
sed "s/^package microfactory/package main/" "${mf_src}/microfactory.go" >"${gen_src_dir}/microfactory.go"
|
|
|
|
mf_cmd="${GOROOT}/bin/go run ${gen_src_dir}/microfactory.go"
|
|
else
|
|
mf_cmd="${mf_bin}"
|
|
fi
|
|
|
|
rm -f "${BUILDDIR}/.$1.trace"
|
|
# GOROOT must be absolute because `go run` changes the local directory
|
|
GOROOT=$(cd $GOROOT; pwd) ${mf_cmd} -b "${mf_bin}" \
|
|
-pkg-path "github.com/google/blueprint=${BLUEPRINTDIR}" \
|
|
-trimpath "${SRCDIR}" \
|
|
${EXTRA_ARGS} \
|
|
-o "${built_bin}" $2
|
|
|
|
if [ $? -eq 0 ] && [ $from_src -eq 1 ]; then
|
|
echo "${mf_version}" >"${mf_version_file}"
|
|
fi
|
|
}
|