aboutsummaryrefslogtreecommitdiffstats
path: root/adtproductbuild/Android.mk
blob: a5d0c8bda3cc0df91b0bd1c2337b1d0f5f2843c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# Copyright 2012 The Android Open Source Project
#
# Makefile rules to build the ADT Eclipse IDE.
# This is invoked from sdk/eclipse/scripts/build_server.sh using
# something like "make PRODUCT-sdk-adt_eclipse_ide".
#
# Expected env vars:
# ADT_IDE_DEST_DIR:  existing directory where to copy the IDE zip files.
# ADT_IDE_QUALIFIER: a root qualifier to incorporate before the build timestamp in plugins.
# ADT_IDE_ZIP_QUALIFIER: either a date or build number to incorporate in the zip names.

# Expose the ADT Eclipse IDE build only for the SDK when building adt_eclipse_ide
ifneq (,$(is_sdk_build)$(filter sdk sdk_x86 sdk_mips,$(TARGET_PRODUCT)))
ifneq (,$(filter adt_eclipse_ide,$(MAKECMDGOALS)))

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := adt_eclipse_ide
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
LOCAL_IS_HOST_MODULE := true
include $(BUILD_SYSTEM)/base_rules.mk

ADT_IDE_MODULE_DEPS := $(TOPDIR)sdk/adtproductbuild/$(LOCAL_MODULE)

ADT_IDE_BUILD_LOG    := $(TOPDIR)out/host/eclipse/adtproduct/adtproduct.log
ADT_IDE_ARTIFACT_DIR := $(TOPDIR)out/host/eclipse/adtproduct/pbuild/I.RcpBuild
ADT_IDE_RELEASE_DIR  := $(TOPDIR)out/host/eclipse/adtproduct/release

ADT_IDE_JAVA_LIBS := $(shell $(TOPDIR)sdk/eclipse/scripts/create_all_symlinks.sh -d)
ADT_IDE_JAVA_DEPS := $(foreach m,$(ADT_IDE_JAVA_LIBS),$(HOST_OUT_JAVA_LIBRARIES)/$(m).jar)

ADT_IDE_JAVA_TARGET := $(ADT_IDE_RELEASE_DIR)/adt_eclipse_ide_java_build
ADT_VERSION := $(shell grep Bundle-Version $(TOPDIR)sdk/eclipse/plugins/com.android.ide.eclipse.adt/META-INF/MANIFEST.MF | sed 's/.*: \([0-9]\+.[0-9]\+.[0-9]\+\).*/\1/')

# Common not-quite-phony rule to perform the eclipse build only once
# This invokes the java builder on eclipse. It generates multiple
# zipped versions (one per OS, all built at the same time)
# of the ide as specified in the build.properties file.
$(ADT_IDE_JAVA_TARGET) : $(TOPDIR)sdk/adtproductbuild/adt_eclipse_ide \
			 $(TOPDIR)sdk/adtproductbuild/build.xml \
			 $(TOPDIR)sdk/adtproductbuild/build.properties \
			 $(ADT_IDE_JAVA_DEPS)
	@if [[ ! -d $(TOPDIR)prebuilts/eclipse-build-deps ]]; then \
		echo "*** [adt_eclipse_ide] ERROR: Missing prebuilts/eclipse-build-deps directory. Make sure to run 'repo init -g all;repo sync' first."; \
		exit 1; \
	fi
	$(hide)rm -rf $(TOPDIR)out/host/eclipse/adtproduct/fbuild/plugins
	$(hide)rm -rf $(TOPDIR)out/host/eclipse/adtproduct/pbuild/plugins
	$(hide)mkdir -p $(dir $@)
	$(hide)$(TOPDIR)sdk/eclipse/scripts/create_all_symlinks.sh -c
	$(hide)cd $(TOPDIR)sdk/adtproductbuild && \
		rm -f ../../$(ADT_IDE_BUILD_LOG) && mkdir -p ../../$(dir $(ADT_IDE_BUILD_LOG)) && \
		( java -jar ../../external/eclipse-basebuilder/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar \
			org.eclipse.equinox.launcher.Main \
			-application org.eclipse.ant.core.antRunner \
			-configuration ../../out/host/eclipse/adtproduct/ant-configuration \
			-data ../../out/host/eclipse/adtproduct/ant-workspace \
			-DADT_IDE_QUALIFIER=$(ADT_IDE_QUALIFIER) \
			2>&1 && \
		  mv -f ../../$(ADT_IDE_BUILD_LOG) ../../$(ADT_IDE_BUILD_LOG).1 ) \
		| tee ../../$(ADT_IDE_BUILD_LOG) \
		| sed 's/^/IDE: /'; \
		if [[ -f ../../$(ADT_IDE_BUILD_LOG) ]]; then \
		  echo "ADT IDE build failed. Full log:" ; \
		  cat ../../$(ADT_IDE_BUILD_LOG) ; \
		  exit 1 ; \
		fi
	$(hide)$(ACP) -fp $(V) $(TOPDIR)sdk/adtproductbuild/adt_eclipse_ide $@

