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,54 +1,89 @@
if (${PLATFORM} MATCHES "Desktop")
set(PLATFORM_CPP "PLATFORM_DESKTOP")
if (APPLE)
# Need to force OpenGL 3.3 on OS X
# See: https://github.com/raysan5/raylib/issues/341
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
find_library(OPENGL_LIBRARY OpenGL)
set(LIBS_PRIVATE ${OPENGL_LIBRARY})
link_libraries("${LIBS_PRIVATE}")
if (NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
add_definitions(-DGL_SILENCE_DEPRECATION)
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
endif ()
elseif (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
find_package(OpenGL QUIET)
set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm)
else ()
find_library(pthread NAMES pthread)
find_package(OpenGL QUIET)
if ("${OPENGL_LIBRARIES}" STREQUAL "")
set(OPENGL_LIBRARIES "GL")
endif ()
if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD")
find_library(OSS_LIBRARY ossaudio)
endif ()
set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY})
if(WIN32)
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(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
# See: https://github.com/raysan5/raylib/issues/341
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
find_library(OPENGL_LIBRARY OpenGL)
set(LIBS_PRIVATE ${OPENGL_LIBRARY})
link_libraries("${LIBS_PRIVATE}")
if (NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
add_definitions(-DGL_SILENCE_DEPRECATION)
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
endif ()
elseif (PLATFORM_WIN32)
add_definitions(-DPLATFORM_WIN32)
set(PLATFORM_CPP "PLATFORM_WINDOWS")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
find_package(OpenGL QUIET)
set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm)
elseif (PLATFORM_LINUX)
add_definitions(-DPLATFORM_LINUX)
set(PLATFORM_CPP "PLATFORM_LINUX")
find_library(pthread NAMES pthread)
find_package(OpenGL QUIET)
if ("${OPENGL_LIBRARIES}" STREQUAL "")
set(OPENGL_LIBRARIES "GL")
endif ()
if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD")
find_library(OSS_LIBRARY ossaudio)
endif ()
set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY})
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")
add_definitions(-DPLATFORM_WEB)
set(PLATFORM_CPP "PLATFORM_WEB")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling")
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")
add_definitions(-DPLATFORM_RPI)
set(PLATFORM_CPP "PLATFORM_RPI")
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
@ -79,6 +114,8 @@ elseif (${PLATFORM} MATCHES "DRM")
endif ()
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} pthread m dl)
else()
message(FATAL_ERROR "Unsupported platform")
endif ()
if (${OPENGL_VERSION})
@ -103,6 +140,6 @@ endif ()
set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY})
if (${PLATFORM} MATCHES "Desktop")
if (PLATFORM_DESKTOP)
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
endif ()
endif ()

View File

@ -38,9 +38,10 @@ set(raylib_sources
utils.c
)
# <root>/cmake/GlfwImport.cmake handles the details around the inclusion of glfw
include(GlfwImport)
if (NOT ANDROID AND NOT IOS)
# <root>/cmake/GlfwImport.cmake handles the details around the inclusion of glfw
include(GlfwImport)
endif()
if (USE_AUDIO)
MESSAGE(STATUS "Audio Backend: miniaudio")
@ -86,16 +87,28 @@ target_link_libraries(raylib "${LIBS_PRIVATE}")
# and you will be able to select more build options
include(CompileDefinitions)
# Registering include directories
target_include_directories(raylib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${OPENGL_INCLUDE_DIR}
${OPENAL_INCLUDE_DIR}
)
if (NOT ANDROID AND NOT IOS)
# Registering include directories
target_include_directories(raylib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${OPENGL_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
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
//----------------------------------------------------------------------------------
#if defined(PLATFORM_ANDROID)
// To allow easier porting to android, we allow the user to define a
// main function which we call from android_main, defined by ourselves
extern int main(int argc, char *argv[]);
void android_main(struct android_app *app)
{
char arg0[] = "raylib"; // NOTE: argv[] are mutable
CORE.Android.app = app;
// NOTE: Return codes != 0 are skipped
(void)main(1, (char *[]) { arg0, NULL });
}
// NOTE: Add this to header (if apps really need it)
struct android_app *GetAndroidApp(void)
{
return CORE.Android.app;
}
//// To allow easier porting to android, we allow the user to define a
//// main function which we call from android_main, defined by ourselves
//extern int main(int argc, char *argv[]);
//
//void android_main(struct android_app *app)
//{
// char arg0[] = "raylib"; // NOTE: argv[] are mutable
// CORE.Android.app = app;
//
// // NOTE: Return codes != 0 are skipped
// (void)main(1, (char *[]) { arg0, NULL });
//}
//
//// NOTE: Add this to header (if apps really need it)
//struct android_app *GetAndroidApp(void)
//{
// return CORE.Android.app;
//}
#endif
// Initialize window and OpenGL context