-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathdesktop.cmake
More file actions
85 lines (67 loc) · 3.08 KB
/
Copy pathdesktop.cmake
File metadata and controls
85 lines (67 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# examples.cmake
cmake_minimum_required(VERSION 3.14)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(DESKTOP_EXAMPLES_DIR ${CMAKE_CURRENT_LIST_DIR}/desktop)
# GLFW detection and setup
set(GLFW_AVAILABLE OFF)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(NOT GLFW_AVAILABLE)
find_package(glfw3 QUIET)
if(glfw3_FOUND)
set(GLFW_AVAILABLE ON)
set(GLFW_TARGET glfw)
endif()
endif()
if(NOT GLFW_AVAILABLE)
message(STATUS "ccap: GLFW not found on system. GLFW-dependent examples will be disabled.")
message(STATUS "ccap: Install GLFW with: sudo apt-get install libglfw3-dev (Ubuntu/Debian) or equivalent")
endif()
else()
# On non-Linux platforms, use bundled GLFW
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build GLFW example programs" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "Build GLFW test programs" FORCE)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "Build GLFW documentation" FORCE)
set(GLFW_INSTALL OFF CACHE BOOL "Generate installation target" FORCE)
add_subdirectory(${DESKTOP_EXAMPLES_DIR}/glfw)
set(GLFW_AVAILABLE ON)
set(GLFW_TARGET glfw)
message(STATUS "ccap: Using bundled GLFW")
endif()
message(STATUS "ccap: GLFW available: ${GLFW_AVAILABLE}")
add_library(common_utils STATIC ${DESKTOP_EXAMPLES_DIR}/utils/helper.cpp)
target_include_directories(common_utils PRIVATE ${DESKTOP_EXAMPLES_DIR}/utils)
target_link_libraries(common_utils PUBLIC ccap)
file(GLOB EXAMPLE_SOURCE ${DESKTOP_EXAMPLES_DIR}/*.cpp ${DESKTOP_EXAMPLES_DIR}/*.c)
foreach(EXAMPLE ${EXAMPLE_SOURCE})
get_filename_component(EXAMPLE_NAME ${EXAMPLE} NAME)
string(REGEX REPLACE "\\.(cpp|c)$" "" EXAMPLE_NAME ${EXAMPLE_NAME})
if(${EXAMPLE_NAME} MATCHES "glfw" AND NOT GLFW_AVAILABLE)
# Skip GLFW examples if GLFW is not available
continue()
endif()
add_executable(${EXAMPLE_NAME} ${EXAMPLE})
target_compile_definitions(${EXAMPLE_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS=1)
target_link_libraries(${EXAMPLE_NAME} PRIVATE common_utils)
if(APPLE)
target_link_options(${EXAMPLE_NAME} PRIVATE
"-sectcreate" "__TEXT" "__info_plist" "${CMAKE_CURRENT_LIST_DIR}/Info.plist"
)
endif()
# If NAME contains glfw, link glfw3 and optionally OpenGL
if(${EXAMPLE_NAME} MATCHES "glfw")
target_link_libraries(${EXAMPLE_NAME} PRIVATE ${GLFW_TARGET})
# On Linux, OpenGL functions are loaded dynamically via GLAD
# GLAD uses function pointers provided by GLFW (glfwGetProcAddress)
# No additional libraries needed for dynamic loading
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(APPLE)
target_link_libraries(${EXAMPLE_NAME} PRIVATE "-framework OpenGL")
endif()
target_include_directories(${EXAMPLE_NAME} PUBLIC ${DESKTOP_EXAMPLES_DIR}/glfw/include)
endif()
target_include_directories(${EXAMPLE_NAME} PUBLIC ${DESKTOP_EXAMPLES_DIR})
message(STATUS "ccap: Add example: ${EXAMPLE_NAME} with GLFW")
else()
message(STATUS "ccap: Add example: ${EXAMPLE_NAME}")
endif()
endforeach()