# Defines the zip filename generated for an OS specific android IDE.
define adt-ide-zip
$(ADT_IDE_RELEASE_DIR)/android-ide-$(ADT_IDE_ZIP_QUALIFIER)-$(1).$(2).zip
endef

# Defines the rule needed to make one of the OS specific android IDE.
# If ADT_IDE_DEST_DIR it also defines the rule to produce the final dest zip.
# $1 = the platform (linux|macosx|win32).(gtk|cocoa|win32)
# $2 = the architecture (x86 or x8_64).
# $3 = the src zip (from out/host/eclipse/artifacts/RcpBuild-...)
# $4 = the destination directory (where the unpacked eclipse is created)
# $5 = the destination zip with the zipped eclipse ide.
# This rule is in used primarily to post process the .zip file that is
# generated by the Eclipse PDE build process. Ideally, we'd fix things in the PDE build
# itself, but since we don't know how we do this. These changes include:
# - Changing the product definition in eclipse.ini from org.eclipse.platform to ..adt.package.product
# - Setting eclipse.buildId in eclipse.ini
# - Setting eclipse.buildId in about.mappings
# - Changing the splash screen location from platform to adt.package in config.ini
# - Mac only: The PDE build produces eclipse.app and Eclipse.app folders. This is probably a bug
#   in the PDE build since the filesystems on Mac are case insensitive. In any case, eclipse.ini is
#   present only in eclipse.app, so we copy it over to Eclipse.app and remove the eclipse.app folder.
#   In addition, the root folder has a symlink to Eclipse.app/Contents/MacOS/eclipse. Since .zip files
#   don't support symlinks, this just gets copied over. We don't really need this file as users just
#   open the Eclipse.app application, so we just remove it. Lastly, the .icns file is manually copied
#   over and specified in eclipse.ini, only because including it directly in the product definition
#   causes the build on our servers to fail.
define mk-adt-ide-2
$(5): $(ADT_IDE_JAVA_TARGET)
	$(hide) \
	rm -rf $(V) $(4) && \
	rm  -f $(V) $(5) && \
	mkdir -p $(4) && \
	unzip -q $(3) -d $(4) && \
	if [[ "$(1)" == "macosx.cocoa" ]]; then \
	  mv $(4)/eclipse/eclipse.app/Contents/MacOS/eclipse.ini $(4)/eclipse/Eclipse.app/Contents/MacOS && \
	  rm -rf $(4)/eclipse/eclipse.app && \
	  rm -r  $(4)/eclipse/eclipse && \
	  chmod +x $(4)/eclipse/Eclipse.app/Contents/MacOS/eclipse && \
	  cp $(4)/eclipse/plugins/com.android.ide.eclipse.adt.package*/icons/adt.icns \
	     $(4)/eclipse/Eclipse.app/Contents/Resources && \
	  sed -i -e 's/Eclipse.icns/adt.icns/g' $(4)/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini && \
	  sed -i -e 's/Eclipse.icns/adt.icns/g' $(4)/eclipse/Eclipse.app/Contents/Info.plist ; \
	fi && \
	sed -i -e 's/org.eclipse.platform/com.android.ide.eclipse.adt.package.product/g' \
	  $(4)/eclipse/$(if $(filter macosx.cocoa,$(1)),Eclipse.app/Contents/MacOS/)eclipse.ini && \
	echo "-Declipse.buildId=v$(ADT_VERSION)-$(ADT_IDE_ZIP_QUALIFIER)" >> \
	  $(4)/eclipse/$(if $(filter macosx.cocoa,$(1)),Eclipse.app/Contents/MacOS/)eclipse.ini && \
	sed -i -e "s/buildId/v$(ADT_VERSION)-$(ADT_IDE_ZIP_QUALIFIER)/g" \
	  $(4)/eclipse/plugins/com.android.ide.eclipse.adt.package_*/about.mappings && \
	sed -i -e 's/org.eclipse.platform.ide/com.android.ide.eclipse.adt.package.product/g' \
	       -e 's/org.eclipse.platform/com.android.ide.eclipse.adt.package/g' \
	  $(4)/eclipse/configuration/config.ini
	$(hide)cd $(4) && zip -9rq ../$(notdir $(5)) eclipse
