#
#    Copyright (c) 2014-2017 Nest Labs, 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.
#

#    Description:
#      This file implements a glue makefile for building the Weave SDK
#      for standalone desktop or server build host systems.
#
#      This is strictly a convenience makefile. Such systems can
#      otherwise be built using the usual GNU autotools convention of:
#
#        % ./configure
#        % make
#

# Don't allow this top-level makefile's targets to be built in parallel.

.NOTPARALLEL:

COVERAGE                       ?= 0
DEBUG                          ?= 0
TIMESTAMP                      ?= 0
TUNNEL_FAILOVER                ?= 0
USE_LWIP                       ?= 0
NO_OPENSSL                     ?= 0
BLUEZ                          ?= 0
USE_FUZZING                    ?= 0

HOSTOS                          = $(shell uname -s |tr [:upper:] [:lower:])
ARCH                            = $(shell uname -m |tr [:upper:] [:lower:])

ECHO                           := @echo
MAKE                           := make
MKDIR_P                        := mkdir -p
LN_S                           := ln -s
RM_F                           := rm -f

INSTALL                        := /usr/bin/install
INSTALLFLAGS                   := -p

TopSourceDir                   := $(dir $(shell readlink $(firstword $(MAKEFILE_LIST))))
AbsTopSourceDir                := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))

BuildPath                       = build
TopBuildDir                     = $(BuildPath)
AbsTopBuildDir                  = $(CURDIR)/$(TopBuildDir)

ResultPath                      = output
TopResultDir                    = $(ResultPath)
AbsTopResultDir                 = $(CURDIR)/$(TopResultDir)

TargetTuple                     = $(shell ${AbsTopSourceDir}/third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess | sed -e 's/[[:digit:].]*$$//g')

ifeq ($(HOSTOS),darwin)
ProjectConfigDir               ?= $(AbsTopSourceDir)/build/config/standalone/darwin
else
ProjectConfigDir               ?= $(AbsTopSourceDir)/build/config/standalone
endif

ifeq ($(ARCH),x86_64)
configure_OPTIONS               = CPPFLAGS="-maes"
endif

# NOTE: Mac OS SDKs generated on OS X Sierra (or higher) seem to have trouble
#       running on El Capitan (or earlier) due to issues with clock_gettime: 
#       declaring the interface in time.h but not making the symbol 
#       available in libSystem.dylib, resulting in a runtime crash. For 
#       now, suppress use of clock_getttime on OS X by overriding 
#       configure and asserting:
#
#         ac_cv_func_clock_gettime=no
#         ac_cv_have_decl_clock_gettime=no
#
#       below.
#

ifeq ($(HOSTOS),darwin)
configure_OPTIONS              += ac_cv_func_clock_gettime=no  ac_cv_have_decl_clock_gettime=no
endif

# By default, attempt use the system's OpenSSL library, falling back to building the internal
# copy of OpenSSL (in third_party/openssl) when necessary.
#
# On Linux, the logic uses pkg-config to determine if the OpenSSL development package (libssl-dev)
# has been installed.  If not, the internal copy of OpenSSL is built.
#
# On OS X, the logic uses homebrew to determine if OpenSSL has been installed.  If not, the
# internal copy of OpenSSL will be built.
#
# The variable OPENSSL can be used to override the above logic and specify a particular root
# directory in which to find the OpenSSL headers and libraries.
#
# Setting OPENSSL=no or NO_OPENSSL=1 will cause OpenWeave to be built without OpenSSL.  Note that
# building without OpenSSL automatically suppresses the building of various command line tools that
# have a hard dependency on OpenSSL (e.g. the weave tool).

