Skip to content

Commit 0933468

Browse files
author
Rye
committed
Introduce basic ARM64 build support for apple silicon with libraries updated and rebuilt with universal support
1 parent fda95c7 commit 0933468

30 files changed

+452
-358
lines changed

autobuild.xml

Lines changed: 200 additions & 166 deletions
Large diffs are not rendered by default.

indra/cmake/00-Common.cmake

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS)
3434

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

3939
# Configure crash reporting
4040
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
@@ -197,13 +197,19 @@ if (LINUX)
197197
endif (LINUX)
198198

199199
if (DARWIN)
200+
# Use rpath loading on macos
201+
set(CMAKE_MACOSX_RPATH TRUE)
202+
200203
# Warnings should be fatal -- thanks, Nicky Perian, for spotting reversed default
201204
set(CLANG_DISABLE_FATAL_WARNINGS OFF)
202205
set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
203206
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
204207

205208
# Ensure debug symbols are always generated
206209
add_compile_options(-g --debug) # --debug is a clang synonym for -g that bypasses cmake behaviors
210+
211+
# Silence GL deprecation warnings
212+
add_compile_definitions(GL_SILENCE_DEPRECATION=1)
207213
endif(DARWIN)
208214

209215
if(LINUX OR DARWIN)

indra/cmake/APR.cmake

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,15 @@ use_system_binary( apr apr-util )
99
use_prebuilt_binary(apr_suite)
1010

1111
if (WINDOWS)
12-
if (LLCOMMON_LINK_SHARED)
13-
set(APR_selector "lib")
14-
else (LLCOMMON_LINK_SHARED)
15-
set(APR_selector "")
16-
endif (LLCOMMON_LINK_SHARED)
1712
target_link_libraries( ll::apr INTERFACE
18-
${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib
19-
${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib
13+
${ARCH_PREBUILT_DIRS_RELEASE}/apr-1.lib
14+
${ARCH_PREBUILT_DIRS_RELEASE}/aprutil-1.lib
2015
)
2116
target_compile_definitions( ll::apr INTERFACE APR_DECLARE_STATIC=1 APU_DECLARE_STATIC=1 API_DECLARE_STATIC=1)
2217
elseif (DARWIN)
23-
if (LLCOMMON_LINK_SHARED)
24-
set(APR_selector "0.dylib")
25-
set(APRUTIL_selector "0.dylib")
26-
else (LLCOMMON_LINK_SHARED)
27-
set(APR_selector "a")
28-
set(APRUTIL_selector "a")
29-
endif (LLCOMMON_LINK_SHARED)
30-
3118
target_link_libraries( ll::apr INTERFACE
32-
${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector}
33-
${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APR_selector}
19+
${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.a
20+
${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.a
3421
iconv
3522
)
3623
else()

indra/cmake/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ set(cmake_SOURCE_FILES
6666
Prebuilt.cmake
6767
Python.cmake
6868
SDL2.cmake
69+
SSE2NEON.cmake
6970
TemplateCheck.cmake
7071
ThreeJS.cmake
7172
TinyEXR.cmake

indra/cmake/Copy3rdPartyLibs.cmake

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,6 @@ if(WINDOWS)
5757
SDL2.dll
5858
)
5959

60-
if(LLCOMMON_LINK_SHARED)
61-
set(release_files ${release_files} libapr-1.dll)
62-
set(release_files ${release_files} libaprutil-1.dll)
63-
endif()
64-
6560
# Filenames are different for 32/64 bit BugSplat file and we don't
6661
# have any control over them so need to branch.
6762
if (USE_BUGSPLAT)
@@ -173,15 +168,6 @@ elseif(DARWIN)
173168
libSDL2.dylib
174169
)
175170

176-
if(LLCOMMON_LINK_SHARED)
177-
set(release_files ${release_files}
178-
libapr-1.0.dylib
179-
libapr-1.dylib
180-
libaprutil-1.0.dylib
181-
libaprutil-1.dylib
182-
)
183-
endif()
184-
185171
if (TARGET ll::openal)
186172
list(APPEND release_files libalut.dylib libopenal.dylib)
187173
endif ()
@@ -215,20 +201,6 @@ elseif(LINUX)
215201
libSDL2-2.0.so.0
216202
)
217203

218-
if( USE_AUTOBUILD_3P )
219-
list( APPEND release_files
220-
libapr-1.so.0
221-
libaprutil-1.so.0
222-
)
223-
224-
if(LLCOMMON_LINK_SHARED)
225-
set(release_files ${release_files}
226-
libapr-1.so.0
227-
libaprutil-1.so.0
228-
)
229-
endif()
230-
endif()
231-
232204
else(WINDOWS)
233205
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
234206
set(vivox_lib_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")

indra/cmake/LLAddBuildTest.cmake

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
9999
target_include_directories (PROJECT_${project}_TEST_${name} PRIVATE ${LIBS_OPEN_DIR}/test )
100100

101101
set_target_properties(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
102+
if (DARWIN)
103+
set_target_properties(PROJECT_${project}_TEST_${name}
104+
PROPERTIES
105+
BUILD_WITH_INSTALL_RPATH 1
106+
INSTALL_RPATH "@executable_path/Resources"
107+
)
108+
endif(DARWIN)
102109

103110
#
104111
# Per-codefile additional / external project dep and lib dep property extraction
@@ -229,8 +236,11 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
229236
# test binaries always need to be signed for local development
230237
set_target_properties(INTEGRATION_TEST_${testname}
231238
PROPERTIES
232-
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-")
233-
endif ()
239+
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-"
240+
BUILD_WITH_INSTALL_RPATH 1
241+
INSTALL_RPATH "@executable_path/Resources"
242+
)
243+
endif(DARWIN)
234244

235245
# Add link deps to the executable
236246
if(TEST_DEBUG)

indra/cmake/SSE2NEON.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# -*- cmake -*-
2+
3+
include(Prebuilt)
4+
5+
add_library(ll::sse2neon INTERFACE IMPORTED)
6+
7+
if (DARWIN)
8+
use_system_binary(sse2neon)
9+
use_prebuilt_binary(sse2neon)
10+
11+
target_include_directories( ll::sse2neon SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/sse2neon)
12+
endif()

indra/cmake/Variables.cmake

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -145,30 +145,26 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
145145
set(CMAKE_OSX_DEPLOYMENT_TARGET "${CMAKE_MATCH_1}")
146146
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET = '${CMAKE_OSX_DEPLOYMENT_TARGET}'")
147147

148-
string(REGEX MATCH "-stdlib=([^ ]+)" scratch "$ENV{LL_BUILD}")
149-
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "${CMAKE_MATCH_1}")
150-
message(STATUS "CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY = '${CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY}'")
151-
152148
string(REGEX MATCH "-O([^ ]*)" scratch "$ENV{LL_BUILD}")
153149
set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL "${CMAKE_MATCH_1}")
154150
message(STATUS "CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL = '${CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL}'")
155151

156152
# allow disabling this check by setting LL_SKIP_REQUIRE_SYSROOT either ON as cmake cache var or non-empty as environment var
157-
set(LL_SKIP_REQUIRE_SYSROOT OFF CACHE BOOL "Skip requirement to set toolchain sysroot ahead of time. Not skipped by default for consistency, but skipping can be useful for selecting alternative xcode versions side by side")
158-
if("$ENV{LL_SKIP_REQUIRE_SYSROOT}" STREQUAL "" AND NOT ${LL_SKIP_REQUIRE_SYSROOT})
159-
string(REGEX MATCHALL "[^ ]+" LL_BUILD_LIST "$ENV{LL_BUILD}")
160-
list(FIND LL_BUILD_LIST "-iwithsysroot" sysroot_idx)
161-
if ("${sysroot_idx}" LESS 0)
162-
message(FATAL_ERROR "Environment variable LL_BUILD must contain '-iwithsysroot'")
163-
endif ()
164-
math(EXPR sysroot_idx "${sysroot_idx} + 1")
165-
list(GET LL_BUILD_LIST "${sysroot_idx}" CMAKE_OSX_SYSROOT)
166-
endif()
167-
message(STATUS "CMAKE_OSX_SYSROOT = '${CMAKE_OSX_SYSROOT}'")
153+
# set(LL_SKIP_REQUIRE_SYSROOT OFF CACHE BOOL "Skip requirement to set toolchain sysroot ahead of time. Not skipped by default for consistency, but skipping can be useful for selecting alternative xcode versions side by side")
154+
# if("$ENV{LL_SKIP_REQUIRE_SYSROOT}" STREQUAL "" AND NOT ${LL_SKIP_REQUIRE_SYSROOT})
155+
# string(REGEX MATCHALL "[^ ]+" LL_BUILD_LIST "$ENV{LL_BUILD}")
156+
# list(FIND LL_BUILD_LIST "-iwithsysroot" sysroot_idx)
157+
# if ("${sysroot_idx}" LESS 0)
158+
# message(FATAL_ERROR "Environment variable LL_BUILD must contain '-iwithsysroot'")
159+
# endif ()
160+
# math(EXPR sysroot_idx "${sysroot_idx} + 1")
161+
# list(GET LL_BUILD_LIST "${sysroot_idx}" CMAKE_OSX_SYSROOT)
162+
# endif()
163+
# message(STATUS "CMAKE_OSX_SYSROOT = '${CMAKE_OSX_SYSROOT}'")
168164

169165
# Force debug symbol generation under xcode generator
170166
set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS YES)
171-
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)
167+
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf)
172168
message(STATUS "CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT = '${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}'")
173169

