Skip to content

Commit d7ac2a6

Browse files
committed
CMake: Add tristate option for using system GLFW
-DWITH_SYSTEM_GLFW=ON: Link against system glfw and fail otherwise -DWITH_SYSTEM_GLFW=OFF: Use embedded rglfw.c -DWITH_SYSTEM_GLFW=IF_POSSIBLE: Probe for system glfw but fallback to rglfw if unavailable Also change Linux 64-bit build to install system glfw and use it, so this doesn't bitrot. Addresses raysan5#453.
1 parent 007ae1b commit d7ac2a6

File tree

3 files changed

+67
-40
lines changed

3 files changed

+67
-40
lines changed

.travis.yml

+11-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ matrix:
1313
env: ARCH=i386
1414
sudo: required
1515
- os: linux
16-
env: ARCH=amd64
16+
env: ARCH=amd64 GLFW=SYSTEM
1717
sudo: required
1818
- os: osx
1919
env: ARCH=universal
@@ -30,14 +30,22 @@ before_install:
3030
export RAYLIB_PACKAGE_SUFFIX="-Linux-$ARCH";
3131
if [ "$ARCH" == "i386" ]; then export CFLAGS="-m32"; fi;
3232
if [ "$ARCH" == "amd64" ]; then export CFLAGS="-m64"; fi;
33+
if [ "$GLFW" == "SYSTEM" ]; then
34+
wget 'http://ftp.de.debian.org/debian/pool/main/g/glfw3/libglfw3_3.2.1-1_amd64.deb';
35+
wget 'http://ftp.de.debian.org/debian/pool/main/g/glfw3/libglfw3-dev_3.2.1-1_amd64.deb';
36+
sudo dpkg -i libglfw3_3.2.1-1_amd64.deb libglfw3-dev_3.2.1-1_amd64.deb;
37+
fi;
38+
fi
39+
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
40+
export RAYLIB_PACKAGE_SUFFIX="-macOS";
41+
if [ "$GLFW" == "SYSTEM" ]; then brew update; brew install glfw; fi;
3342
fi
34-
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then export RAYLIB_PACKAGE_SUFFIX="-macOS"; fi
3543
- "$CC --version"
3644

3745
script:
3846
- mkdir build
3947
- cd build
40-
- cmake -DMACOS_FATLIB=ON -DSTATIC_RAYLIB=ON -DSHARED_RAYLIB=ON -DBUILD_EXAMPLES=ON -DBUILD_GAMES=ON ..
48+
- cmake -DMACOS_FATLIB=ON -DSTATIC_RAYLIB=ON -DSHARED_RAYLIB=ON -DBUILD_EXAMPLES=ON -DBUILD_GAMES=ON -DWITH_SYSTEM_GLFW=IF_POSSIBLE ..
4149
- make VERBOSE=1
4250
- make package
4351

src/CMakeLists.txt

