Skip to content

[DO NOT MERGE] Mac Experiments #3282

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 23 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a0cf26e
Fix VLC plugin build on linux
Nov 11, 2024
8b7245c
Further cleanup of SDL windowing backend and isolation of Wayland and…
Nov 11, 2024
39c2b06
Clean up cmake linker flags and introduce support for Sanitizers unde…
Nov 11, 2024
8ce93b6
Fix SLPlugin bundle needlessly linking in SDL2
Nov 6, 2024
6feed6e
Fix ASAN complaints about load alignment and leaks as well as dead code
Nov 10, 2024
4e5071e
Increase MSVC to Ob3 for inlining comparable to clang and gcc
Nov 11, 2024
b6a4296
Restore various llmath types to trivially copyable/movable and restor…
Nov 11, 2024
21b22dd
Fix mesa failing to link shaders due to missing vertex shader outputs
Dec 10, 2024
68728a6
Clean up cmake linking to avoid implicit link to system libraries
Nov 16, 2024
fda95c7
Clean up old __GNUC__ compiler hacks
Nov 16, 2024
0933468
Introduce basic ARM64 build support for apple silicon with libraries …
Dec 12, 2024
13b62d8
Clean up deprecated and dead code for macOS
Nov 16, 2024
6e94e10
Explicitly disable multisample buffers for macos ogl context
Nov 16, 2024
041224e
Clean up LLAppleVBOPool leak
Nov 16, 2024
197475b
Restore support for anistropic filtering on macos
Nov 16, 2024
82c3cc6
Build macos nib file from xib file as part of build process
Nov 16, 2024
b242145
Fix getting cpu frequency on apple silicon
Dec 13, 2024
5cd941b
Fix internal openjpeg headers being used to set logging function
Dec 10, 2024
638ecbe
Disable setjmp based error handling in llimagejpeg to work around cra…
Nov 22, 2024
3a92b88
Disable old mac opengl hacks on apple silicon
Dec 10, 2024
f05c685
Disable Havok in macOS builds temporarily
Dec 12, 2024
902f388
Fix build on windows due to deprecation and linking issues and linux …
Dec 13, 2024
8ed262a
Temporary revert to restore mesh loading
Dec 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ jobs:
libgl1-mesa-dev libglu1-mesa-dev libxinerama-dev \
libxcursor-dev libxfixes-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev ninja-build libxft-dev \
llvm mold libpipewire-0.3-dev libdbus-1-dev
llvm mold libpipewire-0.3-dev libdbus-1-dev libvlc-dev
sudo locale-gen en_US.UTF-8
sudo locale-gen en_GB.UTF-8
sudo locale-gen fr_FR.UTF-8
Expand Down
484 changes: 200 additions & 284 deletions autobuild.xml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ pre_build()
then
SIGNING=("-DENABLE_SIGNING:BOOL=YES" \
"-DSIGNING_IDENTITY:STRING=Developer ID Application: Linden Research, Inc.")

HAVOK=OFF
fi
fi

Expand Down
117 changes: 68 additions & 49 deletions indra/cmake/00-Common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
include_guard()

include(Variables)
include(Linker)

# 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}")
Expand All @@ -35,7 +34,7 @@ add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS)

# Force enable SSE2 instructions in GLM per the manual
# https://github.com/g-truc/glm/blob/master/manual.md#section2_10
add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_FORCE_SSE2=1 GLM_ENABLE_EXPERIMENTAL=1)
add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_ENABLE_EXPERIMENTAL=1)

# Configure crash reporting
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
Expand Down Expand Up @@ -70,15 +69,20 @@ if (WINDOWS)
# http://www.cmake.org/pipermail/cmake/2009-September/032143.html
string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})

add_link_options(/LARGEADDRESSAWARE
/NODEFAULTLIB:LIBCMT
/IGNORE:4099)
add_link_options(
/LARGEADDRESSAWARE
/NODEFAULTLIB:LIBCMT
/IGNORE:4099
/MANIFEST:NO
)

add_compile_definitions(
WIN32_LEAN_AND_MEAN
NOMINMAX
# DOM_DYNAMIC # For shared library colladadom
_CRT_SECURE_NO_WARNINGS # Allow use of sprintf etc
_CRT_NONSTDC_NO_DEPRECATE # Allow use of sprintf etc
_CRT_OBSOLETE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS # Disable deprecated WinSock API warnings
)
add_compile_options(
Expand All @@ -95,10 +99,10 @@ if (WINDOWS)
/permissive-
)

# Nicky: x64 implies SSE2
if( ADDRESS_SIZE EQUAL 32 )
add_compile_options( /arch:SSE2 )
endif()
# We want aggressive inlining on MSVC to better match clang/gcc at O3
string(REPLACE "/Ob2" "/Ob3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "/Ob2" "/Ob3" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "/Ob2" "/Ob3" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")

