Home | History | Annotate | Download | only in webkit
      1 ##
      2 ## Copyright 2009, The Android Open Source Project
      3 ##
      4 ## Redistribution and use in source and binary forms, with or without
      5 ## modification, are permitted provided that the following conditions
      6 ## are met:
      7 ##  * Redistributions of source code must retain the above copyright
      8 ##    notice, this list of conditions and the following disclaimer.
      9 ##  * Redistributions in binary form must reproduce the above copyright
     10 ##    notice, this list of conditions and the following disclaimer in the
     11 ##    documentation and/or other materials provided with the distribution.
     12 ##
     13 ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
     14 ## EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15 ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16 ## PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     17 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18 ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19 ## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20 ## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21 ## OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22 ## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23 ## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24 ##
     25 
     26 # Control SVG compiling in webkit.
     27 # Default is true unless explictly disabled.
     28 ifneq ($(ENABLE_SVG),false)
     29     ENABLE_SVG := true
     30 endif
     31 
     32 # Control complex scripts support compiling in webkit.
     33 # Default is true unless explictly disabled.
     34 ifneq ($(SUPPORT_COMPLEX_SCRIPTS),false)
     35     SUPPORT_COMPLEX_SCRIPTS = true
     36 endif
     37 
     38 # Read the environment variable to determine if Autofill is compiled.
     39 # The default is on.
     40 # is turned on.
     41 ifneq ($(ENABLE_AUTOFILL),false)
     42   ENABLE_AUTOFILL = true
     43 endif
     44 
     45 # Custom y-to-cpp rule
     46 define webkit-transform-y-to-cpp
     47 @mkdir -p $(dir $@)
     48 @echo "WebCore Yacc: $(PRIVATE_MODULE) <= $<"
     49 $(hide) $(YACC) $(PRIVATE_YACCFLAGS) -o $@ $<
     50 @touch $(@:$1=$(YACC_HEADER_SUFFIX))
     51 @echo '#ifndef '$(@F:$1=_h) > $(@:$1=.h)
     52 @echo '#define '$(@F:$1=_h) >> $(@:$1=.h)
     53 @cat $(@:$1=$(YACC_HEADER_SUFFIX)) >> $(@:$1=.h)
     54 @echo '#endif' >> $(@:$1=.h)
     55 @rm -f $(@:$1=$(YACC_HEADER_SUFFIX))
     56 endef
     57 
     58 BASE_PATH := $(call my-dir)
     59 include $(CLEAR_VARS)
     60 
     61 # Define our module and find the intermediates directory
     62 LOCAL_MODULE := libwebcore
     63 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
     64 base_intermediates := $(call local-intermediates-dir)
     65 
     66 # Using := here prevents recursive expansion
     67 WEBKIT_SRC_FILES :=
     68 
     69 
     70 SOURCE_PATH := $(BASE_PATH)/Source
     71 WEBCORE_PATH := $(SOURCE_PATH)/WebCore
     72 JAVASCRIPTCORE_PATH := $(SOURCE_PATH)/JavaScriptCore
     73 WEBKIT_PATH := $(SOURCE_PATH)/WebKit
     74 WEBCORE_INTERMEDIATES_PATH := $(base_intermediates)/Source/WebCore
     75 
     76 # Build our list of include paths. We include Source/WebKit/android/icu first so that
     77 # any files that include <unicode/ucnv.h> will include our ucnv.h first. We
     78 # also add external/ as an include directory so that we can specify the real
     79 # icu header directory as a more exact reference to avoid including our ucnv.h.
     80 #
     81 # Note that JavasCriptCore/ must be included after WebCore/, so that we pick up
     82 # the right config.h.
     83 LOCAL_C_INCLUDES := \
     84 	$(JNI_H_INCLUDE) \
     85 	$(WEBKIT_PATH)/android/icu \
     86 	external/ \
     87 	external/icu4c/common \
     88 	external/icu4c/i18n \
     89 	external/jpeg \
     90 	external/libxml2/include \
     91 	external/libxslt \
     92 	external/hyphenation \
     93 	external/skia/emoji \
     94 	external/skia/gpu/include \
     95 	external/skia/include/core \
     96 	external/skia/include/effects \
     97 	external/skia/include/gpu \
     98 	external/skia/include/images \
     99 	external/skia/include/ports \
    100 	external/skia/include/utils \
    101 	external/skia/src/core \
    102 	external/skia/src/images \
    103 	external/skia/src/ports \
    104 	external/sqlite/dist \
    105 	frameworks/base/core/jni/android/graphics \
    106 	frameworks/base/include
    107 
    108 # Add Source/ for the include of <JavaScriptCore/config.h> from WebCore/config.h
    109 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    110 	$(SOURCE_PATH)
    111 
    112 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    113 	$(WEBCORE_PATH) \
    114 	$(WEBCORE_PATH)/accessibility \
    115 	$(WEBCORE_PATH)/bindings/ \
    116 	$(WEBCORE_PATH)/bindings/generic \
    117 	$(WEBCORE_PATH)/css \
    118 	$(WEBCORE_PATH)/dom \
    119 	$(WEBCORE_PATH)/editing \
    120 	$(WEBCORE_PATH)/fileapi \
    121 	$(WEBCORE_PATH)/history \
    122 	$(WEBCORE_PATH)/history/android \
    123 	$(WEBCORE_PATH)/html \
    124 	$(WEBCORE_PATH)/html/canvas \
    125 	$(WEBCORE_PATH)/html/parser \
    126 	$(WEBCORE_PATH)/html/shadow \
    127 	$(WEBCORE_PATH)/inspector \
    128 	$(WEBCORE_PATH)/loader \
    129 	$(WEBCORE_PATH)/loader/appcache \
    130 	$(WEBCORE_PATH)/loader/archive \
    131 	$(WEBCORE_PATH)/loader/archive/android \
    132 	$(WEBCORE_PATH)/loader/cache \
    133 	$(WEBCORE_PATH)/loader/icon \
    134 	$(WEBCORE_PATH)/notifications \
    135 	$(WEBCORE_PATH)/page \
    136 	$(WEBCORE_PATH)/page/android \
    137 	$(WEBCORE_PATH)/page/animation \
    138 	$(WEBCORE_PATH)/platform \
    139 	$(WEBCORE_PATH)/platform/android \
    140 	$(WEBCORE_PATH)/platform/animation \
    141 	$(WEBCORE_PATH)/platform/graphics \
    142 	$(WEBCORE_PATH)/platform/graphics/android \
    143 	$(WEBCORE_PATH)/platform/graphics/android/context \
    144 	$(WEBCORE_PATH)/platform/graphics/android/fonts \
    145 	$(WEBCORE_PATH)/platform/graphics/android/layers \
    146 	$(WEBCORE_PATH)/platform/graphics/android/rendering \
    147 	$(WEBCORE_PATH)/platform/graphics/android/utils \
    148 	$(WEBCORE_PATH)/platform/graphics/filters \
    149 	$(WEBCORE_PATH)/platform/graphics/gpu \
    150 	$(WEBCORE_PATH)/platform/graphics/network \
    151 	$(WEBCORE_PATH)/platform/graphics/skia \
    152 	$(WEBCORE_PATH)/platform/graphics/transforms \
    153 	$(WEBCORE_PATH)/platform/image-decoders \
    154 	$(WEBCORE_PATH)/platform/image-decoders/bmp \
    155 	$(WEBCORE_PATH)/platform/image-decoders/gif \
    156 	$(WEBCORE_PATH)/platform/image-decoders/ico \
    157 	$(WEBCORE_PATH)/platform/image-decoders/jpeg \
    158 	$(WEBCORE_PATH)/platform/image-decoders/png \
    159 	$(WEBCORE_PATH)/platform/image-decoders/webp \
    160 	$(WEBCORE_PATH)/platform/mock \
    161 	$(WEBCORE_PATH)/platform/network \
    162 	$(WEBCORE_PATH)/platform/network/android \
    163 	$(WEBCORE_PATH)/platform/sql \
    164 	$(WEBCORE_PATH)/platform/text \
    165 	$(WEBCORE_PATH)/platform/text/transcoder \
    166 	$(WEBCORE_PATH)/plugins \
    167 	$(WEBCORE_PATH)/plugins/android \
    168 	$(WEBCORE_PATH)/rendering \
    169 	$(WEBCORE_PATH)/rendering/style \
    170 	$(WEBCORE_PATH)/rendering/svg \
    171 	$(WEBCORE_PATH)/storage \
    172 	$(WEBCORE_PATH)/svg \
    173 	$(WEBCORE_PATH)/svg/animation \
    174 	$(WEBCORE_PATH)/svg/graphics \
    175 	$(WEBCORE_PATH)/svg/graphics/filters \
    176 	$(WEBCORE_PATH)/svg/properties \
    177 	$(WEBCORE_PATH)/websockets \
    178 	$(WEBCORE_PATH)/workers \
    179 	$(WEBCORE_PATH)/xml
    180 
    181 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    182 	$(WEBKIT_PATH)/android \
    183 	$(WEBKIT_PATH)/android/WebCoreSupport \
    184 	$(WEBKIT_PATH)/android/jni \
    185 	$(WEBKIT_PATH)/android/nav \
    186 	$(WEBKIT_PATH)/android/plugins
    187 
    188 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    189 	$(JAVASCRIPTCORE_PATH) \
    190 	$(JAVASCRIPTCORE_PATH)/collector/handles \
    191 	$(JAVASCRIPTCORE_PATH)/heap \
    192 	$(JAVASCRIPTCORE_PATH)/wtf \
    193 	$(JAVASCRIPTCORE_PATH)/wtf/unicode \
    194 	$(JAVASCRIPTCORE_PATH)/wtf/unicode/icu
    195 
    196 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    197 	$(WEBCORE_INTERMEDIATES_PATH) \
    198 	$(WEBCORE_INTERMEDIATES_PATH)/css \
    199 	$(WEBCORE_INTERMEDIATES_PATH)/html \
    200 	$(WEBCORE_INTERMEDIATES_PATH)/platform \
    201 	$(WEBCORE_INTERMEDIATES_PATH)/xml
    202 
    203 # The following includes are needed by the AutoFill feature, or the chrome http
    204 # stack
    205 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    206 	$(WEBKIT_PATH)/chromium \
    207 	$(WEBKIT_PATH)/chromium/public \
    208 	external/chromium/chrome/browser \
    209 	external/chromium/chrome/renderer \
    210 	external/chromium \
    211 	external/chromium/chrome \
    212 	external/skia
    213 
    214 LOCAL_CFLAGS += -DWEBKIT_IMPLEMENTATION=1
    215 
    216 # Include WTF source file.
    217 d := Source/JavaScriptCore
    218 LOCAL_PATH := $(BASE_PATH)/$d
    219 intermediates := $(base_intermediates)/$d
    220 include $(LOCAL_PATH)/Android.v8.wtf.mk
    221 WEBKIT_SRC_FILES += $(addprefix $d/,$(LOCAL_SRC_FILES))
    222 
    223 # Include source files for WebCore
    224 d := Source/WebCore
    225 LOCAL_PATH := $(BASE_PATH)/$d
    226 intermediates := $(base_intermediates)/$d
    227 include $(LOCAL_PATH)/Android.mk
    228 include $(LOCAL_PATH)/Android.v8bindings.mk
    229 WEBKIT_SRC_FILES += $(addprefix $d/,$(LOCAL_SRC_FILES))
    230 LOCAL_C_INCLUDES += $(BINDING_C_INCLUDES)
    231 
    232 # Include the derived source files for WebCore. Uses the same path as
    233 # WebCore
    234 include $(LOCAL_PATH)/Android.derived.mk
    235 include $(LOCAL_PATH)/Android.derived.v8bindings.mk
    236 
    237 # Include source files for android WebKit port
    238 d := Source/WebKit
    239 LOCAL_PATH := $(BASE_PATH)/$d
    240 intermediates := $(base_intermediates)/$d
    241 include $(LOCAL_PATH)/Android.mk
    242 WEBKIT_SRC_FILES += $(addprefix $d/,$(LOCAL_SRC_FILES))
    243 
    244 # Redefine LOCAL_PATH here so the build system is not confused
    245 LOCAL_PATH := $(BASE_PATH)
    246 
    247 # Define our compiler flags
    248 LOCAL_CFLAGS += -Wno-endif-labels -Wno-import -Wno-format
    249 LOCAL_CFLAGS += -fno-strict-aliasing
    250 LOCAL_CFLAGS += -include "WebCorePrefix.h"
    251 LOCAL_CFLAGS += -fvisibility=hidden
    252 LOCAL_CFLAGS += -DALWAYS_INLINE=inline
    253 # Make sure assert.h is included before assert is defined
    254 LOCAL_CFLAGS += -include "assert.h"
    255 LOCAL_CFLAGS += -DGOOGLEURL
    256 LOCAL_CPPFLAGS := -Wno-sign-promo
    257 LOCAL_CPPFLAGS := -Wno-c++0x-compat
    258 
    259 # Adds GL and EGL extensions for the GL backend
    260 LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
    261 
    262 ifeq ($(TARGET_ARCH),arm)
    263 LOCAL_CFLAGS += -Darm
    264 # remove this warning: "note: the mangling of 'va_list' has changed in GCC 4.4"
    265 LOCAL_CFLAGS += -Wno-psabi
    266 endif
    267 
    268 ifeq ($(TARGET_ARCH_VARIANT),x86-atom)
    269 LOCAL_CFLAGS += -fno-pic
    270 endif
    271 
    272 # need a flag to tell the C side when we're on devices with large memory
    273 # budgets (i.e. larger than the low-end devices that initially shipped)
    274 ifeq ($(ARCH_ARM_HAVE_VFP),true)
    275 LOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE
    276 endif
    277 
    278 ifeq ($(TARGET_ARCH),x86)
    279 LOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE
    280 endif
    281 
    282 ifeq ($(ENABLE_SVG),true)
    283 LOCAL_CFLAGS += -DENABLE_SVG=1 -DENABLE_SVG_ANIMATION=1
    284 endif
    285 
    286 ifeq ($(ENABLE_WTF_USE_ACCELERATED_COMPOSITING),false)
    287 LOCAL_CFLAGS += -DWTF_USE_ACCELERATED_COMPOSITING=0
    288 endif
    289 
    290 ifeq ($(ENABLE_WTF_USE_ACCELERATED_COMPOSITING),true)
    291 LOCAL_CFLAGS += -DWTF_USE_ACCELERATED_COMPOSITING=1
    292 endif
    293 
    294 # LOCAL_LDLIBS is used in simulator builds only and simulator builds are only
    295 # valid on Linux
    296 LOCAL_LDLIBS += -lpthread -ldl
    297 
    298 # Build the list of shared libraries
    299 # We have to use the android version of libdl
    300 LOCAL_SHARED_LIBRARIES := \
    301 	libEGL \
    302 	libGLESv2 \
    303 	libandroid \
    304 	libandroidfw \
    305 	libandroid_runtime \
    306 	libchromium_net \
    307 	libcrypto \
    308 	libcutils \
    309 	libdl \
    310 	libgui \
    311 	libicuuc \
    312 	libicui18n \
    313 	liblog \
    314 	libmedia \
    315 	libnativehelper \
    316 	libskia \
    317 	libsqlite \
    318 	libssl \
    319 	libstlport \
    320 	libutils \
    321 	libui \
    322 	libz
    323 
    324 # We have to fake out some headers when using stlport.
    325 LOCAL_C_INCLUDES += \
    326 	external/chromium/android
    327 include external/stlport/libstlport.mk
    328 
    329 # We need Harfbuzz library to support complex scripts(Arabic, Thai, Hindi...).
    330 ifeq ($(SUPPORT_COMPLEX_SCRIPTS),true)
    331 LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) \
    332 	external/harfbuzz/src \
    333 	external/harfbuzz/contrib
    334 LOCAL_SHARED_LIBRARIES += libharfbuzz
    335 LOCAL_CFLAGS += -DSUPPORT_COMPLEX_SCRIPTS=1
    336 endif
    337 
    338 # Build the list of static libraries
    339 LOCAL_STATIC_LIBRARIES := libxml2 libxslt libhyphenation libv8
    340 
    341 ifeq ($(ENABLE_AUTOFILL),true)
    342 LOCAL_SHARED_LIBRARIES += libexpat
    343 endif
    344 
    345 # Redefine LOCAL_SRC_FILES to be all the WebKit source files
    346 LOCAL_SRC_FILES := $(WEBKIT_SRC_FILES)
    347 
    348 # Define this for use in other makefiles.
    349 WEBKIT_C_INCLUDES := $(LOCAL_C_INCLUDES)
    350 WEBKIT_CFLAGS := $(LOCAL_CFLAGS)
    351 WEBKIT_CPPFLAGS := $(LOCAL_CPPFLAGS)
    352 WEBKIT_GENERATED_SOURCES := $(LOCAL_GENERATED_SOURCES)
    353 WEBKIT_LDLIBS := $(LOCAL_LDLIBS)
    354 WEBKIT_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES)
    355 WEBKIT_STATIC_LIBRARIES := $(LOCAL_STATIC_LIBRARIES)
    356 
    357 ifneq ($(strip $(WITH_ADDRESS_SANITIZER)),)
    358     LOCAL_MODULE_PATH := $(TARGET_OUT_STATIC_LIBRARIES)/asan
    359     LOCAL_ADDRESS_SANITIZER := true
    360 endif
    361 
    362 # Build the library all at once
    363 include $(BUILD_STATIC_LIBRARY)
    364 
    365 # Now build the shared library using only the exported jni entry point. This
    366 # will strip out any unused code from the entry point.
    367 include $(CLEAR_VARS)
    368 # Do not attempt prelink this library. Needed to keep master-gpl happy, no
    369 # effect in master.
    370 # TODO: remove this when master-gpl is updated.
    371 LOCAL_PRELINK_MODULE := false
    372 LOCAL_MODULE := libwebcore
    373 LOCAL_LDLIBS := $(WEBKIT_LDLIBS)
    374 LOCAL_SHARED_LIBRARIES := $(WEBKIT_SHARED_LIBRARIES)
    375 LOCAL_STATIC_LIBRARIES := libwebcore $(WEBKIT_STATIC_LIBRARIES)
    376 LOCAL_LDFLAGS := -fvisibility=hidden
    377 LOCAL_CFLAGS := $(WEBKIT_CFLAGS)
    378 LOCAL_CPPFLAGS := $(WEBKIT_CPPFLAGS)
    379 LOCAL_C_INCLUDES := $(WEBKIT_C_INCLUDES)
    380 LOCAL_PATH := $(BASE_PATH)
    381 LOCAL_SRC_FILES := \
    382 	Source/WebKit/android/jni/WebCoreJniOnLoad.cpp \
    383 	Source/WebKit/chromium/src/android/WebDOMTextContentWalker.cpp \
    384 	Source/WebKit/chromium/src/android/WebHitTestInfo.cpp \
    385 	Source/WebKit/chromium/src/WebRange.cpp \
    386 	Source/WebKit/chromium/src/WebString.cpp
    387 
    388 ifeq ($(ENABLE_AUTOFILL),true)
    389 # AutoFill requires some cpp files from Chromium to link with
    390 # libchromium_net. We cannot compile them into libchromium_net
    391 # because they have cpp file extensions, not .cc.
    392 LOCAL_SRC_FILES += \
    393 	Source/WebKit/android/WebCoreSupport/autofill/MainThreadProxy.cpp \
    394 	Source/WebKit/chromium/src/WebCString.cpp \
    395 	Source/WebKit/chromium/src/WebRegularExpression.cpp
    396 endif
    397 
    398 # Do this dependency by hand. The reason we have to do this is because the
    399 # headers that this file pulls in are generated during the build of webcore.
    400 # We make all of our object files depend on those files so that they are built
    401 # before we try to compile the file.
    402 LOCAL_ADDITIONAL_DEPENDENCIES := $(filter %.h, $(WEBKIT_GENERATED_SOURCES))
    403 
    404 ifneq ($(strip $(WITH_ADDRESS_SANITIZER)),)
    405     LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/asan
    406     LOCAL_ADDRESS_SANITIZER := true
    407 endif
    408 
    409 include $(BUILD_SHARED_LIBRARY)
    410 
    411 # Build the wds client
    412 include $(WEBKIT_PATH)/android/wds/client/Android.mk
    413 
    414 # Build the webkit merge tool.
    415 include $(BASE_PATH)/Tools/android/webkitmerge/Android.mk
    416