[Android] Rewrote CMake scripts to compile SFML with our new toolchain

This commit is contained in:
Jonathan De Wachter 2013-09-22 17:16:48 +02:00
parent f9e80e1a3b
commit 60894d1c1a
28 changed files with 260 additions and 327 deletions

View file

@ -2,51 +2,56 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-system
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-system.a
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-system.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_LDLIBS := -llog -landroid
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-window
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-window.a
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-window.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_LDLIBS := -lEGL
LOCAL_SHARED_LIBRARIES := sfml-system
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-graphics
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-graphics.a
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-graphics.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_LDLIBS := -lGLESv1_CM
#LOCAL_EXPORT_LDLIBS := -lGLESv1_CM
LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/extlibs/include
LOCAL_STATIC_LIBRARIES := jpeg freetype
LOCAL_SHARED_LIBRARIES := freetype jpeg
LOCAL_SHARED_LIBRARIES += sfml-system sfml-window
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-audio
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-audio.a
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-audio.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
#LOCAL_EXPORT_LDLIBS := -lOpenSLES
LOCAL_SHARED_LIBRARIES := openal sndfile
LOCAL_SHARED_LIBRARIES += sfml-system sfml-window
LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/extlibs/include
LOCAL_WHOLE_STATIC_LIBRARIES := ogg vorbis vorbisenc flac sndfile openal
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-network
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-network.a
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-network.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES := sfml-system
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-main
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libsfml-main.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES := sfml-system sfml-window
include $(PREBUILT_STATIC_LIBRARY)

View file

@ -31,13 +31,8 @@
#include <SFML/Config.hpp>
#include <iostream>
#include <string>
#ifndef SFML_SYSTEM_ANDROID
#include <al.h>
#include <alc.h>
#else
#include <AL/al.h>
#include <AL/alc.h>
#endif
#include <al.h>
#include <alc.h>
namespace sf

View file

@ -1,20 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-audio
LOCAL_SRC_FILES := ALCheck.cpp
LOCAL_SRC_FILES += AudioDevice.cpp
LOCAL_SRC_FILES += Listener.cpp
LOCAL_SRC_FILES += Music.cpp
LOCAL_SRC_FILES += Sound.cpp
LOCAL_SRC_FILES += SoundBuffer.cpp
LOCAL_SRC_FILES += SoundBufferRecorder.cpp
LOCAL_SRC_FILES += SoundFile.cpp
LOCAL_SRC_FILES += SoundRecorder.cpp
LOCAL_SRC_FILES += SoundSource.cpp
LOCAL_SRC_FILES += SoundStream.cpp
include $(BUILD_STATIC_LIBRARY)
$(call import-module,extlibs)

View file

