1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-22 02:12:45 +01:00

Merge pull request #678 from madebr/conan_cmake

Various conan/cmake updates 'n fixes
This commit is contained in:
Daniel Evans 2019-01-06 04:47:44 +00:00 committed by GitHub
commit 21da262a64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 337 additions and 305 deletions

View File

@ -23,7 +23,7 @@ if(USE_CONAN)
message(STATUS "Using conan 'cmake' generator")
include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake")
endif()
conan_basic_setup(TARGETS)
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
rwdep_wrap_conan_targets()
else()
@ -40,7 +40,7 @@ else()
endif()
# Do not link to SDL2main library
set(SDL2_BUILDING_LIBRARY True)
set(SDL2_BUILDING_LIBRARY TRUE)
find_package(OpenAL REQUIRED)
find_package(Bullet REQUIRED)

View File

@ -12,7 +12,7 @@ this it will not be possible to play.
Windows | Linux | macOS | coverage
---| --- | --- | ---
[![Build status](https://ci.appveyor.com/api/projects/status/k33qf9ssrja6ckx8/branch/master?svg=true)](https://ci.appveyor.com/project/rwengine/openrw/branch/master) | [![Build Status](https://travis-ci.org/rwengine/openrw.svg?branch=master)](https://travis-ci.org/rwengine/openrw) | [![Build Status](https://travis-ci.org/rwengine/openrw.svg?branch=master)](https://travis-ci.org/rwengine/openrw) | [![codecov](https://codecov.io/gh/rwengine/openrw/branch/master/graph/badge.svg)](https://codecov.io/gh/rwengine/openrw)
[![Build status](https://ci.appveyor.com/api/projects/status/k33qf9ssrja6ckx8/branch/master?svg=true)](https://ci.appveyor.com/project/rwengine/openrw/branch/master) | [![Build Status](https://travis-ci.com/rwengine/openrw.svg?branch=master)](https://travis-ci.com/rwengine/openrw) | [![Build Status](https://travis-ci.com/rwengine/openrw.svg?branch=master)](https://travis-ci.com/rwengine/openrw) | [![codecov](https://codecov.io/gh/rwengine/openrw/branch/master/graph/badge.svg)](https://codecov.io/gh/rwengine/openrw)
## Links

View File

@ -7,6 +7,7 @@
# FFMPEG_LIBAVCODEC
# FFMPEG_LIBAVFORMAT
# FFMPEG_LIBAVUTIL
# FFMPEG_SWRESAMPLE
#
# Copyright (c) 2008 Andreas Schneider <mail@cynapses.org>
# Modified for other libraries by Lasse Kärkkäinen <tronic>
@ -19,68 +20,74 @@
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
pkg_check_modules(_FFMPEG_AVCODEC libavcodec QUIET)
pkg_check_modules(_FFMPEG_AVFORMAT libavformat QUIET)
pkg_check_modules(_FFMPEG_AVUTIL libavutil QUIET)
pkg_check_modules(_FFMPEG_SWRESAMPLE libswresample QUIET)
endif (PKG_CONFIG_FOUND)
find_path(FFMPEG_AVCODEC_INCLUDE_DIR
NAMES libavcodec/avcodec.h
PATHS ${_FFMPEG_AVCODEC_INCLUDE_DIRS} /usr/include /usr/local/include /opt/local/include /sw/include
PATH_SUFFIXES ffmpeg libav
)
find_library(FFMPEG_LIBAVCODEC
NAMES avcodec
PATHS ${_FFMPEG_AVCODEC_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVFORMAT
NAMES avformat
PATHS ${_FFMPEG_AVFORMAT_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVUTIL
NAMES avutil
PATHS ${_FFMPEG_AVUTIL_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
if (FFMPEG_LIBAVCODEC AND FFMPEG_LIBAVFORMAT)
set(FFMPEG_FOUND TRUE)
if(PKG_CONFIG_FOUND)
pkg_check_modules(_FFMPEG_AVCODEC libavcodec QUIET)
pkg_check_modules(_FFMPEG_AVFORMAT libavformat QUIET)
pkg_check_modules(_FFMPEG_AVUTIL libavutil QUIET)
pkg_check_modules(_FFMPEG_SWRESAMPLE libswresample QUIET)
endif()
find_path(FFMPEG_AVCODEC_INCLUDE_DIR
NAMES libavcodec/avcodec.h
PATHS ${_FFMPEG_AVCODEC_INCLUDE_DIRS} /usr/include /usr/local/include /opt/local/include /sw/include
PATH_SUFFIXES ffmpeg libav
)
find_library(FFMPEG_LIBAVCODEC
NAMES avcodec
PATHS ${_FFMPEG_AVCODEC_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVFORMAT
NAMES avformat
PATHS ${_FFMPEG_AVFORMAT_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVUTIL
NAMES avutil
PATHS ${_FFMPEG_AVUTIL_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_SWRESAMPLE
NAMES swresample
PATHS ${_FFMPEG_SWRESAMPLE_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
NAMES swresample
PATHS ${_FFMPEG_SWRESAMPLE_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
set(FFMPEG_INCLUDE_DIR ${FFMPEG_AVCODEC_INCLUDE_DIR})
set(FFMPEG_LIBRARIES
${FFMPEG_LIBAVCODEC}
${FFMPEG_LIBAVFORMAT}
${FFMPEG_LIBAVUTIL}
${FFMPEG_SWRESAMPLE}
)
${FFMPEG_LIBAVCODEC}
${FFMPEG_LIBAVFORMAT}
${FFMPEG_LIBAVUTIL}
${FFMPEG_SWRESAMPLE}
)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
list(APPEND FFMPEG_LIBRARIES "${FFMPEG_SWRESAMPLE}" secur32.lib Ws2_32.lib)
list(APPEND FFMPEG_LIBRARIES secur32.lib Ws2_32.lib)
endif()
if(FFMPEG_INCLUDE_DIR)
file(READ "${FFMPEG_INCLUDE_DIR}/libavutil/ffversion.h" __FFVERSION_H)
string(REGEX MATCH "#define[ ]+FFMPEG_VERSION[ ]+\"([0-9a-zA-Z\\.\\-]+)\"" _FFMPEG_VERSION "${__FFVERSION_H}")
if(NOT _FFMPEG_VERSION)
message(AUTHOR_WARNING "Cannot detect ffmpeg version: regex does not match")
endif()
set(FFMPEG_VERSION "${CMAKE_MATCH_1}")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFmpeg DEFAULT_MSG FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIR)
find_package_handle_standard_args(FFmpeg
FOUND_VAR FFMPEG_FOUND
REQUIRED_VARS FFMPEG_LIBAVCODEC FFMPEG_LIBAVFORMAT FFMPEG_LIBAVUTIL FFMPEG_SWRESAMPLE FFMPEG_INCLUDE_DIR
VERSION_VAR FFMPEG_VERSION
)
set(FFMPEG_FOUND "${FFmpeg_FOUND}")
if(FFMPEG_FOUND)
add_library(ffmpeg INTERFACE)
target_link_libraries(ffmpeg
INTERFACE
${FFMPEG_LIBRARIES}
)
target_include_directories(ffmpeg SYSTEM
INTERFACE
"${FFMPEG_INCLUDE_DIR}"
)
add_library(ffmpeg::ffmpeg ALIAS ffmpeg)
if(FFmpeg_FOUND)
add_library(ffmpeg::ffmpeg INTERFACE IMPORTED)
set_property(TARGET ffmpeg::ffmpeg
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FFMPEG_INCLUDE_DIR})
set_property(TARGET ffmpeg::ffmpeg
PROPERTY INTERFACE_LINK_LIBRARIES ${FFMPEG_LIBRARIES})
endif()

View File

@ -1,8 +1,10 @@
# Locate SDL2 library
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
# This module defines:
# - SDL2_LIBRARY, the name of the library to link against
# - SDL2_FOUND, if false, do not try to link to SDL2
# - SDL2_INCLUDE_DIR, where to find SDL.h
# and creates:
# - SDL2::SDL2 imported target
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
@ -12,21 +14,15 @@
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# SDL2_STATIC
# If this is defined, this module will search for static libraries.
# On Windows, it is uncertain whether a .lib belongs to a dynamic or static SDL2 build.
#
# Don't forget to include SDL2main.h and SDL2main.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
@ -70,140 +66,151 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES include/SDL2 include
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SDL2
/usr/include/SDL2
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
#MESSAGE("SDL2_INCLUDE_DIR is ${SDL2_INCLUDE_DIR}")
FIND_LIBRARY(SDL2_LIBRARY_PATH
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
set(SDL2_LIBRARY_ONLY ${SDL2_LIBRARY_PATH} CACHE STRING "The SDL2 library, with no other libraries.")
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_PATH})
#MESSAGE("SDL2_LIBRARY_TEMP is ${SDL2_LIBRARY_TEMP}")
IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
find_path(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES
include/SDL2 include
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SDL2
/usr/include/SDL2
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)
find_library(SDL2_SHARED_LIBRARY_PATH
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES
lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
find_library(SDL2_STATIC_LIBRARY_PATH
NAMES libSDL2.lib libSDL2.a SDL2.lib SDL2.a
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES
lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
if(SDL2_STATIC)
set(SDL2_LIBRARY_PATH ${SDL2_STATIC_LIBRARY_PATH})
else()
set(SDL2_LIBRARY_PATH ${SDL2_SHARED_LIBRARY_PATH})
endif()
find_library(SDL2_SDL2MAIN_LIBRARY_PATH
NAMES libSDL2main.lib libSDL2main.a SDL2main.lib SDL2main.a
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES
lib64 lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SDL2
/usr/include/SDL2
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
if(SDL2_INCLUDE_DIR)
file(READ "${SDL2_INCLUDE_DIR}/SDL_version.h" _SDL_VERSION_H)
set(SDL2_REGEXES
"SDL_MAJOR_VERSION[ ]+([0-9]+)"
"SDL_MINOR_VERSION[ ]+([0-9]+)"
"SDL_PATCHLEVEL[ ]+([0-9]+)"
)
set(_SDL2_VERSION)
foreach(_SDL2_REGEX ${SDL2_REGEXES})
string(REGEX MATCH "${_SDL2_REGEX}" _SDL2_NUMBER "${_SDL_VERSION_H}")
if(NOT _SDL2_NUMBER)
message(AUTHOR_WARNING "Cannot detect SDL2 version: regex \"${_SDL2_REGEX}\" does not match")
endif()
list(APPEND _SDL2_VERSION "${CMAKE_MATCH_1}")
endforeach()
string(REPLACE ";" "." SDL2_VERSION "${_SDL2_VERSION}")
endif()
set(SDL2_DEPENDENCIES)
# For SDLmain
if(SDL2_STATIC)
list(APPEND SDL2_DEPENDENCIES ${CMAKE_DL_LIBS})
endif()
if(SDL2_STATIC AND NOT SDL2_BUILDING_LIBRARY)
list(APPEND SDL2_DEPENDENCIES ${SDL2_SDL2MAIN_LIBRARY_PATH})
endif()
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
if(APPLE)
list(APPEND SDL2_DEPENDENCIES "-framework Cocoa")
endif()
# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
if(NOT APPLE)
find_package(Threads REQUIRED)
list(APPEND SDL2_DEPENDENCIES Threads::Threads)
endif()
# MinGW needs an additional library, mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows
# (Actually on second look, I think it only needs one of the m* libraries.)
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)
SET(SDL2_FOUND "NO")
IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)
IF(WIN32)
SET(SDL2_LIBRARY_TEMP winmm imm32 version msimg32 ${SDL2_LIBRARY_TEMP})
ENDIF(WIN32)
# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
SET(SDL2_FOUND "YES")
ENDIF(SDL2_LIBRARY_TEMP)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
IF(SDL2_STATIC)
if (UNIX AND NOT APPLE)
EXECUTE_PROCESS(COMMAND sdl2-config --static-libs OUTPUT_VARIABLE SDL2_LINK_FLAGS)
STRING(REGEX REPLACE "(\r?\n)+$" "" SDL2_LINK_FLAGS "${SDL2_LINK_FLAGS}")
SET(SDL2_LIBRARY ${SDL2_LINK_FLAGS})
ENDIF()
ENDIF(SDL2_STATIC)
if(SDL2_FOUND AND NOT TARGET SDL2::SDL2)
add_library(SDL2 INTERFACE)
target_link_libraries(SDL2
INTERFACE
${SDL2_LIBRARY}
)
target_include_directories(SDL2 SYSTEM
INTERFACE
"${SDL2_INCLUDE_DIR}"
)
add_library(SDL2::SDL2 ALIAS SDL2)
if(MINGW)
set(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
list(APPEND SDL2_DEPENDENCIES ${MINGW32_LIBRARY})
endif()
if(WIN32)
list(APPEND SDL2_DEPENDENCIES winmm imm32 version msimg32)
endif()
set(SDL2_LIBRARY ${SDL2_LIBRARY_PATH} ${SDL2_DEPENDENCIES})
set(SDL2_REQUIRED_LIBS SDL2_LIBRARY_PATH)
if(NOT SDL2_BUILDING_LIBRARY)
list(APPEND SDL2_REQUIRED_LIBS SDL2_SDL2MAIN_LIBRARY_PATH)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SDL2
FOUND_VAR SDL2_FOUND
REQUIRED_VARS ${SDL2_REQUIRED_LIBS} SDL2_INCLUDE_DIR
VERSION_VAR SDL2_VERSION
)
if(SDL2_FOUND)
add_library(SDL2::SDL2 INTERFACE IMPORTED)
set_property(TARGET SDL2::SDL2
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR})
set_property(TARGET SDL2::SDL2
PROPERTY INTERFACE_LINK_LIBRARIES ${SDL2_LIBRARY})
endif()

View File

@ -1,42 +1,30 @@
function(rwdep_wrap_find_packages)
if(BULLET_FOUND AND NOT TARGET bullet::bullet)
add_library(bullet INTERFACE)
target_link_libraries(bullet
INTERFACE
${BULLET_LIBRARIES}
)
target_include_directories(bullet SYSTEM
INTERFACE
"${BULLET_INCLUDE_DIR}"
)
add_library(bullet::bullet ALIAS bullet)
add_library(bullet::bullet INTERFACE IMPORTED)
set_property(TARGET bullet::bullet
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${BULLET_INCLUDE_DIR})
set_property(TARGET bullet::bullet
PROPERTY INTERFACE_LINK_LIBRARIES ${BULLET_LIBRARIES})
endif()
if(OPENAL_FOUND AND NOT TARGET OpenAL::OpenAL)
add_library(OpenAL INTERFACE)
target_link_libraries(OpenAL
INTERFACE
"${OPENAL_LIBRARY}"
)
target_include_directories(OpenAL SYSTEM
INTERFACE
"${OPENAL_INCLUDE_DIR}"
)
add_library(OpenAL::OpenAL ALIAS OpenAL)
add_library(OpenAL::OpenAL INTERFACE IMPORTED)
set_property(TARGET OpenAL::OpenAL
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENAL_INCLUDE_DIR})
set_property(TARGET OpenAL::OpenAL
PROPERTY INTERFACE_LINK_LIBRARIES ${OPENAL_LIBRARY})
endif()
endfunction()
function(rwdep_wrap_conan_target TARGET CONAN_NAME)
string(RANDOM RND)
set(TGT "CONAN_${CONAN_NAME}_${RND}")
add_library("${TGT}" INTERFACE)
target_link_libraries("${TGT}" INTERFACE "CONAN_PKG::${CONAN_NAME}")
add_library("${TARGET}" ALIAS "${TGT}")
add_library("${TARGET}" INTERFACE IMPORTED)
set_property(TARGET "${TARGET}"
PROPERTY INTERFACE_LINK_LIBRARIES "CONAN_PKG::${CONAN_NAME}")
endfunction()
function(rwdep_wrap_conan_targets)
rwdep_wrap_conan_target(OpenAL::OpenAL openal)
rwdep_wrap_conan_target(bullet::bullet bullet)
rwdep_wrap_conan_target(bullet::bullet bullet3)
rwdep_wrap_conan_target(glm::glm glm)
rwdep_wrap_conan_target(ffmpeg::ffmpeg ffmpeg)
rwdep_wrap_conan_target(SDL2::SDL2 sdl2)

View File

@ -4,12 +4,6 @@ add_library(openrw::interface ALIAS rw_interface)
add_library(rw_checks INTERFACE)
add_library(openrw::checks ALIAS rw_checks)
target_link_libraries(rw_interface INTERFACE rw_checks)
# target_compile_features(rw_interface INTERFACE cxx_std_14) is not supported by CMake 3.2
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
target_compile_options(rw_interface
INTERFACE
@ -21,6 +15,20 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang
"$<IF:$<COMPILE_LANGUAGE:CXX>,-Wold-style-cast,>"
)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
if(MSVC_NO_DEBUG_RUNTIME)
foreach(LANG C CXX)
foreach(CONFIGURATION_TYPE ${CMAKE_CONFIGURATION_TYPES} "")
string(TOUPPER "${CONFIGURATION_TYPE}" CONFIGURATION_TYPE)
set(FLAGS_VAR "CMAKE_${LANG}_FLAGS")
if(CONFIGURATION_TYPE)
set(FLAGS_VAR "${FLAGS_VAR}_${CONFIGURATION_TYPE}")
endif()
string(REPLACE "/MDd" "/MD" "${FLAGS_VAR}" "${${FLAGS_VAR}}")
string(REPLACE "/MTd" "/MT" "${FLAGS_VAR}" "${${FLAGS_VAR}}")
set("${FLAGS_VAR}" "${${FLAGS_VAR}}" CACHE STRING "${LANG} flags for ${CONFIGURATION_TYPE} configuration type")
endforeach()
endforeach()
endif()
target_compile_definitions(rw_checks
INTERFACE
"_SCL_SECURE_NO_WARNINGS"
@ -29,6 +37,7 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(rw_interface
INTERFACE
"/MP"
"/Zc:__cplusplus"
)
else()
message(FATAL_ERROR "Unknown compiler ID: '${CMAKE_CXX_COMPILER_ID}'")
@ -188,25 +197,36 @@ endforeach()
function(openrw_target_apply_options)
set(IWYU_MAPPING "${PROJECT_SOURCE_DIR}/openrw_iwyu.imp")
cmake_parse_arguments("ORW" "INSTALL;INSTALL_PDB;COVERAGE" "TARGET" "COVERAGE_EXCEPT" ${ARGN})
if(CHECK_IWYU)
iwyu_check(TARGET "${ORW_TARGET}"
EXTRA_OPTS
"--mapping_file=${IWYU_MAPPING}"
)
endif()
cmake_parse_arguments("ORW" "CORE;INSTALL;INSTALL_PDB;COVERAGE" "TARGET" "COVERAGE_EXCEPT" ${ARGN})
if(TEST_COVERAGE AND ORW_COVERAGE)
coverage_add_target("${ORW_TARGET}" EXCEPT ${ORW_COVERAGE_EXCEPT})
endif()
if(CHECK_CLANGTIDY)
clang_tidy_check_target(
TARGET "${ORW_TARGET}"
FORMAT_STYLE "file"
FIX "${CHECK_CLANGTIDY_FIX}"
CHECK_ALL
)
if(ORW_CORE)
if(CHECK_IWYU)
iwyu_check(TARGET "${ORW_TARGET}"
EXTRA_OPTS
"--mapping_file=${IWYU_MAPPING}"
)
endif()
set_target_properties("${ORW_TARGET}"
PROPERTIES
CXX_EXTENSIONS OFF
CXX_STANDARD 17
C_EXTENSIONS OFF
C_STANDARD 11
)
if(CHECK_CLANGTIDY)
clang_tidy_check_target(
TARGET "${ORW_TARGET}"
FORMAT_STYLE "file"
FIX "${CHECK_CLANGTIDY_FIX}"
CHECK_ALL
)
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")

View File

@ -19,6 +19,9 @@ set(CMAKE_CONFIGURATION_TYPES "Release;Debug;RelWithDebInfo;MinSizeRel" CACHE IN
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: ${CMAKE_CONFIGURATION_TYPES}")
endif()
if(MSVC)
option(MSVC_NO_DEBUG_RUNTIME "Don't use the debug runtime")
endif()
option(CHECK_IWYU "Enable IncludeWhatYouUse (Analyze #includes in C and C++ source files)")
option(CHECK_CLANGTIDY "Enable clang-tidy (A clang-based C++ linter tool)")

View File

@ -1,5 +1,4 @@
from conans import ConanFile, CMake
from conans.errors import ConanException
class OpenrwConan(ConanFile):
@ -13,31 +12,34 @@ class OpenrwConan(ConanFile):
'test_data': [True, False],
'viewer': [True, False],
'tools': [True, False],
'profiling': [True, False],
}
default_options = (
'test_data=False',
'viewer=True',
'tools=True',
'bullet:shared=False',
'sdl2:sdl2main=False',
)
default_options = {
'test_data': False,
'viewer': True,
'tools': True,
'profiling': True,
'bullet3:shared': False,
'sdl2:sdl2main': False,
}
generators = 'cmake',
exports_sources = 'CMakeLists.txt', 'cmake_configure.cmake', 'cmake_options.cmake', 'COPYING', \
'cmake/modules/*', 'benchmarks', 'rwlib/*', 'rwengine/*', 'rwgame/*', 'rwviewer/*', 'tests/*'
exports_sources = 'CMakeLists.txt', 'cmake_configure.cmake', 'cmake_options.cmake', 'CMakeCPack.cmake', 'COPYING', \
'cmake/modules/*', 'benchmarks', 'rwcore/*', 'rwengine/*', 'rwgame/*', 'rwviewer/*', \
'rwtools/*', 'tests/*', 'external/*'
_rw_dependencies = {
'game': (
'openal/1.18.2@bincrafters/stable',
'bullet/2.87@bincrafters/stable',
'openal/1.19.0@bincrafters/stable',
'bullet3/2.87@bincrafters/stable',
'glm/0.9.9.1@g-truc/stable',
'ffmpeg/4.0@bincrafters/stable',
'sdl2/2.0.8@bincrafters/stable',
'boost/1.67.0@conan/stable',
'ffmpeg/4.0.2@bincrafters/stable',
'sdl2/2.0.9@bincrafters/stable',
'boost/1.68.0@conan/stable',
),
'viewer': (
'Qt/5.11.1@bincrafters/stable',
'qt/5.12.0@bincrafters/stable',
),
'tools': (
'freetype/2.9.0@bincrafters/stable',
@ -46,7 +48,7 @@ class OpenrwConan(ConanFile):
def configure(self):
if self.options.viewer:
self.options['Qt'].opengl = 'desktop'
self.options['qt'].opengl = 'desktop'
def requirements(self):
for dep in self._rw_dependencies['game']:
@ -67,6 +69,7 @@ class OpenrwConan(ConanFile):
'BUILD_VIEWER': self.options.viewer,
'BUILD_TOOLS': self.options.tools,
'TESTS_NODATA': not self.options.test_data,
'ENABLE_PROFILING': self.options.profiling,
'USE_CONAN': True,
'BOOST_STATIC': not self.options['boost'].shared,
}

View File

@ -25,4 +25,10 @@ openrw_target_apply_options(
TARGET microprofile
)
set_target_properties(microprofile
PROPERTIES
CXX_EXTENSIONS OFF
CXX_STANDARD 11
)
add_library(microprofile::microprofile ALIAS microprofile)

View File

@ -1,4 +1,3 @@
add_library(rwcore
# GL stuff is only here temporarily, hoping to move it back to rwengine
gl/gl_core_3_3.c
@ -67,6 +66,7 @@ target_link_libraries(rwcore
)
openrw_target_apply_options(TARGET rwcore
CORE
COVERAGE
COVERAGE_EXCEPT gl/gl_core_3_3.c gl/gl_core_3_3.h
)

View File

@ -169,6 +169,7 @@ target_include_directories(rwengine
)
openrw_target_apply_options(TARGET rwengine
CORE
COVERAGE
)

View File

@ -5,12 +5,12 @@
#include <utility>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletDynamics/Character/btKinematicCharacterController.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtc/constants.hpp>

View File

@ -5,11 +5,11 @@
#include <limits>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/glm.hpp>

View File

@ -2,11 +2,11 @@
#define _RWENGINE_RAYCASTCALLBACKS_HPP_
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
/**

View File

@ -1,12 +1,12 @@
#include "engine/GameWorld.hpp"
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtx/norm.hpp>

View File

@ -10,11 +10,11 @@
#include <vector>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <LinearMath/btScalar.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/glm.hpp>

View File

@ -1,11 +1,11 @@
#include "Garage.hpp"
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtx/quaternion.hpp>

View File

@ -6,13 +6,13 @@
#include <memory>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
#include <BulletDynamics/Character/btKinematicCharacterController.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <rw/debug.hpp>

View File

@ -4,12 +4,12 @@
#include <string>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#include <glm/gtc/quaternion.hpp>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <rw/types.hpp>

View File

@ -3,12 +3,12 @@
#include <cmath>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtc/quaternion.hpp>

View File

@ -1,12 +1,12 @@
#include "objects/ProjectileObject.hpp"
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtc/quaternion.hpp>

View File

@ -6,12 +6,12 @@
#include <limits>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletDynamics/Vehicle/btRaycastVehicle.h>
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/gtx/quaternion.hpp>

View File

@ -8,12 +8,12 @@
#include <unordered_map>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#include <LinearMath/btScalar.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <glm/glm.hpp>

View File

@ -5,11 +5,11 @@
#include <glm/glm.hpp>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <LinearMath/btVector3.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <data/Clump.hpp>

View File

@ -5,12 +5,12 @@
#include <vector>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <LinearMath/btIDebugDraw.h>
#include <LinearMath/btScalar.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <data/Clump.hpp>

View File

@ -2,13 +2,7 @@
#include <cstdint>
#ifdef _MSC_VER
#pragma warning(disable : 5033)
#endif
#include <BulletDynamics/Vehicle/btRaycastVehicle.h>
#ifdef _MSC_VER
#pragma warning(default : 5033)
#endif
#include <glm/gtc/type_ptr.hpp>
#include <data/Clump.hpp>

View File

@ -46,6 +46,7 @@ add_library(librwgame STATIC
openrw_target_apply_options(
TARGET librwgame
CORE
COVERAGE
)
@ -78,6 +79,7 @@ target_link_libraries(rwgame
openrw_target_apply_options(
TARGET rwgame
CORE
COVERAGE
INSTALL INSTALL_PDB
)

View File

@ -8,12 +8,12 @@
#include "StateManager.hpp"
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
// FIXME: should be in rwengine, deeply hidden
#include <BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <engine/GameData.hpp>

View File

@ -22,11 +22,11 @@
#include <glm/gtx/norm.hpp>
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif

View File

@ -13,6 +13,7 @@ target_link_libraries(rwfontmap
openrw_target_apply_options(
TARGET rwfontmap
CORE
COVERAGE
INSTALL INSTALL_PDB
)

View File

@ -56,6 +56,7 @@ target_link_libraries(rwviewer
openrw_target_apply_options(
TARGET rwviewer
CORE
COVERAGE
INSTALL INSTALL_PDB
)

View File

@ -11,7 +11,6 @@ from conans.client import conan_api
openrw_path = Path(__file__).resolve().parents[2]
cmake_generator_lookup = {
2015: 'Visual Studio 14 2015',
2017: 'Visual Studio 15 2017',
}
architectures = ['x64', 'x86']
@ -33,14 +32,13 @@ def create_solution(path, vs_version, arch):
conan, _, _ = conan_api.ConanAPIV1.factory()
conan.remote_add('bincrafters', 'https://api.bintray.com/conan/bincrafters/public-conan', force=True)
conan_arch = conan_arch_map[arch]
conan.install(path=openrw_path, generators=('cmake_multi',), build=['missing', ],
settings=('build_type=Debug', 'arch={}'.format(conan_arch), ), install_folder=path)
conan.install(path=openrw_path, generators=('cmake_multi',), build=['missing', ],
settings=('build_type=Release', 'arch={}'.format(conan_arch), ), install_folder=path)
conan.install(path=openrw_path, generators=('cmake',), build=['missing', ],
settings=('build_type=Release', 'arch={}'.format(conan_arch), 'compiler.runtime=MD', ),
install_folder=path)
cmake_generator = to_cmake_generator(vs_version=vs_version, arch=arch)
subprocess.run([
'cmake', '-DUSE_CONAN=TRUE', '-DBOOST_STATIC=TRUE',
'-DBUILD_TESTS=TRUE', '-DBUILD_VIEWER=TRUE', '-DBUILD_TOOLS=TRUE',
'cmake', '-DUSE_CONAN=ON', '-DBOOST_STATIC=ON', '-DMSVC_NO_DEBUG_RUNTIME=ON',
'-DBUILD_TESTS=ON', '-DBUILD_VIEWER=ON', '-DBUILD_TOOLS=ON',
'-G{}'.format(cmake_generator), str(openrw_path),
], cwd=path, check=True)

View File

@ -72,6 +72,7 @@ target_link_libraries(rwtests
openrw_target_apply_options(
TARGET rwtests
CORE
COVERAGE
INSTALL INSTALL_PDB
)

View File

@ -2,11 +2,11 @@
#define _TESTGLOBALS_HPP_
#ifdef _MSC_VER
#pragma warning(disable : 4305 5033)
#pragma warning(disable : 4305)
#endif
#include <btBulletDynamicsCommon.h>
#ifdef _MSC_VER
#pragma warning(default : 4305 5033)
#pragma warning(default : 4305)
#endif
#include <SDL.h>