#
#    Copyright (c) Project openweave-core Authors
#    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 iOS devices and simulators for multiple architectures.
#

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

.NOTPARALLEL:

DEBUG                                                  ?= 0
ENABLE_TARGETED_LISTEN                                 ?= 0
OPENSSL_DIR                                            ?= internal

xc-find-sdk                                             = $(shell xcrun --sdk $(1) --show-sdk-path)
xc-find-tool                                            = $(shell xcrun -find $(1))
xc-find-sdk-platform                                    = $(shell xcrun --sdk $(1) --show-sdk-platform-path)
xc-find-sdk-version                                     = $(shell xcrun --sdk $(1) --show-sdk-version)

IOS_SIMULATOR_SDK                                      := $(call xc-find-sdk,iphonesimulator)
IOS_DEVICE_SDK                                         := $(call xc-find-sdk,iphoneos)
IOS_SIMULATOR_CROSS_TOP                                := $(call xc-find-sdk-platform,iphonesimulator)/Developer
IOS_DEVICE_CROSS_TOP                                   := $(call xc-find-sdk-platform,iphoneos)/Developer
IOS_SIMULATOR_CROSS_SDK                                := iPhoneSimulator$(call xc-find-sdk-version,iphonesimulator).sdk
IOS_DEVICE_CROSS_SDK                                   := iPhoneOS$(call xc-find-sdk-version,iphoneos).sdk

AR                                                     := $(call xc-find-tool,ar)
AS                                                     := $(call xc-find-tool,as)
CLANG                                                  := $(call xc-find-tool,clang)
CC                                                     := $(CLANG)
CXX                                                    := $(CLANG)
OBJC                                                   := $(CLANG)
OBJCXX                                                 := $(CLANG)
CPP                                                    := $(CC) -E
LIPO                                                   := $(call xc-find-tool,lipo)
NM                                                     := $(call xc-find-tool,nm)
RANLIB                                                 := $(call xc-find-tool,ranlib)
STRIP                                                  := $(call xc-find-tool,strip)

ifeq ($(DEBUG),1)
DEFINES                                                 = -DDEBUG=$(DEBUG) -UNDEBUG -g
else
DEFINES                                                 = -DNDEBUG=1 -UDEBUG
endif

configure_OPTIONS                                       = --with-openssl=$(OPENSSL_DIR)

DEFINES                                                += \
    -DWEAVE_CONFIG_ENABLE_TARGETED_LISTEN=$(ENABLE_TARGETED_LISTEN) \
    -DWEAVE_PROGRESS_LOGGING=$(DEBUG) \
    -DWEAVE_ERROR_LOGGING=$(DEBUG) \
    -DWEAVE_DETAIL_LOGGING=$(DEBUG) \
    -DWEAVE_SYSTEM_CONFIG_NUM_BUFS=0 \
    -DINET_CONFIG_OVERRIDE_SYSTEM_TCP_USER_TIMEOUT=0 \
    -DBLE_LAYER_NUM_BLE_ENDPOINTS=4

ARCHFLAGS                                               = -arch $(ARCH)

IOS_MIN_VERSION_FLAG                                    = -miphoneos-version-min=8.0

CoreFoundationHeaderDir                                 = System/Library/Frameworks/CoreFoundation.framework/Headers

COMMON_CPPFLAGS                                         = $(ARCHFLAGS) -isysroot $(IOS_SDK) $(IOS_MIN_VERSION_FLAG) $(DEFINES) -I$(IOS_SDK)/$(CoreFoundationHeaderDir)

CPPFLAGS                                                = $(COMMON_CPPFLAGS)
CFLAGS                                                  = $(CPPFLAGS)
CXXFLAGS                                                = $(CFLAGS)
OBJCFLAGS                                               = $(CFLAGS)
OBJCXXFLAGS                                             = $(CXXFLAGS) $(OBJCFLAGS)
LDFLAGS                                                 = $(ARCHFLAGS)

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

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

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

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

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

TargetTupleStem                                         = apple-darwin
TargetTuple                                             = $(TargetTupleStem)-ios

ARCHS                                                   = arm64 armv7 armv7s i386 x86_64

TopTargetLibDir                                         = $(TopResultDir)/$(if $(1),$(1)-,)$(TargetTuple)/lib

#
#  Framework specific variables
#

DynamicLibName                                          = Weave
DynamicLib                                              = $(Framework)/$(DynamicLibName)

FrameworkName                                           = $(DynamicLibName).framework
Framework                                               = $(TopTargetLibDir)/$(FrameworkName)

DynamicLibSourceFiles                                   = $(TopTargetLibDir)/libWeave.a $(TopTargetLibDir)/libNLWeaveWrapper.a

FrameworkHeaderDirName                                  = Headers
FrameworkModulesDirName                                 = Modules
FrameworkPlistName                                      = Info.plist
FrameworkModuleMapName                                  = module.modulemap

