xref: /aosp_15_r20/external/nanopb-c/CMakeLists.txt (revision c8d645cafcee3f91213d30caa0fe303887010b9b)
1*c8d645caSAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12)
2*c8d645caSAndroid Build Coastguard Worker
3*c8d645caSAndroid Build Coastguard Workerproject(nanopb C)
4*c8d645caSAndroid Build Coastguard Worker
5*c8d645caSAndroid Build Coastguard Workerset(nanopb_VERSION_STRING nanopb-0.3.9.8)
6*c8d645caSAndroid Build Coastguard Workerset(nanopb_SOVERSION 0)
7*c8d645caSAndroid Build Coastguard Worker
8*c8d645caSAndroid Build Coastguard Workerstring(REPLACE "nanopb-" "" nanopb_VERSION ${nanopb_VERSION_STRING})
9*c8d645caSAndroid Build Coastguard Worker
10*c8d645caSAndroid Build Coastguard Workeroption(BUILD_SHARED_LIBS "Build shared libraries" OFF)
11*c8d645caSAndroid Build Coastguard Workeroption(BUILD_STATIC_LIBS "Build static libraries" ON)
12*c8d645caSAndroid Build Coastguard Worker
13*c8d645caSAndroid Build Coastguard Workeroption(nanopb_BUILD_RUNTIME "Build the headers and libraries needed at runtime" ON)
14*c8d645caSAndroid Build Coastguard Workeroption(nanopb_BUILD_GENERATOR "Build the protoc plugin for code generation" ON)
15*c8d645caSAndroid Build Coastguard Workeroption(nanopb_MSVC_STATIC_RUNTIME "Link static runtime libraries" ON)
16*c8d645caSAndroid Build Coastguard Worker
17*c8d645caSAndroid Build Coastguard Workerif(NOT DEFINED nanopb_PROTOC_PATH)
18*c8d645caSAndroid Build Coastguard Worker    set(nanopb_PROTOC_PATH "protoc")
19*c8d645caSAndroid Build Coastguard Workerendif()
20*c8d645caSAndroid Build Coastguard Worker
21*c8d645caSAndroid Build Coastguard Workerif(NOT DEFINED CMAKE_DEBUG_POSTFIX)
22*c8d645caSAndroid Build Coastguard Worker    set(CMAKE_DEBUG_POSTFIX "d")
23*c8d645caSAndroid Build Coastguard Workerendif()
24*c8d645caSAndroid Build Coastguard Worker
25*c8d645caSAndroid Build Coastguard Workerinclude(GNUInstallDirs)
26*c8d645caSAndroid Build Coastguard Worker
27*c8d645caSAndroid Build Coastguard Workerif(MSVC AND nanopb_MSVC_STATIC_RUNTIME)
28*c8d645caSAndroid Build Coastguard Worker    foreach(flag_var
29*c8d645caSAndroid Build Coastguard Worker            CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
30*c8d645caSAndroid Build Coastguard Worker            CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
31*c8d645caSAndroid Build Coastguard Worker        if(${flag_var} MATCHES "/MD")
32*c8d645caSAndroid Build Coastguard Worker            string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
33*c8d645caSAndroid Build Coastguard Worker        endif(${flag_var} MATCHES "/MD")
34*c8d645caSAndroid Build Coastguard Worker    endforeach(flag_var)
35*c8d645caSAndroid Build Coastguard Workerendif()
36*c8d645caSAndroid Build Coastguard Worker
37*c8d645caSAndroid Build Coastguard Workerif(NOT DEFINED CMAKE_INSTALL_CMAKEDIR)
38*c8d645caSAndroid Build Coastguard Worker    set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
39*c8d645caSAndroid Build Coastguard Workerendif()
40*c8d645caSAndroid Build Coastguard Worker
41*c8d645caSAndroid Build Coastguard Workerif(nanopb_BUILD_GENERATOR)
42*c8d645caSAndroid Build Coastguard Worker    set(generator_protos nanopb plugin)
43*c8d645caSAndroid Build Coastguard Worker
44*c8d645caSAndroid Build Coastguard Worker    find_package(PythonInterp 2.7 REQUIRED)
45*c8d645caSAndroid Build Coastguard Worker    execute_process(
46*c8d645caSAndroid Build Coastguard Worker        COMMAND ${PYTHON_EXECUTABLE} -c
47*c8d645caSAndroid Build Coastguard Worker            "from distutils import sysconfig; print(sysconfig.get_python_lib(prefix=''))"
48*c8d645caSAndroid Build Coastguard Worker        OUTPUT_VARIABLE PYTHON_INSTDIR
49*c8d645caSAndroid Build Coastguard Worker        OUTPUT_STRIP_TRAILING_WHITESPACE
50*c8d645caSAndroid Build Coastguard Worker    )
51*c8d645caSAndroid Build Coastguard Worker
52*c8d645caSAndroid Build Coastguard Worker    foreach(generator_proto IN LISTS generator_protos)
53*c8d645caSAndroid Build Coastguard Worker        string(REGEX REPLACE "([^;]+)" "${PROJECT_SOURCE_DIR}/generator/proto/\\1.proto" generator_proto_file "${generator_proto}")
54*c8d645caSAndroid Build Coastguard Worker        string(REGEX REPLACE "([^;]+)" "\\1_pb2.py" generator_proto_py_file "${generator_proto}")
55*c8d645caSAndroid Build Coastguard Worker        add_custom_command(
56*c8d645caSAndroid Build Coastguard Worker            OUTPUT ${generator_proto_py_file}
57*c8d645caSAndroid Build Coastguard Worker            COMMAND ${nanopb_PROTOC_PATH} --python_out=${PROJECT_BINARY_DIR} -I${PROJECT_SOURCE_DIR}/generator/proto ${generator_proto_file}
58*c8d645caSAndroid Build Coastguard Worker            DEPENDS ${generator_proto_file}
59*c8d645caSAndroid Build Coastguard Worker        )
60*c8d645caSAndroid Build Coastguard Worker        add_custom_target("generate_${generator_proto_py_file}" ALL DEPENDS ${generator_proto_py_file})
61*c8d645caSAndroid Build Coastguard Worker        install(
62*c8d645caSAndroid Build Coastguard Worker            FILES ${PROJECT_BINARY_DIR}/${generator_proto_py_file}
63*c8d645caSAndroid Build Coastguard Worker			DESTINATION ${PYTHON_INSTDIR}
64*c8d645caSAndroid Build Coastguard Worker        )
65*c8d645caSAndroid Build Coastguard Worker    endforeach()
66*c8d645caSAndroid Build Coastguard Workerendif()
67*c8d645caSAndroid Build Coastguard Worker
68*c8d645caSAndroid Build Coastguard Workerif(nanopb_BUILD_RUNTIME)
69*c8d645caSAndroid Build Coastguard Worker    if(BUILD_SHARED_LIBS)
70*c8d645caSAndroid Build Coastguard Worker	add_library(protobuf-nanopb SHARED
71*c8d645caSAndroid Build Coastguard Worker            pb.h
72*c8d645caSAndroid Build Coastguard Worker            pb_common.h
73*c8d645caSAndroid Build Coastguard Worker            pb_common.c
74*c8d645caSAndroid Build Coastguard Worker            pb_encode.h
75*c8d645caSAndroid Build Coastguard Worker            pb_encode.c
76*c8d645caSAndroid Build Coastguard Worker            pb_decode.h
77*c8d645caSAndroid Build Coastguard Worker            pb_decode.c)
78*c8d645caSAndroid Build Coastguard Worker        set_target_properties(protobuf-nanopb PROPERTIES
79*c8d645caSAndroid Build Coastguard Worker            SOVERSION ${nanopb_SOVERSION})
80*c8d645caSAndroid Build Coastguard Worker        install(TARGETS protobuf-nanopb EXPORT nanopb-targets
81*c8d645caSAndroid Build Coastguard Worker            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
82*c8d645caSAndroid Build Coastguard Worker	    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
83*c8d645caSAndroid Build Coastguard Worker        target_include_directories(protobuf-nanopb INTERFACE
84*c8d645caSAndroid Build Coastguard Worker          $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
85*c8d645caSAndroid Build Coastguard Worker        )
86*c8d645caSAndroid Build Coastguard Worker    endif()
87*c8d645caSAndroid Build Coastguard Worker
88*c8d645caSAndroid Build Coastguard Worker    if(BUILD_STATIC_LIBS)
89*c8d645caSAndroid Build Coastguard Worker        add_library(protobuf-nanopb-static STATIC
90*c8d645caSAndroid Build Coastguard Worker            pb.h
91*c8d645caSAndroid Build Coastguard Worker            pb_common.h
92*c8d645caSAndroid Build Coastguard Worker            pb_common.c
93*c8d645caSAndroid Build Coastguard Worker            pb_encode.h
94*c8d645caSAndroid Build Coastguard Worker            pb_encode.c
95*c8d645caSAndroid Build Coastguard Worker            pb_decode.h
96*c8d645caSAndroid Build Coastguard Worker            pb_decode.c)
97*c8d645caSAndroid Build Coastguard Worker        set_target_properties(protobuf-nanopb-static PROPERTIES
98*c8d645caSAndroid Build Coastguard Worker            OUTPUT_NAME protobuf-nanopb)
99*c8d645caSAndroid Build Coastguard Worker        install(TARGETS protobuf-nanopb-static EXPORT nanopb-targets
100*c8d645caSAndroid Build Coastguard Worker            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
101*c8d645caSAndroid Build Coastguard Worker        target_include_directories(protobuf-nanopb-static INTERFACE
102*c8d645caSAndroid Build Coastguard Worker          $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
103*c8d645caSAndroid Build Coastguard Worker        )
104*c8d645caSAndroid Build Coastguard Worker    endif()
105*c8d645caSAndroid Build Coastguard Worker
106*c8d645caSAndroid Build Coastguard Worker    configure_file(extra/nanopb-config-version.cmake.in
107*c8d645caSAndroid Build Coastguard Worker        nanopb-config-version.cmake @ONLY)
108*c8d645caSAndroid Build Coastguard Worker
109*c8d645caSAndroid Build Coastguard Worker    install(EXPORT nanopb-targets
110*c8d645caSAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
111*c8d645caSAndroid Build Coastguard Worker        NAMESPACE nanopb::)
112*c8d645caSAndroid Build Coastguard Worker
113*c8d645caSAndroid Build Coastguard Worker    install(FILES extra/nanopb-config.cmake
114*c8d645caSAndroid Build Coastguard Worker        ${CMAKE_CURRENT_BINARY_DIR}/nanopb-config-version.cmake
115*c8d645caSAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_CMAKEDIR})
116*c8d645caSAndroid Build Coastguard Worker
117*c8d645caSAndroid Build Coastguard Worker    install(FILES pb.h pb_common.h pb_encode.h pb_decode.h
118*c8d645caSAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
119*c8d645caSAndroid Build Coastguard Workerendif()
120