174170
# Strip dead code
@@ -193,9 +189,16 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
193189
set(CMAKE_XCODE_ATTRIBUTE_LD_WARN_DUPLICATE_LIBRARIES NO)
194190
set(CMAKE_XCODE_ATTRIBUTE_DISABLE_MANUAL_TARGET_ORDER_BUILD_WARNING YES)
195191
set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_64_TO_32_BIT_CONVERSION NO)
196-
set(CMAKE_OSX_ARCHITECTURES "${ARCH}")
197-
string(REPLACE "i686" "i386" CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
198-
string(REPLACE "AMD64" "x86_64" CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
192+
193+
option(BUILD_UNIVERSAL "Build macOS universal binaries" ON)
194+
option(BUILD_ARM64 "Build for arm64 on macos" ON)
195+
if(BUILD_UNIVERSAL)
196+
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
197+
elseif(BUILD_ARM64)
198+
set(CMAKE_OSX_ARCHITECTURES "arm64")
199+
else()
200+
set(CMAKE_OSX_ARCHITECTURES "x86_64")
201+
endif()
199202
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
200203

201204
# Default deploy grid

indra/llcommon/CMakeLists.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ include(LLSharedLibs)
1111
include(Copy3rdPartyLibs)
1212
include(ZLIBNG)
1313
include(Tracy)
14-
14+
include(SSE2NEON)
1515

1616
set(llcommon_SOURCE_FILES
1717
apply.cpp
@@ -75,7 +75,7 @@ set(llcommon_SOURCE_FILES
7575
llprocess.cpp
7676
llprocessor.cpp
7777
llprocinfo.cpp
78-
llptrto.cpp
78+
llptrto.cpp
7979
llqueuedthread.cpp
8080
llrand.cpp
8181
llrefcount.cpp
@@ -116,7 +116,7 @@ set(llcommon_SOURCE_FILES
116116
workqueue.cpp
117117
StackWalker.cpp
118118
)
119-
119+
120120
set(llcommon_HEADER_FILES
121121
CMakeLists.txt
122122

@@ -272,7 +272,7 @@ set(llcommon_HEADER_FILES
272272
workqueue.h
273273
StackWalker.h
274274
)
275-
275+
276276
if (DARWIN)
277277
list(APPEND llcommon_HEADER_FILES llsys_objc.h)
278278
list(APPEND llcommon_SOURCE_FILES llsys_objc.mm)
@@ -294,6 +294,7 @@ target_link_libraries(
294294
ll::boost
295295
ll::oslibraries
296296
ll::tracy
297+
ll::sse2neon
297298
)
298299

299300
target_include_directories(llcommon INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

indra/llcommon/llfasttimer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ bool BlockTimer::sLog = false;
6464
std::string BlockTimer::sLogName = "";
6565
bool BlockTimer::sMetricLog = false;
6666

67-
#if LL_LINUX
67+
#if LL_LINUX || LL_DARWIN
6868
U64 BlockTimer::sClockResolution = 1000000000; // Nanosecond resolution
6969
#else
7070
U64 BlockTimer::sClockResolution = 1000000; // Microsecond resolution

0 commit comments

Comments
 (0)