FrameworkHeaderDir                                      = $(Framework)/$(FrameworkHeaderDirName)
FrameworkModulesDir                                     = $(Framework)/$(FrameworkModulesDirName)
FrameworkPlist                                          = $(Framework)/$(FrameworkPlistName)
FrameworkModuleMap                                      = $(Framework)/$(FrameworkModulesDirName)/$(FrameworkModuleMapName)

FRAMEWORK_ARCHFLAGS                                     = $(addprefix -arch ,$(ARCHS))
FRAMEWORK_FLAGS                                         = \
        $(FRAMEWORK_ARCHFLAGS) \
        $(IOS_MIN_VERSION_FLAG) \
        $(FRAMEWORK_ARCHFLAGS) \
        -isysroot $(IOS_DEVICE_SDK) \
        -I$(IOS_DEVICE_SDK)/$(CoreFoundationHeaders) \
        -fpic \
        -lc++ \
        -framework Foundation \
        -framework CoreBluetooth \
        -Xlinker -all_load \
        -undefined dynamic_lookup \
        -dynamiclib \
        -current_version 1.0 \
        -compatibility_version 1.0 \
        -install_name @rpath/Weave.framework/Weave \
        -o $(Framework)/Weave

RootIncludePath                                         = $(TopResultDir)/include
NLWeaveDeviceManagerIncludePath                         = $(RootIncludePath)/NLWeaveDeviceManager

FrameworkInfoPlist                                      = \
        <?xml version ="1.0" encoding="UTF-8"?> \
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> \
        <plist version ="1.0"> \
        <dict> \
        <key>CFBundleDevelopmentRegion</key> \
        <string>en</string> \
        <key>CFBundleExecutable</key> \
        <string>Weave</string> \
        <key>CFBundleIdentifier</key> \
        <string>com.nestlabs.weave</string> \
        <key>CFBundleInfoDictionaryVersion</key> \
        <string>6.0</string> \
        <key>CFBundleName</key> \
        <string>Weave</string> \
        <key>CFBundlePackageType</key> \
        <string>FMWK</string> \
        <key>CFBundleShortVersionString</key> \
        <string>1.0</string> \
        <key>CFBundleSignature</key> \
        <string>????</string> \
        <key>CFBundleVersion</key> \
        <string>1.0</string> \
        <key>NSPrincipalClass</key> \
        <string></string> \
        <key>CFBundleSupportedPlatforms</key> \
        <array> \
                <string>iPhoneOS</string> \
        </array> \
        <key>UIDeviceFamily</key> \
        <array> \
                <integer>1</integer> \
                <integer>2</integer> \
        </array> \
        <key>MinimumOSVersion</key> \
        <string>8.0</string> \
        </dict> \
        </plist>

