cocos2d-xのビルドを早くする (Android版)

殴り書きで初投稿！

とりあえず備忘録として書き留めておきます。

「Ecipseでcocos2d-xのビルドが遅い！」って思ったことありませんか？
chipmunkもBox2dも今回は使ってないのになぁ〜、ビルド対象に含まれてる。
ちょっとだけでもビルド時間を減らしたい、バイナリのサイズを減らしたい方は読んでみてください。

#前提条件

+ CCPhysicsSpriteクラスを使用していないこと
+ chipmunk, Box2dを使用していないこと

#ビルドから除外する方法

cocos2d-2.1rc0-x-2.1.3/extensionsのAndroid.mkを変更する。

1. CCPhysicsDebugNode.cpp,CCPhysicsSprite.cppをビルド対象からはずす。
1. Box2d, chipmunkをビルド対象からはずす。

ただしApplication.mkのAPP_CPPFLAGSの内容次第ではビルド対象にするようにしています。
(GNU makeの書き方はよくわからないので、引数の値に関係なく定義されていたらビルド対象にしています)

```Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := cocos_extension_static

LOCAL_MODULE_FILENAME := libextension

LOCAL_SRC_FILES := AssetsManager/AssetsManager.cpp \
CCBReader/CCBFileLoader.cpp \
CCBReader/CCBReader.cpp \
CCBReader/CCControlButtonLoader.cpp \
CCBReader/CCControlLoader.cpp \
CCBReader/CCLabelBMFontLoader.cpp \
CCBReader/CCLabelTTFLoader.cpp \
CCBReader/CCLayerColorLoader.cpp \
CCBReader/CCLayerGradientLoader.cpp \
CCBReader/CCLayerLoader.cpp \
CCBReader/CCMenuItemImageLoader.cpp \
CCBReader/CCMenuItemLoader.cpp \
CCBReader/CCNodeLoader.cpp \
CCBReader/CCNodeLoaderLibrary.cpp \
CCBReader/CCParticleSystemQuadLoader.cpp \
CCBReader/CCScale9SpriteLoader.cpp \
CCBReader/CCScrollViewLoader.cpp \
CCBReader/CCSpriteLoader.cpp \
CCBReader/CCBAnimationManager.cpp \
CCBReader/CCBKeyframe.cpp \
CCBReader/CCBSequence.cpp \
CCBReader/CCBSequenceProperty.cpp \
CCBReader/CCBValue.cpp \
CCBReader/CCData.cpp \
CCBReader/CCNode+CCBRelativePositioning.cpp \
GUI/CCControlExtension/CCControl.cpp \
GUI/CCControlExtension/CCControlButton.cpp \
GUI/CCControlExtension/CCControlColourPicker.cpp \
GUI/CCControlExtension/CCControlHuePicker.cpp \
GUI/CCControlExtension/CCControlSaturationBrightnessPicker.cpp \
GUI/CCControlExtension/CCControlSlider.cpp \
GUI/CCControlExtension/CCControlSwitch.cpp \
GUI/CCControlExtension/CCControlUtils.cpp \
GUI/CCControlExtension/CCInvocation.cpp \
GUI/CCControlExtension/CCScale9Sprite.cpp \
GUI/CCControlExtension/CCControlPotentiometer.cpp \
GUI/CCControlExtension/CCControlStepper.cpp \
GUI/CCScrollView/CCScrollView.cpp \
GUI/CCScrollView/CCTableView.cpp \
GUI/CCScrollView/CCTableViewCell.cpp \
GUI/CCScrollView/CCSorting.cpp \
GUI/CCEditBox/CCEditBox.cpp \
GUI/CCEditBox/CCEditBoxImplAndroid.cpp \
network/HttpClient.cpp \
LocalStorage/LocalStorageAndroid.cpp \
spine/Animation.cpp \
spine/AnimationState.cpp \
spine/AnimationStateData.cpp \
spine/Atlas.cpp \
spine/AtlasAttachmentLoader.cpp \
spine/Attachment.cpp \
spine/AttachmentLoader.cpp \
spine/Bone.cpp \
spine/BoneData.cpp \
spine/Json.cpp \
spine/RegionAttachment.cpp \
spine/Skeleton.cpp \
spine/SkeletonData.cpp \
spine/SkeletonJson.cpp \
spine/Skin.cpp \
spine/Slot.cpp \
spine/SlotData.cpp \
spine/extension.cpp \
spine/spine-cocos2dx.cpp

ifneq (,$(findstring CC_ENABLE_CHIPMUNK_INTEGRATION,$(APP_CPPFLAGS)))
$(info ENABLE Chipmunk Physics)
LOCAL_SRC_FILES += physics_nodes/CCPhysicsDebugNode.cpp
LOCAL_SRC_FILES += physics_nodes/CCPhysicsSprite.cpp
else
$(info DISABLE Chipmunk Physics)
endif

ifneq (,$(findstring CC_ENABLE_BOX2D_INTEGRATION,$(APP_CPPFLAGS)))
$(info ENABLE Box2d Physics)
LOCAL_SRC_FILES += physics_nodes/CCPhysicsDebugNode.cpp
LOCAL_SRC_FILES += physics_nodes/CCPhysicsSprite.cpp
else
$(info DISABLE Box2d Physics)
endif

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_curl_static

ifneq (,$(findstring CC_ENABLE_BOX2D_INTEGRATION,$(APP_CPPFLAGS)))
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
endif

ifneq (,$(findstring CC_ENABLE_CHIPMUNK_INTEGRATION,$(APP_CPPFLAGS)))
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
endif

#LOCAL_CFLAGS += -DCC_ENABLE_CHIPMUNK_INTEGRATION=1
#LOCAL_EXPORT_CFLAGS += -DCC_ENABLE_CHIPMUNK_INTEGRATION=1

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) \
                           $(LOCAL_PATH)/CCBReader \
                           $(LOCAL_PATH)/GUI/CCControlExtension \
                           $(LOCAL_PATH)/GUI/CCScrollView \
                           $(LOCAL_PATH)/network \
                           $(LOCAL_PATH)/LocalStorage 
                    
include $(BUILD_STATIC_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,CocosDenshion/android)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)

ifneq (,$(findstring CC_ENABLE_BOX2D_INTEGRATION,$(APP_CPPFLAGS)))
$(call import-module,external/Box2D)
endif

ifneq (,$(findstring CC_ENABLE_CHIPMUNK_INTEGRATION,$(APP_CPPFLAGS)))
$(call import-module,external/chipmunk)
endif
```

もしchipmunkもしくはBox2dを有効にしたいときは、自分のプロジェクトのApplication.mkを以下のように追記します。

```Application.mk
# chipmunk使うときは
APP_CPPFLAGS += -DCC_ENABLE_CHIPMUNK_INTEGRATION=1

# Box2d使うときは
APP_CPPFLAGS += -DCC_ENABLE_BOX2D_INTEGRATION=1
```

条件文ではAPP_CPPFLAGSしか見ていないので、他の箇所に設定するとうまくうごきません。

さらに自分のアプリプロジェクトのAndroid.mkからBox2dとchipmunkの設定をコメント化する。
(jniフォルダにあるAndroid.mk)

```Android.mk
#LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
#LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static

#$(call import-module,external/Box2D)
#$(call import-module,external/chipmunk)
```

殴り書きですが誰かの役にでも立てば。。。

#課題

GNU makeの条件文はよく分かりません。
このあたり詳しい人がいれば、もっとうまくかける方法を教えてください。