# Are we using the crummy Visual Studio KDU build workaround?
if (NOT VS_DISABLE_FATAL_WARNINGS)
Expand All @@ -120,7 +124,6 @@ endif (WINDOWS)
if (LINUX)
set( CMAKE_BUILD_WITH_INSTALL_RPATH TRUE )
set( CMAKE_INSTALL_RPATH $ORIGIN $ORIGIN/../lib )
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--exclude-libs,ALL")

find_program(CCACHE_EXE ccache)
if(CCACHE_EXE AND NOT DISABLE_CCACHE)
Expand All @@ -139,76 +142,92 @@ if (LINUX)
LL_IGNORE_SIGCHLD
)

if( ENABLE_ASAN )
add_compile_options(-U_FORTIFY_SOURCE
-fsanitize=address
--param asan-stack=0
)
add_link_options(-fsanitize=address)
else()
add_compile_definitions( _FORTIFY_SOURCE=2 )
endif()
if (USE_ASAN)
add_compile_options(-fsanitize=address -fsanitize-recover=address)
add_link_options(-fsanitize=address -fsanitize-recover=address)
elseif (USE_LEAKSAN)
add_compile_options(-fsanitize=leak)
add_link_options(-fsanitize=leak)
elseif (USE_UBSAN)
add_compile_options(-fsanitize=undefined -fno-sanitize=vptr)
add_link_options(-fsanitize=undefined -fno-sanitize=vptr)
elseif (USE_THREAD_SAN)
add_compile_options(-fsanitize=thread)
add_link_options(-fsanitize=thread)
else ()
add_compile_definitions(_FORTIFY_SOURCE=2)
endif ()

add_compile_options(
-fexceptions
-fno-math-errno
-fno-strict-aliasing
-fno-omit-frame-pointer
-fsigned-char
-msse2
-mfpmath=sse
-pthread
-fvisibility=hidden
-fstack-protector
)

add_link_options(
-Wl,--no-keep-memory
-Wl,--build-id
-Wl,--no-undefined
"LINKER:--build-id"
"LINKER:--as-needed"
"LINKER:-z,relro"
"LINKER:-z,now"
)

# this stops us requiring a really recent glibc at runtime
add_compile_options(-fno-stack-protector)
if(LINK_WITH_MOLD)
find_program(MOLD_BIN mold)
if(MOLD_BIN)
message(STATUS "Mold linker found: ${MOLD_BIN}. Enabling mold as active linker.")
add_link_options(-fuse-ld=mold)
else()
set(LINK_WITH_MOLD OFF)
message(STATUS "Mold linker not found. Using default linker.")
endif()
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# ND: clang is a bit more picky than GCC, the latter seems to auto include -lstdc++ and -lm. The former not so and thus fails to link
add_link_options(
-lstdc++
-lm
)
if(NOT LINK_WITH_MOLD)
# Use LLD for proper clang support under Linux
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_link_options(-fuse-ld=lld) # Use LLD for proper clang support
endif()
endif()

endif (LINUX)

if (DARWIN)
# Use rpath loading on macos
set(CMAKE_MACOSX_RPATH TRUE)

# Warnings should be fatal -- thanks, Nicky Perian, for spotting reversed default
set(CLANG_DISABLE_FATAL_WARNINGS OFF)
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 "-Wno-deprecated-declarations")
# Ensure that CMAKE_CXX_FLAGS has the correct -g debug information format --
# see Variables.cmake.
string(REPLACE "-gdwarf-2" "-g${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}"
CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DARWIN_extra_cstar_flags}")
# NOTE: it's critical that the optimization flag is put in front.
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
## Really?? On developer machines too?
##set(ENABLE_SIGNING TRUE)
##set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")

# required for clang-15/xcode-15 since our boost package still uses deprecated std::unary_function/binary_function
# see https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#C++-Standard-Library
add_compile_definitions(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION)

# Ensure debug symbols are always generated
add_compile_options(-g --debug) # --debug is a clang synonym for -g that bypasses cmake behaviors

# Silence GL deprecation warnings
add_compile_definitions(GL_SILENCE_DEPRECATION=1)
endif(DARWIN)

if(LINUX OR DARWIN)
add_compile_options(-Wall -Wno-sign-compare -Wno-trigraphs -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-local-typedef)
add_compile_options(-Wall -Wno-sign-compare -Wno-trigraphs -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable)

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
# libstdc++ headers contain deprecated declarations that fail on clang
# macOS currently has many deprecated calls
add_compile_options(-Wno-unused-local-typedef -Wno-deprecated-declarations)
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Wno-stringop-truncation -Wno-parentheses -Wno-c++20-compat)
add_compile_options(-Wno-stringop-truncation -Wno-parentheses -Wno-maybe-uninitialized)
endif()

if (NOT GCC_DISABLE_FATAL_WARNINGS)
if (NOT GCC_DISABLE_FATAL_WARNINGS AND NOT CLANG_DISABLE_FATAL_WARNINGS)
add_compile_options(-Werror)
endif ()

Expand Down
21 changes: 4 additions & 17 deletions indra/cmake/APR.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,15 @@ use_system_binary( apr apr-util )
use_prebuilt_binary(apr_suite)

