2016-11-05 17:09:05 -07:00
# Copyright 2016 The Rook Authors. 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.
2017-06-26 20:04:53 -07:00
# remove default suffixes as we dont use them
.SUFFIXES :
2016-09-29 15:48:15 -07:00
2023-11-17 01:37:05 +01:00
SHELL := /usr/bin/env bash
2021-02-02 14:15:15 +01:00
ifneq (, $( shell command -v shasum ) )
2019-02-18 16:36:39 -05:00
SHA256CMD := shasum -a 256
2021-02-02 14:15:15 +01:00
else ifneq (, $( shell command -v sha 256sum ) )
SHA256CMD := sha256sum
else
$( error "please install 'shasum ' or 'sha 256sum '")
endif
2017-07-21 10:01:14 -07:00
2026-03-18 12:32:01 +01:00
ifneq ( $( strip $( CT_VERSION )) ,)
CT := go run github.com/helm/chart-testing/v3/ct@$( CT_VERSION)
endif
2023-02-16 12:06:58 +01:00
ifeq ( $( origin DOCKERCMD ) ,undefined)
DOCKERCMD ?= $( shell docker version >/dev/null 2>& 1 && echo docker)
ifeq ( $( DOCKERCMD ) ,)
DOCKERCMD = $( shell podman version >/dev/null 2>& 1 && echo podman)
endif
endif
2026-03-10 18:55:47 +01:00
MARKDOWNLINT := $( DOCKERCMD) run --rm -v $$ PWD:/workdir davidanson/markdownlint-cli2:$( MARKDOWNLINT_IMAGE_VERSION)
2026-03-12 11:35:04 +01:00
ifneq ( $( strip $( YAMLLINT_IMAGE_SHA )) ,)
YAMLLINT := $( DOCKERCMD) run --rm -t -v $( CURDIR) :/workdir:ro -w /workdir --entrypoint yamllint cytopia/yamllint@$( YAMLLINT_IMAGE_SHA)
endif
2017-06-26 20:04:53 -07:00
ifeq ( $( origin PLATFORM ) , undefined)
2017-07-21 21:17:09 -07:00
ifeq ( $( origin GOOS ) , undefined)
2017-06-26 20:04:53 -07:00
GOOS := $( shell go env GOOS)
2017-07-21 21:17:09 -07:00
endif
ifeq ( $( origin GOARCH ) , undefined)
2017-06-02 13:46:15 -07:00
GOARCH := $( shell go env GOARCH)
2017-07-21 21:17:09 -07:00
endif
2017-06-26 20:04:53 -07:00
PLATFORM := $( GOOS) _$( GOARCH)
else
GOOS := $( word 1, $( subst _, ,$( PLATFORM)))
GOARCH := $( word 2, $( subst _, ,$( PLATFORM)))
2017-07-21 17:02:50 -07:00
export GOOS GOARCH
2017-06-02 13:46:15 -07:00
endif
2023-02-22 15:05:17 -07:00
ALL_PLATFORMS ?= darwin_amd64 darwin_arm64 windows_amd64 linux_amd64 linux_arm64
2017-06-26 20:04:53 -07:00
2017-08-25 10:22:22 -07:00
export GOARM
2016-09-29 15:48:15 -07:00
2021-11-02 18:54:58 +01:00
# force the build of a linux binary when running on MacOS
GOHOSTOS = linux
GOHOSTARCH := $( shell go env GOHOSTARCH)
HOST_PLATFORM := $( GOHOSTOS) _$( GOHOSTARCH)
# REAL_HOST_PLATFORM is used to determine the correct url to download the various binary tools from and it does not use
# HOST_PLATFORM which is used to build the program.
REAL_HOST_PLATFORM = $( shell go env GOHOSTOS) _$( GOHOSTARCH)
2017-06-26 20:04:53 -07:00
# set the version number. you should not need to do this
# for the majority of scenarios.
ifeq ( $( origin VERSION ) , undefined)
2018-08-14 23:20:27 -07:00
VERSION := $( shell git describe --dirty --always --tags | sed 's/-/./2' | sed 's/-/./2' )
2017-06-26 20:04:53 -07:00
endif
2017-08-09 12:57:39 -07:00
export VERSION
2017-06-26 20:04:53 -07:00
# include the common make file
COMMON_SELF_DIR := $( dir $( lastword $( MAKEFILE_LIST)))
2017-07-07 12:45:04 -07:00
ifeq ( $( origin ROOT_DIR ) ,undefined)
ROOT_DIR := $( abspath $( shell cd $( COMMON_SELF_DIR) /../.. && pwd -P))
endif
2017-06-26 21:52:06 -07:00
ifeq ( $( origin OUTPUT_DIR ) ,undefined)
2017-07-07 12:45:04 -07:00
OUTPUT_DIR := $( ROOT_DIR) /_output
2017-06-26 20:04:53 -07:00
endif
ifeq ( $( origin WORK_DIR ) , undefined)
2017-07-07 12:45:04 -07:00
WORK_DIR := $( ROOT_DIR) /.work
2017-06-26 20:04:53 -07:00
endif
ifeq ( $( origin CACHE_DIR ) , undefined)
2017-07-07 12:45:04 -07:00
CACHE_DIR := $( ROOT_DIR) /.cache
2017-06-26 20:04:53 -07:00
endif
2017-07-07 12:45:04 -07:00
2017-06-26 20:04:53 -07:00
TOOLS_DIR := $( CACHE_DIR) /tools
2026-03-12 10:42:38 +01:00
TOOLS_HOST_DIR := $( TOOLS_DIR) /$( REAL_HOST_PLATFORM)
2017-06-26 20:04:53 -07:00
2017-07-07 12:45:04 -07:00
ifeq ( $( origin HOSTNAME ) , undefined)
HOSTNAME := $( shell hostname)
endif
2026-03-18 12:32:01 +01:00
ifneq ( $( strip $( KUSTOMIZE_VERSION )) ,)
KUSTOMIZE := $( TOOLS_HOST_DIR) /kustomize-$( KUSTOMIZE_VERSION)
endif
$(KUSTOMIZE) : | $( TOOLS_HOST_DIR )
@echo === installing kustomize
@mkdir -p $( TOOLS_HOST_DIR) /tmp
@# kustomize releases use a specific naming convention: kustomize_vX.Y.Z_os_arch.tar.gz
@curl -sSL https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F$( KUSTOMIZE_VERSION) /kustomize_$( KUSTOMIZE_VERSION) _$( shell go env GOHOSTOS) _$( shell go env GOHOSTARCH) .tar.gz | tar -xz -C $( TOOLS_HOST_DIR) /tmp
@mv -f $( TOOLS_HOST_DIR) /tmp/kustomize $( KUSTOMIZE)
@rm -rf $( TOOLS_HOST_DIR) /tmp
@chmod +x $( KUSTOMIZE)
2026-03-12 18:49:09 +01:00
ifneq ( $( strip $( SHELLCHECK_VERSION )) ,)
SHELLCHECK := $( TOOLS_HOST_DIR) /shellcheck-$( SHELLCHECK_VERSION)
# architecture mapping:
# shellcheck uses aarch64 instead of arm64 for published darwin binaries
# so we can't use go env GOHOSTARCH as usual.
UNAME_M := $( shell uname -m)
UNAME_S := $( shell uname -s)
UNAME_S_LC := $( shell uname -s | tr '[:upper:]' '[:lower:]' )
SC_OS := $( UNAME_S_LC)
# Map arm64 (Mac) and aarch64 (Linux) to ShellCheck's 'aarch64'
ifeq ( $( UNAME_M ) ,x86_64)
SC_ARCH := x86_64
else ifeq ( $( UNAME_M ) ,arm64)
SC_ARCH := aarch64
else
SC_ARCH := $( UNAME_M)
endif
$(SHELLCHECK) : | $( TOOLS_HOST_DIR )
@echo === installing shellcheck ===
@mkdir -p $( TOOLS_HOST_DIR) /tmp
@curl -fsSL -o $( TOOLS_HOST_DIR) /tmp/shellcheck.tar.xz https://github.com/koalaman/shellcheck/releases/download/$( SHELLCHECK_VERSION) /shellcheck-$( SHELLCHECK_VERSION) .$( SC_OS) .$( SC_ARCH) .tar.xz
@tar xJf $( TOOLS_HOST_DIR) /tmp/shellcheck.tar.xz -C $( TOOLS_HOST_DIR) /tmp
@mv -f $( TOOLS_HOST_DIR) /tmp/shellcheck-$( SHELLCHECK_VERSION) /shellcheck $( SHELLCHECK)
@rm -rf $( TOOLS_HOST_DIR) /tmp
endif # SHELLCHECK_VERSION
2017-07-07 12:45:04 -07:00
# a registry that is scoped to the current build tree on this host
ifeq ( $( origin BUILD_REGISTRY ) , undefined)
2023-02-22 15:05:17 -07:00
BUILD_REGISTRY := build-$( shell echo " $( HOSTNAME) - $( ROOT_DIR) " | $( SHA256CMD) | cut -c1-8)
2019-02-18 16:36:39 -05:00
endif
ifeq ( $( BUILD_REGISTRY ) ,build-)
$( error Failed to get unique ID for host +dir . Check that '$( SHA 256CMD ) ' functions or override SHA 256CMD )
2017-07-07 12:45:04 -07:00
endif
2021-07-26 16:40:28 -06:00
SED_IN_PLACE = $( ROOT_DIR) /build/sed-in-place
export SED_IN_PLACE
2019-06-05 10:23:07 +03:00
# This is a neat little target that prints any variable value from the Makefile
2025-04-16 17:20:47 -06:00
# Usage: make echo.PLATFORM
2019-06-05 10:23:07 +03:00
echo.% : ; @echo $* = $($ *)
2026-03-18 13:21:21 +01:00
# Target for creating the build tools directory
$(TOOLS_HOST_DIR) :
@mkdir -p $@
2017-06-26 20:04:53 -07:00
COMMA := ,
SPACE :=
2017-07-07 12:45:04 -07:00
SPACE +=
2017-10-24 12:44:18 -07:00
# define a newline
2026-04-14 21:43:38 +02:00
define NEWLINE
2017-10-24 12:44:18 -07:00
2017-11-17 11:25:06 -07:00
endef