ifeq ($(NO_OPENSSL),1)
OPENSSL                         = no
else
ifeq ($(HOSTOS),darwin)
OSX_OPENSSL_DIR                 = /usr/local/opt/openssl
OPENSSL                        ?= $(shell if which brew > /dev/null && brew ls --versions openssl > /dev/null; then echo $(OSX_OPENSSL_DIR); else echo "internal"; fi) 
else
OPENSSL                        ?= $(shell if which pkg-config > /dev/null && pkg-config --exists openssl; then echo ""; else echo "internal"; fi)
endif
endif
configure_OPTIONS              += --with-openssl=$(OPENSSL)
ifeq ($(OPENSSL),no)
configure_OPTIONS              += --disable-tools
ProjectConfigDir                = $(AbsTopSourceDir)/build/config/standalone/no-openssl
endif

# If the user has asserted USE_FUZZING enable fuzzing build
ifeq ($(USE_FUZZING),1)
configure_OPTIONS              += --enable-fuzzing
endif

# If the user has asserted COVERAGE, alter the configuration options
# accordingly.

ifeq ($(COVERAGE),1)
# no point in enabling docs generation for a coverage build
configure_OPTIONS              += --enable-coverage --enable-coverage-reports --disable-docs
# Happy checks are time consuming, but on average less processor intensive than
# compiling and running unit-tests.
# Bump the number of builds, it primarily has an effect on the make check
# phase of the build.
BuildJobs                      ?= $(shell echo $$(( `getconf _NPROCESSORS_ONLN` * 2 )) )
endif

# On properly configured 64-bit Linux machines, recognize the
# I686TARGET flag and build the 32-bit image.

ifeq ($(HOSTOS),linux)
ifeq ($(ARCH),x86_64)
ifeq ($(I686TARGET),1)
TargetTuple                     = i686-pc-linux-gnu
configure_OPTIONS              += --build=$(TargetTuple) CFLAGS="-m32 -g -O2"  CXXFLAGS="-m32 -g -O2" LDFLAGS="-m32 -L/usr/lib/i386-linux-gnu/"
endif
endif
endif

# If the user has asserted DEBUG, alter the configuration options
# accordingly.

ifeq ($(DEBUG),1)
configure_OPTIONS              += --enable-debug --enable-optimization=no
else
configure_OPTIONS              += 
endif

# Disable docs generation
ifeq ($(DOCS),0)
configure_OPTIONS              += --disable-docs
else
configure_OPTIONS              +=
endif

# If the user has asserted TIMESTAMP, alter the configuration options
# accordingly.
ifeq ($(TIMESTAMP),1)
configure_OPTIONS              += --enable-stdio-logging-timestamps
else
configure_OPTIONS              +=
endif

# If the user has used tunnel failover, alter the configuration options
# accordingly.
ifeq ($(TUNNEL_FAILOVER),1)
configure_OPTIONS              += --enable-tunnel-failover
else
configure_OPTIONS              +=
endif

# If the user has woble over bluez peripheral, alter the configuration options
# accordingly.
ifeq ($(BLUEZ),1)
configure_OPTIONS              += --enable-experimental --enable-deprecated --enable-testing --enable-tools --disable-systemd --enable-debug
else
configure_OPTIONS              += --with-bluez=no
endif

# If the user has asserted HAPPY, alter the configuration options
# accordingly.

ifdef HAPPY
ifeq ($(HAPPY),1)
configure_OPTIONS              += --with-happy
else
ifeq ($(HAPPY),0)
configure_OPTIONS              += --without-happy
else
configure_OPTIONS              += --with-happy=$(HAPPY)
endif
endif
else
configure_OPTIONS              +=
endif

ifdef SERVICE
BuildJobs                       = 1
configure_OPTIONS              += --with-happy-service=$(SERVICE)
ifdef SUITE
configure_OPTIONS              += --with-happy-test-suite=$(SUITE)
else # SUITE
configure_OPTIONS              += --with-happy-test-suite=minimal
endif # SUITE

else # SERVICE

ifdef SUITE
configure_OPTIONS              += --with-happy-test-suite=$(SUITE)
else # SUITE
configure_OPTIONS              += --with-happy-test-suite=all
endif # SUITE
endif # SERVICE