@ -29,7 +29,7 @@ set(SRC
${INCROOT}/SoundStream.hpp
)
source_group("" FILES ${SRC})
if(NOT ANDROID)
# let CMake know about our additional audio libraries paths (on Windows and OSX)
if(SFML_OS_WINDOWS)
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${PROJECT_SOURCE_DIR}/extlibs/headers/AL")
@ -40,14 +40,37 @@ elseif(SFML_OS_MACOSX)
endif()
# find external libraries
find_package(OpenAL REQUIRED)
find_package(Sndfile REQUIRED)
if(NOT ANDROID)
find_package(OpenAL REQUIRED)
find_package(Sndfile REQUIRED)
set(AUDIO_EXT_LIBS ${OPENAL_LIBRARY} ${SNDFILE_LIBRARY})
else()
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/include/AL")
find_host_package(OpenAL REQUIRED)
find_host_package(Sndfile REQUIRED)
set(AUDIO_EXT_INCLUDE_PATHS ${OPENAL_INCLUDE_DIRS} ${SNDFILE_INCLUDE_DIR})
set(AUDIO_EXT_LIBS -landroid
-lOpenSLES
${OPENAL_LIBRARY}
${SNDFILE_LIBRARY}
${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/lib/${ANDROID_ABI}/libvorbisenc.so
${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/lib/${ANDROID_ABI}/libvorbis.so
${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/lib/${ANDROID_ABI}/libFLAC.so
${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/lib/${ANDROID_ABI}/libogg.so)
endif()
# add include paths of external libraries
include_directories(${OPENAL_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR})
endif()
# define the sfml-audio target
if(NOT ANDROID)
sfml_add_library(sfml-audio
SOURCES ${SRC}
DEPENDS sfml-system
EXTERNAL_LIBS ${OPENAL_LIBRARY} ${SNDFILE_LIBRARY})
else()
sfml_add_library(sfml-audio
SOURCES ${SRC}
DEPENDS sfml-system sfml-window
EXTERNAL_LIBS ${AUDIO_EXT_LIBS})
endif()

View file

@ -26,12 +26,12 @@
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Audio/SoundFile.hpp>
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Lock.hpp>
#endif
#include <SFML/System/InputStream.hpp>
#include <SFML/System/Err.hpp>
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#endif
#include <cstring>
#include <cctype>
@ -118,7 +118,7 @@ bool SoundFile::openRead(const std::string& filename)
#else
priv::ActivityStates* states = priv::getActivityStates(NULL);
priv::ActivityStates* states = priv::getActivity(NULL);
Lock lock(states->mutex);
// Open the file

View file

@ -26,6 +26,9 @@ elseif(SFML_OS_MACOSX)
elseif(IOS)
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${PROJECT_SOURCE_DIR}/extlibs/headers")
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${PROJECT_SOURCE_DIR}/extlibs/libs-ios/")
elseif(ANDROID)
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/include")
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${PROJECT_SOURCE_DIR}/extlibs/android/extlibs/lib/${ANDROID_ABI}")
endif()
# add the SFML sources path
@ -40,9 +43,11 @@ set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")
# add the modules subdirectories
add_subdirectory(System)
add_subdirectory(Window)
add_subdirectory(Network)
add_subdirectory(Graphics)
if(NOT SFML_OS_IOS)
add_subdirectory(Audio)
if(SFML_OS_WINDOWS OR SFML_OS_ANDROID OR SFML_OS_IOS)
add_subdirectory(Main)
endif()
add_subdirectory(Main)
add_subdirectory(Network)
add_subdirectory(Graphics)
if(NOT SFML_OS_IOS OR NOT (SFML_OS_ANDROID AND ${ANDROID_ABI} MATCHES "mips"))
add_subdirectory(Audio)
endif()

View file

@ -1,38 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-graphics
LOCAL_SRC_FILES := Color.cpp
LOCAL_SRC_FILES += GLCheck.cpp
LOCAL_SRC_FILES += GLExtensions.cpp
LOCAL_SRC_FILES += Image.cpp
LOCAL_SRC_FILES += ImageLoader.cpp
LOCAL_SRC_FILES += RenderStates.cpp
LOCAL_SRC_FILES += RenderTexture.cpp
LOCAL_SRC_FILES += RenderTarget.cpp
LOCAL_SRC_FILES += RenderWindow.cpp
LOCAL_SRC_FILES += Shader.cpp
LOCAL_SRC_FILES += Texture.cpp
LOCAL_SRC_FILES += TextureSaver.cpp
LOCAL_SRC_FILES += Transform.cpp
LOCAL_SRC_FILES += Transformable.cpp
LOCAL_SRC_FILES += View.cpp
LOCAL_SRC_FILES += Vertex.cpp
LOCAL_SRC_FILES += Shape.cpp
LOCAL_SRC_FILES += CircleShape.cpp
LOCAL_SRC_FILES += RectangleShape.cpp
LOCAL_SRC_FILES += ConvexShape.cpp
LOCAL_SRC_FILES += Sprite.cpp
LOCAL_SRC_FILES += Font.cpp
LOCAL_SRC_FILES += Text.cpp
LOCAL_SRC_FILES += VertexArray.cpp
LOCAL_SRC_FILES += RenderTextureImpl.cpp
LOCAL_SRC_FILES += RenderTextureImplFBO.cpp
LOCAL_SRC_FILES += RenderTextureImplDefault.cpp
LOCAL_CPPFLAGS := -DGL_GLEXT_PROTOTYPES -DSFML_OPENGL_ES
include $(BUILD_STATIC_LIBRARY)
$(call import-module,extlibs)

View file

@ -127,7 +127,13 @@ if(IOS)
find_package(JPEG REQUIRED)
find_package(Freetype REQUIRED)
set(GRAPHICS_EXT_INCLUDE_PATHS ${FREETYPE_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR})
set(GRAPHICS_EXT_LIBS "-framework OpenGLES ${FREETYPE_LIBRARY} ${JPEG_LIBRARY}")
set(GRAPHICS_EXT_LIBS "-framework OpenGLES ${FREETYPE_LIBRARY} ${JPEG_LIBRARY}")
elseif(ANDROID)
find_host_package(JPEG REQUIRED)
find_host_package(Freetype REQUIRED)
set(GRAPHICS_EXT_INCLUDE_PATHS ${FREETYPE_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR})
set(GRAPHICS_EXT_LIBS -lz ${FREETYPE_LIBRARY} ${JPEG_LIBRARY})
add_definitions(-DGL_GLEXT_PROTOTYPES)
endif()
# add include paths of external libraries

View file

@ -27,12 +27,12 @@
////////////////////////////////////////////////////////////
#include <SFML/Graphics/Font.hpp>
#include <SFML/Graphics/GLCheck.hpp>
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Lock.hpp>
#endif
#include <SFML/System/InputStream.hpp>
#include <SFML/System/Err.hpp>
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#endif
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
@ -149,7 +149,7 @@ bool Font::loadFromFile(const std::string& filename)
#else
priv::ActivityStates* states = priv::getActivityStates(NULL);
priv::ActivityStates* states = priv::getActivity(NULL);
Lock lock(states->mutex);
// Open the file

View file

@ -27,11 +27,11 @@
////////////////////////////////////////////////////////////
#include <SFML/Graphics/Image.hpp>
#include <SFML/Graphics/ImageLoader.hpp>
#include <SFML/System/Err.hpp>
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#endif
#include <SFML/System/Err.hpp>
#include <algorithm>
#include <cstring>
@ -112,7 +112,7 @@ bool Image::loadFromFile(const std::string& filename)
#else
priv::ActivityStates* states = priv::getActivityStates(NULL);
priv::ActivityStates* states = priv::getActivity(NULL);
Lock lock(states->mutex);
// Open the file

View file

@ -1,7 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-main
LOCAL_SRC_FILES := SFML_Main.cpp
include $(BUILD_STATIC_LIBRARY)

View file

@ -14,22 +14,17 @@ else()
endif()
source_group("" FILES ${SRC})
if(NOT ANDROID)
# define the sfml-main target
add_library(sfml-main STATIC ${SRC})
# define the sfml-main target
add_library(sfml-main STATIC ${SRC})
# set the debug suffix
set_target_properties(sfml-main PROPERTIES DEBUG_POSTFIX -d)
# set the debug suffix
set_target_properties(sfml-main PROPERTIES DEBUG_POSTFIX -d)
# insert the major version number in the output filename
set_target_properties(sfml-main PROPERTIES OUTPUT_NAME "sfml-main")
# insert the major version number in the output filename
set_target_properties(sfml-main PROPERTIES OUTPUT_NAME "sfml-main")
# set the target's folder (for IDEs that support it, e.g. Visual Studio)
set_target_properties(sfml-main PROPERTIES FOLDER "SFML")
# set the target's folder (for IDEs that support it, e.g. Visual Studio)
set_target_properties(sfml-main PROPERTIES FOLDER "SFML")
# setup the install rule
install(TARGETS sfml-main ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT devel)
else()
# define the sfml-main target
sfml_add_library(sfml-main SOURCES ${SRC} DEPENDS sfml-window sfml-system)
endif()
# setup the install rule
install(TARGETS sfml-main ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT devel)

View file

@ -27,15 +27,15 @@
#ifdef SFML_SYSTEM_ANDROID
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/Window/EGLCheck.hpp>
#include <SFML/Window/Keyboard.hpp>
#include <SFML/System/Sleep.hpp>
#include <SFML/System/Thread.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
extern int main(int argc, char *argv[]);
JavaVM* javaVM;
namespace sf
{
@ -292,16 +292,6 @@ void processSensorEvents(ActivityStates* states)
}
}
ActivityStates* getActivityStates(ActivityStates* initializedStates)
{
static ActivityStates* states = NULL;
if (!states)
states = initializedStates;
return states;
}
ActivityStates* retrieveStates(ANativeActivity* activity)
{
// Hide the ugly cast we find in each callback function
@ -578,9 +568,6 @@ static void onLowMemory(ANativeActivity* activity)
void ANativeActivity_onCreate(ANativeActivity* activity, void* savedState, size_t savedStateSize)
{
// Feed OpenAL-Soft's javaVM to make so he can function
javaVM = activity->vm;
// Create an activity states (will keep us in the know, about events we care)
sf::priv::ActivityStates* states = NULL;
states = new sf::priv::ActivityStates;
@ -610,7 +597,7 @@ void ANativeActivity_onCreate(ANativeActivity* activity, void* savedState, size_
states->terminated = false;
// Share it across the SFML modules
sf::priv::getActivityStates(states);
sf::priv::getActivity(states);
// These functions will update the activity states and therefore, will allow
// SFML to be kept in the know

View file

@ -1,17 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-network
LOCAL_SRC_FILES := Ftp.cpp
LOCAL_SRC_FILES += Http.cpp
LOCAL_SRC_FILES += IpAddress.cpp
LOCAL_SRC_FILES += Packet.cpp
LOCAL_SRC_FILES += Socket.cpp
LOCAL_SRC_FILES += SocketSelector.cpp
LOCAL_SRC_FILES += TcpListener.cpp
LOCAL_SRC_FILES += TcpSocket.cpp
LOCAL_SRC_FILES += UdpSocket.cpp
LOCAL_SRC_FILES += Unix/SocketImpl.cpp
include $(BUILD_STATIC_LIBRARY)

View file

@ -1,21 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-system
LOCAL_SRC_FILES := Clock.cpp
LOCAL_SRC_FILES += Err.cpp
LOCAL_SRC_FILES += Lock.cpp
LOCAL_SRC_FILES += Mutex.cpp
LOCAL_SRC_FILES += Sleep.cpp
LOCAL_SRC_FILES += String.cpp
LOCAL_SRC_FILES += Thread.cpp
LOCAL_SRC_FILES += ThreadLocal.cpp
LOCAL_SRC_FILES += Time.cpp
LOCAL_SRC_FILES += Unix/ClockImpl.cpp
LOCAL_SRC_FILES += Unix/MutexImpl.cpp
LOCAL_SRC_FILES += Unix/SleepImpl.cpp
LOCAL_SRC_FILES += Unix/ThreadImpl.cpp
LOCAL_SRC_FILES += Unix/ThreadLocalImpl.cpp
include $(BUILD_STATIC_LIBRARY)

View file

@ -70,8 +70,8 @@ else()
endif()
# build the list of external libraries to link
set(SYSTEM_EXT_LIBS)
if(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_MACOSX)
set(SYSTEM_EXT_LIBS)
if(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_MACOSX)
set(SYSTEM_EXT_LIBS ${SYSTEM_EXT_LIBS} pthread)
endif()
if(SFML_OS_LINUX)
@ -81,6 +81,11 @@ if(SFML_OS_WINDOWS)
set(SYSTEM_EXT_LIBS ${SYSTEM_EXT_LIBS} winmm)
endif()
# pthread is implicitly linked by the NDK
if(ANDROID)
set(SYSTEM_EXT_LIBS "")
endif()
# define the sfml-system target
sfml_add_library(sfml-system
SOURCES ${SRC} ${PLATFORM_SRC}

View file

@ -1,23 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sfml-window
LOCAL_SRC_FILES := Context.cpp
LOCAL_SRC_FILES += GlContext.cpp
LOCAL_SRC_FILES += GlResource.cpp
LOCAL_SRC_FILES += Joystick.cpp
LOCAL_SRC_FILES += JoystickManager.cpp
LOCAL_SRC_FILES += Keyboard.cpp
LOCAL_SRC_FILES += Mouse.cpp
LOCAL_SRC_FILES += VideoMode.cpp
LOCAL_SRC_FILES += Window.cpp
LOCAL_SRC_FILES += WindowImpl.cpp
LOCAL_SRC_FILES += EGLCheck.cpp
LOCAL_SRC_FILES += Android/WindowImplAndroid.cpp
LOCAL_SRC_FILES += Android/EglContext.cpp
LOCAL_SRC_FILES += Android/VideoModeImpl.cpp
LOCAL_SRC_FILES += Android/InputImpl.cpp
LOCAL_SRC_FILES += Android/JoystickImpl.cpp
include $(BUILD_STATIC_LIBRARY)

View file

@ -0,0 +1,41 @@
////////////////////////////////////////////////////////////
//
// SFML - Simple and Fast Multimedia Library
// Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
////////////////////////////////////////////////////////////
#include <SFML/Window/Android/Activity.hpp>
namespace sf
{
namespace priv
{
ActivityStates* getActivity(ActivityStates* initializedStates)
{
static ActivityStates* states = NULL;
if (!states)
states = initializedStates;
return states;
}
}
}

View file

@ -0,0 +1,78 @@
////////////////////////////////////////////////////////////
//
// SFML - Simple and Fast Multimedia Library
// Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
////////////////////////////////////////////////////////////
#ifndef SFML_ACTIVITY_HPP
#define SFML_ACTIVITY_HPP
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window/Event.hpp>
#include <SFML/System/Mutex.hpp>
#include <android/native_activity.h>
#include <android/configuration.h>
#include <android/sensor.h>
#include <vector>
#include <EGL/egl.h>
namespace sf
{
namespace priv
{
struct ActivityStates
{
ANativeActivity* activity;
ANativeWindow* window;
ALooper* looper;
AInputQueue* inputQueue;
AConfiguration* config;
ASensorManager* sensorManager;
const ASensor* accelerometerSensor;
ASensorEventQueue* sensorEventQueue;
EGLDisplay display;
void* savedState;
size_t savedStateSize;
sf::Mutex mutex;
std::vector<sf::Event> pendingEvents;
bool mainOver;
bool initialized;
bool terminated;
bool updated;
};
SFML_WINDOW_API ActivityStates* getActivity(ActivityStates* initializedStates=NULL);
} // namespace priv
} // namespace sf
#endif // SFML_ACTIVITY_HPP

View file

@ -27,12 +27,12 @@
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window/Android/EglContext.hpp>
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/System/Err.hpp>
#include <SFML/System/Sleep.hpp>
#include <SFML/System/Mutex.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#include <android/native_window.h>
@ -47,7 +47,7 @@ m_context (EGL_NO_CONTEXT),
m_surface (EGL_NO_SURFACE)
{
// Get the activity states and protect it from concurent access
ActivityStates* states = getActivityStates(NULL);
ActivityStates* states = getActivity(NULL);
sf::Lock lock(states->mutex);
// Get the intialized EGL display
@ -84,7 +84,7 @@ m_context (EGL_NO_CONTEXT),
m_surface (EGL_NO_SURFACE)
{
// Get the activity states and protect it from concurent access
ActivityStates* states = getActivityStates(NULL);
ActivityStates* states = getActivity(NULL);
sf::Lock lock(states->mutex);
// Get the intialized EGL display

View file

@ -26,8 +26,8 @@
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window/Android/InputImpl.hpp>
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#include <jni.h>
@ -47,7 +47,7 @@ void InputImpl::setVirtualKeyboardVisible(bool visible)
{
// TODO: Check if the window is active
ActivityStates* states = getActivityStates(NULL);
ActivityStates* states = getActivity(NULL);
sf::Lock lock(states->mutex);
jint lResult;

View file

@ -26,11 +26,10 @@
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window/VideoModeImpl.hpp>
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Vector2.hpp>
#include <SFML/System/Sleep.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
namespace sf
{
@ -53,7 +52,7 @@ std::vector<VideoMode> VideoModeImpl::getFullscreenModes()
VideoMode VideoModeImpl::getDesktopMode()
{
// Get the activity states
priv::ActivityStates* states = priv::getActivityStates(NULL);
priv::ActivityStates* states = priv::getActivity(NULL);
Lock lock(states->mutex);
// Wait for a window if there's none

View file

@ -29,12 +29,10 @@
#include <SFML/Window/WindowStyle.hpp> // important to be included first (conflict with None)
#include <SFML/Window/Android/WindowImplAndroid.hpp>
#include <SFML/Window/Event.hpp>
#include <SFML/Window/Android/Activity.hpp>
#include <SFML/System/Lock.hpp>
#include <SFML/Main/activity.hpp>
#include <android/log.h>
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "sfml_app", __VA_ARGS__))
////////////////////////////////////////////////////////////
// Private data
////////////////////////////////////////////////////////////
@ -72,7 +70,7 @@ WindowHandle WindowImplAndroid::getSystemHandle() const
////////////////////////////////////////////////////////////
void WindowImplAndroid::processEvents()
{
ActivityStates* states = getActivityStates(NULL);
ActivityStates* states = getActivity(NULL);
sf::Lock lock(states->mutex);
int ident, events;

View file

@ -141,22 +141,24 @@ elseif(ANDROID)
set(PLATFORM_SRC
${SRCROOT}/Android/WindowImplAndroid.hpp
${SRCROOT}/Android/WindowImplAndroid.cpp
${SRCROOT}/Android/EGLContext.hpp
${SRCROOT}/Android/EGLContext.cpp
${SRCROOT}/Android/VideoModeImpl.hpp
${SRCROOT}/Android/EglContext.hpp
${SRCROOT}/Android/EglContext.cpp
#${SRCROOT}/Android/VideoModeImpl.hpp
${SRCROOT}/Android/VideoModeImpl.cpp
${SRCROOT}/Android/InputImpl.hpp
${SRCROOT}/Android/InputImpl.cpp
${SRCROOT}/Android/JoystickImpl.hpp
${SRCROOT}/Android/JoystickImpl.cpp)
${SRCROOT}/Android/JoystickImpl.cpp
${SRCROOT}/Android/Activity.hpp
${SRCROOT}/Android/Activity.cpp)
source_group("android" FILES ${PLATFORM_SRC})
endif()
# find external libraries
if(NOT OPENGL_ES)
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
if(SFML_OS_LINUX)
include_directories(${OPENGL_INCLUDE_DIR})
if(SFML_OS_LINUX AND NOT SFML_OS_ANDROID)
find_package(X11 REQUIRED)
if(NOT X11_Xrandr_FOUND)
message(FATAL_ERROR "Xrandr library not found")
@ -181,9 +183,11 @@ elseif(SFML_OS_LINUX OR SFML_OS_FREEBSD)
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} usbhid)
endif()
elseif(SFML_OS_MACOSX)
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} ${OPENGL_gl_LIBRARY} "-framework Foundation -framework AppKit -framework IOKit -framework Carbon")
elseif(SFML_OS_IOS)
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} "-framework OpenGLES -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework CoreMotion")
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} ${OPENGL_gl_LIBRARY} "-framework Foundation -framework AppKit -framework IOKit -framework Carbon")
elseif(SFML_OS_IOS)
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} "-framework OpenGLES -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework CoreMotion")
elseif(SFML_OS_ANDROID)
set(WINDOW_EXT_LIBS ${WINDOW_EXT_LIBS} "-landroid -llog -lEGL -lGLESv1_CM")
endif()
# define the sfml-window target

View file

@ -35,6 +35,7 @@
#include <SFML/Window/Android/EglContext.hpp>
#endif
namespace
{
const sf::Window* fullscreenWindow = NULL;