blob: 79bbe666adb386de5cbdd16ae40ba437486350df [file] [log] [blame]
# Licensed to Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Apache Software Foundation (ASF) 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.
#
ifndef NAME
$(error The NAME variable should be set)
endif
ifndef BINARIES
$(error The BINARIES variable should be set to the name binaries to produce)
endif
STATIC_BINARIES ?= $(addsuffix -static,$(BINARIES))
DEBUG_BINARIES ?= $(addsuffix -debug,$(BINARIES))
DEBUG_STATIC_BINARIES ?= $(addsuffix -static,$(DEBUG_BINARIES))
BUILD_DIR ?= build/bin
# Define SUB_DIR var if the project is not at root level project
SOURCE_DIR := $(if $(SUB_DIR),$(SUB_DIR)/$(NAME),$(NAME))
# Retrieve git versioning details so we can add to our binary assets
VERSION_PATH := github.com/apache/skywalking-banyandb/pkg/version
VERSION_STRING := $(shell git describe --tags --long $(shell git rev-list --tags --max-count=1))
GIT_BRANCH_NAME := $(shell git rev-parse --abbrev-ref HEAD)
GO_LINK_VERSION := -X ${VERSION_PATH}.build=${VERSION_STRING}-${GIT_BRANCH_NAME}
##@ Build targets
.PHONY: all
all: $(BINARIES) ## Build all the binaries
$(BINARIES): $(NAME)-%: $(BUILD_DIR)/$(NAME)-%
$(addprefix $(BUILD_DIR)/,$(BINARIES)): $(BUILD_DIR)/$(NAME)-%:
@echo "Building binary"
go build -v --ldflags '${GO_LINK_VERSION}' -tags "$(BUILD_TAGS)" -o $@ github.com/apache/skywalking-banyandb/$(SOURCE_DIR)/cmd/$*
chmod +x $@
@echo "Done building $(NAME) $*"
.PHONY: debug
debug: $(DEBUG_BINARIES) ## Build the debug binaries
$(DEBUG_BINARIES): $(NAME)-%-debug: $(BUILD_DIR)/$(NAME)-%-debug
$(addprefix $(BUILD_DIR)/,$(DEBUG_BINARIES)): $(BUILD_DIR)/$(NAME)-%-debug:
@echo "Building debug binary"
mkdir -p $(BUILD_DIR)
go build -v --ldflags '${GO_LINK_VERSION}' -tags "$(BUILD_TAGS)" -gcflags='all=-N -l' -o $@ github.com/apache/skywalking-banyandb/$(SOURCE_DIR)/cmd/$*
chmod +x $@
@echo "Done building debug $(NAME) $*"
$(STATIC_BINARIES): $(NAME)-%-static: $(BUILD_DIR)/$(NAME)-%-static
$(addprefix $(BUILD_DIR)/,$(STATIC_BINARIES)): $(BUILD_DIR)/$(NAME)-%-static:
@echo "Building static binary"
CGO_ENABLED=0 GOOS=linux go build \
-a --ldflags '${GO_LINK_VERSION} -extldflags "-static"' -tags "netgo $(BUILD_TAGS)" -installsuffix netgo \
-o $(BUILD_DIR)/$(NAME)-$*-static github.com/apache/skywalking-banyandb/$(SOURCE_DIR)/cmd/$*
chmod +x $(BUILD_DIR)/$(NAME)-$*-static
@echo "Done building static $(NAME) $*"
.PHONY: debug-static
debug-static: $(DEBUG_STATIC_BINARIES) ## Build the debug static binaries
$(DEBUG_STATIC_BINARIES): $(NAME)-%-debug-static: $(BUILD_DIR)/$(NAME)-%-debug-static
$(addprefix $(BUILD_DIR)/,$(DEBUG_STATIC_BINARIES)): $(BUILD_DIR)/$(NAME)-%-debug-static:
@echo "Building debug static binary"
CGO_ENABLED=0 GOOS=linux go build \
-a --ldflags '${GO_LINK_VERSION} -extldflags "-static"' -tags "netgo $(BUILD_TAGS)" -gcflags='all=-N -l' -installsuffix netgo \
-o $(BUILD_DIR)/$(NAME)-$*-debug-static github.com/apache/skywalking-banyandb/$(SOURCE_DIR)/cmd/$*
chmod +x $(BUILD_DIR)/$(NAME)-$*-debug-static
@echo "Done building debug static $(NAME) $*"
.PHONY: release
release: $(STATIC_BINARIES) ## Build the release binaries
.PHONY: clean-build
clean-build: ## Clean all artifacts
rm -rf $(BUILD_DIR)