diff --git a/cmake/LibraryConfigurations.cmake b/cmake/LibraryConfigurations.cmake index c156d6b35..66c932051 100644 --- a/cmake/LibraryConfigurations.cmake +++ b/cmake/LibraryConfigurations.cmake @@ -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 () \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2877c9ac8..37321d5c3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,9 +38,10 @@ set(raylib_sources utils.c ) -# /cmake/GlfwImport.cmake handles the details around the inclusion of glfw -include(GlfwImport) - +if (NOT ANDROID AND NOT IOS) + # /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 - $ - $ - 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 + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${OPENGL_INCLUDE_DIR} + ${OPENAL_INCLUDE_DIR} + ) +else() + # Registering include directories + target_include_directories(raylib + PUBLIC + $ + $ + 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") diff --git a/src/rcore.c b/src/rcore.c index 3b4515520..24be4cbfa 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -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