Skip to content
Snippets Groups Projects
Commit 00d01aab authored by Rye Mutt's avatar Rye Mutt :bread:
Browse files

:window: Fix build and tests on Windows.

parent ed88a81d
Branches
No related tags found
2 merge requests!3Update to main branch,!2Rebase onto current main branch
Showing
with 294 additions and 482 deletions
......@@ -44,14 +44,14 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
endif (NOT CMAKE_BUILD_TYPE)
set(Python3_FIND_VIRTUALENV FIRST)
find_package(Python3 COMPONENTS Interpreter)
include(Variables)
include(BuildVersion)
......
......@@ -18,16 +18,15 @@ include(CheckCXXCompilerFlag)
include(Variables)
include(SDL2)
set(Python3_FIND_VIRTUALENV FIRST)
find_package(Python3 COMPONENTS Interpreter)
# Portable compilation flags.
add_compile_definitions(
ADDRESS_SIZE=${ADDRESS_SIZE}
$<$<CONFIG:Debug>:-D_DEBUG>
$<$<CONFIG:Debug>:-DLL_DEBUG=1>
$<$<CONFIG:RelWithDebInfo>:-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1>
$<$<CONFIG:Release>:-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG>
$<$<CONFIG:Debug>:_DEBUG>
$<$<CONFIG:Debug>:LL_DEBUG=1>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:LL_RELEASE=1>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:NDEBUG>
$<$<CONFIG:RelWithDebInfo>:LL_RELEASE_WITH_DEBUG_INFO=1>
$<$<CONFIG:Release>:LL_RELEASE_FOR_DOWNLOAD=1>
)
# Configure crash reporting
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
......@@ -63,71 +62,116 @@ if (WINDOWS)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_compile_options(/MP)
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
add_compile_options(-m${ADDRESS_SIZE})
endif ()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /EHsc -D_SCL_SECURE_NO_WARNINGS=1")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /Ob0 /EHsc -D_ITERATOR_DEBUG_LEVEL=0")
add_compile_definitions(
$<$<CONFIG:Debug>:_SCL_SECURE_NO_WARNINGS=1>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:_ITERATOR_DEBUG_LEVEL=0>
LL_WINDOWS=1
NOMINMAX
UNICODE
_UNICODE
_CRT_SECURE_NO_WARNINGS
_CRT_NONSTDC_NO_DEPRECATE
_WINSOCK_DEPRECATED_NO_WARNINGS
_SILENCE_CXX20_CISO646_REMOVED_WARNING
)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE} /O2 /Oi /Ot /Gy /Zi /MD /Ob3 /Oy- /Zc:inline /EHsc /fp:fast -D_ITERATOR_DEBUG_LEVEL=0")
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE} /clang:-Ofast /clang:-ffast-math /Oi /Ot /Gy /Zi /MD /Ob2 /Oy- /Zc:inline /EHsc /fp:fast -D_ITERATOR_DEBUG_LEVEL=0")
endif()
add_compile_options(
$<$<CONFIG:Debug>:/Od>
$<$<CONFIG:Debug>:/MDd>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:/O2>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:/MD>
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:/GS>
$<$<CONFIG:Release>:/Oi>
$<$<CONFIG:Release>:/Ot>
$<$<CONFIG:Release>:/Gy>
$<$<CONFIG:Release>:/Oy->
$<$<CONFIG:Release>:/Zc:inline>
$<$<CONFIG:Release>:/fp:fast>
/Zi
/EHsc
/permissive-
/W3
/c
/Zc:__cplusplus
/Zc:forScope
/Zc:rvalueCast
/Zc:strictStrings
/Zc:ternary
/nologo
)
if (ADDRESS_SIZE EQUAL 32)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
endif (ADDRESS_SIZE EQUAL 32)
add_link_options(
/DEBUG:FULL
/IGNORE:4099
/NODEFAULTLIB:LIBCMT
$<$<CONFIG:Debug>:/NODEFAULTLIB:LIBCMTD>
$<$<CONFIG:Debug>:/NODEFAULTLIB:MSVCRT>
)
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR FULL_DEBUG_SYMS OR USE_SENTRY)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FULL")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:FULL")
if (ADDRESS_SIZE EQUAL 32)
add_compile_options(/arch:SSE2)
elseif (USE_AVX2)
add_compile_options(/arch:AVX2)
elseif (USE_AVX)
add_compile_options(/arch:AVX)
elseif (USE_SSE42)
add_compile_definitions(__SSE3__=1 __SSSE3__=1 __SSE4__=1 __SSE4_1__=1 __SSE4_2__=1)
else ()
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FASTLINK /IGNORE:4099")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:FASTLINK /IGNORE:4099")
add_compile_definitions(__SSE3__=1 __SSSE3__=1 __SSE4__=1 __SSE4_1__=1)
endif ()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_compile_options(/Zc:externConstexpr /Zc:referenceBinding /ZH:SHA_256)
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
add_compile_options(/Qvec /Zc:dllexportInlines- /clang:-mprefer-vector-width=128 -fno-strict-aliasing -Wno-ignored-pragma-intrinsic -Wno-unused-local-typedef)
endif()
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:LIBCMT")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTD /NODEFAULTLIB:MSVCRT")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:LIBCMT")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTD /NODEFAULTLIB:MSVCRT")
if(FAVOR_AMD AND FAVOR_INTEL)
message(FATAL_ERROR "Cannot enable FAVOR_AMD and FAVOR_INTEL at the same time")
elseif(FAVOR_AMD)
add_compile_options(/favor:AMD64)
elseif(FAVOR_INTEL)
add_compile_options(/favor:INTEL64)
endif()
if (USE_LTO)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
if(INCREMENTAL_LINK)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG:incremental")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG:incremental")
add_link_options(/LTCG:incremental)
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /LTCG")
else(INCREMENTAL_LINK)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
else()
add_link_options(/LTCG)
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /LTCG")
endif(INCREMENTAL_LINK)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:REF /OPT:ICF /INCREMENTAL:NO")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:ICF /INCREMENTAL:NO")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /Gy /Gw")
endif()
add_link_options(
$<$<CONFIG:Release>:/OPT:REF>
$<$<CONFIG:Release>:/OPT:ICF>
$<$<CONFIG:Release>:/INCREMENTAL:NO>
)
add_compile_options(/GL /Gy /Gw)
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
if(INCREMENTAL_LINK)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto=thin -fwhole-program-vtables /clang:-fforce-emit-vtables")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=thin -fwhole-program-vtables /clang:-fforce-emit-vtables")
else(INCREMENTAL_LINK)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto=full -fwhole-program-vtables /clang:-fforce-emit-vtables")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=full -fwhole-program-vtables /clang:-fforce-emit-vtables")
endif(INCREMENTAL_LINK)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:REF /OPT:ICF")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:ICF")
add_compile_options(-flto=thin -fwhole-program-vtables /clang:-fforce-emit-vtables)
else()
add_compile_options(-flto=full -fwhole-program-vtables /clang:-fforce-emit-vtables)
endif()
add_link_options(
$<$<CONFIG:Release>:/OPT:REF>
$<$<CONFIG:Release>:/OPT:ICF>
)
endif()
elseif (INCREMENTAL_LINK)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /INCREMENTAL")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /INCREMENTAL")
add_link_options($<$<CONFIG:Release>:/INCREMENTAL>)
else ()
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /INCREMENTAL:NO")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /INCREMENTAL:NO")
add_link_options(
$<$<CONFIG:Release>:/OPT:REF>
$<$<CONFIG:Release>:/OPT:ICF>
$<$<CONFIG:Release>:/INCREMENTAL:NO>
)
endif ()
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
......@@ -140,230 +184,124 @@ if (WINDOWS)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /defaultlib:\"${CLANG_RT}\"")
endif()
set(GLOBAL_CXX_FLAGS
"/GS /W3 /c /Zc:__cplusplus /Zc:forScope /Zc:rvalueCast /Zc:strictStrings /Zc:ternary /nologo"
)
if (ADDRESS_SIZE EQUAL 32)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:SSE2")
elseif (USE_AVX2)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:AVX2")
add_definitions(/DAL_AVX2=1 /DAL_AVX=1)
elseif (USE_AVX)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:AVX")
add_definitions(/DAL_AVX=1)
elseif (USE_SSE42)
add_definitions(/D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1 /D__SSE4_2__=1)
else()
add_definitions(/D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1)
endif ()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /permissive- /Zc:externConstexpr /Zc:referenceBinding /ZH:SHA_256")
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /Qvec /Zc:dllexportInlines- /clang:-mprefer-vector-width=128 -fno-strict-aliasing -Wno-ignored-pragma-intrinsic -Wno-unused-local-typedef")
endif()
if(FAVOR_AMD AND FAVOR_INTEL)
message(FATAL_ERROR "Cannot enable FAVOR_AMD and FAVOR_INTEL at the same time")
elseif(FAVOR_AMD)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /favor:AMD64")
elseif(FAVOR_INTEL)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /favor:INTEL64")
endif()
if (NOT DISABLE_FATAL_WARNINGS)
set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /WX")
add_compile_options(/WX)
endif (NOT DISABLE_FATAL_WARNINGS)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GLOBAL_CXX_FLAGS}" CACHE STRING "C++ compiler debug options" FORCE)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${GLOBAL_CXX_FLAGS}" CACHE STRING "C++ compiler release-with-debug options" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GLOBAL_CXX_FLAGS}" CACHE STRING "C++ compiler release options" FORCE)
add_definitions(
/DLL_WINDOWS=1
/DNOMINMAX
/DUNICODE
/D_UNICODE
/D_CRT_SECURE_NO_WARNINGS
/D_CRT_NONSTDC_NO_DEPRECATE
/D_WINSOCK_DEPRECATED_NO_WARNINGS
/DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE
/DBOOST_ALLOW_DEPRECATED_HEADERS
/D_SILENCE_CXX20_CISO646_REMOVED_WARNING
)
# library linkage defines
add_definitions(
/DCURL_STATICLIB=1
/DURI_STATIC_BUILD=1
/DLIBXML_STATIC=1
/DHUNSPELL_STATIC=1
/DXML_STATIC=1
/DXMLRPCEPI_STATIC=1
/DAPR_DECLARE_STATIC=1
/DAPU_DECLARE_STATIC=1
/DAPI_DECLARE_STATIC=1
)
string(REPLACE "/Ob2" "/Ob3" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
string(REPLACE "/Ob2" "/Ob3" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
# configure win32 API for 7 and above compatibility
set(WINVER "0x0601" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
add_compile_definitions(WINVER=${WINVER} _WIN32_WINNT=${WINVER})
endif (WINDOWS)
if (LINUX)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(ALCHEMY_GLOBAL_DEFS "-DLL_LINUX=1 -DAPPID=secondlife -DLL_IGNORE_SIGCHLD -D_REENTRANT -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DGTK_DISABLE_SINGLE_INCLUDES")
set(ALCHEMY_GLOBAL_CFLAGS "-fvisibility=hidden -fexceptions -fno-math-errno -fno-strict-aliasing -fsigned-char -g -gz -pthread")
add_compile_definitions(
LL_LINUX=1
APPID=secondlife
LL_IGNORE_SIGCHLD
_REENTRANT
$<$<CONFIG:Release>:_FORTIFY_SOURCE=2>
GDK_DISABLE_DEPRECATED
GTK_DISABLE_DEPRECATED
GSEAL_ENABLE
GTK_DISABLE_SINGLE_INCLUDES
)
add_compile_options(
$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-fstack-protector>
-fvisibility=hidden
-fexceptions
-fno-math-errno
-fno-strict-aliasing
-fsigned-char
-g
-gz
-pthread
)
if (USE_AVX2)
set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mavx2")
add_compile_options(-mavx2)
elseif (USE_AVX)
set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mavx")
add_compile_options(-mavx)
elseif (USE_SSE42)
set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2")
add_compile_options(-mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2)
else()
set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1")
add_compile_options(-mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1)
endif ()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ALCHEMY_GLOBAL_DEFS} ${ALCHEMY_GLOBAL_CFLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ALCHEMY_GLOBAL_DEFS} ${ALCHEMY_GLOBAL_CFLAGS}")
if (USE_LTO)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto=thin -fwhole-program-vtables -fforce-emit-vtables")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=thin -fwhole-program-vtables -fforce-emit-vtables")
add_compile_options(-flto=thin -fwhole-program-vtables -fforce-emit-vtables)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto=auto -fno-fat-lto-objects")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=auto -fno-fat-lto-objects")
add_compile_options(-flto=auto -fno-fat-lto-objects)
endif ()
endif ()
endif (USE_LTO)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
if (USE_ASAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-recover=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address")
add_compile_options(-fsanitize=address -fsanitize-recover=address)
link_libraries(-lasan)
endif (USE_ASAN)
if (USE_LEAKSAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
elseif (USE_LEAKSAN)
add_compile_options(-fsanitize=leak)
link_libraries(-llsan)
endif (USE_LEAKSAN)
if (USE_UBSAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -fno-sanitize=vptr")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize=vptr")
elseif (USE_UBSAN)
add_compile_options(-fsanitize=undefined -fno-sanitize=vptr)
link_libraries(-lubsan)
endif (USE_UBSAN)
if (USE_THDSAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
endif (USE_THDSAN)
endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
CHECK_CXX_COMPILER_FLAG(-Og HAS_DEBUG_OPTIMIZATION)
CHECK_CXX_COMPILER_FLAG(-fstack-protector HAS_STACK_PROTECTOR)
if (${CMAKE_BUILD_TYPE} STREQUAL "Release")
if (HAS_STACK_PROTECTOR)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
elseif (USE_THDSAN)
add_compile_options(-fsanitize=thread)
endif ()
endif ()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2")
endif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
if (HAS_DEBUG_OPTIMIZATION)
set(CMAKE_CXX_FLAGS_DEBUG "-Og ${CMAKE_CXX_FLAGS_DEBUG}")
else (HAS_DEBUG_OPTIMIZATION)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
endif (HAS_DEBUG_OPTIMIZATION)
if (USE_ASAN OR USE_LEAKSAN OR USE_UBSAN OR USE_THDSAN)
if (HAS_DEBUG_OPTIMIZATION)
set(CMAKE_CXX_FLAGS_RELEASE "-Og -fno-omit-frame-pointer ${CMAKE_CXX_FLAGS_RELEASE}")
add_compile_options(-Og -fno-omit-frame-pointer)
else ()
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -fno-omit-frame-pointer ${CMAKE_CXX_FLAGS_RELEASE}")
endif()
else ()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}")
add_compile_options(-O3 -ffast-math)
endif ()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND USE_LTO)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
add_link_options(-fuse-ld=lld)
endif()
# Enable these flags so we have a read only GOT and some linking opts
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now -Wl,--as-needed")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now -Wl,--as-needed")
endif (LINUX)
add_link_options("LINKER:-z,relro" "LINKER:-z,now" "LINKER:--as-needed")
endif ()
if (DARWIN)
add_definitions(-DLL_DARWIN=1 -DGL_SILENCE_DEPRECATION=1)
set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
set(DARWIN_extra_cstar_flags "-gdwarf-2")
add_compile_options(-O3 ${DARWIN_extra_cstar_flags})
add_definitions(
-DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE=1
-DBOOST_ALLOW_DEPRECATED_HEADERS=1
)
endif (DARWIN)
add_compile_definitions(LL_DARWIN=1 GL_SILENCE_DEPRECATION=1)
add_link_options("LINKER:-headerpad_max_install_names" "LINKER:-search_paths_first")
add_compile_options(-O3 -gdwarf-2)
endif ()
if (LINUX OR DARWIN)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-ignored-qualifiers -Wno-unused-function")
add_compile_options(-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-ignored-qualifiers -Wno-unused-function)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-unused-local-typedef -Wno-unknown-warning-option")
add_compile_options(-Wall -Wno-sign-compare -Wno-trigraphs -Wno-unused-local-typedef -Wno-unknown-warning-option)
endif()
CHECK_CXX_COMPILER_FLAG(-Wdeprecated-copy HAS_DEPRECATED_COPY)
if (HAS_DEPRECATED_COPY)
set(GCC_WARNINGS "${GCC_WARNINGS} -Wno-deprecated-copy")
add_compile_options(-Wno-deprecated-copy)
endif()
if (NOT DISABLE_FATAL_WARNINGS)
set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
add_compile_options(-Werror)
endif (NOT DISABLE_FATAL_WARNINGS)
set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder")
set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
add_compile_options(-m${ADDRESS_SIZE})
endif (LINUX OR DARWIN)
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
add_definitions(-DOPENSSL_API_COMPAT=0x30000000L)
endif ()
option(RELEASE_SHOW_ASSERTS "Enable asserts in release builds" OFF)
if(RELEASE_SHOW_ASSERTS)
add_definitions(-DRELEASE_SHOW_ASSERT=1)
else()
add_definitions(-URELEASE_SHOW_ASSERT)
add_compile_definitions(RELEASE_SHOW_ASSERT=1)
endif()
if(HAVOK_TPV)
add_definitions(-DHAVOK_BUILD=1)
endif(HAVOK_TPV)
option(ENABLE_TIMING "Enable all fast timers" ON)
if(ENABLE_TIMING)
add_definitions(-DAL_ENABLE_ALL_TIMERS=1)
else()
add_definitions(-DAL_ENABLE_ALL_TIMERS=0)
endif()
if(SDL_FOUND)
add_definitions(-DLL_SDL=1)
add_compile_definitions(AL_ENABLE_ALL_TIMERS=1)
endif()
......@@ -18,6 +18,7 @@ if (WINDOWS)
debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}aprutil-1.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib
)
target_compile_definitions( ll::apr INTERFACE APR_DECLARE_STATIC=1 APU_DECLARE_STATIC=1 API_DECLARE_STATIC=1)
elseif (DARWIN)
target_link_libraries( ll::apr INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.a
......
......@@ -28,8 +28,6 @@ if (WINDOWS)
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libboost_program_options-mt-gd${addrsfx}.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libboost_regex-mt${addrsfx}.lib
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libboost_regex-mt-gd${addrsfx}.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libboost_signals-mt${addrsfx}.lib
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libboost_signals-mt-gd${addrsfx}.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libboost_stacktrace_windbg-mt${addrsfx}.lib
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libboost_stacktrace_windbg-mt-gd${addrsfx}.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libboost_system-mt${addrsfx}.lib
......@@ -51,8 +49,6 @@ elseif (LINUX)
debug boost_program_options-mt${addrsfx}-d
optimized boost_regex-mt${addrsfx}
debug boost_regex-mt${addrsfx}-d
optimized boost_signals-mt${addrsfx}
debug boost_signals-mt${addrsfx}-d
optimized boost_system-mt${addrsfx}
debug boost_system-mt${addrsfx}-d
optimized boost_thread-mt${addrsfx}
......@@ -73,8 +69,6 @@ elseif (DARWIN)
debug boost_program_options-mt-d
optimized boost_regex-mt
debug boost_regex-mt-d
optimized boost_signals-mt
debug boost_signals-mt-d
optimized boost_system-mt
debug boost_system-mt-d
optimized boost_thread-mt
......@@ -84,3 +78,4 @@ elseif (DARWIN)
)
endif (WINDOWS)
target_compile_definitions( ll::boost INTERFACE BOOST_ALLOW_DEPRECATED_HEADERS=1 BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE=1 BOOST_BIND_GLOBAL_PLACEHOLDERS=1)
......@@ -2,6 +2,8 @@
# Construct the version and copyright information based on package data.
include(FindAutobuild)
include_guard()
# packages-formatter.py runs autobuild install --versions, which needs to know
# the build_directory, which (on Windows) depends on AUTOBUILD_ADDRSIZE.
# Within an autobuild build, AUTOBUILD_ADDRSIZE is already set. But when
......
# -*- cmake -*-
include_guard()
option(REVISION_FROM_VCS "Get current revision from vcs" ON)
# Construct the viewer channel from environment variables or defaults
if(NOT DEFINED VIEWER_CHANNEL)
......@@ -139,3 +141,18 @@ if (NOT DEFINED VIEWER_COMMIT_SHORT_SHA)
set(VIEWER_COMMIT_SHORT_SHA 0)
endif()
endif (NOT DEFINED VIEWER_COMMIT_SHORT_SHA)
add_library( ll::versioninfo INTERFACE IMPORTED )
target_compile_definitions( ll::versioninfo INTERFACE
$<$<CONFIG:Debug>:LLBUILD_CONFIG="Debug">
$<$<CONFIG:RelWithDebInfo>:LLBUILD_CONFIG="RelWithDebInfo">
$<$<CONFIG:Release>:LLBUILD_CONFIG="Release">
LL_VIEWER_CHANNEL="${VIEWER_CHANNEL}"
LL_VIEWER_CHANNEL_CODENAME="${VIEWER_CHANNEL_CODENAME_INTERNAL}"
LL_VIEWER_CHANNEL_AND_VERSION="${VIEWER_VERSION_AND_CHANNEL}"
LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}
LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}
LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}
LL_VIEWER_COMMIT_SHA="${VIEWER_COMMIT_LONG_SHA}"
LL_VIEWER_COMMIT_SHORT_SHA="${VIEWER_COMMIT_SHORT_SHA}"
)
\ No newline at end of file
......@@ -39,8 +39,8 @@ set(cmake_SOURCE_FILES
LLTestCommand.cmake
LLWindow.cmake
Linking.cmake
Meshoptimizer.cmake
NDOF.cmake
NVAPI.cmake
OPENAL.cmake
OpenGL.cmake
OpenJPEG.cmake
......@@ -49,7 +49,6 @@ set(cmake_SOURCE_FILES
PluginAPI.cmake
Prebuilt.cmake
PulseAudio.cmake
Python.cmake
SDL2.cmake
Sentry.cmake
TemplateCheck.cmake
......
......@@ -11,19 +11,29 @@ if (WINDOWS)
target_link_libraries(ll::libcurl INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcurld.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcurl.lib
ll::openssl
ll::nghttp2
ll::zlib-ng
Normaliz.lib
Iphlpapi.lib
)
target_compile_definitions( ll::libcurl INTERFACE CURL_STATICLIB=1)
elseif(DARWIN)
target_link_libraries(ll::libcurl INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcurld.a
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcurl.a
ll::openssl
ll::nghttp2
ll::zlib-ng
resolv
)
else ()
target_link_libraries(ll::libcurl INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcurld.a
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcurl.a
ll::openssl
ll::nghttp2
ll::zlib-ng
)
endif ()
target_include_directories( ll::libcurl SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
......@@ -7,6 +7,8 @@
include(CMakeCopyIfDifferent)
include(Linking)
include(FMODSTUDIO)
include(OPENAL)
include(DiscordSDK)
include(Sentry)
# When we copy our dependent libraries, we almost always want to copy them to
......@@ -15,34 +17,17 @@ include(Sentry)
# copy_if_different commands. Encapsulate that usage.
# Pass FROM_DIR, TARGETS and the files to copy. TO_DIR is implicit.
# to_staging_dirs diverges from copy_if_different in that it appends to TARGETS.
MACRO(to_debug_staging_dirs from_dir targets)
"${SHARED_LIB_STAGING_DIR_RELEASE}"
copy_if_different("${from_dir}" "${staging_dir}" out_targets ${ARGN})
list(APPEND "${targets}" "${out_targets}")
endforeach()
ENDMACRO(to_debug_staging_dirs from_dir to_dir targets)
MACRO(to_relwithdeb_staging_dirs from_dir targets)
foreach(staging_dir
macro(to_staging_dirs from_dir targets)
set( targetDir "${SHARED_LIB_STAGING_DIR}")
copy_if_different("${from_dir}" "${targetDir}" out_targets ${ARGN})
list(APPEND "${targets}" "${out_targets}")
endmacro()
ENDMACRO(to_relwithdeb_staging_dirs from_dir to_dir targets)
MACRO(to_release_staging_dirs from_dir targets)
foreach(staging_dir
"${SHARED_LIB_STAGING_DIR_RELEASE}")
copy_if_different("${from_dir}" "${staging_dir}" out_targets ${ARGN})
list(APPEND "${targets}" "${out_targets}")
endforeach()
ENDMACRO(to_staging_dirs from_dir to_dir targets)
###################################################################
# set up platform specific lists of files that need to be copied
###################################################################
if(WINDOWS)
z
#*******************************
# VIVOX - *NOTE: no debug version
set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
......@@ -50,7 +35,7 @@ z
# ND, it seems there is no such thing defined. At least when building a viewer
# Does this maybe matter on some LL buildserver? Otherwise this and the snippet using slvoice_src_dir
# can all go
if( ARCH_PREBUILT_BIN_RELEASE )
if( ARCH_PREBUILT_BIN_DIRS_RELEASE )
set(slvoice_src_dir "${ARCH_PREBUILT_BIN_DIRS_RELEASE}")
endif()
set(slvoice_files SLVoice.exe )
......@@ -83,7 +68,7 @@ z
# Filenames are different for 32/64 bit BugSplat file and we don't
# have any control over them so need to branch.
if (USE_SENTRY)
if (TARGET al::sentry)
list(APPEND release_files sentry.dll)
endif ()
......@@ -97,7 +82,7 @@ z
list(APPEND release_files OpenAL32.dll alut.dll)
endif ()
if(USE_DISCORD)
if(TARGET al::discord-gamesdk)
list(APPEND release_files discord_game_sdk.dll)
endif()
elseif(DARWIN)
......@@ -120,17 +105,11 @@ elseif(DARWIN)
list(APPEND release_files libfmod.dylib)
endif ()
if(USE_DISCORD)
if(TARGET al::discord-gamesdk)
list(APPEND release_files discord_game_sdk.dylib)
endif()
elseif(LINUX)
# linux is weird, multiple side by side configurations aren't supported
# and we don't seem to have any debug shared libs built yet anyways...
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}")
set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}")
set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}")
set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
set(vivox_libs
libsndfile.so.1
......@@ -166,7 +145,7 @@ elseif(LINUX)
list(APPEND release_files libfmod.so)
endif ()
if(USE_DISCORD)
if(TARGET al::discord-gamesdk)
list(APPEND release_files libdiscord_game_sdk.so)
endif()
......@@ -195,75 +174,33 @@ endif(WINDOWS)
# Done building the file lists, now set up the copy commands.
################################################################
if (GEN_IS_MULTI_CONFIG OR UPPERCASE_CMAKE_BUILD_TYPE MATCHES DEBUG)
copy_if_different(
${slvoice_src_dir}
"${SHARED_LIB_STAGING_DIR_DEBUG}"
out_targets
${slvoice_files}
)
list(APPEND third_party_targets ${out_targets})
to_debug_staging_dirs(
${vivox_lib_dir}
third_party_targets
${vivox_libs}
)
to_debug_staging_dirs(
${debug_src_dir}
third_party_targets
${debug_files}
)
endif()
# Curiously, slvoice_files are only copied to SHARED_LIB_STAGING_DIR_RELEASE.
# It's unclear whether this is oversight or intentional, but anyway leave the
# single copy_if_different command rather than using to_staging_dirs.
if (GEN_IS_MULTI_CONFIG OR UPPERCASE_CMAKE_BUILD_TYPE MATCHES RELWITHDEBINFO)
if( slvoice_src_dir )
copy_if_different(
${slvoice_src_dir}
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
"${SHARED_LIB_STAGING_DIR}"
out_targets
${slvoice_files}
)
list(APPEND third_party_targets ${out_targets})
to_relwithdeb_staging_dirs(
${vivox_lib_dir}
third_party_targets
${vivox_libs}
)
to_relwithdeb_staging_dirs(
${release_src_dir}
third_party_targets
${release_files}
)
endif()
if (GEN_IS_MULTI_CONFIG OR UPPERCASE_CMAKE_BUILD_TYPE MATCHES RELEASE)
copy_if_different(
${slvoice_src_dir}
"${SHARED_LIB_STAGING_DIR_RELEASE}"
out_targets
${slvoice_files}
)
list(APPEND third_party_targets ${out_targets})
to_release_staging_dirs(
to_staging_dirs(
${vivox_lib_dir}
third_party_targets
${vivox_libs}
)
to_release_staging_dirs(
to_staging_dirs(
${release_src_dir}
third_party_targets
${release_files}
)
endif()
if(NOT USESYSTEMLIBS)
add_custom_target(
stage_third_party_libs ALL
DEPENDS ${third_party_targets}
)
endif(NOT USESYSTEMLIBS)
# -*- cmake -*-
include(Linking)
include(Prebuilt)
include(Variables)
include_guard()
#Discord Integration
option(USE_DISCORD "Enable Discord client integration" OFF)
if(DEFINED ENV{DISCORD_CLIENTID})
set(DISCORD_CLIENTID $ENV{DISCORD_CLIENTID} CACHE STRING "Discord Client ID" FORCE)
else()
set(DISCORD_CLIENTID "" CACHE STRING "Discord Client ID")
endif()
if (INSTALL_PROPRIETARY)
set(USE_DISCORD ON CACHE BOOL "Use Discord SDK" FORCE)
if (DISCORD_CLIENTID)
set(USE_DISCORD ON CACHE BOOL "Use Discord SDK" FORCE)
else ()
set(USE_DISCORD OFF CACHE BOOL "Use Discord SDK" FORCE)
endif ()
endif ()
if (USE_DISCORD)
if (STANDALONE)
# In that case, we use the version of the library installed on the system
set(DISCORD_FIND_REQUIRED ON)
include(FindFMODSTUDIO)
else (STANDALONE)
add_library( al::discord-gamesdk INTERFACE IMPORTED )
use_prebuilt_binary(discord-gamesdk)
if (WINDOWS)
set(DISCORD_LIBRARY
target_link_libraries( al::discord-gamesdk INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/discordgamesdk.lib
${ARCH_PREBUILT_DIRS_RELEASE}/discord_game_sdk.dll.lib)
elseif (DARWIN)
set(DISCORD_LIBRARY
target_link_libraries( al::discord-gamesdk INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/libdiscordgamesdk.a
${ARCH_PREBUILT_DIRS_RELEASE}/discord_game_sdk.dylib)
elseif (LINUX)
set(DISCORD_LIBRARY
target_link_libraries( al::discord-gamesdk INTERFACE
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libdiscord_game_sdk.so
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libdiscordgamesdk.a)
endif (WINDOWS)
set(DISCORD_LIBRARIES ${DISCORD_LIBRARY})
set(DISCORD_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/discord/)
add_definitions(-DUSE_DISCORD=1)
endif (STANDALONE)
target_include_directories( al::discord-gamesdk SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/discord/)
if(DISCORD_CLIENTID STREQUAL "")
message(FATAL_ERROR "You must set a ClientID with -DDISCORD_CLIENTID= to enable Discord integration")
endif()
target_compile_definitions( al::discord-gamesdk INTERFACE AL_DISCORD=1 DISCORD_CLIENTID=${DISCORD_CLIENTID})
endif (USE_DISCORD)
......@@ -7,6 +7,7 @@ add_library( ll::expat INTERFACE IMPORTED )
use_system_binary(expat)
use_prebuilt_binary(expat)
if (WINDOWS)
target_compile_definitions( ll::expat INTERFACE XML_STATIC=1)
target_link_libraries( ll::expat INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libexpatd.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libexpat.lib)
......
# -*- cmake -*-
include(Linking)
include(Prebuilt)
if (USESYSTEMLIBS)
include(FindPkgConfig)
pkg_check_modules(EPOXY REQUIRED epoxy)
else (USESYSTEMLIBS)
#use_prebuilt_binary(libepoxy)
set(EPOXY_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/)
if (WINDOWS)
set(EPOXY_LIBRARIES
debug ${ARCH_PREBUILT_DIRS_DEBUG}/epoxy.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/epoxy.lib)
else ()
set(EPOXY_LIBRARIES epoxy)
endif()
endif (USESYSTEMLIBS)
\ No newline at end of file
# -*- cmake -*-
# - Find FMODSTUDIO
# Find the FMODSTUDIO includes and library
# This module defines
# FMODSTUDIO_INCLUDE_DIR, where to find fmod.h and fmod_errors.h
# FMODSTUDIO_LIBRARIES, the libraries needed to use FMODSTUDIO.
# FMODSTUDIO, If false, do not try to use FMODSTUDIO.
# also defined, but not for general use are
# FMODSTUDIO_LIBRARY, where to find the FMODSTUDIO library.
FIND_PATH(FMODSTUDIO_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
SET(FMODSTUDIO_NAMES ${FMODSTUDIO_NAMES} fmod fmod_vc)
FIND_LIBRARY(FMODSTUDIO_LIBRARY
NAMES ${FMODSTUDIO_NAMES}
PATH_SUFFIXES fmod
)
IF (FMODSTUDIO_SDK_DIR OR WINDOWS)
if(WINDOWS)
set(FMODSTUDIO_SDK_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows" CACHE PATH "Path to FMODSTUDIO")
STRING(REGEX REPLACE "\\\\" "/" FMODSTUDIO_SDK_DIR ${FMODSTUDIO_SDK_DIR})
endif(WINDOWS)
find_library(FMODSTUDIO_LIBRARY
fmod_vc fmodL_vc
PATHS
${FMODSTUDIO_SDK_DIR}/api/lib
${FMODSTUDIO_SDK_DIR}/api
${FMODSTUDIO_SDK_DIR}
)
find_path(FMODSTUDIO_INCLUDE_DIR fmod.h
${FMODSTUDIO_SDK_DIR}/api/inc
${FMODSTUDIO_SDK_DIR}/api
${FMODSTUDIO_SDK_DIR}
)
find_path(FMODSTUDIO_INCLUDE_DIR fmod.h
${FMODSTUDIO_SDK_DIR}/api/inc
${FMODSTUDIO_SDK_DIR}/api
${FMODSTUDIO_SDK_DIR}
)
IF (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
SET(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
SET(FMODSTUDIO_FOUND "YES")
endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
ENDIF (FMODSTUDIO_SDK_DIR OR WINDOWS)
IF (FMODSTUDIO_FOUND)
IF (NOT FMODSTUDIO_FIND_QUIETLY)
MESSAGE(STATUS "Found FMODSTUDIO: ${FMODSTUDIO_LIBRARIES}")
ENDIF (NOT FMODSTUDIO_FIND_QUIETLY)
ELSE (FMODSTUDIO_FOUND)
IF (FMODSTUDIO_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find FMODSTUDIO library")
ENDIF (FMODSTUDIO_FIND_REQUIRED)
ENDIF (FMODSTUDIO_FOUND)
# Deprecated declarations.
SET (NATIVE_FMODSTUDIO_INCLUDE_PATH ${FMODSTUDIO_INCLUDE_DIR} )
GET_FILENAME_COMPONENT (NATIVE_FMODSTUDIO_LIB_PATH ${FMODSTUDIO_LIBRARY} PATH)
MARK_AS_ADVANCED(
FMODSTUDIO_LIBRARY
FMODSTUDIO_INCLUDE_DIR
)
......@@ -9,6 +9,7 @@ add_library( ll::hunspell INTERFACE IMPORTED )
use_system_binary(hunspell)
use_prebuilt_binary(libhunspell)
if (WINDOWS)
target_compile_definitions( ll::hunspell INTERFACE HUNSPELL_STATIC=1)
target_link_libraries( ll::hunspell INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libhunspell.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libhunspell.lib
......
......@@ -39,7 +39,6 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
set(alltest_LIBRARIES
llcommon
ll::googlemock
)
if(NOT "${project}" STREQUAL "llmath")
# add llmath as a dep unless the tested module *is* llmath!
......@@ -119,7 +118,7 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
endif()
# Add to project
target_link_libraries(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
target_link_libraries(PROJECT_${project}_TEST_${name} PUBLIC ${alltest_LIBRARIES} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
add_dependencies( PROJECT_${project}_TEST_${name} ${alltest_DEP_TARGETS})
# Compile-time Definitions
GET_OPT_SOURCE_FILE_PROPERTY(${name}_test_additional_CFLAGS ${source} LL_TEST_ADDITIONAL_CFLAGS)
......@@ -202,7 +201,6 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
set(libraries
${library_dependencies}
ll::googlemock
)
# Add test executable build target
......@@ -239,7 +237,7 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})")
endif()
target_link_libraries(INTEGRATION_TEST_${testname} ${libraries})
target_link_libraries(INTEGRATION_TEST_${testname} PUBLIC ${libraries})
target_include_directories (INTEGRATION_TEST_${testname} PRIVATE ${LIBS_OPEN_DIR}/test )
# Create the test running command
......
# -*- cmake -*-
include(Prebuilt)
# USE_KDU can be set when launching cmake as an option using the argument -DUSE_KDU:BOOL=ON
# When building using proprietary binaries though (i.e. having access to LL private servers),
# we always build with KDU
......@@ -11,8 +11,13 @@ include_guard()
add_library( ll::kdu INTERFACE IMPORTED )
if (USE_KDU)
include(Prebuilt)
use_prebuilt_binary(kdu)
# Our KDU package is built with KDU_X86_INTRINSICS in its .vcxproj file.
# Unless that macro is also set for every consumer build, KDU freaks out,
# spamming the viewer log with alignment FUD.
target_compile_definitions( ll::kdu INTERFACE KDU_X86_INTRINSICS=1 KDU_NO_THREADS KDU_NO_AVX KDU_NO_AVX2)
if (WINDOWS)
target_link_libraries( ll::kdu INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/kdud.lib
......@@ -24,6 +29,5 @@ if (USE_KDU)
target_include_directories( ll::kdu SYSTEM INTERFACE
${AUTOBUILD_INSTALL_DIR}/include/kdu
${LIBS_OPEN_DIR}/llkdu
)
endif (USE_KDU)
......@@ -26,6 +26,7 @@ if (HAVOK)
set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/src)
target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions)
target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/llphysicsextensions)
target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1)
elseif (HAVOK_TPV)
use_prebuilt_binary(llphysicsextensions_tpv)
if(WINDOWS)
......@@ -34,6 +35,7 @@ elseif (HAVOK_TPV)
target_link_libraries( llphysicsextensions_impl INTERFACE ${ARCH_PREBUILT_DIRS}/libllphysicsextensions_tpv.a)
endif()
target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/llphysicsextensions)
target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1)
else (HAVOK)
if (NOT USE_LL_STUBS)
use_prebuilt_binary( ndPhysicsStub )
......
......@@ -9,9 +9,6 @@ include(ZLIBNG)
include_guard()
add_library( ll::pcre INTERFACE IMPORTED )
add_library( ll::minizip-ng INTERFACE IMPORTED )
add_library( ll::libxml INTERFACE IMPORTED )
add_library( ll::colladadom INTERFACE IMPORTED )
# ND, needs fixup in collada conan pkg
......@@ -22,25 +19,7 @@ if( USE_CONAN )
endif()
use_system_binary( colladadom )
use_prebuilt_binary(colladadom)
use_prebuilt_binary(minizip-ng) # needed for colladadom
use_prebuilt_binary(pcre)
use_prebuilt_binary(libxml2)
target_link_libraries( ll::pcre INTERFACE pcrecpp pcre )
if (WINDOWS)
target_link_libraries( ll::minizip-ng INTERFACE libminizip )
else()
target_link_libraries( ll::minizip-ng INTERFACE minizip )
endif()
if (WINDOWS)
target_link_libraries( ll::libxml INTERFACE libxml2_a)
else()
target_link_libraries( ll::libxml INTERFACE xml2)
endif()
target_include_directories( ll::colladadom SYSTEM INTERFACE
${LIBS_PREBUILT_DIR}/include/collada
......@@ -50,9 +29,9 @@ if (WINDOWS)
target_link_libraries(ll::colladadom INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcollada14dom23-sd.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom23-s.lib
ll::libxml ll::minizip-ng )
ll::libxml2 ll::uriparser ll::minizip-ng )
elseif (DARWIN)
target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml ll::minizip-ng)
target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml2 ll::uriparser ll::minizip-ng)
elseif (LINUX)
target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml ll::minizip-ng)
target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml2 ll::uriparser ll::minizip-ng)
endif()
......@@ -25,5 +25,4 @@ elseif (LINUX)
${LIBS_PREBUILT_DIR}/lib/libvlc.a
${LIBS_PREBUILT_DIR}/lib/libvlccore.a
)
endif (WINDOWS)
endif ()
# -*- cmake -*-
include(Prebuilt)
set(LIBXML2_FIND_QUIETLY ON)
set(LIBXML2_FIND_REQUIRED ON)
include_guard()
add_library( ll::libxml2 INTERFACE IMPORTED )
if(USE_CONAN )
target_link_libraries( ll::libxml2 INTERFACE CONAN_PKG::libxml2 )
return()
endif()
if(USESYSTEMLIBS)
include(FindLibXml2)
else(USESYSTEMLIBS)
use_prebuilt_binary(libxml2)
if (WINDOWS)
set(LIBXML2_LIBRARIES
target_compile_definitions( ll::libxml2 INTERFACE LIBXML_STATIC=1)
target_link_libraries( ll::libxml2 INTERFACE
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libxml2.lib
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libxml2.lib
)
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libxml2.lib)
elseif(DARWIN)
set(LIBXML2_LIBRARIES xml2 iconv)
target_link_libraries( ll::libxml2 INTERFACE xml2 iconv)
else()
set(LIBXML2_LIBRARIES xml2)
target_link_libraries( ll::libxml2 INTERFACE xml2)
endif()
set(LIBXML2_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libxml2)
endif(USESYSTEMLIBS)
target_include_directories( ll::libxml2 SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/libxml2)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment