build for android cmake

This commit is contained in:
smallville7123 2021-11-07 21:54:37 +10:00
parent 9e6133bb09
commit 95260a227f
3 changed files with 125 additions and 75 deletions

View File

@ -1,7 +1,43 @@
if (${PLATFORM} MATCHES "Desktop") if(WIN32)
set(PLATFORM_CPP "PLATFORM_DESKTOP") if(${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore")
add_definitions(-DPLATFORM_UNIVERSAL_WINDOWS)
set(PLATFORM_UNIVERSAL_WINDOWS TRUE CACHE INTERNAL "Target platform: Windows Store")
message("Target platform: Universal Windows. SDK Version: " ${CMAKE_SYSTEM_VERSION})
else()
set(PLATFORM_WIN32 TRUE CACHE INTERNAL "Target platform: Win32") #WIN32 is a variable, so we cannot use string "WIN32"
endif()
else()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
set(PLATFORM_ANDROID TRUE CACHE INTERNAL "Target platform: Android")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(PLATFORM_LINUX TRUE CACHE INTERNAL "Target platform: Linux")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
if(IOS)
set(PLATFORM_IOS TRUE CACHE INTERNAL "Target platform: iOS")
else()
set(PLATFORM_MACOS TRUE CACHE INTERNAL "Target platform: MacOS")
endif()
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "iOS")
set(PLATFORM_IOS TRUE CACHE INTERNAL "Target platform: iOS")
endif()
endif(WIN32)
if (APPLE) if(PLATFORM_MACOS OR PLATFORM_IOS OR PLATFORM_TVOS)
set(PLATFORM_APPLE TRUE CACHE INTERNAL "Apple platform (macOS, iOS, or tvOS)")
endif()
if (PLATFORM_MACOS OR PLATFORM_LINUX OR PLATFORM_WIN32)
set(PLATFORM_DESKTOP TRUE "Desktop platform (Windows, Linux, or macOS)")
endif()
if (PLATFORM_MACOS OR PLATFORM_IOS) # iOS too?
if (PLATFORM_MACOS)
add_definitions(-DPLATFORM_DESKTOP -DPLATFORM_APPLE -DGL_SILENCE_DEPRECATION)
set(PLATFORM_CPP "PLATFORM_MACOS")
else()
add_definitions(-DPLATFORM_IOS)
set(PLATFORM_CPP "PLATFORM_IOS")
endif()
# Need to force OpenGL 3.3 on OS X # Need to force OpenGL 3.3 on OS X
# See: https://github.com/raysan5/raylib/issues/341 # See: https://github.com/raysan5/raylib/issues/341
set(GRAPHICS "GRAPHICS_API_OPENGL_33") set(GRAPHICS "GRAPHICS_API_OPENGL_33")
@ -12,11 +48,15 @@ if (${PLATFORM} MATCHES "Desktop")
add_definitions(-DGL_SILENCE_DEPRECATION) add_definitions(-DGL_SILENCE_DEPRECATION)
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!") MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
endif () endif ()
elseif (WIN32) elseif (PLATFORM_WIN32)
add_definitions(-DPLATFORM_WIN32)
set(PLATFORM_CPP "PLATFORM_WINDOWS")
add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_CRT_SECURE_NO_WARNINGS)
find_package(OpenGL QUIET) find_package(OpenGL QUIET)
set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm) set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm)
else () elseif (PLATFORM_LINUX)
add_definitions(-DPLATFORM_LINUX)
set(PLATFORM_CPP "PLATFORM_LINUX")
find_library(pthread NAMES pthread) find_library(pthread NAMES pthread)
find_package(OpenGL QUIET) find_package(OpenGL QUIET)
if ("${OPENGL_LIBRARIES}" STREQUAL "") if ("${OPENGL_LIBRARIES}" STREQUAL "")
@ -28,27 +68,22 @@ if (${PLATFORM} MATCHES "Desktop")
endif () endif ()
set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY}) set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY})
endif () elseif(PLATFORM_ANDROID)
add_definitions(-DPLATFORM_ANDROID)
set(PLATFORM_CPP "PLATFORM_ANDROID")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
set(LIBS_PRIVATE m log android EGL GLESv2 OpenSLES atomic c)
include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
elseif (${PLATFORM} MATCHES "Web") elseif (${PLATFORM} MATCHES "Web")
add_definitions(-DPLATFORM_WEB)
set(PLATFORM_CPP "PLATFORM_WEB") set(PLATFORM_CPP "PLATFORM_WEB")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling")
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
elseif (${PLATFORM} MATCHES "Android")
set(PLATFORM_CPP "PLATFORM_ANDROID")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
add_definitions(-DANDROID -D__ANDROID_API__=21)
include_directories(external/android/native_app_glue)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -uANativeActivity_onCreate")
find_library(OPENGL_LIBRARY OpenGL)
set(LIBS_PRIVATE m log android EGL GLESv2 OpenSLES atomic c)
elseif (${PLATFORM} MATCHES "Raspberry Pi") elseif (${PLATFORM} MATCHES "Raspberry Pi")
add_definitions(-DPLATFORM_RPI)
set(PLATFORM_CPP "PLATFORM_RPI") set(PLATFORM_CPP "PLATFORM_RPI")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
@ -79,6 +114,8 @@ elseif (${PLATFORM} MATCHES "DRM")
endif () endif ()
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} pthread m dl) set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} pthread m dl)
else()
message(FATAL_ERROR "Unsupported platform")
endif () endif ()
if (${OPENGL_VERSION}) if (${OPENGL_VERSION})
@ -103,6 +140,6 @@ endif ()
set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY}) set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY})
if (${PLATFORM} MATCHES "Desktop") if (PLATFORM_DESKTOP)
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw) set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
endif () endif ()

