diff --git a/OSX.diff b/OSX.diff new file mode 100644 index 00000000..59b6fa6a --- /dev/null +++ b/OSX.diff @@ -0,0 +1,167 @@ +diff --git a/examples/makefile b/examples/makefile +index 076c959..f445321 100644 +--- a/examples/makefile ++++ b/examples/makefile +@@ -24,8 +24,8 @@ + #************************************************************************************************** + + # define raylib platform (by default, compile for RPI) +-# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX +-PLATFORM ?= PLATFORM_RPI ++# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX ++PLATFORM ?= PLATFORM_DESKTOP_OSX + + # define compiler: gcc for C program, define as g++ for C++ + CC = gcc +@@ -55,6 +55,14 @@ else + LFLAGS = -L. -L../src -L/opt/vc/lib + endif + ++# define library paths containing required libs ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ LFLAGS = -L. -L../src -L../external/glfw3/lib/ -I../external/openal_soft/lib/ ++else ++ LFLAGS = -L. -L../src ++endif ++ ++ + # define any libraries to link into executable + # if you want to link libraries (libname.so or libname.a), use the -lname + ifeq ($(PLATFORM),PLATFORM_RPI) +@@ -68,11 +76,18 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev + LIBS = -lraylib -lglfw -lGLEW -lGL -lopenal + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ # libraries for OS X 10.9 desktop compiling ++ # requires the following packages: ++ # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev ++ LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAl -framework Cocoa ++else + # libraries for Windows desktop compiling + # NOTE: GLFW3 and OpenAL Soft libraries should be installed + LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32 + endif + endif ++endif + + # define additional parameters and flags for windows + ifeq ($(PLATFORM),PLATFORM_DESKTOP) +@@ -254,9 +269,13 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + find . -type f -executable -delete + rm -f *.o + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ rm -f *.o ++else + del *.o *.exe + endif + endif ++endif + @echo Cleaning done + + # instead of defining every module one by one, we can define a pattern +diff --git a/examples/textures_logo_raylib.c b/examples/textures_logo_raylib.c +index f4aeb73..b56f5f0 100644 +--- a/examples/textures_logo_raylib.c ++++ b/examples/textures_logo_raylib.c +@@ -21,7 +21,7 @@ int main() + InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); + + // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) +- Texture2D texture = LoadTexture("resources/raylib_logo.png"); // Texture loading ++ Texture2D texture = LoadTexture("./resources/raylib_logo.png"); // Texture loading + //--------------------------------------------------------------------------------------- + + // Main game loop +diff --git a/src/makefile b/src/makefile +index 0c078e8..780aa16 100644 +--- a/src/makefile ++++ b/src/makefile +@@ -24,8 +24,8 @@ + #************************************************************************************************** + + # define raylib platform (by default, compile for RPI) +-# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX +-PLATFORM ?= PLATFORM_RPI ++# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX ++PLATFORM ?= PLATFORM_DESKTOP_OSX + + # define raylib graphics api depending on selected platform + ifeq ($(PLATFORM),PLATFORM_RPI) +@@ -57,7 +57,7 @@ endif + ifeq ($(PLATFORM),PLATFORM_RPI) + INCLUDES = -I. -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads + else +- INCLUDES = -I. ++ INCLUDES = -I. -I../external/glfw3/include/ -I../external/openal_soft/include/ + endif + + # define all object files required +@@ -124,9 +124,13 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) + find . -type f -executable -delete + rm -f *.o libraylib.a + else ++ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) ++ rm -f *.o libraylib.a ++else + del *.o libraylib.a + endif + endif ++endif + @echo Cleaning done + + # instead of defining every module one by one, we can define a pattern +diff --git a/src/rlgl.c b/src/rlgl.c +index 8f1a66a..865281a 100644 +--- a/src/rlgl.c ++++ b/src/rlgl.c +@@ -32,13 +32,23 @@ + #include // Declares malloc() and free() for memory management, rand() + + #if defined(GRAPHICS_API_OPENGL_11) +- #include // Basic OpenGL include ++ #ifdef __APPLE__ ++ #include ++ #include ++ #include ++ #else ++ #include // Basic OpenGL include ++ #endif + #endif + + #if defined(GRAPHICS_API_OPENGL_33) + #define GLEW_STATIC +- #include // Extensions loading lib +- //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW ++ #ifdef __APPLE__ ++ #include ++ #else ++ #include // Extensions loading lib ++ //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW ++ #endif + #endif + + #if defined(GRAPHICS_API_OPENGL_ES2) +diff --git a/src/utils.c b/src/utils.c +index b511211..26a4406 100644 +--- a/src/utils.c ++++ b/src/utils.c +@@ -40,7 +40,7 @@ + #include // Used for functions with variable number of parameters (TraceLog()) + //#include // String management functions: strlen(), strrchr(), strcmp() + +-#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) ++#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) + #define STB_IMAGE_WRITE_IMPLEMENTATION + #include "stb_image_write.h" // Create PNG file + #endif +@@ -107,7 +107,7 @@ unsigned char *DecompressData(const unsigned char *data, unsigned long compSize, + return pUncomp; + } + +-#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) ++#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) + // Creates a bitmap (BMP) file from an array of pixel data + // NOTE: This function is not explicitly available to raylib users + void WriteBitmap(const char *fileName, unsigned char *imgData, int width, int height) diff --git a/examples/makefile b/examples/makefile index 076c9594..f4453213 100644 --- a/examples/makefile +++ b/examples/makefile @@ -24,8 +24,8 @@ #************************************************************************************************** # define raylib platform (by default, compile for RPI) -# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX -PLATFORM ?= PLATFORM_RPI +# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX +PLATFORM ?= PLATFORM_DESKTOP_OSX # define compiler: gcc for C program, define as g++ for C++ CC = gcc @@ -55,6 +55,14 @@ else LFLAGS = -L. -L../src -L/opt/vc/lib endif +# define library paths containing required libs +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + LFLAGS = -L. -L../src -L../external/glfw3/lib/ -I../external/openal_soft/lib/ +else + LFLAGS = -L. -L../src +endif + + # define any libraries to link into executable # if you want to link libraries (libname.so or libname.a), use the -lname ifeq ($(PLATFORM),PLATFORM_RPI) @@ -67,12 +75,19 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) # requires the following packages: # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev LIBS = -lraylib -lglfw -lGLEW -lGL -lopenal +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + # libraries for OS X 10.9 desktop compiling + # requires the following packages: + # libglfw3-dev libopenal-dev libglew-dev libegl1-mesa-dev + LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAl -framework Cocoa else # libraries for Windows desktop compiling # NOTE: GLFW3 and OpenAL Soft libraries should be installed LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32 endif endif +endif # define additional parameters and flags for windows ifeq ($(PLATFORM),PLATFORM_DESKTOP) @@ -253,9 +268,13 @@ else ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) find . -type f -executable -delete rm -f *.o +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + rm -f *.o else del *.o *.exe endif +endif endif @echo Cleaning done diff --git a/examples/textures_logo_raylib.c b/examples/textures_logo_raylib.c index f4aeb738..b56f5f03 100644 --- a/examples/textures_logo_raylib.c +++ b/examples/textures_logo_raylib.c @@ -21,7 +21,7 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D texture = LoadTexture("resources/raylib_logo.png"); // Texture loading + Texture2D texture = LoadTexture("./resources/raylib_logo.png"); // Texture loading //--------------------------------------------------------------------------------------- // Main game loop diff --git a/external/glfw3/lib/cmake/glfw/glfwConfig.cmake b/external/glfw3/lib/cmake/glfw/glfwConfig.cmake new file mode 100644 index 00000000..b11654d3 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwConfig.cmake @@ -0,0 +1,10 @@ +# - Config file for the glfw package +# It defines the following variables +# GLFW_INCLUDE_DIR, the path where GLFW headers are located +# GLFW_LIBRARY_DIR, folder in which the GLFW library is located +# GLFW_LIBRARY, library to link against to use GLFW + +set(GLFW_INCLUDE_DIR "/Users/ratalaika/Repositories/external/glfw3/lib/include") +set(GLFW_LIBRARY_DIR "/Users/ratalaika/Repositories/external/glfw3/lib/lib") + +find_library(GLFW_LIBRARY "glfw" HINTS ${GLFW_LIBRARY_DIR}) diff --git a/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake b/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake new file mode 100644 index 00000000..524c86dc --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwConfigVersion.cmake @@ -0,0 +1,12 @@ + +set(PACKAGE_VERSION "3.0.4") + +if ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "3") + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) +endif() + diff --git a/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake b/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake new file mode 100644 index 00000000..f35f7d2f --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwTargets-debug.cmake @@ -0,0 +1,20 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "glfw" for configuration "Debug" +set_property(TARGET glfw APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(glfw PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/libglfw.3.0.dylib" + IMPORTED_SONAME_DEBUG "/Users/ratalaika/Repositories/external/glfw3/lib/lib/libglfw.3.dylib" + ) + +list(APPEND _IMPORT_CHECK_TARGETS glfw ) +list(APPEND _IMPORT_CHECK_FILES_FOR_glfw "${_IMPORT_PREFIX}/lib/libglfw.3.0.dylib" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/external/glfw3/lib/cmake/glfw/glfwTargets.cmake b/external/glfw3/lib/cmake/glfw/glfwTargets.cmake new file mode 100644 index 00000000..bd183427 --- /dev/null +++ b/external/glfw3/lib/cmake/glfw/glfwTargets.cmake @@ -0,0 +1,84 @@ +# Generated by CMake 3.1.0-rc2 + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget glfw) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) + +# Create imported target glfw +add_library(glfw SHARED IMPORTED) + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/glfwTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/external/glfw3/lib/libglfw.3.0.dylib b/external/glfw3/lib/libglfw.3.0.dylib new file mode 100755 index 00000000..963d716d Binary files /dev/null and b/external/glfw3/lib/libglfw.3.0.dylib differ diff --git a/external/glfw3/lib/libglfw.3.dylib b/external/glfw3/lib/libglfw.3.dylib new file mode 120000 index 00000000..cd20112e --- /dev/null +++ b/external/glfw3/lib/libglfw.3.dylib @@ -0,0 +1 @@ +libglfw.3.0.dylib \ No newline at end of file diff --git a/external/glfw3/lib/libglfw.dylib b/external/glfw3/lib/libglfw.dylib new file mode 120000 index 00000000..d4bd51e1 --- /dev/null +++ b/external/glfw3/lib/libglfw.dylib @@ -0,0 +1 @@ +libglfw.3.dylib \ No newline at end of file diff --git a/external/glfw3/lib/pkgconfig/glfw3.pc b/external/glfw3/lib/pkgconfig/glfw3.pc new file mode 100644 index 00000000..f5252b35 --- /dev/null +++ b/external/glfw3/lib/pkgconfig/glfw3.pc @@ -0,0 +1,13 @@ +prefix=/Users/ratalaika/Repositories/external/glfw3/lib +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: GLFW +Description: A portable library for OpenGL, window and input +Version: 3.0.4 +URL: http://www.glfw.org/ +Requires.private: +Libs: -L${libdir} -lglfw +Libs.private: -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework CoreVideo +Cflags: -I${includedir} diff --git a/src/makefile b/src/makefile index 0c078e86..780aa16b 100644 --- a/src/makefile +++ b/src/makefile @@ -24,8 +24,8 @@ #************************************************************************************************** # define raylib platform (by default, compile for RPI) -# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX -PLATFORM ?= PLATFORM_RPI +# Other possible platforms: PLATFORM_DESKTOP PLATFORM_DESKTOP_LINUX PLATFORM_DESKTOP_OSX +PLATFORM ?= PLATFORM_DESKTOP_OSX # define raylib graphics api depending on selected platform ifeq ($(PLATFORM),PLATFORM_RPI) @@ -57,7 +57,7 @@ endif ifeq ($(PLATFORM),PLATFORM_RPI) INCLUDES = -I. -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads else - INCLUDES = -I. + INCLUDES = -I. -I../external/glfw3/include/ -I../external/openal_soft/include/ endif # define all object files required @@ -123,9 +123,13 @@ else ifeq ($(PLATFORM),PLATFORM_DESKTOP_LINUX) find . -type f -executable -delete rm -f *.o libraylib.a +else +ifeq ($(PLATFORM),PLATFORM_DESKTOP_OSX) + rm -f *.o libraylib.a else del *.o libraylib.a endif +endif endif @echo Cleaning done diff --git a/src/rlgl.c b/src/rlgl.c index 8f1a66a8..865281a3 100644 --- a/src/rlgl.c +++ b/src/rlgl.c @@ -32,13 +32,23 @@ #include // Declares malloc() and free() for memory management, rand() #if defined(GRAPHICS_API_OPENGL_11) - #include // Basic OpenGL include + #ifdef __APPLE__ + #include + #include + #include + #else + #include // Basic OpenGL include + #endif #endif #if defined(GRAPHICS_API_OPENGL_33) #define GLEW_STATIC - #include // Extensions loading lib - //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW + #ifdef __APPLE__ + #include + #else + #include // Extensions loading lib + //#include "glad.h" // TODO: Other extensions loading lib? --> REVIEW + #endif #endif #if defined(GRAPHICS_API_OPENGL_ES2) diff --git a/src/utils.c b/src/utils.c index b5112111..26a44065 100644 --- a/src/utils.c +++ b/src/utils.c @@ -40,7 +40,7 @@ #include // Used for functions with variable number of parameters (TraceLog()) //#include // String management functions: strlen(), strrchr(), strcmp() -#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) +#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" // Create PNG file #endif @@ -107,7 +107,7 @@ unsigned char *DecompressData(const unsigned char *data, unsigned long compSize, return pUncomp; } -#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) +#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_DESKTOP_OSX) // Creates a bitmap (BMP) file from an array of pixel data // NOTE: This function is not explicitly available to raylib users void WriteBitmap(const char *fileName, unsigned char *imgData, int width, int height)