ifdef DNS
configure_OPTIONS              += --with-happy-dns=$(DNS)
else
configure_OPTIONS              +=
endif

# If the user has asserted USE_LWIP, alter the configuration and
# target tuple to use LwIP rather than the expected BSD sockets.

ifeq ($(USE_LWIP),1)
configure_OPTIONS               += --with-target-network=lwip --with-lwip=internal --disable-java
TargetTuple                     := $(TargetTuple)-lwip
endif

ifeq ($(LONG_TESTS),1)
configure_OPTIONS               += --enable-long-tests=yes
endif

ifeq ($(ENABLE_WOBLE_TEST),1)
configure_OPTIONS               += --enable-woble-test=yes
endif

ifndef BuildJobs
BuildJobs := $(shell getconf _NPROCESSORS_ONLN)
endif
JOBSFLAG := -j$(BuildJobs)

#
# configure-arch <target>
#
# Configure the Weave SDK for the specified target.
#
#   target - The target to configure.
#
define configure-target
$(ECHO) "  CONFIG   $(1)..."
(cd $(BuildPath)/$(1) && $(AbsTopSourceDir)/configure \
INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
--prefix=/ \
--exec-prefix=/$(1) \
--with-weave-project-includes=$(ProjectConfigDir) \
$(configure_OPTIONS))
endef # configure-target

#
# build-target <target>
#
# Build the Weave SDK intermediate build products for the specified
# target.
#
#   target - The target to build.
#
define build-target
$(ECHO) "  BUILD    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
all
endef # build-target

#
# check-target <target>
#
# Check (run unit tests) the Weave SDK for the specified target.
#
#   target - The target to check.
#
define check-target
$(ECHO) "  CHECK    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
check
endef # check-target

#
# coverage-target <target>
#
# Generate code coverage from unit tests for the Weave SDK for the
# specified target.
#
#   target - The target to generate code coverage for.
#
define coverage-target
$(ECHO) "  COVERAGE $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
coverage
endef # coverage-target

#
# stage-target <target>
#
# Stage (install) the Weave SDK final build products for the specified
# target.
#
#   target - The target to stage.
#
define stage-target
$(ECHO) "  STAGE    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
DESTDIR=$(AbsTopResultDir) \
install
endef # stage-target

#
# pretty-target <target>
#
# Prettyify the Weave SDK source code for the specified target.
#
#   target - The target to prettify.
#
define pretty-target
$(ECHO) "  PRETTY   $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
pretty
endef # pretty-target

#
# pretty-check-target <target>
#
# Pretty-check (lint) the Weave SDK source code for the specified
# target.
#
#   target - The target to pretty-check (lint).
#
define pretty-check-target
$(ECHO) "  PRETTY   $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
pretty-check
endef # pretty-check-target

#
# TARGET_template <target>
#
# Define macros, targets and rules to configure, build, and stage the
# Weave SDK for a single target.
#
#   target - The target to instantiate the template for.
#
define TARGET_template
CONFIGURE_TARGETS    += configure-$(1)
BUILD_TARGETS        += do-build-$(1)
CHECK_TARGETS        += check-$(1)
COVERAGE_TARGETS     += coverage-$(1)
STAGE_TARGETS        += stage-$(1)
PRETTY_TARGETS       += pretty-$(1)
PRETTY_CHECK_TARGETS += pretty-check-$(1)
BUILD_DIRS           += $(BuildPath)/$(1)
DIRECTORIES          += $(BuildPath)/$(1)

configure-$(1): $(BuildPath)/$(1)/config.status

$(BuildPath)/$(1)/config.status: | $(BuildPath)/$(1)
	$$(call configure-target,$(1))

do-build-$(1): configure-$(1)

do-build-$(1):
	$$(call build-target,$(1))

check-$(1): do-build-$(1)

check-$(1):
	$$(call check-target,$(1))

