diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47bee1ce4..33f0fec50 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,6 @@ include("../utils.cmake") set(PROJECT_VERSION 1.9.1-dev) set(RAYLIB raylib) # Name of the generated library - ### Config options ### # Shared library is always PIC. Static library should be PIC too if linked into a shared library set(WITH_PIC OFF CACHE BOOL "Compile static library as position-independent code" OFF) @@ -18,7 +17,6 @@ if(NOT (STATIC_RAYLIB OR SHARED_RAYLIB)) message(FATAL_ERROR "Nothing to do if both -DSHARED_RAYLIB=OFF and -DSTATIC_RAYLIB=OFF...") endif() - # Platform set(PLATFORM "Desktop" CACHE STRING "Platform to build for.") set_property(CACHE PLATFORM PROPERTY STRINGS "Desktop" "Web" "Android" "Raspberry Pi") @@ -26,10 +24,10 @@ set_property(CACHE PLATFORM PROPERTY STRINGS "Desktop" "Web" "Android" "Raspberr # OpenGL version set(OPENGL_VERSION "3.3" CACHE STRING "OpenGL Version to build raylib with") set_property(CACHE OPENGL_VERSION PROPERTY STRINGS "3.3" "2.1" "1.1" "ES 2.0") -### Config options ### +### Config options ### include_directories(external/glfw/include) -include_directories(external/openal/include) # For use with AppVeyor on Windows +include_directories(external/include) # For use with AppVeyor on Windows # Translate the config options to what raylib wants if(${PLATFORM} MATCHES "Desktop") @@ -55,6 +53,7 @@ if(${PLATFORM} MATCHES "Desktop") elseif(WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() + elseif(${PLATFORM} MATCHES "Web") set(PLATFORM "PLATFORM_WEB") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") @@ -94,14 +93,20 @@ if(${PLATFORM} MATCHES "PLATFORM_DESKTOP") foreach(L ${LIBS_PRIVATE}) set(PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE} -l${L}") endforeach(L) + endif() - elseif(APPLE) + if(APPLE) # TODO extract framework location and name from ${LIBS_PRIVATE} # and specify them as -F and -framework instead of hardcoding foreach(F OpenGL OpenAL Cocoa) set(PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE} -framework ${F}") endforeach(F) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + foreach(L ${LIBS_PRIVATE}) + set(PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE} -l${L}") + endforeach(L) endif() if(${SHARED_RAYLIB}) diff --git a/src/rglfw.c b/src/rglfw.c index 83e0021bf..5cd2c937a 100644 --- a/src/rglfw.c +++ b/src/rglfw.c @@ -36,6 +36,9 @@ #ifdef __linux__ #define _GLFW_X11 #endif +#ifdef __FreeBSD__ + #define _GLFW_X11 +#endif #ifdef __APPLE__ #define _GLFW_COCOA #define _GLFW_USE_CHDIR // To chdir to the Resources subdirectory of the application bundle during glfwInit @@ -77,6 +80,20 @@ #include "external/glfw/src/osmesa_context.c" #endif +#ifdef __FreeBSD__ + #include "external/glfw/src/x11_init.c" + #include "external/glfw/src/x11_monitor.c" + #include "external/glfw/src/x11_window.c" + #include "external/glfw/src/xkb_unicode.c" + // TODO: Joistick implementation + #include "external/glfw/src/null_joystick.c" + #include "external/glfw/src/posix_time.c" + #include "external/glfw/src/posix_thread.c" + #include "external/glfw/src/glx_context.c" + #include "external/glfw/src/egl_context.c" + #include "external/glfw/src/osmesa_context.c" +#endif + #ifdef __APPLE__ #include "external/glfw/src/cocoa_init.m" #include "external/glfw/src/cocoa_joystick.m" diff --git a/utils.cmake b/utils.cmake index 84c73fe2a..43b479daf 100644 --- a/utils.cmake +++ b/utils.cmake @@ -1,9 +1,8 @@ # All sorts of things that we need cross project cmake_minimum_required(VERSION 2.8.0) -# Detect linux -if(UNIX AND NOT APPLE) - set(LINUX TRUE) +if(CMAKE_SYSTEM_NAME STREQUAL Linux) + set(LINUX TRUE) endif() # Linking for OS X -framework options @@ -18,17 +17,36 @@ if(APPLE) set(LIBS_PRIVATE ${OPENGL_LIBRARY} ${OPENAL_LIBRARY} ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREFOUNDATION_LIBRARY} ${COREVIDEO_LIBRARY}) -elseif(LINUX) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL Linux) # Elsewhere (such as Linux), need `-lopenal -lGL`, etc... set(LIBS_PRIVATE m pthread dl openal GL X11 Xrandr Xinerama Xi Xxf86vm Xcursor) # X11 stuff -else() - # TODO Windows endif() +if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + find_package(OpenGL REQUIRED) + find_package(OpenAL REQUIRED) + include_directories(${OPENGL_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR}) + + find_package(X11 REQUIRED) + find_library(OpenAL REQUIRED) + find_library(pthread NAMES pthread) + find_library(Xrandr NAMES Xrandr) + find_library(Xi NAMES Xi) + find_library(Xinerama NAMES Xinerama) + find_library(Xxf86vm NAMES Xxf86vm) + find_library(Xcursor NAMES Xcursor) + + set(LIBS_PRIVATE m ${pthread} ${OPENAL_LIBRARY} ${X11_LIBRARIES} ${Xrandr} ${Xinerama} ${Xi} ${Xxf86vm} ${Xcursor}) +endif() + +# TODO Support Windows + # Do the linking for executables that are meant to link raylib function(link_libraries_to_executable executable) # And raylib