CMake: adding work-in-progress CMakeLists files

Signed-off-by: Steven Noonan <steven@valvesoftware.com>
This commit is contained in:
Steven Noonan
2018-04-04 06:25:24 -07:00
parent 7f0e5d7577
commit 08b37453a4
4 changed files with 245 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.10)
project(GameNetworkingSockets C CXX)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(FlagsMSVC)
set(MSVC_RUNTIME "dynamic")
configure_msvc_runtime()
print_default_msvc_flags()
add_subdirectory(src)
add_subdirectory(tests)
+57
View File
@@ -0,0 +1,57 @@
macro(configure_msvc_runtime)
if(MSVC)
# Default to statically-linked runtime.
if("${MSVC_RUNTIME}" STREQUAL "")
set(MSVC_RUNTIME "static")
endif()
# Set compiler options.
set(variables
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
)
if(${MSVC_RUNTIME} STREQUAL "static")
message(STATUS "MSVC -> forcing use of statically-linked runtime.")
foreach(variable ${variables})
if(${variable} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}")
endif()
endforeach()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT /NODEFAULTLIB:MSVCRTd")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT /NODEFAULTLIB:MSVCRTd")
else()
message(STATUS "MSVC -> forcing use of dynamically-linked runtime.")
foreach(variable ${variables})
if(${variable} MATCHES "/MT")
string(REGEX REPLACE "/MT" "/MD" ${variable} "${${variable}}")
endif()
endforeach()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTd")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTd")
endif()
endif()
endmacro()
macro(print_default_msvc_flags)
if(MSVC)
set(variables
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
)
message(STATUS "Initial build flags:")
foreach(variable ${variables})
message(STATUS " '${variable}': ${${variable}}")
endforeach()
message(STATUS "")
endif()
endmacro()
+172
View File
@@ -0,0 +1,172 @@
find_package(Protobuf REQUIRED)
find_package(OpenSSL REQUIRED)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
set(GNS_PROTOS
"common/steamnetworkingsockets_messages_certs.proto"
"common/steamnetworkingsockets_messages.proto"
"common/steamnetworkingsockets_messages_udp.proto"
)
set(GNS_SRCS
"external/curve25519-donna/curve25519.c"
"external/curve25519-donna/curve25519_VALVE_sse2.c"
"external/ed25519-donna/ed25519_VALVE.c"
"external/ed25519-donna/ed25519_VALVE_sse2.c"
"common/crypto.cpp"
"common/opensslwrapper.cpp"
"common/steamid.cpp"
"public/minbase/minbase_common_errors.cpp"
"steamnetworkingsockets/certtool/steamnetworkingsockets_certtool.cpp"
"steamnetworkingsockets/clientlib/csteamnetworkingsockets.cpp"
"steamnetworkingsockets/clientlib/steamnetworkingsockets_connections.cpp"
"steamnetworkingsockets/clientlib/steamnetworkingsockets_lowlevel.cpp"
"steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp"
"steamnetworkingsockets/clientlib/steamnetworkingsockets_snp_debug.cpp"
"steamnetworkingsockets/clientlib/steamnetworkingsockets_udp.cpp"
"steamnetworkingsockets/steamnetworkingsockets_certs.cpp"
"steamnetworkingsockets/steamnetworkingsockets_shared.cpp"
"tier0/cpu.cpp"
"tier0/dbg.cpp"
"tier0/platformtime.cpp"
"tier1/netadr.cpp"
"tier1/utlbuffer.cpp"
"tier1/utlmemory.cpp"
"vstdlib/strtools.cpp"
)
set(GNS_COMMON_FLAGS
-fvisibility=hidden
-fno-strict-aliasing
-Wall
#-Wextra
#-pedantic
-Wno-unknown-pragmas
-Wno-sign-compare
)
set(GNS_C_FLAGS
-Wstrict-prototypes
)
set(GNS_CXX_FLAGS
-fvisibility-inlines-hidden
-Wno-reorder
-Wno-non-virtual-dtor
-fno-rtti
-fno-exceptions
)
protobuf_generate_cpp(GNS_PROTO_SRCS GNS_PROTO_HDRS ${GNS_PROTOS})
macro(gamenetworkingsockets_common GNS_TARGET)
target_sources(${GNS_TARGET} PRIVATE ${GNS_SRCS})
target_sources(${GNS_TARGET} PRIVATE ${GNS_PROTO_SRCS})
target_include_directories(${GNS_TARGET} PUBLIC
"../include"
)
target_include_directories(${GNS_TARGET} PRIVATE
"common"
"public"
${CMAKE_CURRENT_BINARY_DIR}
# Only necessary if we're not using protobuf::libprotobuf
# But that's not supported in CMake 3.5
${Protobuf_INCLUDE_DIRS}
)
target_link_libraries(${GNS_TARGET} PRIVATE
# protobuf::libprotobuf
${PROTOBUF_LIBRARIES}
OpenSSL::Crypto
)
target_compile_definitions(${GNS_TARGET} PRIVATE
STEAMDATAGRAMLIB_FOREXPORT
STATIC_TIER0
# needed for ed25519-donna
ENABLE_CRYPTO_25519
HAVE_OPENSSL
ENABLE_OPENSSLCONNECTION
CRYPTO_DISABLE_ENCRYPT_WITH_PASSWORD
GOOGLE_PROTOBUF_NO_RTTI
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU"
OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
foreach(FLAG ${GNS_COMMON_FLAGS} ${GNS_C_FLAGS})
string(MAKE_C_IDENTIFIER ${FLAG} FLAG_ID)
check_c_compiler_flag(${FLAG} ${FLAG_ID}_TEST)
if(${FLAG_ID}_TEST)
target_compile_options(${GNS_TARGET} PRIVATE
$<$<COMPILE_LANGUAGE:C>:${FLAG}>)
endif()
endforeach()
foreach(FLAG ${GNS_COMMON_FLAGS} ${GNS_CXX_FLAGS})
string(MAKE_C_IDENTIFIER ${FLAG} FLAG_ID)
check_cxx_compiler_flag(${FLAG} ${FLAG_ID}_TEST)
if(${FLAG_ID}_TEST)
target_compile_options(${GNS_TARGET} PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:${FLAG}>
)
endif()
endforeach()
endif()
if(CMAKE_SYSTEM_NAME MATCHES Linux)
target_compile_definitions(${GNS_TARGET} PRIVATE POSIX LINUX)
elseif(CMAKE_SYSTEM_NAME MATCHES Darwin)
target_compile_definitions(${GNS_TARGET} PRIVATE POSIX OSX)
elseif(CMAKE_SYSTEM_NAME MATCHES Windows)
target_compile_definitions(${GNS_TARGET} PRIVATE
WIN32
)
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_definitions(${GNS_TARGET} PRIVATE
_CRT_SECURE_NO_WARNINGS
_ITERATOR_DEBUG_LEVEL=0
PROTOBUF_USE_DLLS
)
target_compile_options(${GNS_TARGET} PRIVATE
/wd4146 # include/google/protobuf/wire_format_lite.h(863): warning C4146: unary minus operator applied to unsigned type, result still unsigned
)
else()
target_compile_definitions(${GNS_TARGET} PRIVATE
__STDC_FORMAT_MACROS=1
__USE_MINGW_ANSI_STDIO=0
)
target_compile_options(${GNS_TARGET} PRIVATE -fno-stack-protector)
endif()
target_link_libraries(${GNS_TARGET} PRIVATE ws2_32)
else()
message(FATAL_ERROR "Could not identify your target operating system")
endif()
if(NOT CMAKE_SYSTEM_NAME MATCHES Windows)
target_compile_options(${GNS_TARGET} PRIVATE -fstack-protector-strong)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU"
OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_definitions(${GNS_TARGET} PRIVATE GNUC GNU_COMPILER)
endif()
set_target_properties(${GNS_TARGET} PROPERTIES
CXX_STANDARD 11
)
endmacro()
add_library(GameNetworkingSockets SHARED "")
add_library(GameNetworkingSockets::shared ALIAS GameNetworkingSockets)
gamenetworkingsockets_common(GameNetworkingSockets)
add_library(GameNetworkingSockets_s STATIC "")
add_library(GameNetworkingSockets::static ALIAS GameNetworkingSockets_s)
gamenetworkingsockets_common(GameNetworkingSockets_s)
+4
View File
@@ -0,0 +1,4 @@
add_executable(
test_connection
connection_test.cpp)
target_link_libraries(test_connection GameNetworkingSockets)