+12-31
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,19 @@ set_property(CACHE PLATFORM PROPERTY STRINGS "Desktop" "Web" "Android" "Raspberr
2626
set(OPENGL_VERSION "3.3" CACHE STRING "OpenGL Version to build raylib with")
2727
set_property(CACHE OPENGL_VERSION PROPERTY STRINGS "3.3" "2.1" "1.1" "ES 2.0")
2828

29-
### Config options ###
30-
include_directories(external/glfw/include)
29+
# Get the sources together
30+
file(GLOB raylib_sources *.c)
31+
if(glfw3_FOUND)
32+
list(REMOVE_ITEM raylib_sources ${CMAKE_CURRENT_SOURCE_DIR}/rglfw.c)
33+
else()
34+
include_directories(external/glfw/include)
35+
endif()
3136

37+
file(GLOB stb_vorbis external/stb_vorbis.c)
38+
file(GLOB mini_al external/mini_al.c ${stb_vorbis})
39+
set(sources ${raylib_sources} ${mini_al})
40+
41+
### Config options ###
3242
# Translate the config options to what raylib wants
3343
if(${PLATFORM} MATCHES "Desktop")
3444
set(PLATFORM "PLATFORM_DESKTOP")
@@ -81,38 +91,9 @@ if(MACOS_FATLIB)
8191
endif()
8292
endif()
8393

84-
# Get the sources together
85-
file(GLOB raylib_sources *.c)
86-
file(GLOB stb_vorbis external/stb_vorbis.c)
87-
file(GLOB mini_al external/mini_al.c ${stb_vorbis})
88-
set(sources ${raylib_sources} ${mini_al})
89-
9094
# Which platform?
9195
if(${PLATFORM} MATCHES "PLATFORM_DESKTOP")
9296

93-
foreach(L ${LIBS_PRIVATE})
94-
get_filename_component(DIR ${L} PATH)
95-
get_filename_component(LIBFILE ${L} NAME_WE)
96-
STRING(REGEX REPLACE "^lib" "" FILE ${LIBFILE})
97-
98-
if (${L} MATCHES "[.]framework$")
99-
set(FILE_OPT "-framework ${FILE}")
100-
set(DIR_OPT "-F${DIR} ")
101-
else()
102-
set(FILE_OPT "-l${FILE}")
103-
set(DIR_OPT "-L${DIR} ")
104-
endif()
105-
106-
if ("${DIR}" STREQUAL "" OR "${DIR}" STREQUAL "${LASTDIR}")
107-
set (DIR_OPT "")
108-
endif()
109-
110-
set(LASTDIR ${DIR})
111-
112-
set(PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE} ${DIR_OPT}${FILE_OPT}")
113-
endforeach(L)
114-
115-
11697
if(${SHARED_RAYLIB})
11798
add_library(${RAYLIB}_shared SHARED ${sources})
11899

utils.cmake

+44-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# All sorts of things that we need cross project
22
cmake_minimum_required(VERSION 2.8.0)
33

4+
set(WITH_SYSTEM_GLFW OFF CACHE STRING "Link raylib against system GLFW instead of embedded one")
5+
set_property(CACHE WITH_SYSTEM_GLFW PROPERTY STRINGS ON OFF IF_POSSIBLE)
6+
47
# Linking for OS X -framework options
58
# Will do nothing on other OSes
69
if(APPLE)
@@ -27,24 +30,59 @@ else()
2730
find_library(XINERAMA_LIBRARY Xinerama)
2831
find_library(XXF86VM_LIBRARY Xxf86vm)
2932
find_library(XCURSOR_LIBRARY Xcursor)
30-
3133
include_directories(${OPENGL_INCLUDE_DIR})
3234

3335
set(LIBS_PRIVATE m ${pthread} ${OPENGL_LIBRARIES} ${X11_LIBRARIES} ${XRANDR_LIBRARY} ${XINERAMA_LIBRARY} ${XI_LIBRARY} ${XXF86VM_LIBRARY} ${XCURSOR_LIBRARY})
3436
endif()
3537
endif()
3638

39+
if(WITH_SYSTEM_GLFW STREQUAL "ON")
40+
find_package(glfw3 3.2.1 REQUIRED)
41+
else(WITH_SYSTEM_GLFW STREQUAL "IF_POSSIBLE")
42+
find_package(glfw3 3.2.1)
43+
endif()
44+
if (glfw3_FOUND)
45+
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
46+
endif()
47+
48+
3749
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
3850
set(LINUX TRUE)
3951
set(LIBS_PRIVATE dl ${LIBS_PRIVATE})
4052
endif()
4153

54+
foreach(L ${LIBS_PRIVATE})
55+
get_filename_component(DIR ${L} PATH)
56+
get_filename_component(LIBFILE ${L} NAME_WE)
57+
STRING(REGEX REPLACE "^lib" "" FILE ${LIBFILE})
58+
59+
if (${L} MATCHES "[.]framework$")
60+
set(FILE_OPT "-framework ${FILE}")
61+
set(DIR_OPT "-F${DIR}")
62+
else()
63+
set(FILE_OPT "-l${FILE}")
64+
set(DIR_OPT "-L${DIR}")
65+
endif()
66+
67+
if ("${DIR}" STREQUAL "" OR "${DIR}" STREQUAL "${LASTDIR}")
68+
set (DIR_OPT "")
69+
endif()
70+
71+
set(LASTDIR ${DIR})
72+
73+
set(PKG_CONFIG_LIBS_PRIVATE ${PKG_CONFIG_LIBS_PRIVATE} ${DIR_OPT} ${FILE_OPT})
74+
string (REPLACE ";" " " PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE}")
75+
endforeach(L)
76+
77+
78+
4279
# Do the linking for executables that are meant to link raylib
4380
function(link_libraries_to_executable executable)
44-
# And raylib
45-
target_link_libraries(${executable} raylib)
46-
47-
# Link the libraries
48-
target_link_libraries(${executable} ${LIBS_PRIVATE})
81+
# Link raylib
82+
if (TARGET raylib_shared)
83+
target_link_libraries(${executable} raylib_shared)
84+
else()
85+
target_link_libraries(${executable} raylib ${PKG_CONFIG_LIBS_PRIVATE})
86+
endif()
4987
endfunction()
5088

0 commit comments

Comments
 (0)