# Copyright (C) 2012 The Android Open Source Project
#
# 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.

LOCAL_PATH:= $(call my-dir)

#
# Build jack script
#

include $(CLEAR_VARS)

LOCAL_MODULE := jack
LOCAL_SRC_FILES := etc/jack
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(HOST_EXECUTABLE_SUFFIX)
LOCAL_BUILT_MODULE_STEM := jack$(HOST_EXECUTABLE_SUFFIX)
LOCAL_IS_HOST_MODULE := true

include $(BUILD_PREBUILT)
jack_script := $(LOCAL_INSTALLED_MODULE)

#
# Build jack-admin script
#

include $(CLEAR_VARS)

LOCAL_MODULE := jack-admin
LOCAL_SRC_FILES := etc/jack-admin
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(HOST_EXECUTABLE_SUFFIX)
LOCAL_BUILT_MODULE_STEM := jack-admin$(HOST_EXECUTABLE_SUFFIX)
LOCAL_IS_HOST_MODULE := true

include $(BUILD_PREBUILT)
jack_admin_script := $(LOCAL_INSTALLED_MODULE)

#
# Build Jack
#

# $(1): library name
# $(2): Non-empty if IS_HOST_MODULE
define java-lib-libs
$(foreach lib,$(1),$(call _java-lib-dir,$(lib),$(2))/$(if $(2),javalib,classes)$(COMMON_JAVA_PACKAGE_SUFFIX))
endef

include $(CLEAR_VARS)

LOCAL_MODULE := jack-no-server
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES

proguard_intermediates := \
  $(call local-intermediates-dir,COMMON)/grammar/com/android/jack/shrob/proguard

preprocessor_intermediates := \
  $(call local-intermediates-dir,COMMON)/grammar/com/android/jack/preprocessor

GEN_PG := $(addprefix $(proguard_intermediates)/, \
  ProguardLexer.java \
  ProguardParser.java \
)

GEN_PP := $(addprefix $(preprocessor_intermediates)/, \
  PreProcessorLexer.java \
  PreProcessorParser.java \
  PreProcessor_Java.java \
)

ANTLR_JACK_JAR = $(call java-lib-libs,antlr-jack,true)
$(info ANTLR_JACK_JAR = $(ANTLR_JACK_JAR))
$(GEN_PG): $(ANTLR_JACK_JAR)
$(GEN_PG): PRIVATE_PATH := $(LOCAL_PATH)
$(GEN_PG): PRIVATE_CUSTOM_TOOL = java -jar $(ANTLR_JACK_JAR) -fo $(dir $@) $<
$(GEN_PG): $(LOCAL_PATH)/src/com/android/jack/shrob/proguard/Proguard.g
	$(transform-generated-source)

$(GEN_PP): $(ANTLR_JACK_JAR)
$(GEN_PP): PRIVATE_PATH := $(LOCAL_PATH)
$(GEN_PP): PRIVATE_CUSTOM_TOOL = java -jar $(ANTLR_JACK_JAR) -fo $(dir $@) $<
$(GEN_PP): $(LOCAL_PATH)/src/com/android/jack/preprocessor/PreProcessor.g
	$(transform-generated-source)

LOCAL_GENERATED_SOURCES += $(GEN_PG) $(GEN_PP)

LOCAL_SRC_FILES := $(filter-out %/ProguardLexer.java %/ProguardParser.java %/PreProcessorLexer.java %/PreProcessorParser.java %/PreProcessor_Java.java, \
  $(call all-java-files-under, src))

LOCAL_JAVA_RESOURCE_DIRS  := rsc
LOCAL_JAR_MANIFEST := etc/manifest.txt
LOCAL_JAVACFLAGS := -processor com.android.sched.build.SchedAnnotationProcessor

JACK_STATIC_JAVA_LIBRARIES := \
  ecj-jack \
  guava-jack \
  jsr305lib-jack \
  dx-jack \
  schedlib \
  freemarker-jack \
  watchmaker-jack \
  maths-jack \
  args4j-jack \
  antlr-runtime-jack \
  jack-api

LOCAL_JAVA_LIBRARIES := \
  sched-build \
  allocation-jack \
  $(JACK_STATIC_JAVA_LIBRARIES)

JACK_VERSION_FILE := $(call local-intermediates-dir,COMMON)/generated.version/jack-version.properties
LOCAL_JAVA_RESOURCE_FILES += $(JACK_VERSION_FILE)
LOCAL_ADDITIONAL_DEPENDENCIES += $(JACK_VERSION_FILE)

