aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/third-party/CMakeLists.txt
blob: 25c6f7c20fae7c91557a02e18da4dc1bdf7b2022 (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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Copyright (c) 2021-2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set (THIRD_PARTY_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})

option(ENABLE_RELY "Enable download/build of rely library" OFF)

if (ENABLE_RELY)
  ##################################
  # Download librely

  if (INTERNAL_ENVIRONMENT)
    include(SetRelyGitRepo)
    SetRelyGitRepo()
  else()
    if(DEFINED ENV{GITHUB_USERNAME} AND DEFINED ENV{GITHUB_PASSWORD})
      set(GIT_REPO https://$ENV{GITHUB_USERNAME}:$ENV{GITHUB_PASSWORD}@github.com/steinwurf/rely.git)
    else()
      set(GIT_REPO ssh://github.com/steinwurf/rely.git)
    endif()
  endif()

  FetchContent_Declare(
    rely
    GIT_REPOSITORY ${GIT_REPO}
    GIT_TAG release/latest
    GIT_SHALLOW
    GIT_PROGRESS
    EXCLUDE_FROM_ALL
  )

  set(ENABLE_PIC ON)
  FetchContent_GetProperties(rely)
  if(NOT rely_POPULATED)
    pr("Download and build" "rely")
    FetchContent_Populate(rely)
    add_subdirectory(${rely_SOURCE_DIR} ${rely_BINARY_DIR} EXCLUDE_FROM_ALL)
  endif()

  list(APPEND THIRD_PARTY_INCLUDE_DIRS
    ${rely_BINARY_DIR}
    ${rely_SOURCE_DIR}/src
  )

  # Get rely libraries
  get_property(steinwurf_object_libraries GLOBAL
               PROPERTY steinwurf::object_libraries)

  foreach(rely_library ${steinwurf_object_libraries})
    list(APPEND THIRD_PARTY_OBJECT_LIBRARIES
      $<TARGET_OBJECTS:${rely_library}>
    )
  endforeach()

  list(APPEND THIRD_PARTY_DEPENDENCIES
    rely
  )
endif()

# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
  cmake_policy(SET CMP0135 NEW)
endif()

FetchContent_Declare(
  glog
  URL https://github.com/google/glog/archive/refs/tags/v0.5.0.zip
  PATCH_COMMAND patch -p1 CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/glog.patch
  EXCLUDE_FROM_ALL
)

FetchContent_GetProperties(glog)
if(NOT glog_POPULATED)
  pr("Download and build" "glog")
  FetchContent_Populate(glog)
  option(WITH_GFLAGS OFF)
  option(WITH_GTEST OFF)
  option(WITH_UNWIND OFF)
  option(BUILD_TESTING OFF)
  add_subdirectory(${glog_SOURCE_DIR} ${glog_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

list(APPEND THIRD_PARTY_INCLUDE_DIRS
  ${glog_BINARY_DIR}
  ${glog_SOURCE_DIR}/src
)

list(APPEND THIRD_PARTY_OBJECT_LIBRARIES
  $<TARGET_OBJECTS:glog>
)

list(APPEND THIRD_PARTY_DEPENDENCIES
  glog
)

if(UNIX AND (NOT APPLE) AND (NOT ${CMAKE_SYSTEM_NAME} MATCHES Android))
  ##############################################################
  # Get memif version
  ##############################################################
  list(GET LIBMEMIF_DEFAULT_VERSION 0 MEMIF_VERSION)

  FetchContent_Declare(
    memif
    GIT_REPOSITORY https://github.com/FDio/vpp
    GIT_TAG v${MEMIF_VERSION}
    GIT_SHALLOW
    GIT_PROGRESS
    PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/memif.patch || true
    EXCLUDE_FROM_ALL
  )

  FetchContent_GetProperties(memif)
  if(NOT memif_POPULATED)
    FetchContent_Populate(memif)
    add_subdirectory(${memif_SOURCE_DIR}/extras/libmemif ${memif_BINARY_DIR} EXCLUDE_FROM_ALL)
  endif()

  list(APPEND THIRD_PARTY_INCLUDE_DIRS
    ${memif_BINARY_DIR}
    ${memif_SOURCE_DIR}/extras/libmemif/src
  )

  list(APPEND THIRD_PARTY_OBJECT_LIBRARIES
    $<TARGET_OBJECTS:memif>
  )

  list(APPEND THIRD_PARTY_DEPENDENCIES
    memif
  )
endif()

set (THIRD_PARTY_LIBRARIES ${THIRD_PARTY_LIBRARIES} PARENT_SCOPE)
set (THIRD_PARTY_OBJECT_LIBRARIES ${THIRD_PARTY_OBJECT_LIBRARIES} PARENT_SCOPE)
set (THIRD_PARTY_INCLUDE_DIRS ${THIRD_PARTY_INCLUDE_DIRS} PARENT_SCOPE)
set (THIRD_PARTY_DEPENDENCIES ${THIRD_PARTY_DEPENDENCIES} PARENT_SCOPE)