From ba53323cbdcd18ee0fc23c5d77ad3f7865af8cf3 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 12 Dec 2011 12:23:15 +0000 Subject: [PATCH] Android updates to support NDK r7. --- .../jucer_ProjectExport_Android.h | 7 ++--- .../Project Saving/jucer_ProjectExporter.h | 14 +++++++-- .../Builds/Android/AndroidManifest.xml | 30 +++++++++--------- extras/JuceDemo/Builds/Android/jni/Android.mk | 1 - .../JuceDemo/Builds/Android/local.properties | 4 +-- extras/JuceDemo/Juce Demo.jucer | 4 +-- modules/juce_core/memory/juce_Atomic.h | 31 +++---------------- modules/juce_opengl/juce_opengl.cpp | 15 +++++++++ modules/juce_opengl/juce_opengl.h | 12 ------- 9 files changed, 53 insertions(+), 65 deletions(-) diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h index e967c82dc9..45ee164862 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h @@ -55,10 +55,10 @@ public: getTargetLocation() = getDefaultBuildsRootFolder() + "Android"; if (getSDKPath().toString().isEmpty()) - getSDKPath() = "${user.home}/SDKs/android-sdk-mac_x86"; + getSDKPath() = "${user.home}/SDKs/android-sdk-macosx"; if (getNDKPath().toString().isEmpty()) - getNDKPath() = "${user.home}/SDKs/android-ndk-r6b"; + getNDKPath() = "${user.home}/SDKs/android-ndk-r7"; if (getInternetNeeded().toString().isEmpty()) getInternetNeeded() = true; @@ -119,7 +119,7 @@ public: { ScopedPointer manifest (createManifestXML()); - writeXmlOrThrow (*manifest, target.getChildFile ("AndroidManifest.xml"), "utf-8", 100); + writeXmlOrThrow (*manifest, target.getChildFile ("AndroidManifest.xml"), "utf-8", 100, true); } writeApplicationMk (jniFolder.getChildFile ("Application.mk")); @@ -230,7 +230,6 @@ private: << newLine << "include $(CLEAR_VARS)" << newLine << newLine - << "LOCAL_CPP_EXTENSION := cpp" << newLine << "LOCAL_MODULE := juce_jni" << newLine << "LOCAL_SRC_FILES := \\" << newLine; diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h index d41c4973ce..b3b7a7d6fe 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h @@ -189,11 +189,21 @@ protected: throw SaveError ("Can't create folder: " + dirToCreate.getFullPathName()); } - static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine) + static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false) { MemoryOutputStream mo; xml.writeToStream (mo, String::empty, false, true, encoding, maxCharsPerLine); - overwriteFileIfDifferentOrThrow (file, mo); + + if (useUnixNewLines) + { + MemoryOutputStream mo2; + mo2 << mo.toString().replace ("\r\n", "\n"); + overwriteFileIfDifferentOrThrow (file, mo2); + } + else + { + overwriteFileIfDifferentOrThrow (file, mo); + } } private: diff --git a/extras/JuceDemo/Builds/Android/AndroidManifest.xml b/extras/JuceDemo/Builds/Android/AndroidManifest.xml index d6289f4037..ff797b2b99 100644 --- a/extras/JuceDemo/Builds/Android/AndroidManifest.xml +++ b/extras/JuceDemo/Builds/Android/AndroidManifest.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/extras/JuceDemo/Builds/Android/jni/Android.mk b/extras/JuceDemo/Builds/Android/jni/Android.mk index 022f0d23fc..efb6d9e479 100644 --- a/extras/JuceDemo/Builds/Android/jni/Android.mk +++ b/extras/JuceDemo/Builds/Android/jni/Android.mk @@ -5,7 +5,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_CPP_EXTENSION := cpp LOCAL_MODULE := juce_jni LOCAL_SRC_FILES := \ ../../../Source/ApplicationStartup.cpp\ diff --git a/extras/JuceDemo/Builds/Android/local.properties b/extras/JuceDemo/Builds/Android/local.properties index cefd706cc8..1d9d6c19a9 100644 --- a/extras/JuceDemo/Builds/Android/local.properties +++ b/extras/JuceDemo/Builds/Android/local.properties @@ -1,6 +1,6 @@ # This file is used to override default values used by the Ant build system. # It is automatically generated by the Introjucer - DO NOT EDIT IT or your changes will be lost!. -sdk.dir=${user.home}/SDKs/android-sdk-mac_x86 -ndk.dir=${user.home}/SDKs/android-ndk-r6b +sdk.dir=${user.home}/SDKs/android-sdk-macosx +ndk.dir=${user.home}/SDKs/android-ndk-r7 diff --git a/extras/JuceDemo/Juce Demo.jucer b/extras/JuceDemo/Juce Demo.jucer index 0256890289..d0e5e0599d 100644 --- a/extras/JuceDemo/Juce Demo.jucer +++ b/extras/JuceDemo/Juce Demo.jucer @@ -21,8 +21,8 @@ - diff --git a/modules/juce_core/memory/juce_Atomic.h b/modules/juce_core/memory/juce_Atomic.h index 487f20cd8d..56b0e72d98 100644 --- a/modules/juce_core/memory/juce_Atomic.h +++ b/modules/juce_core/memory/juce_Atomic.h @@ -183,17 +183,12 @@ private: #define JUCE_64BIT_ATOMICS_UNAVAILABLE 1 #endif -//============================================================================== -#elif JUCE_ANDROID - #define JUCE_ATOMICS_ANDROID 1 // Android atomic functions - #define JUCE_64BIT_ATOMICS_UNAVAILABLE 1 - //============================================================================== #elif JUCE_GCC #define JUCE_ATOMICS_GCC 1 // GCC with intrinsics - #if JUCE_IOS - #define JUCE_64BIT_ATOMICS_UNAVAILABLE 1 // (on the iphone, the 64-bit ops will compile but not link) + #if JUCE_IOS || JUCE_ANDROID // (64-bit ops will compile but not link on these mobile OSes) + #define JUCE_64BIT_ATOMICS_UNAVAILABLE 1 #endif //============================================================================== @@ -255,8 +250,6 @@ inline Type Atomic::get() const noexcept #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? castFrom32Bit ((int32) juce_InterlockedExchangeAdd ((volatile long*) &value, (long) 0)) : castFrom64Bit ((int64) juce_InterlockedExchangeAdd64 ((volatile __int64*) &value, (__int64) 0)); - #elif JUCE_ATOMICS_ANDROID - return value; #elif JUCE_ATOMICS_GCC return sizeof (Type) == 4 ? castFrom32Bit ((int32) __sync_add_and_fetch ((volatile int32*) &value, 0)) : castFrom64Bit ((int64) __sync_add_and_fetch ((volatile int64*) &value, 0)); @@ -266,9 +259,7 @@ inline Type Atomic::get() const noexcept template inline Type Atomic::exchange (const Type newValue) noexcept { - #if JUCE_ATOMICS_ANDROID - return castFrom32Bit (__atomic_swap (castTo32Bit (newValue), (volatile int*) &value)); - #elif JUCE_ATOMICS_MAC || JUCE_ATOMICS_GCC + #if JUCE_ATOMICS_MAC || JUCE_ATOMICS_GCC Type currentVal = value; while (! compareAndSetBool (newValue, currentVal)) { currentVal = value; } return currentVal; @@ -287,14 +278,6 @@ inline Type Atomic::operator+= (const Type amountToAdd) noexcept #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) (juce_InterlockedExchangeAdd ((volatile long*) &value, (long) amountToAdd) + (long) amountToAdd) : (Type) (juce_InterlockedExchangeAdd64 ((volatile __int64*) &value, (__int64) amountToAdd) + (__int64) amountToAdd); - #elif JUCE_ATOMICS_ANDROID - for (;;) - { - const Type oldValue (value); - const Type newValue (castFrom32Bit (castTo32Bit (oldValue) + castTo32Bit (amountToAdd))); - if (compareAndSetBool (newValue, oldValue)) - return newValue; - } #elif JUCE_ATOMICS_GCC return (Type) __sync_add_and_fetch (&value, amountToAdd); #endif @@ -315,8 +298,6 @@ inline Type Atomic::operator++() noexcept #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) juce_InterlockedIncrement ((volatile long*) &value) : (Type) juce_InterlockedIncrement64 ((volatile __int64*) &value); - #elif JUCE_ATOMICS_ANDROID - return (Type) (__atomic_inc ((volatile int*) &value) + 1); #elif JUCE_ATOMICS_GCC return (Type) __sync_add_and_fetch (&value, 1); #endif @@ -331,8 +312,6 @@ inline Type Atomic::operator--() noexcept #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) juce_InterlockedDecrement ((volatile long*) &value) : (Type) juce_InterlockedDecrement64 ((volatile __int64*) &value); - #elif JUCE_ATOMICS_ANDROID - return (Type) (__atomic_dec ((volatile int*) &value) - 1); #elif JUCE_ATOMICS_GCC return (Type) __sync_add_and_fetch (&value, -1); #endif @@ -346,8 +325,6 @@ inline bool Atomic::compareAndSetBool (const Type newValue, const Type val : OSAtomicCompareAndSwap64Barrier ((int64_t) castTo64Bit (valueToCompare), (int64_t) castTo64Bit (newValue), (JUCE_MAC_ATOMICS_VOLATILE int64_t*) &value); #elif JUCE_ATOMICS_WINDOWS return compareAndSetValue (newValue, valueToCompare) == valueToCompare; - #elif JUCE_ATOMICS_ANDROID - return __atomic_cmpxchg (castTo32Bit (valueToCompare), castTo32Bit (newValue), (volatile int*) &value) == 0; #elif JUCE_ATOMICS_GCC return sizeof (Type) == 4 ? __sync_bool_compare_and_swap ((volatile int32*) &value, castTo32Bit (valueToCompare), castTo32Bit (newValue)) : __sync_bool_compare_and_swap ((volatile int64*) &value, castTo64Bit (valueToCompare), castTo64Bit (newValue)); @@ -357,7 +334,7 @@ inline bool Atomic::compareAndSetBool (const Type newValue, const Type val template inline Type Atomic::compareAndSetValue (const Type newValue, const Type valueToCompare) noexcept { - #if JUCE_ATOMICS_MAC || JUCE_ATOMICS_ANDROID + #if JUCE_ATOMICS_MAC for (;;) // Annoying workaround for only having a bool CAS operation.. { if (compareAndSetBool (newValue, valueToCompare)) diff --git a/modules/juce_opengl/juce_opengl.cpp b/modules/juce_opengl/juce_opengl.cpp index 6bbe12c9e7..1cbe3736ea 100644 --- a/modules/juce_opengl/juce_opengl.cpp +++ b/modules/juce_opengl/juce_opengl.cpp @@ -114,6 +114,9 @@ //============================================================================== #elif JUCE_ANDROID + #ifndef GL_GLEXT_PROTOTYPES + #define GL_GLEXT_PROTOTYPES 1 + #endif #include #endif @@ -128,6 +131,18 @@ #define JUCE_INSTANTIATE_GL_EXTENSION(name) \ name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name); +#ifndef GL_BGRA_EXT + #define GL_BGRA_EXT 0x80e1 +#endif + +#ifndef GL_CLAMP_TO_EDGE + #define GL_CLAMP_TO_EDGE 0x812f +#endif + +#ifndef GL_DEPTH_COMPONENT16 + #define GL_DEPTH_COMPONENT16 0x81a5 +#endif + //============================================================================== // START_AUTOINCLUDE opengl/*.cpp #include "opengl/juce_OpenGLComponent.cpp" diff --git a/modules/juce_opengl/juce_opengl.h b/modules/juce_opengl/juce_opengl.h index afb787d08a..5be979816c 100644 --- a/modules/juce_opengl/juce_opengl.h +++ b/modules/juce_opengl/juce_opengl.h @@ -66,18 +66,6 @@ #include #endif -#ifndef GL_BGRA_EXT - #define GL_BGRA_EXT 0x80e1 -#endif - -#ifndef GL_CLAMP_TO_EDGE - #define GL_CLAMP_TO_EDGE 0x812f -#endif - -#ifndef GL_DEPTH_COMPONENT16 - #define GL_DEPTH_COMPONENT16 0x81a5 -#endif - //============================================================================= BEGIN_JUCE_NAMESPACE #include "opengl/juce_OpenGLRenderingTarget.h"