include $(BUILD_HOST_JAVA_LIBRARY)

$(JACK_VERSION_FILE): $(TOP_DIR)$(LOCAL_PATH)/../version.properties | $(ACP)
	$(copy-file-to-target)

$(LOCAL_INSTALLED_MODULE) : $(jack_script) $(jack_admin_script)
INSTALLED_JACK_NOSERVER := $(LOCAL_INSTALLED_MODULE)
JACK_JAR_INTERMEDIATE:=$(LOCAL_BUILT_MODULE).intermediate.jar
$(JACK_JAR_INTERMEDIATE): $(LOCAL_BUILT_MODULE)
	java -jar $(call java-lib-libs,sched-build,true) $< $(call java-lib-libs,$(JACK_STATIC_JAVA_LIBRARIES),true) $@

JACK_CORE_STUBS_MINI := $(LOCAL_BUILT_MODULE).core-stub-mini.jack
JACK_CORE_STUBS_MINI_SRC := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/,$(call all-java-files-under, ../core-stubs-mini/src))

JACK_DEFAULT_LIB := $(LOCAL_BUILT_MODULE).defaultlib.jack
JACK_DEFAULT_LIB_SRC :=$(addprefix $(TOP_DIR)$(LOCAL_PATH)/,$(call all-java-files-under, src/com/android/jack/annotations))
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_VM_ARGS := $(DEFAULT_JACK_VM_ARGS)
ifneq ($(ANDROID_JACK_VM_ARGS),)
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_VM_ARGS := $(ANDROID_JACK_VM_ARGS)
endif
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_EXTRA_ARGS := $(DEFAULT_JACK_EXTRA_ARGS)
ifneq ($(ANDROID_JACK_EXTRA_ARGS),)
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_EXTRA_ARGS := $(ANDROID_JACK_EXTRA_ARGS)
endif
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_VM := $(DEFAULT_JACK_VM)
ifneq ($(strip $(ANDROID_JACK_VM)),)
$(JACK_CORE_STUBS_MINI) $(JACK_DEFAULT_LIB): PRIVATE_JACK_VM := $(ANDROID_JACK_VM)
endif

$(JACK_CORE_STUBS_MINI): $(JACK_CORE_STUBS_MINI_SRC) $(JACK_JAR_INTERMEDIATE)
	$(PRIVATE_JACK_VM) $(PRIVATE_JACK_VM_ARGS) -cp $(JACK_JAR_INTERMEDIATE) com.android.jack.Main $(PRIVATE_JACK_EXTRA_ARGS) \
		-D jack.classpath.default-libraries=false --output-jack $(JACK_CORE_STUBS_MINI) $(JACK_CORE_STUBS_MINI_SRC)

$(JACK_DEFAULT_LIB): $(JACK_DEFAULT_LIB_SRC) $(JACK_CORE_STUBS_MINI) $(JACK_JAR_INTERMEDIATE)
	$(PRIVATE_JACK_VM) $(PRIVATE_JACK_VM_ARGS) -cp $(JACK_JAR_INTERMEDIATE) com.android.jack.Main $(PRIVATE_JACK_EXTRA_ARGS) \
		--classpath $(JACK_CORE_STUBS_MINI) -D jack.classpath.default-libraries=false --output-jack $(JACK_DEFAULT_LIB) $(JACK_DEFAULT_LIB_SRC)

# overwrite install rule, using LOCAL_POST_INSTALL_CMD may cause the installed jar to be used before the post install command is completed
$(LOCAL_INSTALLED_MODULE): PRIVATE_JAR_MANIFEST := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST)
$(LOCAL_INSTALLED_MODULE): $(JACK_JAR_INTERMEDIATE) $(JACK_DEFAULT_LIB)
	$(hide) rm -rf $<.tmp
	$(hide) mkdir -p $<.tmp/jack-default-lib
	$(hide) unzip -qd $<.tmp $<
	$(hide) unzip -qd $<.tmp/jack-default-lib $(JACK_DEFAULT_LIB)
	$(hide) jar -cfm $@ $(PRIVATE_JAR_MANIFEST) -C $<.tmp .

# Merge with sched lib support
$(LOCAL_BUILT_MODULE):  $(call java-lib-libs,sched-build,true)


include $(CLEAR_VARS)

LOCAL_MODULE := jack
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := \
  jack-server