if (WINDOWS)
if (LLCOMMON_LINK_SHARED)
set(APR_selector "lib")
else (LLCOMMON_LINK_SHARED)
set(APR_selector "")
endif (LLCOMMON_LINK_SHARED)
target_link_libraries( ll::apr INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib
${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib
${ARCH_PREBUILT_DIRS_RELEASE}/apr-1.lib
${ARCH_PREBUILT_DIRS_RELEASE}/aprutil-1.lib
)
target_compile_definitions( ll::apr INTERFACE APR_DECLARE_STATIC=1 APU_DECLARE_STATIC=1 API_DECLARE_STATIC=1)
elseif (DARWIN)
if (LLCOMMON_LINK_SHARED)
set(APR_selector "0.dylib")
set(APRUTIL_selector "0.dylib")
else (LLCOMMON_LINK_SHARED)
set(APR_selector "a")
set(APRUTIL_selector "a")
endif (LLCOMMON_LINK_SHARED)

target_link_libraries( ll::apr INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector}
${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APR_selector}
${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.a
${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.a
iconv
)
else()
Expand Down
7 changes: 6 additions & 1 deletion indra/cmake/Audio.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ if (WINDOWS)
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libvorbis.lib
)
else (WINDOWS)
target_link_libraries(ll::vorbis INTERFACE vorbisfile vorbis ogg vorbisenc )
target_link_libraries(ll::vorbis INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/libvorbisfile.a
${ARCH_PREBUILT_DIRS_RELEASE}/libvorbis.a
${ARCH_PREBUILT_DIRS_RELEASE}/libvorbisenc.a
${ARCH_PREBUILT_DIRS_RELEASE}/libogg.a
)
endif (WINDOWS)

62 changes: 30 additions & 32 deletions indra/cmake/Boost.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,36 @@ set(addrsfx "-x${ADDRESS_SIZE}")

if (WINDOWS)
target_link_libraries( ll::boost INTERFACE
libboost_context-mt${addrsfx}
libboost_fiber-mt${addrsfx}
libboost_filesystem-mt${addrsfx}
libboost_program_options-mt${addrsfx}
libboost_regex-mt${addrsfx}
libboost_system-mt${addrsfx}
libboost_thread-mt${addrsfx}
libboost_url-mt${addrsfx})
elseif (LINUX)
target_link_libraries( ll::boost INTERFACE
boost_fiber-mt${addrsfx}
boost_context-mt${addrsfx}
boost_filesystem-mt${addrsfx}
boost_program_options-mt${addrsfx}
boost_regex-mt${addrsfx}
boost_system-mt${addrsfx}
boost_thread-mt${addrsfx}
boost_url-mt${addrsfx})
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_context-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_fiber-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_filesystem-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_program_options-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_regex-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_system-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_thread-mt${addrsfx}.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_url-mt${addrsfx}.lib
)
elseif (DARWIN)
target_link_libraries( ll::boost INTERFACE
boost_context-mt${addrsfx}
boost_fiber-mt${addrsfx}
boost_filesystem-mt${addrsfx}
boost_program_options-mt${addrsfx}
boost_regex-mt${addrsfx}
boost_system-mt${addrsfx}
boost_thread-mt${addrsfx}
boost_url-mt${addrsfx})
endif (WINDOWS)

if (LINUX)
set(BOOST_SYSTEM_LIBRARY ${BOOST_SYSTEM_LIBRARY} rt)
set(BOOST_THREAD_LIBRARY ${BOOST_THREAD_LIBRARY} rt)
endif (LINUX)
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_context-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_fiber-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_filesystem-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_program_options-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_regex-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_system-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_thread-mt.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_url-mt.a
)
else ()
target_link_libraries( ll::boost INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_context-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_fiber-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_filesystem-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_program_options-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_regex-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_system-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_thread-mt${addrsfx}.a
${ARCH_PREBUILT_DIRS_RELEASE}/libboost_url-mt${addrsfx}.a
)
endif ()

12 changes: 6 additions & 6 deletions indra/cmake/CEFPlugin.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ target_include_directories( ll::cef SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/inclu

if (WINDOWS)
target_link_libraries( ll::cef INTERFACE
libcef.lib
libcef_dll_wrapper.lib
dullahan.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libcef.lib
${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.lib
${ARCH_PREBUILT_DIRS_RELEASE}/dullahan.lib
)
elseif (DARWIN)
FIND_LIBRARY(APPKIT_LIBRARY AppKit)
Expand All @@ -34,8 +34,8 @@ elseif (DARWIN)

elseif (LINUX)
target_link_libraries( ll::cef INTERFACE
libdullahan.a
cef
cef_dll_wrapper.a
${ARCH_PREBUILT_DIRS_RELEASE}/libdullahan.a
${ARCH_PREBUILT_DIRS_RELEASE}/libcef.so
${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a
)
endif (WINDOWS)
Loading
Loading