ModuleMap                                               = \
        framework module $(DynamicLibName) {\n\
                umbrella \"Headers\"\n\
                export *\n\
        }

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

#
# automake files
#
AMFILES = src/system/SystemLayer.am			\
	src/system/Makefile.am				\
	src/platform/ble/bluez/Makefile.am		\
	src/adaptations/device-layer/Makefile.am	\
	src/include/Makefile.am				\
	src/lib/profiles/WeaveProfiles.am		\
	src/lib/core/WeaveCore.am			\
	src/lib/support/verhoeff/Makefile.am		\
	src/lib/support/WeaveSupport.am			\
	src/lib/support/Makefile.am			\
	src/lib/Makefile.am				\
	src/warm/Warm.am				\
	src/warm/Makefile.am				\
	src/inet/InetLayer.am				\
	src/inet/Makefile.am				\
	src/ble/BleLayer.am				\
	src/ble/Makefile.am				\
	src/test-apps/fuzz/Makefile.am			\
	src/test-apps/wrapper-tests/jni/Makefile.am	\
	src/test-apps/Makefile.am			\
	src/examples/Makefile.am			\
	src/wrappers/jni/jni-utils/Makefile.am		\
	src/wrappers/jni/security-support/Makefile.am	\
	src/wrappers/jni/Makefile.am			\
	src/lwip/Makefile.am				\
	src/Makefile.am					\
	src/ra-daemon/Makefile.am			\
	src/tools/weave/Makefile.am			\
	src/tools/misc/Makefile.am			\
	src/device-manager/DeviceManager.am		\
	src/device-manager/cocoa/Makefile.am		\
	src/device-manager/java/Makefile.am		\
	src/device-manager/python/Makefile.am		\
	third_party/Makefile.am				\
	doc/Makefile.am					\
	Makefile.am					\
	configure.ac					\
	$(NULL)

#
# configure-arch <arch>
#
# Configure the Weave SDK for the specified architecture.
#
#   arch - The architecture to configure.
#
# NOTE: The i386 linker check for the option -exported_symbols_list fails
#       because the autotool macro was written poorly so as to not account
#       for cross-compiling. We know for a fact that Apple's toolchain supports
#       -exported_symbols_list, so we force the result with:
#
#         lt_cv_ld_exported_symbols_list=yes
#
#       below.
#
# NOTE: iOS SDKs starting at 10 seem to have 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_gettime on iOS by overriding
#       configure and asserting:
#
#         ac_cv_func_clock_gettime=no
#         ac_cv_have_decl_clock_gettime=no
#
#       below.
#
define configure-arch
$(ECHO) "  CONFIG   $(1)-$(TargetTuple)..."
(cd $(BuildPath)/$(1)-$(TargetTuple) && $(AbsTopSourceDir)/configure -C \
CPP="$(CPP)" CC="$(CC)" CXX="$(CXX)" OBJC="$(OBJC)" OBJCXX="$(OBJCXX)" AR="$(AR)" RANLIB="$(RANLIB)" NM="$(NM)" STRIP="$(STRIP)" \
INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
CPPFLAGS="$(CPPFLAGS)" \
CFLAGS="$(CFLAGS)" \
CXXFLAGS="$(CXXFLAGS)" \
OBJCFLAGS="$(OBJCFLAGS)" \
OBJCXXFLAGS="$(OBJCXXFLAGS)" \
LDFLAGS="$(LDFLAGS)" \
CROSS_TOP="$($(1)_arch_CROSS_TOP)" \
CROSS_SDK="$($(1)_arch_CROSS_SDK)" \
lt_cv_ld_exported_symbols_list=yes \
ac_cv_func_clock_gettime=no \
ac_cv_have_decl_clock_gettime=no \
--build=$(shell $(AbsTopSourceDir)/third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess) \
--host=$($(1)_arch_AUTOTOOLS)-$(TargetTupleStem) \
--target=$($(1)_arch_AUTOTOOLS)-$(TargetTupleStem) \
--prefix=/ \
--exec-prefix=/$(1)-$(TargetTuple) \
--with-weave-project-includes=$(AbsTopSourceDir)/build/config/ios \
--with-logging-style=external \
--enable-cocoa \
--disable-docs \
--disable-java \
--disable-python \
--disable-installable-python-package \
--disable-shared \
--disable-tests \
--disable-tools \
$(configure_OPTIONS))
endef # configure-arch

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

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

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

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

#
# combine-archs <target stem> { <target arch> ... } <input name> <output name>
#
# Combine several target architecture input objects or archives into a
# single multi-architecture output object or archive.
#
#   target stem    - The target tuple stem (e.g. apple-darwin).
#   target arch(s) - The target architecture(s) (e.g. armv7).
#   input name     - The target library input name (e.g. libWeave.a).
#   output name    - The target library output name (e.g. libNLWeaveWrapper.a).
#
define combine-archs
$(ECHO) "  LIPO     $(TopResultDir)/$(1)/lib/$(4)"
$(LIPO) $(foreach arch,$(2),$(call TopTargetLibDir,$(arch))/$(3)) \
	-create -output $(call TopTargetLibDir,)/$(4)
endef # combine-archs

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

configure-$(1): ARCH=$(1)
configure-$(1): IOS_SDK=$$($(1)_arch_IOS_SDK)
configure-$(1): CROSS_SDK=$$($(1)_arch_CROSS_SDK)
configure-$(1): CROSS_TOP=$$($(1)_arch_CROSS_TOP)

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

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

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

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

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

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

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

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

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

.DEFAULT_GOAL := all

all: stage

#
# ARM64
#
arm64_arch_IOS_SDK    = $(IOS_DEVICE_SDK)
arm64_arch_AUTOTOOLS  = aarch64
arm64_arch_CROSS_TOP  = $(IOS_DEVICE_CROSS_TOP)
arm64_arch_CROSS_SDK  = $(IOS_DEVICE_CROSS_SDK)

#
# ARMV7
#

armv7_arch_IOS_SDK    = $(IOS_DEVICE_SDK)
armv7_arch_AUTOTOOLS  = $(ARCH)
armv7_arch_CROSS_TOP  = $(IOS_DEVICE_CROSS_TOP)
armv7_arch_CROSS_SDK  = $(IOS_DEVICE_CROSS_SDK)

#
# ARMV7s
#

armv7s_arch_IOS_SDK   = $(IOS_DEVICE_SDK)
armv7s_arch_AUTOTOOLS = $(ARCH)
armv7s_arch_CROSS_TOP = $(IOS_DEVICE_CROSS_TOP)
armv7s_arch_CROSS_SDK = $(IOS_DEVICE_CROSS_SDK)

#
# i386
#

i386_arch_IOS_SDK     = $(IOS_SIMULATOR_SDK)
i386_arch_AUTOTOOLS   = $(ARCH)
i386_arch_CROSS_TOP   = $(IOS_SIMULATOR_CROSS_TOP)
i386_arch_CROSS_SDK   = $(IOS_SIMULATOR_CROSS_SDK)

#
# x86_64
#

x86_64_arch_IOS_SDK     = $(IOS_SIMULATOR_SDK)
x86_64_arch_AUTOTOOLS   = $(ARCH)
x86_64_arch_CROSS_TOP   = $(IOS_SIMULATOR_CROSS_TOP)
x86_64_arch_CROSS_SDK   = $(IOS_SIMULATOR_CROSS_SDK)

# Instantiate an architecture-specific build template for each target
# architecture.

$(foreach arch,$(ARCHS),$(eval $(call ARCH_template,$(arch))))

#
# Common / Finalization
#

.PHONY : configure build check coverage stage pretty lint pretty-check clean help

Makefile.in: $(AMFILES)
	$(ECHO) "BOOTSTRAP"
	@./bootstrap

configure: $(CONFIGURE_TARGETS)

build: $(BUILD_TARGETS)

stage-combine: $(STAGE_TARGETS)

pretty: $(PRETTY_TARGETS)

lint pretty-check: $(PRETTY_CHECK_TARGETS)

stage: stage-combine | $(TopResultDir)/$(TargetTuple)/lib
	$(call combine-archs,$(TargetTupleStemIOS),$(ARCHS),libWeave.a,libWeave.a)
	$(call combine-archs,$(TargetTupleStemIOS),$(ARCHS),libNLWeaveDeviceManager.a,libNLWeaveWrapper.a)

$(Framework): $(DynamicLib) $(FrameworkHeaderDir) $(FrameworkModulesDir) $(FrameworkModuleMap) $(FrameworkPlist)
	$(ECHO) "  Setting bundle attribute on  \"$(@)\"..."
	@$(SETFILE_A_B) $@

$(DynamicLib): stage
	$(ECHO) "  Creating framework dir: $(Framework)"
	@$(MKDIR_P) $(Framework)
	$(ECHO) "  Re-packaging static libraries into dynamic framework"
	@$(CLANG) $(FRAMEWORK_FLAGS) $(DynamicLibSourceFiles)

$(FrameworkPlist):
	$(ECHO) "  Generating Info.plist"
	@$(ECHO) "$(FrameworkInfoPlist)" > $(FrameworkPlist)

$(FrameworkHeaderDir):
	$(ECHO) "  Creating framework header dir: $(FrameworkHeaderDir)"
	@$(MKDIR_P) $(FrameworkHeaderDir)
	$(ECHO) "  Embedding headers in framework"
	@cp $(addprefix $(NLWeaveDeviceManagerIncludePath)/,*) $(FrameworkHeaderDir)

$(FrameworkModulesDir):
	$(ECHO) "  Creating framework modules dir: $(FrameworkModulesDir)"
	@$(MKDIR_P) $(FrameworkModulesDir)

$(FrameworkModuleMap): $(FrameworkModulesDir)
	$(ECHO) "  Generating module map"
	@$(ECHO) "$(ModuleMap)" > $(FrameworkModuleMap)

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

CLEAN_DIRS      = $(TopResultDir) $(BUILD_DIRS)

all: $(Framework)

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

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

help:
	$(ECHO) "Simply type 'make -f $(firstword $(MAKEFILE_LIST))' to build Weave for iOS for the following "
	$(ECHO) "architectures: "
	$(ECHO) ""
	$(ECHO) "    $(ARCHS)"
	$(ECHO) ""
	$(ECHO) "To build only a particular architecture, specify: "
	$(ECHO) ""
	$(ECHO) "    make -f $(firstword $(MAKEFILE_LIST)) <architecture>"
	$(ECHO) ""
	$(ECHO) "You may want or need to override the following make variables either on the "
	$(ECHO) "command line or in the environment: "
	$(ECHO) ""
	$(ECHO) "  DEBUG                   Enable Weave debug code and logging (default: '$(DEBUG)')."
	$(ECHO) "  ENABLE_TARGETED_LISTEN  Enable Weave support for listening on particular "
	$(ECHO) "                          addresses or interfaces. This allows testing multiple "
	$(ECHO) "                          instances of the Weave stack running on a single host "
	$(ECHO) "                          '(default: $(ENABLE_TARGETED_LISTEN)')."
	$(ECHO) "  OPENSSL_DIR             Specify an alternate OpenSSL installation (default: "
	$(ECHO) "                          '$(OPENSSL_DIR)'). For example, if OpenSSL libraries are "
	$(ECHO) "                          in /usr/lib and headers in /usr/include, specify "
	$(ECHO) "                          OPENSSL_DIR=/usr."
