SCRIPTS_PATH ?= ../Tools/Scripts

XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()' -- $(BUILD_WEBKIT_OPTIONS)` $${COLOR_DIAGNOSTICS_ARG} $(ARGS)
ifeq (ON,$(ENABLE_LLVM_PROFILE_GENERATION))
	XCODE_OPTIONS += ENABLE_LLVM_PROFILE_GENERATION=ENABLE_LLVM_PROFILE_GENERATION
endif

ifeq ($(USE_WORKSPACE),YES)
SCHEME ?= $(notdir $(CURDIR))
WORKSPACE_PATH ?= $(dir $(lastword $(MAKEFILE_LIST)))WebKit.xcworkspace
XCODE_TARGET = -workspace $(WORKSPACE_PATH) -scheme "$(SCHEME)"
XCODE_OPTIONS += WK_VALIDATE_DEPENDENCIES=YES_ERROR
else
USE_WORKSPACE =
endif

ifneq (,$(SDKROOT))
	ifneq (,$(OVERRIDE_SDKROOT))
		ifneq (default,$(OVERRIDE_SDKROOT))
			XCODE_OPTIONS := $(XCODE_OPTIONS) SDKROOT=$(OVERRIDE_SDKROOT)
		endif
		OVERRIDE_SDKROOT =
	else
		XCODE_OPTIONS := $(XCODE_OPTIONS) SDKROOT=$(SDKROOT)
	endif
endif

ifneq (,$(ARCHS))
	ifneq (,$(OVERRIDE_ARCHS))
		ifneq (default,$(OVERRIDE_ARCHS))
			XCODE_OPTIONS := $(XCODE_OPTIONS) ARCHS="$(OVERRIDE_ARCHS)"
			XCODE_OPTIONS += ONLY_ACTIVE_ARCH=NO
		endif
		OVERRIDE_ARCHS =
	else
		XCODE_OPTIONS := $(XCODE_OPTIONS) ARCHS="$(ARCHS)"
		XCODE_OPTIONS += ONLY_ACTIVE_ARCH=NO
	endif
endif

ifneq (,$(SDK_VARIANT))
	XCODE_OPTIONS += SDK_VARIANT="$(SDK_VARIANT)"
endif

ifeq (, $(findstring WK_USE_CCACHE, $(ARGS)))
	ifneq (, $(shell which ccache))
		XCODE_OPTIONS += WK_USE_CCACHE=YES
	endif
endif

ifneq (,$(EXPORT_COMPILE_COMMANDS))
		XCODE_OPTIONS += OTHER_CFLAGS='$$(inherited) -gen-cdb-fragment-path $$(BUILT_PRODUCTS_DIR)/compile_commands'
		XCODE_OPTIONS += GCC_PRECOMPILE_PREFIX_HEADER=NO
		XCODE_OPTIONS += CLANG_ENABLE_MODULE_DEBUGGING=NO
		XCODE_OPTIONS += COMPILER_INDEX_STORE_ENABLE=NO
endif

DEFAULT_VERBOSITY := $(shell defaults read org.webkit.BuildConfiguration BuildTranscriptVerbosity 2>/dev/null || echo "default")
VERBOSITY ?= $(DEFAULT_VERBOSITY)

ifeq ($(VERBOSITY),default)
OUTPUT_FILTER = cat
XCODE_OPTIONS += -hideShellScriptEnvironment
else
ifeq ($(VERBOSITY),noisy)
OUTPUT_FILTER = cat
else
OUTPUT_FILTER = $(SCRIPTS_PATH)/filter-build-webkit
endif
endif

ifeq ($(ASAN),YES)
CONFIG_OPTIONS += --asan
else
ifeq ($(ASAN),NO)
CONFIG_OPTIONS += --no-asan
endif
endif

ifeq ($(TSAN),YES)
CONFIG_OPTIONS += --tsan
else
ifeq ($(TSAN),NO)
CONFIG_OPTIONS += --no-tsan
endif
endif

ifeq ($(UBSAN),YES)
CONFIG_OPTIONS += --ubsan
else
ifeq ($(UBSAN),NO)
CONFIG_OPTIONS += --no-ubsan
endif
endif

ifeq ($(WK_LTO_MODE),full)
CONFIG_OPTIONS += --lto-mode=full
else ifeq ($(WK_LTO_MODE),thin)
CONFIG_OPTIONS += --lto-mode=thin
else ifeq ($(WK_LTO_MODE),none)
CONFIG_OPTIONS += --lto-mode=none
endif

export DSYMUTIL_NUM_THREADS = $(shell sysctl -n hw.activecpu)

# Run xcodebuild with the same PATH with which the Xcode IDE runs, to mitigate unnecessary rebuilds due to PATH differences.
# See <rdar://problem/16466196>.
export PATH = $(shell getconf PATH)


define set_webkit_configuration
	$(SCRIPTS_PATH)/set-webkit-configuration $1 $(CONFIG_OPTIONS)
endef

define invoke_xcode
	( \
		[[ -t 1 ]] && COLOR_DIAGNOSTICS_ARG="COLOR_DIAGNOSTICS=YES"; \
		echo; \
		echo "===== BUILDING $(if $(USE_WORKSPACE),$(SCHEME),$(notdir $(CURDIR))) ====="; \
		echo; \
		$1 xcodebuild $2 $(OTHER_OPTIONS) $(XCODE_TARGET) $(XCODE_OPTIONS) $3 | $(OUTPUT_FILTER) && exit $${PIPESTATUS[0]} \
	)
endef

all:
	@$(call set_webkit_configuration,)
	@$(call invoke_xcode,,,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) $$(inherited)')

debug d: force
	@$(call set_webkit_configuration,--debug)
	@$(call invoke_xcode,,,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) $$(inherited)')

release r: force
	@$(call set_webkit_configuration,--release)
	@$(call invoke_xcode,,,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) $$(inherited)')

release+assert ra: force
	@$(call set_webkit_configuration,--release)
	@$(call invoke_xcode,,,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) ASSERT_ENABLED=1 $$(inherited)')

testing t: force
	@$(call set_webkit_configuration,--debug --force-optimization-level=O3)
	@$(call invoke_xcode,,,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) $$(inherited)')

analyze:
	@$(call set_webkit_configuration,--debug)
	@$(call invoke_xcode,$(PATH_TO_SCAN_BUILD),build analyze,GCC_PREPROCESSOR_DEFINITIONS='$(GCC_PREPROCESSOR_ADDITIONS) $$(inherited)')

clean:
ifndef XCODE_TARGET
	@$(call invoke_xcode,,,-alltargets clean)
else
	@$(call invoke_xcode,,,clean)
endif

installsrc:
ifndef XCODE_TARGET
	@$(call invoke_xcode,,,-alltargets installsrc SRCROOT="$(SRCROOT)$(PATH_FROM_ROOT)")
else
	@$(call invoke_xcode,,,installsrc SRCROOT="$(SRCROOT)$(PATH_FROM_ROOT)")
endif

force: ;