View File

@ -38,9 +38,10 @@ set(raylib_sources
utils.c utils.c
) )
if (NOT ANDROID AND NOT IOS)
# <root>/cmake/GlfwImport.cmake handles the details around the inclusion of glfw # <root>/cmake/GlfwImport.cmake handles the details around the inclusion of glfw
include(GlfwImport) include(GlfwImport)
endif()
if (USE_AUDIO) if (USE_AUDIO)
MESSAGE(STATUS "Audio Backend: miniaudio") MESSAGE(STATUS "Audio Backend: miniaudio")
@ -86,6 +87,7 @@ target_link_libraries(raylib "${LIBS_PRIVATE}")
# and you will be able to select more build options # and you will be able to select more build options
include(CompileDefinitions) include(CompileDefinitions)
if (NOT ANDROID AND NOT IOS)
# Registering include directories # Registering include directories
target_include_directories(raylib target_include_directories(raylib
PUBLIC PUBLIC
@ -96,6 +98,17 @@ target_include_directories(raylib
${OPENGL_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR}
${OPENAL_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR}
) )
else()
# Registering include directories
target_include_directories(raylib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${OPENAL_INCLUDE_DIR}
)
endif()
# Copy the header files to the build directory for convenience # Copy the header files to the build directory for convenience
file(COPY ${raylib_public_headers} DESTINATION "include") file(COPY ${raylib_public_headers} DESTINATION "include")

View File

@ -672,24 +672,24 @@ void __stdcall Sleep(unsigned long msTimeout); // Required for: Wai
// Module Functions Definition - Window and OpenGL Context Functions // Module Functions Definition - Window and OpenGL Context Functions
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
#if defined(PLATFORM_ANDROID) #if defined(PLATFORM_ANDROID)
// To allow easier porting to android, we allow the user to define a //// To allow easier porting to android, we allow the user to define a
// main function which we call from android_main, defined by ourselves //// main function which we call from android_main, defined by ourselves
extern int main(int argc, char *argv[]); //extern int main(int argc, char *argv[]);
//
void android_main(struct android_app *app) //void android_main(struct android_app *app)
{ //{
char arg0[] = "raylib"; // NOTE: argv[] are mutable // char arg0[] = "raylib"; // NOTE: argv[] are mutable
CORE.Android.app = app; // CORE.Android.app = app;
//
// NOTE: Return codes != 0 are skipped // // NOTE: Return codes != 0 are skipped
(void)main(1, (char *[]) { arg0, NULL }); // (void)main(1, (char *[]) { arg0, NULL });
} //}
//
// NOTE: Add this to header (if apps really need it) //// NOTE: Add this to header (if apps really need it)
struct android_app *GetAndroidApp(void) //struct android_app *GetAndroidApp(void)
{ //{
return CORE.Android.app; // return CORE.Android.app;
} //}
#endif #endif
// Initialize window and OpenGL context // Initialize window and OpenGL context