blob: 240cc3c35a66546d2324fd636c1d57d7c8e29a11 [file] [log] [blame]
# Copyright 2022 Google LLC
#
# 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.
cmake_minimum_required(VERSION 3.14)
project(Nearby)
set(CMAKE_CXX_STANDARD 20)
set(BETO_CORE_ROOT ${CMAKE_SOURCE_DIR}/..)
set(NEARBY_ROOT ${CMAKE_SOURCE_DIR})
set(THIRD_PARTY_DIR ${BETO_CORE_ROOT}/third_party)
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG")
if (UNIX)
set(CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}")
endif ()
if (MSVC)
add_compile_options(-W4 -O1 -MD)
endif ()
if (ENABLE_TESTS)
message(STATUS "Enabling workspace wide tests")
# We want to suppress warnings coming from external libraries as they just
# pollute the build output
add_compile_options(-w)
# Setup GoogleTest
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.14.0
)
FetchContent_MakeAvailable(googletest)
enable_testing()
include(GoogleTest)
# Include google benchmark
add_subdirectory(${THIRD_PARTY_DIR}/benchmark ${THIRD_PARTY_DIR}/benchmark/build)
# Setup jsoncpp
set(JSONCPP_DIR ${THIRD_PARTY_DIR}/jsoncpp)
include_directories(${JSONCPP_DIR})
add_library(
jsoncpp
${JSONCPP_DIR}/jsoncpp.cpp
)
endif ()
set(ABSL_PROPAGATE_CXX_STD ON)
if (ENABLE_FUZZ)
if (NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
MESSAGE(FATAL_ERROR "fuzzing is only enabed when building with Clang, please set CC and CXX to use clang instead of ${CMAKE_CXX_COMPILER_ID}")
endif ()
add_subdirectory(${THIRD_PARTY_DIR}/boringssl boringssl-build)
add_subdirectory(${THIRD_PARTY_DIR}/fuzztest fuzztest-build)
enable_testing()
include(GoogleTest)
else ()
# fuzztest handles pulling in absl, so we if we are not building fuzzers we need
# to include it ourselves via third_party.
add_subdirectory(${THIRD_PARTY_DIR}/abseil-cpp ${THIRD_PARTY_DIR}/abseil-cpp/build)
endif ()
if (UNIX)
set_directory_properties(
PROPERTIES
COMPILE_OPTIONS
-Werror
-Wall
-Wextra
-Wimplicit-fallthrough
-Wextra-semi
-Wshadow
-Wsign-compare
)
endif ()
# rust std lib requires linking against these
if (UNIX)
link_libraries(
dl pthread -fsanitize=address
)
elseif (MSVC)
link_libraries(
bcrypt ntdll userenv ws2_32
)
endif ()
add_subdirectory(presence/np_cpp_ffi)
add_subdirectory(presence/ldt_np_adv_ffi/c)
add_subdirectory(connections/ukey2/ukey2_c_ffi/cpp/)