LOCAL_ADDITIONAL_DEPENDENCIES := $(jack_admin_script)
include $(BUILD_HOST_JAVA_LIBRARY)
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE)
	$(hide) $(jack_admin_script) kill-server || echo
	$(hide) rm -rf $<.tmp
	$(hide) mkdir -p $<.tmp
	$(hide) unzip -qd $<.tmp $<
	$(hide) unzip -oqd $<.tmp $(INSTALLED_JACK_NOSERVER)
	$(hide) jar -cf $@ -C $<.tmp .


# Include this library in the build server's output directory
$(call dist-for-goals, dist_files, $(LOCAL_BUILT_MODULE):jack.jar)

#
# Build jack-annotations.jar
#

include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src/com/android/jack/annotations)

LOCAL_MODULE := jack-annotations
LOCAL_MODULE_TAGS := optional

include $(BUILD_HOST_JAVA_LIBRARY)

#
# Build Jack tests
#

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-java-files-under, tests)

LOCAL_MODULE := libjackunittests

LOCAL_MODULE_TAGS := optional
LOCAL_JAVACFLAGS := -processor com.android.sched.build.SchedAnnotationProcessor

TEST_STATIC_JAVA_LIBRARIES := \
  jack \
  junit4-jack \
  dexlib-jack \
  dx \
  dexcomparator

LOCAL_JAVA_LIBRARIES := \
  sched-build \
  $(TEST_STATIC_JAVA_LIBRARIES)

LOCAL_REQUIRED_MODULES:= \
  core-stubs-mini \
  core-libart \
  bouncycastle \
  ext \
  core-junit \
  framework \
  telephony-common \
  android.policy \
  hamcrest-core-jack

include $(BUILD_HOST_JAVA_LIBRARY)

# overwrite install rule, using LOCAL_POST_INSTALL_CMD may cause the installed jar to be used before the post install command is completed
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) $(call java-lib-libs,sched-build,true)
	java -jar $(call java-lib-libs,sched-build,true) $< $(JACK_JAR) $(call java-lib-libs,$(TEST_STATIC_JAVA_LIBRARIES),true) $@

#
# Test targets
#

LIB_JACK_UNIT_TESTS := $(LOCAL_INSTALLED_MODULE)

local_unit_libs := $(call java-lib-files,core-libart-hostdex junit4-hostdex-jack,true)
.PHONY: test-jack-unit
test-jack-unit: PRIVATE_RUN_TESTS := ./run-jack-unit-tests
test-jack-unit: PRIVATE_PATH := $(LOCAL_PATH)
test-jack-unit: $(LIB_JACK_UNIT_TESTS) $(LOCAL_PATH)/run-jack-unit-tests $(local_unit_libs) $(JACK_JAR)
	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jack.PreSubmitUnitTests

local_long_libs := $(call java-lib-files,core-libart bouncycastle core-junit ext framework guava services \
	libarity prebuilt-google-play-services-first-party telephony-common,)
.PHONY: test-jack-long
test-jack-long: PRIVATE_RUN_TESTS := ./run-jack-unit-tests
test-jack-long: PRIVATE_PATH := $(LOCAL_PATH)
test-jack-long: $(LIB_JACK_UNIT_TESTS) $(LOCAL_PATH)/run-jack-unit-tests $(local_long_libs) $(JACK_JAR)
	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jack.LongLastingUnitTests && echo "$@: PASSED"

.PHONY: test-jack-unit-all
test-jack-unit-all: PRIVATE_RUN_TESTS := ./run-jack-unit-tests
test-jack-unit-all: PRIVATE_PATH := $(LOCAL_PATH)
test-jack-unit-all: $(LIB_JACK_UNIT_TESTS) $(LOCAL_PATH)/run-jack-unit-tests $(local_unit_libs) $(local_long_libs) $(JACK_JAR)
	$(hide) cd $(PRIVATE_PATH) && $(PRIVATE_RUN_TESTS) com.android.jack.AllUnitTests

.PHONY: clean-jack-files
clean-jack-files: clean-dex-files
	$(hide) find $(OUT_DIR) -name "*.jack" | xargs rm -f
	$(hide) find $(OUT_DIR) -type d -name "jack" | xargs rm -rf
	@echo "All jack files have been removed."

.PHONY: clean-dex-files
clean-dex-files:
	$(hide) find $(OUT_DIR) -name "*.dex" | xargs rm -f
	$(hide) for i in `find $(OUT_DIR) -name "*.jar" -o -name "*.apk"` ; do ((unzip -l $$i 2> /dev/null | \
				grep -q "\.dex$$" && rm -f $$i) || continue ) ; done
	@echo "All dex files and archives containing dex files have been removed."
