# Copyright 2016 The Fuchsia Authors
# Copyright (c) 2008-2015 Travis Geiselbrecht
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

# routines and rules to print some helpful stuff


#$(warning MAKECMDGOALS = $(MAKECMDGOALS))

# print some help and exit
ifeq ($(firstword $(MAKECMDGOALS)),help)
do-nothing=1

.PHONY: help
help:
	@echo "Zircon build system quick help"
	@echo "Individual projects are built into a build-<project> directory"
	@echo "Environment or command line variables controlling build:"
	@echo "PROJECT = <project name>"
	@echo "TOOLCHAIN_PREFIX = <absolute path to toolchain or relative path with prefix>"
	@echo "EXTERNAL_DEFINES = <additional defines to add to GLOBAL_DEFINES>"
	@echo "EXTERNAL_KERNEL_DEFINES = <additional defines to add to the kernel build>"
	@echo "EXTERNAL_MODULES = <additional modules to include in the project build>"
	@echo "HOST_TARGET = <host target to build the host tools for>"
	@echo ""
	@echo "These variables may be also placed in a file called local.mk in the"
	@echo "root of the zircon build system. local.mk is sourced by the build system"
	@echo "if present."
	@echo ""
	@echo "Special make targets:"
	@echo "make help: This help"
	@echo "make list: List of buildable projects"
	@echo "make clean: cleans build of current project"
	@echo "make spotless: removes all build directories"
	@echo "make gigaboot: build the x86 UEFI bootloader"
	@echo "make bootloader: build the project's bootloader"
	@echo "make kernel: build the kernel"
	@echo "make sysroot: build and populate the sysroot"
	@echo "make tools: build all the host tools"
	@echo "make <project>: try to build project named <project>"
	@echo ""
	@echo "Examples:"
	@echo "PROJECT=testproject make"
	@echo "PROJECT=testproject make clean"
	@echo "make testproject"
	@echo "make testproject clean"
	@echo ""
	@echo "output will be in build-testproject/"

endif

# list projects
ifeq ($(firstword $(MAKECMDGOALS)),list)
do-nothing=1

# get a list of all the .mk files in the top level project directories
PROJECTS:=$(basename $(strip $(foreach d,kernel,$(wildcard $(d)/project/*.mk))))
PROJECTS:=$(shell basename -a $(PROJECTS))

.PHONY: list
list:
	@echo 'List of all buildable projects: (look in project/ directory)'; \
	for p in $(PROJECTS); do \
		echo $$p; \
	done

endif

# vim: set syntax=make noexpandtab
