xref: /aosp_15_r20/external/libevent/cmake/AddEventLibrary.cmake (revision 663afb9b963571284e0f0a60f257164ab54f64bf)
1*663afb9bSAndroid Build Coastguard Workerinclude(CMakeParseArguments)
2*663afb9bSAndroid Build Coastguard Worker
3*663afb9bSAndroid Build Coastguard Workerset(LIBEVENT_SHARED_LIBRARIES "")
4*663afb9bSAndroid Build Coastguard Workerset(LIBEVENT_STATIC_LIBRARIES "")
5*663afb9bSAndroid Build Coastguard Worker
6*663afb9bSAndroid Build Coastguard Workermacro(set_event_shared_lib_flags LIB_NAME)
7*663afb9bSAndroid Build Coastguard Worker    set_target_properties("${LIB_NAME}_shared" PROPERTIES
8*663afb9bSAndroid Build Coastguard Worker        COMPILE_FLAGS ${ARGN})
9*663afb9bSAndroid Build Coastguard Worker    set_target_properties("${LIB_NAME}_shared" PROPERTIES
10*663afb9bSAndroid Build Coastguard Worker        LINK_FLAGS ${ARGN})
11*663afb9bSAndroid Build Coastguard Workerendmacro()
12*663afb9bSAndroid Build Coastguard Worker
13*663afb9bSAndroid Build Coastguard Workermacro(generate_pkgconfig LIB_NAME)
14*663afb9bSAndroid Build Coastguard Worker    set(prefix      ${CMAKE_INSTALL_PREFIX})
15*663afb9bSAndroid Build Coastguard Worker    set(exec_prefix ${CMAKE_INSTALL_PREFIX})
16*663afb9bSAndroid Build Coastguard Worker    set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
17*663afb9bSAndroid Build Coastguard Worker    set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
18*663afb9bSAndroid Build Coastguard Worker
19*663afb9bSAndroid Build Coastguard Worker    set(VERSION ${EVENT_ABI_LIBVERSION})
20*663afb9bSAndroid Build Coastguard Worker
21*663afb9bSAndroid Build Coastguard Worker    set(LIBS         "")
22*663afb9bSAndroid Build Coastguard Worker    foreach (LIB ${LIB_PLATFORM})
23*663afb9bSAndroid Build Coastguard Worker        set(LIBS "${LIBS} -L${LIB}")
24*663afb9bSAndroid Build Coastguard Worker    endforeach()
25*663afb9bSAndroid Build Coastguard Worker
26*663afb9bSAndroid Build Coastguard Worker    set(OPENSSL_LIBS "")
27*663afb9bSAndroid Build Coastguard Worker    foreach(LIB ${OPENSSL_LIBRARIES})
28*663afb9bSAndroid Build Coastguard Worker        set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}")
29*663afb9bSAndroid Build Coastguard Worker    endforeach()
30*663afb9bSAndroid Build Coastguard Worker
31*663afb9bSAndroid Build Coastguard Worker    configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY)
32*663afb9bSAndroid Build Coastguard Worker    install(
33*663afb9bSAndroid Build Coastguard Worker        FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc"
34*663afb9bSAndroid Build Coastguard Worker        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig"
35*663afb9bSAndroid Build Coastguard Worker    )
36*663afb9bSAndroid Build Coastguard Workerendmacro()
37*663afb9bSAndroid Build Coastguard Worker
38*663afb9bSAndroid Build Coastguard Worker# LIB_NAME maybe event_core, event_extra, event_openssl, event_pthreads or event.
39*663afb9bSAndroid Build Coastguard Worker# Targets whose LIB_NAME is not 'event' should be exported and installed.
40*663afb9bSAndroid Build Coastguard Workermacro(export_install_target TYPE LIB_NAME OUTER_INCLUDES)
41*663afb9bSAndroid Build Coastguard Worker    if("${LIB_NAME}" STREQUAL "event")
42*663afb9bSAndroid Build Coastguard Worker        install(TARGETS "${LIB_NAME}_${TYPE}"
43*663afb9bSAndroid Build Coastguard Worker            LIBRARY DESTINATION "lib" COMPONENT lib
44*663afb9bSAndroid Build Coastguard Worker            ARCHIVE DESTINATION "lib" COMPONENT lib
45*663afb9bSAndroid Build Coastguard Worker            RUNTIME DESTINATION "lib" COMPONENT lib
46*663afb9bSAndroid Build Coastguard Worker            COMPONENT dev
47*663afb9bSAndroid Build Coastguard Worker        )
48*663afb9bSAndroid Build Coastguard Worker    else()
49*663afb9bSAndroid Build Coastguard Worker        string(REPLACE "event_" "" PURE_NAME ${LIB_NAME})
50*663afb9bSAndroid Build Coastguard Worker        string(TOUPPER ${TYPE} UPPER_TYPE)
51*663afb9bSAndroid Build Coastguard Worker        list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}")
52*663afb9bSAndroid Build Coastguard Worker        set(OUTER_INCS)
53*663afb9bSAndroid Build Coastguard Worker        if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE")
54*663afb9bSAndroid Build Coastguard Worker            set(OUTER_INCS ${OUTER_INCLUDES})
55*663afb9bSAndroid Build Coastguard Worker        endif()
56*663afb9bSAndroid Build Coastguard Worker        target_include_directories("${LIB_NAME}_${TYPE}"
57*663afb9bSAndroid Build Coastguard Worker            PUBLIC  "$<INSTALL_INTERFACE:include>"
58*663afb9bSAndroid Build Coastguard Worker                    "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
59*663afb9bSAndroid Build Coastguard Worker                    "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>"
60*663afb9bSAndroid Build Coastguard Worker                    ${OUTER_INCS}
61*663afb9bSAndroid Build Coastguard Worker        )
62*663afb9bSAndroid Build Coastguard Worker        set_target_properties("${LIB_NAME}_${TYPE}" PROPERTIES EXPORT_NAME ${PURE_NAME})
63*663afb9bSAndroid Build Coastguard Worker        export(TARGETS "${LIB_NAME}_${TYPE}"
64*663afb9bSAndroid Build Coastguard Worker            NAMESPACE ${PROJECT_NAME}::
65*663afb9bSAndroid Build Coastguard Worker            FILE "${PROJECT_BINARY_DIR}/LibeventTargets-${TYPE}.cmake"
66*663afb9bSAndroid Build Coastguard Worker            APPEND
67*663afb9bSAndroid Build Coastguard Worker        )
68*663afb9bSAndroid Build Coastguard Worker        install(TARGETS "${LIB_NAME}_${TYPE}"
69*663afb9bSAndroid Build Coastguard Worker            EXPORT LibeventTargets-${TYPE}
70*663afb9bSAndroid Build Coastguard Worker            LIBRARY DESTINATION "lib" COMPONENT lib
71*663afb9bSAndroid Build Coastguard Worker            ARCHIVE DESTINATION "lib" COMPONENT lib
72*663afb9bSAndroid Build Coastguard Worker            RUNTIME DESTINATION "lib" COMPONENT lib
73*663afb9bSAndroid Build Coastguard Worker            COMPONENT dev
74*663afb9bSAndroid Build Coastguard Worker        )
75*663afb9bSAndroid Build Coastguard Worker    endif()
76*663afb9bSAndroid Build Coastguard Workerendmacro()
77*663afb9bSAndroid Build Coastguard Worker
78*663afb9bSAndroid Build Coastguard Worker# Global variables that it uses:
79*663afb9bSAndroid Build Coastguard Worker# - EVENT_ABI_LIBVERSION
80*663afb9bSAndroid Build Coastguard Worker# - EVENT_ABI_LIBVERSION_CURRENT
81*663afb9bSAndroid Build Coastguard Worker# - EVENT_ABI_LIBVERSION_REVISION
82*663afb9bSAndroid Build Coastguard Worker# - EVENT_ABI_LIBVERSION_AGE
83*663afb9bSAndroid Build Coastguard Worker# - EVENT_PACKAGE_RELEASE
84*663afb9bSAndroid Build Coastguard Worker# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
85*663afb9bSAndroid Build Coastguard Worker# - OPENSSL_LIBRARIES
86*663afb9bSAndroid Build Coastguard Worker# - EVENT_SHARED_FLAGS
87*663afb9bSAndroid Build Coastguard Worker# - EVENT_LIBRARY_STATIC
88*663afb9bSAndroid Build Coastguard Worker# - EVENT_LIBRARY_SHARED
89*663afb9bSAndroid Build Coastguard Worker#
90*663afb9bSAndroid Build Coastguard Worker# Exported variables:
91*663afb9bSAndroid Build Coastguard Worker# - LIBEVENT_SHARED_LIBRARIES
92*663afb9bSAndroid Build Coastguard Worker# - LIBEVENT_STATIC_LIBRARIES
93*663afb9bSAndroid Build Coastguard Workermacro(add_event_library LIB_NAME)
94*663afb9bSAndroid Build Coastguard Worker    cmake_parse_arguments(LIB
95*663afb9bSAndroid Build Coastguard Worker        "" # Options
96*663afb9bSAndroid Build Coastguard Worker        "VERSION" # One val
97*663afb9bSAndroid Build Coastguard Worker        "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val
98*663afb9bSAndroid Build Coastguard Worker        ${ARGN}
99*663afb9bSAndroid Build Coastguard Worker    )
100*663afb9bSAndroid Build Coastguard Worker
101*663afb9bSAndroid Build Coastguard Worker    if ("${LIB_OUTER_INCLUDES}" STREQUAL "")
102*663afb9bSAndroid Build Coastguard Worker        set(LIB_OUTER_INCLUDES NONE)
103*663afb9bSAndroid Build Coastguard Worker    endif()
104*663afb9bSAndroid Build Coastguard Worker    set(ADD_EVENT_LIBRARY_INTERFACE)
105*663afb9bSAndroid Build Coastguard Worker
106*663afb9bSAndroid Build Coastguard Worker    if (${EVENT_LIBRARY_STATIC})
107*663afb9bSAndroid Build Coastguard Worker        add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
108*663afb9bSAndroid Build Coastguard Worker        set_target_properties("${LIB_NAME}_static" PROPERTIES
109*663afb9bSAndroid Build Coastguard Worker            OUTPUT_NAME "${LIB_NAME}"
110*663afb9bSAndroid Build Coastguard Worker            CLEAN_DIRECT_OUTPUT 1)
111*663afb9bSAndroid Build Coastguard Worker
112*663afb9bSAndroid Build Coastguard Worker        if(LIB_INNER_LIBRARIES)
113*663afb9bSAndroid Build Coastguard Worker            set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static")
114*663afb9bSAndroid Build Coastguard Worker        endif()
115*663afb9bSAndroid Build Coastguard Worker        target_link_libraries("${LIB_NAME}_static"
116*663afb9bSAndroid Build Coastguard Worker            ${CMAKE_THREAD_LIBS_INIT}
117*663afb9bSAndroid Build Coastguard Worker            ${LIB_PLATFORM}
118*663afb9bSAndroid Build Coastguard Worker            ${INNER_LIBRARIES}
119*663afb9bSAndroid Build Coastguard Worker            ${LIB_LIBRARIES})
120*663afb9bSAndroid Build Coastguard Worker
121*663afb9bSAndroid Build Coastguard Worker        export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
122*663afb9bSAndroid Build Coastguard Worker
123*663afb9bSAndroid Build Coastguard Worker        set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static")
124*663afb9bSAndroid Build Coastguard Worker    endif()
125*663afb9bSAndroid Build Coastguard Worker
126*663afb9bSAndroid Build Coastguard Worker    if (${EVENT_LIBRARY_SHARED})
127*663afb9bSAndroid Build Coastguard Worker        add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
128*663afb9bSAndroid Build Coastguard Worker
129*663afb9bSAndroid Build Coastguard Worker        if(LIB_INNER_LIBRARIES)
130*663afb9bSAndroid Build Coastguard Worker            set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared")
131*663afb9bSAndroid Build Coastguard Worker        endif()
132*663afb9bSAndroid Build Coastguard Worker        target_link_libraries("${LIB_NAME}_shared"
133*663afb9bSAndroid Build Coastguard Worker            ${CMAKE_THREAD_LIBS_INIT}
134*663afb9bSAndroid Build Coastguard Worker            ${LIB_PLATFORM}
135*663afb9bSAndroid Build Coastguard Worker            ${INNER_LIBRARIES}
136*663afb9bSAndroid Build Coastguard Worker            ${LIB_LIBRARIES})
137*663afb9bSAndroid Build Coastguard Worker
138*663afb9bSAndroid Build Coastguard Worker        if (EVENT_SHARED_FLAGS)
139*663afb9bSAndroid Build Coastguard Worker            set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
140*663afb9bSAndroid Build Coastguard Worker        endif()
141*663afb9bSAndroid Build Coastguard Worker
142*663afb9bSAndroid Build Coastguard Worker        if (WIN32)
143*663afb9bSAndroid Build Coastguard Worker            set_target_properties(
144*663afb9bSAndroid Build Coastguard Worker                "${LIB_NAME}_shared" PROPERTIES
145*663afb9bSAndroid Build Coastguard Worker                OUTPUT_NAME "${LIB_NAME}"
146*663afb9bSAndroid Build Coastguard Worker                SOVERSION ${EVENT_ABI_LIBVERSION})
147*663afb9bSAndroid Build Coastguard Worker        elseif (APPLE)
148*663afb9bSAndroid Build Coastguard Worker            math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1")
149*663afb9bSAndroid Build Coastguard Worker            math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
150*663afb9bSAndroid Build Coastguard Worker            set_target_properties(
151*663afb9bSAndroid Build Coastguard Worker                "${LIB_NAME}_shared" PROPERTIES
152*663afb9bSAndroid Build Coastguard Worker                OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}"
153*663afb9bSAndroid Build Coastguard Worker                INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
154*663afb9bSAndroid Build Coastguard Worker                LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}")
155*663afb9bSAndroid Build Coastguard Worker        else()
156*663afb9bSAndroid Build Coastguard Worker            math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
157*663afb9bSAndroid Build Coastguard Worker            set_target_properties(
158*663afb9bSAndroid Build Coastguard Worker                "${LIB_NAME}_shared" PROPERTIES
159*663afb9bSAndroid Build Coastguard Worker                OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}"
160*663afb9bSAndroid Build Coastguard Worker                VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}"
161*663afb9bSAndroid Build Coastguard Worker                SOVERSION "${CURRENT_MINUS_AGE}"
162*663afb9bSAndroid Build Coastguard Worker                INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
163*663afb9bSAndroid Build Coastguard Worker        endif()
164*663afb9bSAndroid Build Coastguard Worker
165*663afb9bSAndroid Build Coastguard Worker        if (NOT WIN32)
166*663afb9bSAndroid Build Coastguard Worker            set(LIB_LINK_NAME
167*663afb9bSAndroid Build Coastguard Worker                "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
168*663afb9bSAndroid Build Coastguard Worker
169*663afb9bSAndroid Build Coastguard Worker            add_custom_command(TARGET ${LIB_NAME}_shared
170*663afb9bSAndroid Build Coastguard Worker                POST_BUILD
171*663afb9bSAndroid Build Coastguard Worker                COMMAND ${CMAKE_COMMAND} -E create_symlink
172*663afb9bSAndroid Build Coastguard Worker                    "$<TARGET_FILE_NAME:${LIB_NAME}_shared>"
173*663afb9bSAndroid Build Coastguard Worker                    "${LIB_LINK_NAME}"
174*663afb9bSAndroid Build Coastguard Worker                WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
175*663afb9bSAndroid Build Coastguard Worker        endif()
176*663afb9bSAndroid Build Coastguard Worker
177*663afb9bSAndroid Build Coastguard Worker        export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
178*663afb9bSAndroid Build Coastguard Worker
179*663afb9bSAndroid Build Coastguard Worker        set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared")
180*663afb9bSAndroid Build Coastguard Worker
181*663afb9bSAndroid Build Coastguard Worker        if (NOT WIN32)
182*663afb9bSAndroid Build Coastguard Worker            install(FILES
183*663afb9bSAndroid Build Coastguard Worker                "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}"
184*663afb9bSAndroid Build Coastguard Worker                DESTINATION "lib"
185*663afb9bSAndroid Build Coastguard Worker                COMPONENT lib)
186*663afb9bSAndroid Build Coastguard Worker        endif()
187*663afb9bSAndroid Build Coastguard Worker    endif()
188*663afb9bSAndroid Build Coastguard Worker
189*663afb9bSAndroid Build Coastguard Worker    add_library(${LIB_NAME} INTERFACE)
190*663afb9bSAndroid Build Coastguard Worker    target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE})
191*663afb9bSAndroid Build Coastguard Worker
192*663afb9bSAndroid Build Coastguard Worker    generate_pkgconfig("${LIB_NAME}")
193*663afb9bSAndroid Build Coastguard Workerendmacro()
194