summaryrefslogtreecommitdiff
path: root/src/CMakeLists.txt
blob: 9fdf7a83d7bd9e9975035433f1abc38d83755209 (plain)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
set (EPOXY_APIS gl egl wgl glx)
if (EPOXY_REBUILD_FROM_SPECS)
    set (EPOXY_GENERATED_FILES "")
    foreach (EPOXY_API ${EPOXY_APIS})
        set (EPOXY_API_GENERATED_FILES
          "${CMAKE_CURRENT_BINARY_DIR}/${EPOXY_API}_generated_dispatch.c"
          "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/${EPOXY_API}_generated.h")
        list (APPEND EPOXY_GENERATED_FILES ${EPOXY_API_GENERATED_FILES})
        add_custom_command (
          OUTPUT ${EPOXY_API_GENERATED_FILES}
          COMMAND "${PYTHON_EXECUTABLE}"
            "${CMAKE_CURRENT_SOURCE_DIR}/gen_dispatch.py" --dir ..
            "${CMAKE_CURRENT_SOURCE_DIR}/../registry/${EPOXY_API}.xml"
          MAIN_DEPENDENCY
            "../registry/${EPOXY_API}.xml"
          DEPENDS
            gen_dispatch.py)
    endforeach ()
    add_custom_target (epoxy_generated ALL SOURCES ${EPOXY_GENERATED_FILES})
else ()
    foreach (EPOXY_API ${EPOXY_APIS})
        add_custom_command (
          OUTPUT
            "${EPOXY_API}_generated_dispatch.c"
          COMMAND "${CMAKE_COMMAND}" -E copy
            "${CMAKE_CURRENT_SOURCE_DIR}/${EPOXY_API}_pregenerated_dispatch.c"
            "${CMAKE_CURRENT_BINARY_DIR}/${EPOXY_API}_generated_dispatch.c"
          MAIN_DEPENDENCY
            "${CMAKE_CURRENT_SOURCE_DIR}/${EPOXY_API}_pregenerated_dispatch.c")
        add_custom_command (
          OUTPUT
            "../include/epoxy/${EPOXY_API}_generated.h"
          COMMAND "${CMAKE_COMMAND}" -E copy
            "${CMAKE_CURRENT_SOURCE_DIR}/../include/epoxy/${EPOXY_API}_pregenerated.h"
            "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/${EPOXY_API}_generated.h"
          MAIN_DEPENDENCY
            "${CMAKE_CURRENT_SOURCE_DIR}/../include/epoxy/${EPOXY_API}_pregenerated.h")
    endforeach ()
endif ()

set (HEADERS "../include/epoxy/common.h"
             "../include/epoxy/gl.h"
             "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/gl_generated.h"
             "../include/epoxy/khrplatform.h")
set (SOURCES dispatch_common.c "${CMAKE_CURRENT_BINARY_DIR}/gl_generated_dispatch.c")
list (APPEND HEADERS "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/gl_generated.h"
                     "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/config.h")

if (EPOXY_SUPPORT_EGL)
    list (APPEND SOURCES dispatch_egl.c "${CMAKE_CURRENT_BINARY_DIR}/egl_generated_dispatch.c")
    list (APPEND HEADERS "../include/epoxy/egl.h"
                         "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/egl_generated.h"
                         "../include/epoxy/eglplatform.h")
endif ()
if (EPOXY_SUPPORT_GLX)
    list (APPEND SOURCES dispatch_glx.c "${CMAKE_CURRENT_BINARY_DIR}/glx_generated_dispatch.c")
    list (APPEND HEADERS "../include/epoxy/glx.h"
                         "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/glx_generated.h")
endif ()
if (EPOXY_SUPPORT_WGL)
    list (APPEND SOURCES dispatch_wgl.c "${CMAKE_CURRENT_BINARY_DIR}/wgl_generated_dispatch.c")
    list (APPEND HEADERS "../include/epoxy/wgl.h"
                         "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/wgl_generated.h")
endif ()

set (EPOXY_COMPILE_DEFS PRIVATE EPOXY_BUILDING_LIB)
if (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC)
    set (EPOXY_COMPILE_DEFS ${EPOXY_COMPILE_DEFS} "inline=__inline")
endif ()
set (EPOXY_TARGET_CODE ${SOURCES} ${HEADERS})

set (EPOXY_TARGETS_BUILT_NAMES "")

if (EPOXY_BUILD_SHARED)
    list (APPEND EPOXY_TARGETS_BUILT_NAMES "${EPOXY_TARGET_NAME}_shared")
    add_library ("${EPOXY_TARGET_NAME}_shared" SHARED ${EPOXY_TARGET_CODE})
    target_link_libraries ("${EPOXY_TARGET_NAME}_shared" ${CMAKE_DL_LIBS})
    if (WIN32 OR ANDROID)
        set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES
                               OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}")
    else ()
        set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES
                               OUTPUT_NAME "${TARGET_OUTPUT_NAME}")
    endif ()
    if (NOT ANDROID)
        set_target_properties("${EPOXY_TARGET_NAME}_shared" PROPERTIES
                              VERSION    "${TARGET_VER}"
                              SOVERSION  "${TARGET_ABI_VER}")
    endif ()
    target_include_directories ("${EPOXY_TARGET_NAME}_shared" PUBLIC ${EPOXY_INCLUDE_DIRS})
    target_compile_definitions ("${EPOXY_TARGET_NAME}_shared" PRIVATE ${EPOXY_COMPILE_DEFS})
    set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES C_VISIBILITY_PRESET hidden)
endif ()

if (EPOXY_BUILD_STATIC)
    list (APPEND EPOXY_TARGETS_BUILT_NAMES "${EPOXY_TARGET_NAME}_static")
    add_library ("${EPOXY_TARGET_NAME}_static" STATIC ${EPOXY_TARGET_CODE})
    target_link_libraries ("${EPOXY_TARGET_NAME}_static" ${CMAKE_DL_LIBS})
    if (WIN32)
        set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES
                               OUTPUT_NAME "${TARGET_OUTPUT_NAME}_static_${TARGET_ABI_VER}")
    else ()
        set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES
                               OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}")
    endif ()
    target_include_directories ("${EPOXY_TARGET_NAME}_static" PUBLIC ${EPOXY_INCLUDE_DIRS})
    target_compile_definitions ("${EPOXY_TARGET_NAME}_static" PRIVATE ${EPOXY_COMPILE_DEFS} EPOXY_STATIC_LIB)
    if (HONOR_VISIBILITY)
        set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES C_VISIBILITY_PRESET hidden)
    elseif ((CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_GCC) OR (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_CLANG))
        target_compile_options ("${EPOXY_TARGET_NAME}_static" PRIVATE "-fvisibility=hidden")
    endif ()
endif ()

install (FILES ${HEADERS} DESTINATION "include/epoxy")
install (TARGETS ${EPOXY_TARGETS_BUILT_NAMES}
           RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
           LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
           ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
if (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC)
    install (FILES "${CMAKE_CURRENT_BINARY_DIR}/Debug/${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}.pdb"
             DESTINATION lib  CONFIGURATIONS Debug)
endif ()