Skip to content

Commit

Permalink
cmake: refactor and fix zmq & protobuf (#170)
Browse files Browse the repository at this point in the history
* Fix building ZMQ manually if not found

* Fix protobuf on DLAMI
  • Loading branch information
leezu committed Feb 29, 2020
1 parent d0c1744 commit 34fd45c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 165 deletions.
61 changes: 45 additions & 16 deletions CMakeLists.txt
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.4)

project(pslite C CXX)
set(CMAKE_CXX_STANDARD 11)
Expand All @@ -8,31 +8,58 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)

add_library(pslite)

if(POLICY CMP0074) # Support Protobuf_ROOT etc environment variables on CMake 3.12+
cmake_policy(SET CMP0074 NEW)
endif()

# ---[ zmq
include("cmake/External/zmq.cmake")
target_include_directories(pslite PRIVATE ${ZMQ_INCLUDE_DIRS})
target_link_libraries(pslite PUBLIC ${ZMQ_LIBRARIES})
find_package(ZMQ)
if(NOT ZMQ_FOUND)
cmake_minimum_required(VERSION 3.11)
include(FetchContent)
FetchContent_Declare(zmq
URL https://github.com/zeromq/libzmq/releases/download/v4.3.2/zeromq-4.3.2.zip
URL_HASH SHA256=d01517983ded9ff1b6c40f8206fc2b44ac96157a5aea7b974e8b0079547edfda)
FetchContent_GetProperties(zmq)
if(NOT zmq_POPULATED)
FetchContent_Populate(zmq)
if(POLICY CMP0077) # Avoid building shared library and tests on CMake 3.13+
cmake_policy(SET CMP0077 NEW)
set(BUILD_SHARED OFF CACHE BOOL "")
set(BUILD_TESTS OFF CACHE BOOL "")
endif()
add_subdirectory(${zmq_SOURCE_DIR} ${zmq_BINARY_DIR})
endif()
target_link_libraries(pslite PUBLIC libzmq-static)
else()
target_include_directories(pslite PRIVATE ${ZMQ_INCLUDE_DIRS})
target_link_libraries(pslite PUBLIC ${ZMQ_LIBRARIES})
endif()

# ---[ Google-protobuf
include(cmake/ProtoBuf.cmake)
# Workaround broken DLAMI. DLAMI ships a broken protoc at /home/ubuntu/anaconda3/bin
# https://docs.aws.amazon.com/dlami/latest/devguide/overview-base.html
set(CMAKE_IGNORE_PATH "/home/ubuntu/anaconda3/bin")
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
find_package(Protobuf REQUIRED)
target_link_libraries(pslite PUBLIC ${PROTOBUF_LIBRARY})
target_include_directories(pslite PUBLIC ${PROTOBUF_INCLUDE_DIR})

FILE(GLOB SOURCE "src/*.cc")
# Generate protobuf headers and sources
file(GLOB_RECURSE PROTO_FILES "src/*.proto")
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
target_sources(pslite PRIVATE ${PROTO_SRCS})
target_include_directories(pslite PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) # PROTO_HDRS files are here

# generate protobuf sources
set(proto_gen_folder "${PROJECT_BINARY_DIR}/src")
file(GLOB_RECURSE proto_files "src/*.proto")
pslite_protobuf_generate_cpp_py(${proto_gen_folder} proto_srcs proto_hdrs proto_python "${PROJECT_SOURCE_DIR}" "src" ${proto_files})
list(APPEND SOURCE ${proto_srcs})

target_include_directories(pslite PUBLIC "${PROJECT_SOURCE_DIR}/include/")
target_include_directories(pslite PUBLIC "${PROJECT_BINARY_DIR}/include/")
target_include_directories(pslite PRIVATE "${PROJECT_BINARY_DIR}/src/")
# Generate protobuf python interface
protobuf_generate_python(PROTO_PYS ${PROTO_FILES})
add_custom_target(proto_python ALL DEPENDS ${PROTO_PYS})
add_dependencies(pslite proto_python)

if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
FILE(GLOB getopt_SOURCE "src/windows/getopt.c")
list(APPEND SOURCE ${getopt_SOURCE})
target_sources(pslite PRIVATE ${getopt_SOURCE})
add_definitions(-DSTATIC_GETOPT)
target_include_directories(pslite PRIVATE "${PROJECT_SOURCE_DIR}/src/windows")
target_link_libraries(pslite PUBLIC "ipHlpApi.lib" "ws2_32.lib")
Expand All @@ -45,4 +72,6 @@ if(MSVC)
endforeach(flag_var)
endif()

file(GLOB_RECURSE SOURCE "src/*.cc")
target_include_directories(pslite PUBLIC "${PROJECT_SOURCE_DIR}/include/")
target_sources(pslite PRIVATE ${SOURCE})
63 changes: 0 additions & 63 deletions cmake/External/zmq.cmake

This file was deleted.

86 changes: 0 additions & 86 deletions cmake/ProtoBuf.cmake

This file was deleted.

0 comments on commit 34fd45c

Please sign in to comment.