ifneq (,$(ADT_IDE_DEST_DIR))
$(ADT_IDE_DEST_DIR)/$(notdir $(5)): $(5)
	@mkdir -p $(ADT_IDE_DEST_DIR)
	$(hide)cp $(V) $(5) $(ADT_IDE_DEST_DIR)/$(notdir $(5))
	@echo "ADT IDE copied to $(ADT_IDE_DEST_DIR)/$(notdir $(5))"
else
	@echo "ADT IDE available at $(5)"
endif
endef

# Defines the rule needed to make one of the OS specific android IDE.
# This is just a convenience wrapper that calls mk-adt-ide-2 and presets
# the source and destination zip paths.
# It also sets the dependencies we need to produce the final dest zip.
# $1 = the platform (linux|macosx|win32).(gtk|cocoa|win32)
# $2 = the architecture (x86 or x8_64).
define mk-adt-ide
$(call mk-adt-ide-2,$(1),$(2), \
    $(ADT_IDE_ARTIFACT_DIR)/RcpBuild-$(1).$(2).zip, \
    $(ADT_IDE_RELEASE_DIR)/android-ide-$(1).$(2), \
    $(call adt-ide-zip,$(1),$(2)))
ADT_IDE_MODULE_DEPS += $(call adt-ide-zip,$(1),$(2))
ifneq (,$(ADT_IDE_DEST_DIR))
ADT_IDE_MODULE_DEPS += $(ADT_IDE_DEST_DIR)/$(notdir $(call adt-ide-zip,$(1),$(2)))
endif
endef

$(eval $(call mk-adt-ide,linux.gtk,x86))
$(eval $(call mk-adt-ide,linux.gtk,x86_64))
$(eval $(call mk-adt-ide,macosx.cocoa,x86_64))
$(eval $(call mk-adt-ide,win32.win32,x86))
$(eval $(call mk-adt-ide,win32.win32,x86_64))

# This rule triggers the build of the 3 ide zip files.
# The adt_eclipse_ide script is currently a platceholder used
# to detect when the build was completed. We may use it later
# as a launch script.
$(LOCAL_BUILT_MODULE) : $(ADT_IDE_MODULE_DEPS)
	@mkdir -p $(dir $@)
	$(hide)$(ACP) -fp $(V) $(TOPDIR)sdk/adtproductbuild/adt_eclipse_ide $@
	@echo "Packing of ADT IDE done"

endif
endif