diff options
Diffstat (limited to 'indra/cmake')
| -rw-r--r-- | indra/cmake/00-Common.cmake | 6 | ||||
| -rw-r--r-- | indra/cmake/APR.cmake | 27 | ||||
| -rw-r--r-- | indra/cmake/Boost.cmake | 94 | ||||
| -rw-r--r-- | indra/cmake/CEFPlugin.cmake | 229 | ||||
| -rw-r--r-- | indra/cmake/CURL.cmake | 16 | ||||
| -rw-r--r-- | indra/cmake/Copy3rdPartyLibs.cmake | 60 | ||||
| -rw-r--r-- | indra/cmake/Discord.cmake | 20 | ||||
| -rw-r--r-- | indra/cmake/FMODSTUDIO.cmake | 32 | ||||
| -rw-r--r-- | indra/cmake/GLM.cmake | 2 | ||||
| -rw-r--r-- | indra/cmake/LLPrimitive.cmake | 249 | ||||
| -rw-r--r-- | indra/cmake/LibVLCPlugin.cmake | 9 | ||||
| -rw-r--r-- | indra/cmake/Meshoptimizer.cmake | 14 | ||||
| -rw-r--r-- | indra/cmake/OPENAL.cmake | 36 | ||||
| -rw-r--r-- | indra/cmake/OpenGL.cmake | 5 | ||||
| -rw-r--r-- | indra/cmake/OpenJPEG.cmake | 70 | ||||
| -rw-r--r-- | indra/cmake/Python.cmake | 67 | ||||
| -rw-r--r-- | indra/cmake/UI.cmake | 32 | ||||
| -rw-r--r-- | indra/cmake/UnixInstall.cmake | 28 | ||||
| -rw-r--r-- | indra/cmake/ViewerMiscLibs.cmake | 12 | ||||
| -rw-r--r-- | indra/cmake/WebRTC.cmake | 30 |
20 files changed, 566 insertions, 472 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 42e211c84d..3e1dab7c00 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -16,6 +16,7 @@ include_guard() include(Variables) include(Linker) +include(UnixInstall) # We go to some trouble to set LL_BUILD to the set of relevant compiler flags. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{LL_BUILD}") @@ -127,7 +128,7 @@ endif (NOT CMAKE_CXX_COMPILER_ID MATCHES GNU AND WINDOWS) if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set( CMAKE_BUILD_WITH_INSTALL_RPATH TRUE ) - set( CMAKE_INSTALL_RPATH $ORIGIN $ORIGIN/../lib ) + set( CMAKE_INSTALL_RPATH ${INSTALL_LIBRARY_DIR} ) set(CMAKE_EXE_LINKER_FLAGS "-Wl,--exclude-libs,ALL") find_program(CCACHE_EXE ccache) @@ -153,7 +154,7 @@ if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") --param asan-stack=0 ) add_link_options(-fsanitize=address) - else() + elseif( NOT (${LINUX_DISTRO} MATCHES freedesktop) ) add_compile_definitions( _FORTIFY_SOURCE=2 ) endif() @@ -190,6 +191,7 @@ if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set(CLANG_WARNINGS ${GCC_CLANG_COMPATIBLE_WARNINGS} # Put clang specific warning configuration here + -Wno-inconsistent-missing-override ) set(GCC_WARNINGS diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 4ce0d47f7f..ef541388d8 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -5,21 +5,22 @@ include_guard() add_library( ll::apr INTERFACE IMPORTED ) -if (WINDOWS) - target_include_directories(ll::apr SYSTEM INTERFACE ${prefix_result}/../include) - target_link_directories(ll::apr INTERFACE ${prefix_result}) - target_link_libraries(ll::apr INTERFACE libapr-1 libaprutil-1) -else () - include(FindPkgConfig) - pkg_check_modules(Apr REQUIRED apr-1 apr-util-1) - target_include_directories(ll::apr SYSTEM INTERFACE ${Apr_INCLUDE_DIRS}) - target_link_directories(ll::apr INTERFACE ${Apr_LIBRARY_DIRS}) - target_link_libraries(ll::apr INTERFACE ${Apr_LIBRARIES}) +if (NOT (${LINUX_DISTRO} MATCHES freedesktop)) + if (WINDOWS) + target_include_directories(ll::apr SYSTEM INTERFACE ${prefix_result}/../include) + target_link_directories(ll::apr INTERFACE ${prefix_result}) + target_link_libraries(ll::apr INTERFACE libapr-1 libaprutil-1) + else () + include(FindPkgConfig) + pkg_check_modules(Apr REQUIRED apr-1 apr-util-1) + target_include_directories(ll::apr SYSTEM INTERFACE ${Apr_INCLUDE_DIRS}) + target_link_directories(ll::apr INTERFACE ${Apr_LIBRARY_DIRS}) + target_link_libraries(ll::apr INTERFACE ${Apr_LIBRARIES}) + endif () + return () endif () -return () - -use_system_binary( apr apr-util ) +#use_system_binary( apr apr-util ) use_prebuilt_binary(apr_suite) if (WINDOWS) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 8e6764c93b..9746704907 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -12,32 +12,45 @@ if (DARWIN) elseif (WINDOWS) target_include_directories( ll::boost SYSTEM INTERFACE ${prefix_result}/../include) target_link_directories( ll::boost INTERFACE ${prefix_result}) - if ($ENV{MSYSTEM_CARCH} MATCHES aarch64) - set(sfx -vc143-mt-a64-1_91) + # Detect the actual toolset/version suffix from whatever vcpkg installed. + # Glob for boost_context-*.lib and strip the known prefix to get the suffix. + file(GLOB _boost_context_libs "${prefix_result}/boost_context-*.lib") + if (_boost_context_libs) + list(GET _boost_context_libs 0 _boost_context_lib) + get_filename_component(_boost_context_name "${_boost_context_lib}" NAME_WE) + string(REPLACE "boost_context" "" sfx "${_boost_context_name}") else () - set(sfx -vc143-mt-x64-1_91) + if ($ENV{MSYSTEM_CARCH} MATCHES aarch64) + set(sfx -vc143-mt-a64-1_91) + else () + set(sfx -vc143-mt-x64-1_91) + endif () + message(WARNING "Could not detect Boost suffix via glob; using fallback '${sfx}'. " + "Check that vcpkg installed boost into ${prefix_result}.") endif () -else () +elseif (NOT (${LINUX_DISTRO} MATCHES freedesktop)) find_package( Boost ) endif () -target_link_libraries( ll::boost INTERFACE - boost_context${sfx} - boost_fiber${sfx} - boost_filesystem${sfx} - boost_program_options${sfx} - boost_thread${sfx} - boost_url${sfx} - ) -if (WINDOWS) - target_link_libraries( ll::boost INTERFACE boost_json${sfx}) -else () - target_link_libraries( ll::boost INTERFACE boost_regex${sfx}) -endif () -if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES fedora) OR DARWIN) - target_link_libraries( ll::boost INTERFACE boost_system${sfx}) +if (NOT (${LINUX_DISTRO} MATCHES freedesktop)) + target_link_libraries( ll::boost INTERFACE + boost_context${sfx} + boost_fiber${sfx} + boost_filesystem${sfx} + boost_program_options${sfx} + boost_thread${sfx} + boost_url${sfx} + ) + if (WINDOWS) + target_link_libraries( ll::boost INTERFACE boost_json${sfx}) + else () + target_link_libraries( ll::boost INTERFACE boost_regex${sfx}) + endif () + if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES fedora) OR DARWIN) + target_link_libraries( ll::boost INTERFACE boost_system${sfx}) + endif () + target_compile_definitions( ll::boost INTERFACE BOOST_BIND_GLOBAL_PLACEHOLDERS ) + return() endif () -target_compile_definitions( ll::boost INTERFACE BOOST_BIND_GLOBAL_PLACEHOLDERS ) -return() if( USE_CONAN ) target_link_libraries( ll::boost INTERFACE CONAN_PKG::boost ) @@ -55,48 +68,42 @@ if (WINDOWS) find_library(BOOST_CONTEXT_LIBRARY NAMES + libboost_context libboost_context-mt libboost_context-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_FIBER_LIBRARY NAMES + libboost_fiber libboost_fiber-mt libboost_fiber-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_FILESYSTEM_LIBRARY NAMES + libboost_filesystem libboost_filesystem-mt libboost_filesystem-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_PROGRAMOPTIONS_LIBRARY NAMES + libboost_program_options libboost_program_options-mt libboost_program_options-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - find_library(BOOST_REGEX_LIBRARY - NAMES - libboost_regex-mt - libboost_regex-mt${addrsfx} - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - - find_library(BOOST_SYSTEM_LIBRARY - NAMES - libboost_system-mt - libboost_system-mt${addrsfx} - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - find_library(BOOST_THREAD_LIBRARY NAMES + libboost_thread libboost_thread-mt libboost_thread-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_URL_LIBRARY NAMES + libboost_url libboost_url-mt libboost_url-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) @@ -105,48 +112,42 @@ else (WINDOWS) find_library(BOOST_CONTEXT_LIBRARY NAMES + boost_context boost_context-mt boost_context-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_FIBER_LIBRARY NAMES + boost_fiber boost_fiber-mt boost_fiber-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_FILESYSTEM_LIBRARY NAMES + boost_filesystem boost_filesystem-mt boost_filesystem-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_PROGRAMOPTIONS_LIBRARY NAMES + boost_program_options boost_program_options-mt boost_program_options-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - find_library(BOOST_REGEX_LIBRARY - NAMES - boost_regex-mt - boost_regex-mt${addrsfx} - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - - find_library(BOOST_SYSTEM_LIBRARY - NAMES - boost_system-mt - boost_system-mt${addrsfx} - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - find_library(BOOST_THREAD_LIBRARY NAMES + boost_thread boost_thread-mt boost_thread-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) find_library(BOOST_URL_LIBRARY NAMES + boost_url boost_url-mt boost_url-mt${addrsfx} PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) @@ -158,8 +159,6 @@ target_link_libraries(ll::boost INTERFACE ${BOOST_CONTEXT_LIBRARY} ${BOOST_FILESYSTEM_LIBRARY} ${BOOST_PROGRAMOPTIONS_LIBRARY} - ${BOOST_REGEX_LIBRARY} - ${BOOST_SYSTEM_LIBRARY} ${BOOST_THREAD_LIBRARY} ${BOOST_URL_LIBRARY}) @@ -167,3 +166,4 @@ if (LINUX) target_link_libraries(ll::boost INTERFACE rt) endif (LINUX) +target_include_directories(ll::boost SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include) diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake index 31ed86213a..269afcc456 100644 --- a/indra/cmake/CEFPlugin.cmake +++ b/indra/cmake/CEFPlugin.cmake @@ -5,50 +5,212 @@ include(Prebuilt) include_guard() add_library( ll::cef INTERFACE IMPORTED ) -if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) +if (${LINUX_DISTRO} MATCHES arch AND (CMAKE_SYSTEM_PROCESSOR MATCHES x86_64)) if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/dullahan_installed OR NOT ${dullahan_installed} EQUAL 0) - if (NOT EXISTS ${CMAKE_BINARY_DIR}/v1.14.0-r3.tar.gz) + file( + COPY /usr/src/cef/libcef_dll + DESTINATION ${CMAKE_BINARY_DIR} + ) + execute_process( + COMMAND sed -i "s/macro(L/cmake_minimum_required(VERSION 3.28)\\nmacro(SET_LIBRARY_TARGET_PROPERTIES)\\nendmacro()\\nmacro(L/" CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/libcef_dll + ) + try_compile(LIBCEF_DLL_RESULT + PROJECT libcef_dll + SOURCE_DIR ${CMAKE_BINARY_DIR}/libcef_dll + BINARY_DIR ${CMAKE_BINARY_DIR}/libcef_dll + CMAKE_FLAGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef -fPIC" + ) + if (${LIBCEF_DLL_RESULT}) + file( + COPY ${CMAKE_BINARY_DIR}/libcef_dll/libcef_dll_wrapper.a + DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} + ) + endif () + if (NOT EXISTS ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme.tar.gz) file(DOWNLOAD - https://github.com/secondlife/dullahan/archive/refs/tags/v1.14.0-r3.tar.gz - ${CMAKE_BINARY_DIR}/v1.14.0-r3.tar.gz + https://github.com/secondlife/dullahan/archive/refs/tags/v1.40.0-CEF_150.0.19.embed_scheme.tar.gz + ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme.tar.gz + ) + endif () + file(ARCHIVE_EXTRACT + INPUT ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme.tar.gz + DESTINATION ${CMAKE_BINARY_DIR} + ) + try_compile(DULLAHAN_RESULT + PROJECT dullahan + SOURCE_DIR ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme + BINARY_DIR ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme + CMAKE_FLAGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} + -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE} + -DCEF_WRAPPER_DIR:PATH=/usr/include/cef + -DCEF_WRAPPER_BUILD_DIR:PATH=${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme + -DCEF_LIBRARY_RELEASE:FILEPATH=${INSTALL_PREFIX}/lib/cef/libcef.so + -DCEF_DLL_LIBRARY_RELEASE:FILEPATH=${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a + "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef -DWRAPPING_CEF_SHARED" + ) + if (${DULLAHAN_RESULT}) + file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release) + file( + COPY ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme/dullahan_host + DESTINATION ${LIBS_PREBUILT_DIR}/bin/release + ) + if (CMAKE_BUILD_TYPE MATCHES Release) + execute_process( + COMMAND ${CMAKE_STRIP} dullahan_host + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release ) + endif () + file( + COPY ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme/libdullahan.a + DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} + ) + file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/cef) + file( + COPY + ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme/src/dullahan.h + ${CMAKE_BINARY_DIR}/dullahan-1.40.0-CEF_150.0.19.embed_scheme/src/dullahan_version.h + DESTINATION ${LIBS_PREBUILT_DIR}/include/cef + ) + file(WRITE ${PREBUILD_TRACKING_DIR}/dullahan_installed "0") + endif () + endif () +elseif (${LINUX_DISTRO} MATCHES fedora) + if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/dullahan_installed OR NOT ${dullahan_installed} EQUAL 0) + file( + COPY /usr/src/cef-146.0.11/libcef_dll + DESTINATION ${CMAKE_BINARY_DIR} + ) + execute_process( + COMMAND sed -i "s/macro(L/cmake_minimum_required(VERSION 3.28)\\nmacro(SET_LIBRARY_TARGET_PROPERTIES)\\nendmacro()\\nmacro(L/" CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/libcef_dll + ) + try_compile(LIBCEF_DLL_RESULT + PROJECT libcef_dll + SOURCE_DIR ${CMAKE_BINARY_DIR}/libcef_dll + BINARY_DIR ${CMAKE_BINARY_DIR}/libcef_dll + CMAKE_FLAGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef-146.0.11 -fPIC" + ) + if (${LIBCEF_DLL_RESULT}) + file( + COPY ${CMAKE_BINARY_DIR}/libcef_dll/libcef_dll_wrapper.a + DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} + ) + endif () + if (NOT EXISTS ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz) + file(DOWNLOAD + https://github.com/secondlife/dullahan/archive/refs/tags/v1.29.0-CEF_146.0.12.tar.gz + ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz + ) endif () file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/v1.14.0-r3.tar.gz + INPUT ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz + DESTINATION ${CMAKE_BINARY_DIR} + ) + try_compile(DULLAHAN_RESULT + PROJECT dullahan + SOURCE_DIR ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12 + BINARY_DIR ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12 + CMAKE_FLAGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} + -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE} + -DCEF_WRAPPER_DIR:PATH=/usr/include/cef + -DCEF_WRAPPER_BUILD_DIR:PATH=${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12 + -DCEF_LIBRARY_RELEASE:FILEPATH=${INSTALL_PREFIX}/lib${ADDRESS_SIZE}/cef/libcef.so + -DCEF_DLL_LIBRARY_RELEASE:FILEPATH=${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a + "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef-146.0.11 -DWRAPPING_CEF_SHARED" + ) + if (${DULLAHAN_RESULT}) + file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release) + file( + COPY ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/dullahan_host + DESTINATION ${LIBS_PREBUILT_DIR}/bin/release + ) + if (CMAKE_BUILD_TYPE MATCHES Release) + execute_process( + COMMAND ${CMAKE_STRIP} dullahan_host + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release + ) + endif () + file( + COPY ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/libdullahan.a + DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} + ) + file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/cef) + file( + COPY + ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/src/dullahan.h + ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/src/dullahan_version.h + DESTINATION ${LIBS_PREBUILT_DIR}/include/cef + ) + file(WRITE ${PREBUILD_TRACKING_DIR}/dullahan_installed "0") + endif () + endif () +elseif (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) + if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/dullahan_installed OR NOT ${dullahan_installed} EQUAL 0) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40.tar.gz) + file(DOWNLOAD + https://github.com/secondlife/dullahan/archive/refs/tags/v1.24.0-CEF_139.0.40.tar.gz + ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40.tar.gz + ) + endif () + file(ARCHIVE_EXTRACT + INPUT ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40.tar.gz DESTINATION ${CMAKE_BINARY_DIR} ) execute_process( COMMAND sed -i "/#include <vector>/a #include <cstdint>" dullahan.h - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3/src + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40/src ) file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/cef) try_compile(DULLAHAN_RESULT PROJECT dullahan - SOURCE_DIR ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3 - BINARY_DIR ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3 + SOURCE_DIR ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40 + BINARY_DIR ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40 CMAKE_FLAGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE} -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON - -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} -DUSE_SPOTIFY_CEF:BOOL=ON - -DSPOTIFY_CEF_URL:STRING=https://cef-builds.spotifycdn.com/cef_binary_118.4.1%2Bg3dd6078%2Bchromium-118.0.5993.54_linuxarm64_beta_minimal.tar.bz2 + -DSPOTIFY_CEF_URL:STRING=https://cef-builds.spotifycdn.com/cef_binary_139.0.40%2Bg465474a%2Bchromium-139.0.7258.139_linuxarm64_minimal.tar.bz2 -DPROJECT_ARCH:STRING=${CMAKE_SYSTEM_PROCESSOR} - -DENABLE_CXX11_ABI:BOOL=ON ) if (${DULLAHAN_RESULT}) + if (CMAKE_BUILD_TYPE MATCHES Release) + execute_process( + COMMAND ${CMAKE_STRIP} + chrome-sandbox + libEGL.so + libGLESv2.so + libcef.so + libvk_swiftshader.so + libvulkan.so.1 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40/_deps/cef_prebuild-src/${CMAKE_BUILD_TYPE} + ) + endif () execute_process( COMMAND ${CMAKE_MAKE_PROGRAM} install - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40 OUTPUT_VARIABLE dullahan_installed ) + if (CMAKE_BUILD_TYPE MATCHES Release) + execute_process( + COMMAND ${CMAKE_STRIP} dullahan_host + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release + ) + endif () file( COPY - ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3/src/dullahan.h - ${CMAKE_BINARY_DIR}/dullahan-1.14.0-r3/src/dullahan_version.h + ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40/src/dullahan.h + ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40/src/dullahan_version.h DESTINATION ${LIBS_PREBUILT_DIR}/include/cef ) file(WRITE ${PREBUILD_TRACKING_DIR}/dullahan_installed "${dullahan_installed}") @@ -57,12 +219,6 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) else () use_prebuilt_binary(dullahan) endif () - -execute_process( - COMMAND patchelf --remove-rpath bin/release/dullahan_host - WORKING_DIRECTORY ${LIBS_PREBUILT_DIR} - ) - target_include_directories( ll::cef SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/cef) if (WINDOWS) @@ -127,8 +283,35 @@ elseif (DARWIN) -output libdullahan.a WORKING_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE} ) - elseif (LINUX) + if (NOT (${LINUX_DISTRO} MATCHES freedesktop)) + execute_process( + COMMAND patchelf --set-rpath ${INSTALL_LIBRARY_DIR} dullahan_host + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release + ) + endif () + if (${LINUX_DISTRO} MATCHES arch AND (CMAKE_SYSTEM_PROCESSOR MATCHES x86_64) OR (${LINUX_DISTRO} MATCHES fedora)) + target_include_directories( ll::cef SYSTEM INTERFACE /usr/include/cef/include) + if (${LINUX_DISTRO} MATCHES fedora) + set(LIB_SUFFIX ${ADDRESS_SIZE}) + endif () + target_link_directories( ll::cef INTERFACE ${INSTALL_PREFIX}/lib${LIB_SUFFIX}/cef ) + execute_process( + COMMAND patchelf --add-rpath ${INSTALL_PREFIX}/lib${LIB_SUFFIX}/cef dullahan_host + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release + ) + elseif (CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 AND (CMAKE_BUILD_TYPE MATCHES Release)) + execute_process( + COMMAND ${CMAKE_STRIP} + bin/release/chrome-sandbox + bin/release/dullahan_host + lib/release/libEGL.so + lib/release/libGLESv2.so + lib/release/libvk_swiftshader.so + lib/release/libvulkan.so.1 + WORKING_DIRECTORY ${LIBS_PREBUILT_DIR} + ) + endif () target_link_libraries( ll::cef INTERFACE libdullahan.a cef diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake index 99045e3aa3..09fc43dff4 100644 --- a/indra/cmake/CURL.cmake +++ b/indra/cmake/CURL.cmake @@ -27,20 +27,20 @@ use_prebuilt_binary(curl) endif () endif () elseif (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/curl_installed OR NOT ${curl_installed} EQUAL 0) - if (NOT EXISTS ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3.tar.gz) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4.tar.gz) file(DOWNLOAD - https://github.com/secondlife/3p-curl/archive/refs/tags/v7.54.1-r3.tar.gz - ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3.tar.gz + https://github.com/secondlife/3p-curl/archive/refs/tags/v7.54.1-r4.tar.gz + ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4.tar.gz ) endif () file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3.tar.gz + INPUT ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4.tar.gz DESTINATION ${CMAKE_BINARY_DIR} ) if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) execute_process( COMMAND sed -i netrc.c -e "s/defined(HAVE_GETPWUID_R)/0/g" netrc.c - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3/curl/lib + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4/curl/lib ) endif () file( @@ -60,16 +60,16 @@ elseif (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRA set(ENV{CFLAGS} "-std=c90") execute_process( COMMAND ./configure --disable-alt-svc --disable-dict --disable-doh --disable-file --disable-gopher --disable-headers-api --disable-hsts --disable-imap --disable-ldap --disable-ldaps --disable-libcurl-option --disable-manual --disable-mqtt --disable-ntlm --disable-ntlm-wb --disable-pop3 --disable-rtsp --disable-shared --disable-smb --disable-smtp --disable-sspi --disable-telnet --disable-tftp --disable-tls-srp --disable-unix-sockets --disable-verbose --disable-versioned-symbols --enable-threaded-resolver --with-ssl=${LIBS_PREBUILT_DIR} --without-libidn2 --without-libpsl --without-libssh2 --prefix=${LIBS_PREBUILT_DIR} --libdir=${ARCH_PREBUILT_DIRS_RELEASE} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3/curl + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4/curl ) execute_process( COMMAND make -j${MAKE_JOBS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3/curl + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4/curl ) unset(ENV{CFLAGS}) execute_process( COMMAND make install - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r3/curl + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-curl-7.54.1-r4/curl RESULT_VARIABLE curl_installed ) if (CMAKE_SYSTEM_NAME MATCHES FreeBSD) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 680f2f3ac2..667a04a1c5 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -29,29 +29,6 @@ endmacro() ################################################################### if(WINDOWS) #******************************* - # VIVOX - *NOTE: no debug version - set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}") - - # 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 ) - set(slvoice_src_dir "${ARCH_PREBUILT_BIN_RELEASE}") - endif() - set(slvoice_files SLVoice.exe ) - if (ADDRESS_SIZE EQUAL 64) - list(APPEND vivox_libs - vivoxsdk_x64.dll - ortp_x64.dll - ) - else (ADDRESS_SIZE EQUAL 64) - list(APPEND vivox_libs - vivoxsdk.dll - ortp.dll - ) - endif (ADDRESS_SIZE EQUAL 64) - - #******************************* # Misc shared libs set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") @@ -159,12 +136,6 @@ if(WINDOWS) endforeach() elseif(DARWIN) - set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}") - set(slvoice_files SLVoice) - set(vivox_libs - libortp.dylib - libvivoxsdk.dylib - ) set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") set(debug_files ) @@ -188,15 +159,6 @@ elseif(LINUX) 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 - libortp.so - libvivoxoal.so.1 - libvivoxsdk.so - ) - set(slvoice_files SLVoice) - # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}") @@ -226,8 +188,6 @@ elseif(LINUX) else(WINDOWS) message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...") - set(vivox_lib_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") - set(vivox_libs "") # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") @@ -249,26 +209,6 @@ endif(WINDOWS) # Done building the file lists, now set up the copy commands. ################################################################ -# 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( slvoice_src_dir ) - copy_if_different( - ${slvoice_src_dir} - "${SHARED_LIB_STAGING_DIR_RELEASE}" - out_targets - ${slvoice_files} - ) - list(APPEND third_party_targets ${out_targets}) -endif() - -to_staging_dirs( - ${vivox_lib_dir} - third_party_targets - ${vivox_libs} - ) - to_staging_dirs( ${release_src_dir} third_party_targets diff --git a/indra/cmake/Discord.cmake b/indra/cmake/Discord.cmake index f474457b03..4893886afc 100644 --- a/indra/cmake/Discord.cmake +++ b/indra/cmake/Discord.cmake @@ -8,8 +8,13 @@ target_compile_definitions(ll::discord_sdk INTERFACE LL_DISCORD=1) #use_prebuilt_binary(discord_sdk) if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/discord_sdk_installed OR NOT ${discord_sdk_installed} EQUAL 0) + if (${LINUX_DISTRO} MATCHES gentoo) + set(PREFIX_PATH /var/cache/distfiles) + else () + set(PREFIX_PATH $ENV{HOME}/Downloads) + endif () file(ARCHIVE_EXTRACT - INPUT $ENV{HOME}/Downloads/DiscordSocialSdk-1.8.13395.zip + INPUT ${PREFIX_PATH}/DiscordSocialSdk-1.10.18687.zip DESTINATION ${CMAKE_BINARY_DIR} ) file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/discord_sdk) @@ -19,9 +24,12 @@ if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKIN ${CMAKE_BINARY_DIR}/discord_social_sdk/include/discordpp.h DESTINATION ${LIBS_PREBUILT_DIR}/include/discord_sdk ) + if ($ENV{MSYSTEM_CARCH} MATCHES aarch64) + set(DISCORD_PLATFORM /arm64) + endif () if (WINDOWS) file( - COPY ${CMAKE_BINARY_DIR}/discord_social_sdk/bin/release/discord_partner_sdk.dll + COPY ${CMAKE_BINARY_DIR}/discord_social_sdk/bin/release${DISCORD_PLATFORM}/discord_partner_sdk.dll DESTINATION ${LIBS_PREBUILT_DIR}/bin/release ) set(LIBRARY_EXTENSION lib) @@ -39,9 +47,15 @@ if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKIN ) else () file( - COPY ${CMAKE_BINARY_DIR}/discord_social_sdk/lib/release/${LIBRARY_PREFIX}discord_partner_sdk.${LIBRARY_EXTENSION} + COPY ${CMAKE_BINARY_DIR}/discord_social_sdk/lib/release${DISCORD_PLATFORM}/${LIBRARY_PREFIX}discord_partner_sdk.${LIBRARY_EXTENSION} DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} ) + if (CMAKE_BUILD_TYPE MATCHES Release AND LINUX) + execute_process( + COMMAND ${CMAKE_STRIP} libdiscord_partner_sdk.so + WORKING_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE} + ) + endif () endif () file(WRITE ${PREBUILD_TRACKING_DIR}/discord_sdk_installed "0") endif () diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake index ad8dc38c70..ec0b8a07d6 100644 --- a/indra/cmake/FMODSTUDIO.cmake +++ b/indra/cmake/FMODSTUDIO.cmake @@ -34,7 +34,7 @@ if (USE_FMODSTUDIO) file(MAKE_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE}) if (DARWIN) execute_process( - COMMAND hdiutil attach -noverify fmodstudioapi20234mac-installer.dmg + COMMAND hdiutil attach -noverify fmodstudioapi20235mac-installer.dmg WORKING_DIRECTORY $ENV{HOME}/Downloads ) file( @@ -64,36 +64,36 @@ if (USE_FMODSTUDIO) file(WRITE ${PREBUILD_TRACKING_DIR}/fmodstudio_installed "${fmodstudio_installed}") else () file(ARCHIVE_EXTRACT - INPUT $ENV{HOME}/Downloads/fmodstudioapi20234linux.tar.gz + INPUT $ENV{HOME}/Downloads/fmodstudioapi20235linux.tar.gz DESTINATION ${CMAKE_BINARY_DIR} ) file( COPY - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod.hpp - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_codec.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_common.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_dsp.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_dsp_effects.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_errors.h - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/inc/fmod_output.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod.hpp + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_codec.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_common.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_dsp.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_dsp_effects.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_errors.h + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/inc/fmod_output.h DESTINATION ${LIBS_PREBUILT_DIR}/include/fmodstudio ) if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) file( COPY - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/arm64/libfmod.so - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/arm64/libfmod.so.13 - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/arm64/libfmod.so.13.34 + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/arm64/libfmod.so + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/arm64/libfmod.so.13 + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/arm64/libfmod.so.13.35 DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} FOLLOW_SYMLINK_CHAIN ) else () file( COPY - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13 - ${CMAKE_BINARY_DIR}/fmodstudioapi20234linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13.34 + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13 + ${CMAKE_BINARY_DIR}/fmodstudioapi20235linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13.35 DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE} FOLLOW_SYMLINK_CHAIN ) diff --git a/indra/cmake/GLM.cmake b/indra/cmake/GLM.cmake index db6acc065e..c7d0ec3aed 100644 --- a/indra/cmake/GLM.cmake +++ b/indra/cmake/GLM.cmake @@ -4,7 +4,7 @@ include(Prebuilt) add_library( ll::glm INTERFACE IMPORTED ) #use_system_binary( glm ) -if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu) OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed)) +if (${LINUX_DISTRO} MATCHES freedesktop OR (${LINUX_DISTRO} MATCHES debian) OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64)) use_prebuilt_binary(glm) elseif (NOT WINDOWS) find_package( glm REQUIRED ) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index 81b40cb0b5..144f92118b 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -18,155 +18,176 @@ if( USE_CONAN ) "${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/1.4/" ) endif() -if (TRUE) - include(FindPkgConfig) - pkg_check_modules(Minizip REQUIRED minizip) - if (${LINUX_DISTRO} MATCHES arch OR (${LINUX_DISTRO} MATCHES gentoo) OR DARWIN) +#use_system_binary( colladadom ) + +#use_prebuilt_binary(colladadom) +if (${LINUX_DISTRO} MATCHES freedesktop) +use_prebuilt_binary(minizip-ng) # needed for colladadom +#use_prebuilt_binary(libxml2) + +find_library(MINIZIPNG_LIBRARY + NAMES + minizip.lib + libminizip.a + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +target_link_libraries(ll::minizip-ng INTERFACE ${MINIZIPNG_LIBRARY}) +endif () + +if (FALSE) +find_library(LIBXML2_LIBRARY + NAMES + libxml2.lib + libxml2.a + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +target_link_libraries(ll::libxml INTERFACE ${LIBXML2_LIBRARY}) + +if (WINDOWS) + target_link_libraries( ll::libxml INTERFACE Bcrypt.lib) +endif() +endif (FALSE) + +include(FindPkgConfig) +if (NOT (${LINUX_DISTRO} MATCHES freedesktop)) + pkg_search_module(Minizip REQUIRED minizip) +endif () +if (${LINUX_DISTRO} MATCHES arch OR (${LINUX_DISTRO} MATCHES gentoo) OR DARWIN OR WINDOWS) set(Minizip_INCLUDE_DIRS ${Minizip_INCLUDE_DIRS}/minizip) - endif () - pkg_check_modules(Libxml2 REQUIRED libxml-2.0) - target_link_libraries( ll::minizip-ng INTERFACE ${Minizip_LIBRARIES} ) - target_link_libraries( ll::libxml INTERFACE ${Libxml2_LIBRARIES} ) - if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0) - if (NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10.tar.gz) - file(DOWNLOAD - https://github.com/secondlife/3p-colladadom/archive/refs/tags/v2.3-r10.tar.gz - ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10.tar.gz +elseif (${LINUX_DISTRO} MATCHES freedesktop) + set(Minizip_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/minizip-ng) + set(Minizip_LIBRARY_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) +endif () +pkg_search_module(Libxml2 REQUIRED libxml-2.0) +target_link_libraries( ll::minizip-ng INTERFACE ${Minizip_LIBRARIES} ) +target_link_libraries( ll::libxml INTERFACE ${Libxml2_LIBRARIES} ) +if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11.tar.gz) + file(DOWNLOAD + https://github.com/secondlife/3p-colladadom/archive/refs/tags/v2.3-r11.tar.gz + ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11.tar.gz ) endif () file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10.tar.gz - DESTINATION ${CMAKE_BINARY_DIR} + INPUT ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11.tar.gz + DESTINATION ${CMAKE_BINARY_DIR} ) if (WINDOWS OR CMAKE_COMMAND MATCHES /usr/bin/cmake) - execute_process( - COMMAND sed -i "s/include_directories/cmake_minimum_required(VERSION 3.28)\\ninclude_directories/" CMakeLists.txt - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 + execute_process( + COMMAND sed -i "s/include_directories/cmake_minimum_required(VERSION 3.28)\\ninclude_directories/" CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 ) else () - execute_process( - COMMAND sed -i "" -e "s/include_directories/cmake_minimum_required(VERSION 3.28)\\ninclude_directories/" CMakeLists.txt - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 + execute_process( + COMMAND sed -i "" -e "s/include_directories/cmake_minimum_required(VERSION 3.28)\\ninclude_directories/" CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 ) endif () if (WINDOWS) - execute_process( - COMMAND sed -i "s/SHARED/STATIC/" 1.4/CMakeLists.txt - COMMAND sed -i "/#include <cstdarg>/a #define WIN32" dae/daeUtils.cpp - COMMAND sed -i "/using namespace cdom;/a namespace boost{void boost::throw_exception(class std::exception const &){}}" dae/daeURI.cpp - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10/src + execute_process( + COMMAND sed -i "s/SHARED/STATIC/" 1.4/CMakeLists.txt + COMMAND sed -i "/#include <cstdarg>/a #define WIN32" dae/daeUtils.cpp + COMMAND sed -i "/using namespace cdom;/a namespace boost{void boost::throw_exception(class std::exception const &){}}" dae/daeURI.cpp + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11/src + ) + elseif (CMAKE_COMMAND MATCHES /usr/bin/cmake) + execute_process( + COMMAND sed -i "s/SHARED/STATIC/" src/1.4/CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 ) else () - execute_process( - COMMAND sed -i "" -e "s/SHARED/STATIC/" src/1.4/CMakeLists.txt - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 + execute_process( + COMMAND sed -i "" -e "s/SHARED/STATIC/" src/1.4/CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 ) endif () if (DARWIN) - set(BOOST_CFLAGS -I${Libxml2_LIBRARY_DIRS}exec/boost/1.88/include) - set(BOOST_LIBS -L${Minizip_LIBRARY_DIRS}exec/boost/1.88/lib) - set(BOOST_LIBRARY_SUFFIX -mt) + set(BOOST_CFLAGS -I${Libxml2_LIBRARY_DIRS}exec/boost/1.88/include) + set(BOOST_LIBS -L${Minizip_LIBRARY_DIRS}exec/boost/1.88/lib) + set(BOOST_LIBRARY_SUFFIX -mt) elseif (WINDOWS) - set(BOOST_CFLAGS -I${prefix_result}/../include) - set(BOOST_LIBS -L${prefix_result}) - if ($ENV{MSYSTEM_CARCH} MATCHES aarch64) - set(BOOST_LIBRARY_SUFFIX -vc143-mt-a64-1_91) + set(BOOST_CFLAGS -I${prefix_result}/../include) + set(BOOST_LIBS -L${prefix_result}) + # Detect actual toolset/version suffix from vcpkg-installed libs. + file(GLOB _boost_context_libs "${prefix_result}/boost_context-*.lib") + if (_boost_context_libs) + list(GET _boost_context_libs 0 _boost_context_lib) + get_filename_component(_boost_context_name "${_boost_context_lib}" NAME_WE) + string(REPLACE "boost_context" "" BOOST_LIBRARY_SUFFIX "${_boost_context_name}") else () - set(BOOST_LIBRARY_SUFFIX -vc143-mt-x64-1_91) + if ($ENV{MSYSTEM_CARCH} MATCHES aarch64) + set(BOOST_LIBRARY_SUFFIX -vc143-mt-a64-1_91) + else () + set(BOOST_LIBRARY_SUFFIX -vc143-mt-x64-1_91) + endif () + message(WARNING "Could not detect Boost suffix via glob in LLPrimitive; using fallback.") endif () elseif (CMAKE_SYSTEM_NAME MATCHES FreeBSD) - set(BOOST_CFLAGS -I/usr/local/include) - execute_process( - COMMAND sed -i "" -e "s/endif 0/endif/" dae/daeUtils.cpp - COMMAND sed -i "" -e "s/linux/FreeBSD/" dae/daeUtils.cpp - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10/src + set(BOOST_CFLAGS -I/usr/local/include) + execute_process( + COMMAND sed -i "" -e "s/endif 0/endif/" dae/daeUtils.cpp + COMMAND sed -i "" -e "s/linux/FreeBSD/" dae/daeUtils.cpp + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11/src ) + elseif (${LINUX_DISTRO} MATCHES freedesktop) + set(BOOST_CFLAGS -I${LIBS_PREBUILT_DIR}/include) + set(BOOST_LIBS -L${ARCH_PREBUILT_DIRS_RELEASE}) endif () file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/collada/1.4) try_compile(COLLADADOM_RESULT - PROJECT colladadom - SOURCE_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 - BINARY_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 - TARGET collada14dom - CMAKE_FLAGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} - -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} - -DCMAKE_CXX_STANDARD:STRING=17 - -DCMAKE_CXX_FLAGS:STRING=-I${Minizip_INCLUDE_DIRS} - -DBoost_CFLAGS:STRING=${BOOST_CFLAGS} - -DEXTRA_COMPILE_FLAGS:STRING=-I${Libxml2_INCLUDE_DIRS} - "-DCMAKE_SHARED_LINKER_FLAGS:STRING=-L${Minizip_LIBRARY_DIRS} ${BOOST_LIBS}" - -DBoost_FILESYSTEM_LIBRARY:STRING=boost_filesystem${BOOST_LIBRARY_SUFFIX} - -DBoost_SYSTEM_LIBRARY:STRING=boost_system${BOOST_LIBRARY_SUFFIX} - -DZLIB_LIBRARIES:STRING=${Libxml2_LIBRARIES} - -DOPT_COLLADA14:BOOL=ON - -DCOLLADA_DOM_INCLUDE_INSTALL_DIR:PATH=${LIBS_PREBUILT_DIR}/include/collada + PROJECT colladadom + SOURCE_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 + BINARY_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 + TARGET collada14dom + CMAKE_FLAGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} + -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} + -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} + -DCMAKE_CXX_STANDARD:STRING=17 + -DCMAKE_CXX_FLAGS:STRING=-I${Minizip_INCLUDE_DIRS} + -DBoost_CFLAGS:STRING=${BOOST_CFLAGS} + -DEXTRA_COMPILE_FLAGS:STRING=-I${Libxml2_INCLUDE_DIRS} + "-DCMAKE_SHARED_LINKER_FLAGS:STRING=-L${Minizip_LIBRARY_DIRS} ${BOOST_LIBS}" + -DBoost_FILESYSTEM_LIBRARY:STRING=boost_filesystem${BOOST_LIBRARY_SUFFIX} + -DBoost_SYSTEM_LIBRARY:STRING=boost_system${BOOST_LIBRARY_SUFFIX} + -DZLIB_LIBRARIES:STRING=${Libxml2_LIBRARIES} + -DOPT_COLLADA14:BOOL=ON + -DCOLLADA_DOM_INCLUDE_INSTALL_DIR:PATH=${LIBS_PREBUILT_DIR}/include/collada ) if (WINDOWS) - execute_process( - COMMAND MSBuild.exe ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10/Project.slnx -p:Configuration=${CMAKE_BUILD_TYPE} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 - OUTPUT_VARIABLE colladadom_installed + execute_process( + COMMAND MSBuild.exe ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11/Project.slnx -p:Configuration=${CMAKE_BUILD_TYPE} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 + OUTPUT_VARIABLE colladadom_installed ) - file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/include/collada) - file( - COPY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10/include - DESTINATION ${LIBS_PREBUILT_DIR}/include + file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/include/collada) + file( + COPY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11/include + DESTINATION ${LIBS_PREBUILT_DIR}/include ) - file(RENAME - ${LIBS_PREBUILT_DIR}/include/include - ${LIBS_PREBUILT_DIR}/include/collada + file(RENAME + ${LIBS_PREBUILT_DIR}/include/include + ${LIBS_PREBUILT_DIR}/include/collada ) - file(MAKE_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE}) - file(RENAME - ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10/src/1.4/${CMAKE_BUILD_TYPE}/collada14dom.lib - ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom23-s.lib + file(MAKE_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE}) + file(RENAME + ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11/src/1.4/${CMAKE_BUILD_TYPE}/collada14dom.lib + ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom23-s.lib ) elseif (${COLLADADOM_RESULT}) - execute_process( - COMMAND ${CMAKE_MAKE_PROGRAM} install - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r10 - OUTPUT_VARIABLE colladadom_installed + execute_process( + COMMAND ${CMAKE_MAKE_PROGRAM} install + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r11 + OUTPUT_VARIABLE colladadom_installed ) - file(RENAME - ${ARCH_PREBUILT_DIRS}/libcollada14dom.a - ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom.a + file(RENAME + ${ARCH_PREBUILT_DIRS}/libcollada14dom.a + ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom.a ) endif () file(WRITE ${PREBUILD_TRACKING_DIR}/colladadom_installed "${colladadom_installed}") - endif () - -else (TRUE) - -use_system_binary( colladadom ) - -use_prebuilt_binary(colladadom) -use_prebuilt_binary(minizip-ng) # needed for colladadom -use_prebuilt_binary(libxml2) - -find_library(MINIZIPNG_LIBRARY - NAMES - minizip.lib - libminizip.a - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - -target_link_libraries(ll::minizip-ng INTERFACE ${MINIZIPNG_LIBRARY}) - -find_library(LIBXML2_LIBRARY - NAMES - libxml2.lib - libxml2.a - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - -target_link_libraries(ll::libxml INTERFACE ${LIBXML2_LIBRARY}) - -if (WINDOWS) - target_link_libraries( ll::libxml INTERFACE Bcrypt.lib) -endif() - -endif (TRUE) +endif () target_include_directories( ll::colladadom SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/collada diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake index 981f020745..7ff9a9e651 100644 --- a/indra/cmake/LibVLCPlugin.cmake +++ b/indra/cmake/LibVLCPlugin.cmake @@ -27,11 +27,14 @@ if (DARWIN) target_include_directories( ll::libvlc SYSTEM INTERFACE /Volumes/VLC\ media\ player/VLC.app/Contents/MacOS/include) target_link_directories( ll::libvlc INTERFACE /Volumes/VLC\ media\ player/VLC.app/Contents/MacOS/lib) target_link_libraries( ll::libvlc INTERFACE vlc vlccore ) -elseif (WINDOWS) +elseif (WINDOWS OR (${LINUX_DISTRO} MATCHES freedesktop)) use_prebuilt_binary(vlc-bin) + if (WINDOWS) + set(LIB_SUFFIX lib) + endif () target_link_libraries( ll::libvlc INTERFACE - libvlc.lib - libvlccore.lib + ${LIB_SUFFIX}vlc + ${LIB_SUFFIX}vlccore ) else () include(FindPkgConfig) diff --git a/indra/cmake/Meshoptimizer.cmake b/indra/cmake/Meshoptimizer.cmake index 225f44b1fb..e65d0cac71 100644 --- a/indra/cmake/Meshoptimizer.cmake +++ b/indra/cmake/Meshoptimizer.cmake @@ -16,20 +16,20 @@ if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu) OR CMAKE_ elseif (LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 AND NOT (${LINUX_DISTRO} MATCHES gentoo)) use_prebuilt_binary(meshoptimizer) elseif (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/meshoptimizer_installed OR NOT ${meshoptimizer_installed} EQUAL 0) - if (NOT EXISTS ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1.tar.gz) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/meshoptimizer-1.2.tar.gz) file(DOWNLOAD - https://github.com/zeux/meshoptimizer/archive/refs/tags/v1.0.1.tar.gz - ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1.tar.gz + https://github.com/zeux/meshoptimizer/archive/refs/tags/v1.2.tar.gz + ${CMAKE_BINARY_DIR}/meshoptimizer-1.2.tar.gz ) endif () file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1.tar.gz + INPUT ${CMAKE_BINARY_DIR}/meshoptimizer-1.2.tar.gz DESTINATION ${CMAKE_BINARY_DIR} ) try_compile(MESHOPTIMIZER_RESULT PROJECT meshoptimizer - SOURCE_DIR ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1 - BINARY_DIR ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1 + SOURCE_DIR ${CMAKE_BINARY_DIR}/meshoptimizer-1.2 + BINARY_DIR ${CMAKE_BINARY_DIR}/meshoptimizer-1.2 TARGET meshoptimizer CMAKE_FLAGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} @@ -42,7 +42,7 @@ elseif (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRA if (${MESHOPTIMIZER_RESULT}) execute_process( COMMAND ${CMAKE_MAKE_PROGRAM} install - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/meshoptimizer-1.0.1 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/meshoptimizer-1.2 OUTPUT_VARIABLE meshoptimizer_installed ) file(WRITE ${PREBUILD_TRACKING_DIR}/meshoptimizer_installed "${meshoptimizer_installed}") diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index 1b7f9b9071..94c3b0fcf6 100644 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -18,19 +18,26 @@ endif() if (USE_OPENAL) add_library( ll::openal INTERFACE IMPORTED ) - - target_compile_definitions( ll::openal INTERFACE LL_OPENAL=1) - include(FindPkgConfig) - pkg_check_modules(Openal REQUIRED freealut) - target_include_directories(ll::openal SYSTEM INTERFACE ${Openal_INCLUDE_DIRS}) - target_link_directories(ll::openal INTERFACE ${Openal_LIBRARY_DIRS}) - target_link_libraries(ll::openal INTERFACE ${Openal_LIBRARIES}) - return () - + if (${LINUX_DISTRO} MATCHES freedesktop) target_include_directories( ll::openal SYSTEM INTERFACE "${LIBS_PREBUILT_DIR}/include/AL") + endif () target_compile_definitions( ll::openal INTERFACE LL_OPENAL=1) + if (${LINUX_DISTRO} MATCHES freedesktop) use_prebuilt_binary(openal) + file(REMOVE + ${ARCH_PREBUILT_DIRS_RELEASE}/libopenal.so + ${ARCH_PREBUILT_DIRS_RELEASE}/libopenal.so.1 + ${ARCH_PREBUILT_DIRS_RELEASE}/libopenal.so.1.24.2 + ${LIBS_PREBUILT_DIR}/include/AL/al.h + ${LIBS_PREBUILT_DIR}/include/AL/alc.h + ${LIBS_PREBUILT_DIR}/include/AL/alext.h + ${LIBS_PREBUILT_DIR}/include/AL/efx-creative.h + ${LIBS_PREBUILT_DIR}/include/AL/efx-presets.h + ${LIBS_PREBUILT_DIR}/include/AL/efx.h + ) + endif () + if (FALSE) find_library(OPENAL_LIBRARY NAMES OpenAL32 @@ -38,7 +45,11 @@ if (USE_OPENAL) libopenal.dylib libopenal.so PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + endif () + include(FindPkgConfig) + if (${LINUX_DISTRO} MATCHES freedesktop) + pkg_search_module(Openal REQUIRED openal) find_library(ALUT_LIBRARY NAMES alut @@ -47,5 +58,12 @@ if (USE_OPENAL) PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) target_link_libraries(ll::openal INTERFACE ${OPENAL_LIBRARY} ${ALUT_LIBRARY}) + else () + pkg_search_module(Openal REQUIRED freealut) + endif () + + target_include_directories(ll::openal SYSTEM INTERFACE ${Openal_INCLUDE_DIRS}) + target_link_directories(ll::openal INTERFACE ${Openal_LIBRARY_DIRS}) + target_link_libraries(ll::openal INTERFACE ${Openal_LIBRARIES}) endif () diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake index bf7cd8366a..feaedf16e5 100644 --- a/indra/cmake/OpenGL.cmake +++ b/indra/cmake/OpenGL.cmake @@ -4,3 +4,8 @@ include(Variables) include(Prebuilt) include(FindOpenGL) +if (${LINUX_DISTRO} MATCHES freedesktop) + add_library(ll::glu INTERFACE IMPORTED) + use_prebuilt_binary(glu) + target_link_libraries(ll::glu INTERFACE GLU) +endif () diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake index 125f32e711..fbe028a199 100644 --- a/indra/cmake/OpenJPEG.cmake +++ b/indra/cmake/OpenJPEG.cmake @@ -6,70 +6,10 @@ include(Linking) add_library( ll::openjpeg INTERFACE IMPORTED ) -#use_system_binary(openjpeg) -#use_prebuilt_binary(openjpeg) +include(FindPkgConfig) +pkg_check_modules(Openjpeg REQUIRED libopenjp2) +target_include_directories(ll::openjpeg SYSTEM INTERFACE ${Openjpeg_INCLUDE_DIRS}) +target_link_directories(ll::openjpeg INTERFACE ${Openjpeg_LIBRARY_DIRS}) +target_link_libraries(ll::openjpeg INTERFACE ${Openjpeg_LIBRARIES}) -if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/openjpeg_installed OR NOT ${openjpeg_installed} EQUAL 0) - if (NOT EXISTS ${CMAKE_BINARY_DIR}/openjpeg-2.5.3.tar.gz) - file(DOWNLOAD - https://github.com/uclouvain/openjpeg/archive/refs/tags/v2.5.3.tar.gz - ${CMAKE_BINARY_DIR}/openjpeg-2.5.3.tar.gz - ) - endif () - file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/openjpeg-2.5.3.tar.gz - DESTINATION ${CMAKE_BINARY_DIR} - ) - - if (${LINUX_DISTRO} MATCHES ubuntu) - try_compile(OPENJPEG_RESULT - PROJECT OPENJPEG - SOURCE_DIR ${CMAKE_BINARY_DIR}/openjpeg-2.5.3 - BINARY_DIR ${CMAKE_BINARY_DIR}/openjpeg-2.5.3 - TARGET openjp2 - CMAKE_FLAGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} - -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} - -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE} - -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON - -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} - -DBUILD_CODEC:BOOL=OFF - ) - if (${OPENJPEG_RESULT}) - execute_process( - COMMAND ${CMAKE_MAKE_PROGRAM} install - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/openjpeg-2.5.3 - OUTPUT_VARIABLE openjpeg_installed - ) - endif () - - else () - execute_process( - COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR} -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE} -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} -DBUILD_CODEC:BOOL=OFF - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/openjpeg-2.5.3 - OUTPUT_VARIABLE openjpeg_installed - ) - endif () - - file( - COPY - ${CMAKE_BINARY_DIR}/openjpeg-2.5.3/src/lib/openjp2/cio.h - ${CMAKE_BINARY_DIR}/openjpeg-2.5.3/src/lib/openjp2/event.h - ${CMAKE_BINARY_DIR}/openjpeg-2.5.3/src/lib/openjp2/opj_config_private.h - DESTINATION ${LIBS_PREBUILT_DIR}/include/openjpeg-2.5 - ) - file(WRITE ${PREBUILD_TRACKING_DIR}/openjpeg_installed "${openjpeg_installed}") -endif () - -if (${LINUX_DISTRO} MATCHES ubuntu) -target_link_libraries(ll::openjpeg INTERFACE openjp2 ) -else () - include(FindPkgConfig) - pkg_check_modules(Openjpeg REQUIRED libopenjp2) - target_include_directories(ll::openjpeg SYSTEM INTERFACE ${Openjpeg_INCLUDE_DIRS}) - target_link_directories(ll::openjpeg INTERFACE ${Openjpeg_LIBRARY_DIRS}) - target_link_libraries(ll::openjpeg INTERFACE ${Openjpeg_LIBRARIES}) -endif () target_include_directories( ll::openjpeg SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include) diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake index 39fd21c33f..428f9e3326 100644 --- a/indra/cmake/Python.cmake +++ b/indra/cmake/Python.cmake @@ -1,57 +1,18 @@ -# -*- cmake -*- +# Allow explicit Python path via environment variable +if(DEFINED ENV{PYTHON}) + set(Python3_ROOT_DIR "$ENV{PYTHON}") +endif() -set(PYTHONINTERP_FOUND) +# On Windows, prefer registry entries to avoid Cygwin/MSYS Python +# The registry is searched first by default, which finds native Windows Python +# installations rather than Cygwin/MSYS Python +if(WINDOWS) + set(Python3_FIND_REGISTRY FIRST CACHE STRING "Python search order") +endif() -if (DEFINED ENV{PYTHON}) - # Allow python executable to be explicitly set - set(python "$ENV{PYTHON}") - set(PYTHONINTERP_FOUND ON) -elseif (WINDOWS) - # On Windows, explicitly avoid Cygwin Python. +# Find Python 3 interpreter +find_package(Python3 REQUIRED COMPONENTS Interpreter) - # if the user has their own version of Python installed, prefer that - foreach(hive HKEY_CURRENT_USER HKEY_LOCAL_MACHINE) - # prefer more recent Python versions to older ones, if multiple versions - # are installed - foreach(pyver 3.14 3.13 3.12 3.11 3.10 3.9 3.8 3.7) - list(APPEND regpaths "[${hive}\\SOFTWARE\\Python\\PythonCore\\${pyver}\\InstallPath]") - endforeach() - endforeach() - - # TODO: This logic has the disadvantage that if you have multiple versions - # of Python installed, the selected path won't necessarily be the newest - - # e.g. this GLOB will prefer Python310 to Python311. But since pymaybe is - # checked AFTER the registry entries, this will only surface as a problem if - # no installed Python appears in the registry. - file(GLOB pymaybe - "$ENV{PROGRAMFILES}/Python*" -## "$ENV{PROGRAMFILES(X86)}/Python*" - # The Windows environment variable is in fact as shown above, but CMake - # disallows querying an environment variable containing parentheses - - # thanks, Windows. Fudge by just appending " (x86)" to $PROGRAMFILES and - # hoping for the best. - "$ENV{PROGRAMFILES} (x86)/Python*" - "c:/Python*") - - find_program(python - NAMES python3.exe python.exe - NO_DEFAULT_PATH # added so that cmake does not find cygwin python - PATHS - ${regpaths} - ${pymaybe} - ) - find_package(Python3 COMPONENTS Interpreter) -else() - find_program(python python3) - - if (python) - set(PYTHONINTERP_FOUND ON) - endif (python) -endif (DEFINED ENV{PYTHON}) - -if (NOT python) - message(FATAL_ERROR "No Python interpreter found") -endif (NOT python) - -set(PYTHON_EXECUTABLE "${python}" CACHE FILEPATH "Python interpreter for builds") +# Set legacy variable name for compatibility with existing code +set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}" CACHE FILEPATH "Python interpreter for builds") mark_as_advanced(PYTHON_EXECUTABLE) diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index ac45838427..c4b2dfbd37 100644 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -6,16 +6,19 @@ include(GLIB) add_library( ll::uilibraries INTERFACE IMPORTED ) if (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD) + if (${LINUX_DISTRO} MATCHES freedesktop) + use_prebuilt_binary(fltk) + endif () target_compile_definitions(ll::uilibraries INTERFACE LL_FLTK=1 LL_X11=1 ) if( USE_CONAN ) return() endif() - if (${LINUX_DISTRO} MATCHES debian) + if (${LINUX_DISTRO} MATCHES arch OR (${LINUX_DISTRO} MATCHES debian) OR (${LINUX_DISTRO} MATCHES freedesktop) OR (${LINUX_DISTRO} MATCHES ubuntu)) include(FindPkgConfig) - pkg_check_modules(Cairo REQUIRED cairo) - target_include_directories(ll::uilibraries SYSTEM INTERFACE ${Cairo_INCLUDE_DIRS}) + pkg_check_modules(CAIRO REQUIRED cairo) + target_include_directories(ll::uilibraries SYSTEM INTERFACE ${CAIRO_INCLUDE_DIRS}) endif () target_link_libraries( ll::uilibraries INTERFACE @@ -51,8 +54,29 @@ if( WINDOWS ) ) endif() -if (FALSE) +if (${LINUX_DISTRO} MATCHES freedesktop) target_include_directories( ll::uilibraries SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include ) + pkg_check_modules(CAIRO-XLIB REQUIRED cairo-xlib) + pkg_check_modules(DBUS-1 REQUIRED dbus-1) + pkg_check_modules(LIBDECOR-0 REQUIRED libdecor-0) + pkg_check_modules(PANGO REQUIRED pango) + pkg_check_modules(PANGOCAIRO REQUIRED pangocairo) + pkg_check_modules(WAYLAND-CLIENT REQUIRED wayland-client) + pkg_check_modules(WAYLAND-CURSOR REQUIRED wayland-cursor) + pkg_check_modules(XKBCOMMON REQUIRED xkbcommon) + pkg_check_modules(XKBCOMMON-X11 REQUIRED xkbcommon-x11) + target_link_libraries(ll::uilibraries INTERFACE + ${CAIRO_LIBRARIES} + ${CAIRO-XLIB_LIBRARIES} + ${DBUS-1_LIBRARIES} + ${LIBDECOR-0_LIBRARIES} + ${PANGO_LIBRARIES} + ${PANGOCAIRO_LIBRARIES} + ${WAYLAND-CLIENT_LIBRARIES} + ${WAYLAND-CURSOR_LIBRARIES} + ${XKBCOMMON_LIBRARIES} + ${XKBCOMMON-X11_LIBRARIES} + ) endif () diff --git a/indra/cmake/UnixInstall.cmake b/indra/cmake/UnixInstall.cmake index 1fd17a0142..70107fea9a 100644 --- a/indra/cmake/UnixInstall.cmake +++ b/indra/cmake/UnixInstall.cmake @@ -6,24 +6,26 @@ set(INSTALL OFF CACHE BOOL "Generate install target.") if (INSTALL) - if (CMAKE_SYSTEM_NAME MATCHES FreeBSD) + if (${LINUX_DISTRO} MATCHES freedesktop OR CMAKE_SYSTEM_NAME MATCHES FreeBSD) set(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Top-level installation directory.") - else (CMAKE_SYSTEM_NAME MATCHES FreeBSD) + else () set(INSTALL_PREFIX /usr CACHE PATH "Top-level installation directory.") - endif (CMAKE_SYSTEM_NAME MATCHES FreeBSD) + endif () - if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu)) - set(_LIB lib/${ARCH}-linux-gnu) + if (${LINUX_DISTRO} MATCHES freedesktop) + set(_LIB lib) + elseif (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu)) + set(_LIB lib/${ARCH}-linux-gnu/${VIEWER_BINARY_NAME}) elseif (${LINUX_DISTRO} MATCHES fedora OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed) OR (${LINUX_DISTRO} MATCHES gentoo)) - set(_LIB lib${ADDRESS_SIZE}) + set(_LIB lib${ADDRESS_SIZE}/${VIEWER_BINARY_NAME}) else () - set(_LIB lib) + set(_LIB lib/${VIEWER_BINARY_NAME}) endif () set(INSTALL_LIBRARY_DIR ${INSTALL_PREFIX}/${_LIB} CACHE PATH - "Installation directory for read-only shared files.") + "Installation directory for dynamic library files and their resources.") set(INSTALL_SHARE_DIR ${INSTALL_PREFIX}/share CACHE PATH "Installation directory for read-only shared files.") @@ -35,13 +37,17 @@ if (INSTALL) set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}/${VIEWER_BINARY_NAME} CACHE PATH "Installation directory for read-only data files.") - if (${LINUX_DISTRO} MATCHES arch) + if (${LINUX_DISTRO} MATCHES freedesktop) + set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/libexec + CACHE PATH + "Installation directory for non-manual executables.") + elseif (${LINUX_DISTRO} MATCHES arch) set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/lib/${VIEWER_BINARY_NAME} CACHE PATH "Installation directory for non-manual executables.") - else (${LINUX_DISTRO} MATCHES arch) + else () set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/libexec/${VIEWER_BINARY_NAME} CACHE PATH "Installation directory for non-manual executables.") - endif (${LINUX_DISTRO} MATCHES arch) + endif () endif (INSTALL) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index af13746c91..5efca62032 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -3,21 +3,13 @@ include(Prebuilt) if (NOT (DARWIN OR WINDOWS)) add_library( ll::fontconfig INTERFACE IMPORTED ) - find_package(Fontconfig REQUIRED) target_link_libraries( ll::fontconfig INTERFACE Fontconfig::Fontconfig ) endif () -if (FALSE) -if( NOT USE_CONAN ) - use_prebuilt_binary(libhunspell) -endif() - -use_prebuilt_binary(slvoice) -endif (FALSE) - -if (${LINUX_DISTRO} MATCHES debian AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 OR DARWIN) +if (DARWIN OR (${LINUX_DISTRO} MATCHES freedesktop)) use_prebuilt_binary(nanosvg) endif () use_prebuilt_binary(viewer-fonts) +use_prebuilt_binary(google-fonts) use_prebuilt_binary(emoji_shortcodes) diff --git a/indra/cmake/WebRTC.cmake b/indra/cmake/WebRTC.cmake index 038ce90b88..1575c30d82 100644 --- a/indra/cmake/WebRTC.cmake +++ b/indra/cmake/WebRTC.cmake @@ -6,27 +6,18 @@ include(Prebuilt) add_library( ll::webrtc INTERFACE IMPORTED ) target_include_directories( ll::webrtc SYSTEM INTERFACE "${LIBS_PREBUILT_DIR}/include/webrtc" "${LIBS_PREBUILT_DIR}/include/webrtc/third_party/abseil-cpp") -if (DARWIN OR WINDOWS) -use_prebuilt_binary(webrtc) -elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64) OR (${LINUX_DISTRO} MATCHES gentoo) OR (${LINUX_DISTRO} MATCHES debian AND CMAKE_SYSTEM_PROCESSOR MATCHES aarch64))) +if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64 AND LINUX) target_compile_definitions(ll::webrtc INTERFACE CM_WEBRTC=1) if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/webrtc_installed OR NOT ${webrtc_installed} EQUAL 0) - if (DARWIN) - set(WEBRTC_PLATFORM macos-arm64) - elseif (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) - set(WEBRTC_PLATFORM linux-arm64) - else () - set(WEBRTC_PLATFORM linux-x64) - endif () - if (NOT EXISTS ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/libwebrtc-linux-arm64.tar.xz) file(DOWNLOAD - https://github.com/crow-misia/libwebrtc-bin/releases/download/137.7151.3.1/libwebrtc-${WEBRTC_PLATFORM}.tar.xz - ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz + https://github.com/crow-misia/libwebrtc-bin/releases/download/139.7258.3.1/libwebrtc-linux-arm64.tar.xz + ${CMAKE_BINARY_DIR}/libwebrtc-linux-arm64.tar.xz SHOW_PROGRESS ) endif () file(ARCHIVE_EXTRACT - INPUT ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz + INPUT ${CMAKE_BINARY_DIR}/libwebrtc-linux-arm64.tar.xz DESTINATION ${LIBS_PREBUILT_DIR} ) file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/include/webrtc) @@ -34,7 +25,6 @@ elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES a foreach(directory api audio - base build buildtools call @@ -67,16 +57,10 @@ elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES a ${LIBS_PREBUILT_DIR}/lib/libwebrtc.a ${ARCH_PREBUILT_DIRS_RELEASE}/libwebrtc.a ) - if (CMAKE_OSX_ARCHITECTURES MATCHES arm64) - file(REMOVE_RECURSE ${ARCH_PREBUILT_DIRS_RELEASE}/WebRTC.framework) - file(RENAME - ${LIBS_PREBUILT_DIR}/Frameworks/WebRTC.xcframework/${WEBRTC_PLATFORM}/WebRTC.framework - ${ARCH_PREBUILT_DIRS_RELEASE}/WebRTC.framework - ) - file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/Frameworks) - endif () file(WRITE ${PREBUILD_TRACKING_DIR}/webrtc_installed "0") endif () +elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64))) +use_prebuilt_binary(webrtc) endif () find_library(WEBRTC_LIBRARY |