coverage-$(1): do-build-$(1)

coverage-$(1):
	$$(call coverage-target,$(1))

stage-$(1): do-build-$(1)

stage-$(1): | $(TopResultDir)
	$$(call stage-target,$(1))

pretty-$(1): configure-$(1)
	$$(call pretty-target,$(1))

lint-$(1) pretty-check-$(1): configure-$(1)
	$$(call pretty-check-target,$(1))

$(1): stage-$(1)
endef # TARGET_template

.PHONY : clean ensure-sudo help

ensure-sudo:
	$(ECHO) "Selected target will require sudo access."
	@sudo echo "Sudo access granted"

.DEFAULT_GOAL := all

all: stage

# Instantiate an target-specific build template for the target.

$(eval $(call TARGET_template,$(TargetTuple)))

#
# Common / Finalization
#

configure: $(CONFIGURE_TARGETS)

build: $(BUILD_TARGETS)

check: ensure-sudo $(CHECK_TARGETS)

coverage: ensure-sudo $(COVERAGE_TARGETS)

stage: $(STAGE_TARGETS)

pretty: $(PRETTY_TARGETS)

lint pretty-check: $(PRETTY_CHECK_TARGETS)

DIRECTORIES     = $(TopResultDir) $(TopResultDir)/$(TargetTuple)/lib $(BUILD_DIRS)

CLEAN_DIRS      = $(TopResultDir) $(BUILD_DIRS)

all: stage

$(DIRECTORIES):
	$(ECHO) "  MKDIR    $@"
	@$(MKDIR_P) "$@"

clean:
	$(ECHO) "  CLEAN"
	@$(RM_F) -r $(CLEAN_DIRS)

help:
	@echo "$${HelpText}"

export HelpText
define HelpText
Simply type 'make -f $(firstword $(MAKEFILE_LIST))' to build Weave for the following 
target:

    $(TargetTuple)

You may want or need to override the following make variables either on the 
command line or in the environment: 

  DEBUG=[1|0]             Enable/disable Weave debug code and logging (default: '$(DEBUG)').

  COVERAGE=[1|0]          Enable/disable generation of code coverage information 
                          (default: '$(COVERAGE)').

  TIMESTAMP=[1|0]         Enable/disable logging module timestamp output (default: '$(TIMESTAMP)').

  USE_LWIP=[1|0]          Build the standalone configuration against the LwIP 
                          library rather than against sockets (default '$(USE_LWIP)').

  BLUEZ=[1|0]             Enable support for BLE peripheral using BlueZ bindings 

  OPENSSL=<dir>           Use the prebuilt version of OpenSSL located in the given 
                          directory. Note that the directory is expected to contain 
                          include and lib subdirectories containing the necessary header 
                          and libraries. 

  OPENSSL=internal        Build the internal copy of OpenSSL as part of the OpenWeave
                          build.

  OPENSSL=no              Build an alternate configuration that does not depend
  NO_OPENSSL=1            on the use of OpenSSL (default: '$(NO_OPENSSL)'.  Note
                          that the various command line tools that depend on
                          OpenSSL (e.g., the weave tool) will not be built in
                          this configuration.

  TUNNEL_FAILOVER=[1|0]   Enable/disabled support for redundant VPN to the Weave service 
                          (default: '$(TUNNEL_FAILOVER)').

  I686TARGET=[1|0]        Enable/disable building a 32-bit target.  Requires a properly
                          configured 64-bit Linux with multilib support (default: '$(I686TARGET)').

  DOCS=[1|0]              Enable/disable Doxygen-generated documentation (default: '$(DOCS)').
                          Note this flag only has an effect when Doxygen is
                          installed.

  HAPPY=[1|0]             When set to 0, skip the functional tests that require
                          Happy orchestration tool.  When set to 1, pick the
                          default location to the Happy tool.  When set to any
                          other value, the value is treated as the location of
                          the Happy tool.

endef
	