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