Fix compilation on macOS aarch64 (#6152)
* Fix compilation on macOS aarch64 - Bumps rpmalloc submodule to fix assembly compilation, fix `rpmalloc_thread_finalize()` API change - Adds aarch64 "/opt" Homebrew prefix (reuse `APPLE_PREFIX`) * Add detection for non-Intel architectures
This commit is contained in:
@@ -86,7 +86,7 @@ OPTION(BUNDLE_QT_TRANSLATIONS "Install Qt translation files for LMMS" OFF)
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
# Fix linking on 10.14+. See issue #4762 on github
|
||||
LINK_DIRECTORIES(/usr/local/lib)
|
||||
LINK_DIRECTORIES("${APPLE_PREFIX}/lib")
|
||||
SET(WANT_SOUNDIO OFF)
|
||||
SET(WANT_ALSA OFF)
|
||||
SET(WANT_PULSEAUDIO OFF)
|
||||
|
||||
@@ -20,22 +20,40 @@ ENDIF()
|
||||
MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
SET(LMMS_HOST_X86 FALSE)
|
||||
SET(LMMS_HOST_X86_64 FALSE)
|
||||
SET(LMMS_HOST_ARM32 FALSE)
|
||||
SET(LMMS_HOST_ARM64 FALSE)
|
||||
SET(LMMS_HOST_RISCV32 FALSE)
|
||||
SET(LMMS_HOST_RISCV64 FALSE)
|
||||
|
||||
IF(NOT DEFINED WIN64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
SET(WIN64 ON)
|
||||
# TODO: This seems a bit presumptous
|
||||
SET(WIN64 ON)
|
||||
ENDIF()
|
||||
|
||||
IF(WIN32)
|
||||
IF(WIN64)
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSE(WIN64)
|
||||
SET(IS_X86 TRUE)
|
||||
ENDIF(WIN64)
|
||||
|
||||
if(MSVC)
|
||||
SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
|
||||
|
||||
# Detect target architecture
|
||||
IF(CMAKE_GENERATOR_PLATFORM)
|
||||
STRING(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" MSVC_TARGET_PLATFORM)
|
||||
ELSE()
|
||||
STRING(TOLOWER "${CMAKE_VS_PLATFORM_NAME_DEFAULT}" MSVC_TARGET_PLATFORM)
|
||||
ENDIF()
|
||||
|
||||
IF(MSVC_TARGET_PLATFORM MATCHES "x64")
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "win32")
|
||||
SET(IS_X86 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "arm64")
|
||||
SET(IS_ARM64 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "arm")
|
||||
SET(IS_ARM32 TRUE)
|
||||
ELSE()
|
||||
MESSAGE(WARNING "Unknown target architecture: ${MSVC_TARGET_PLATFORM}")
|
||||
ENDIF()
|
||||
|
||||
IF(MSVC_VER VERSION_GREATER 19.20 OR MSVC_VER VERSION_EQUAL 19.20)
|
||||
SET(LMMS_MSVC_GENERATOR "Visual Studio 16 2019")
|
||||
SET(LMMS_MSVC_YEAR 2019) # Qt only provides binaries for MSVC 2017, but 2019 is binary compatible
|
||||
@@ -50,23 +68,58 @@ IF(WIN32)
|
||||
ENDIF()
|
||||
|
||||
unset(MSVC_VER)
|
||||
else()
|
||||
# Cross-compiled
|
||||
# TODO: Handle Windows ARM64 targets
|
||||
IF(WIN64)
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSE(WIN64)
|
||||
SET(IS_X86 TRUE)
|
||||
ENDIF(WIN64)
|
||||
endif()
|
||||
ELSE(WIN32)
|
||||
ELSE()
|
||||
# Detect target architecture based on compiler target triple e.g. "x86_64-pc-linux"
|
||||
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine ${CMAKE_C_FLAGS}" OUTPUT_VARIABLE Machine )
|
||||
MESSAGE("Machine: ${Machine}")
|
||||
STRING(REGEX MATCH "i.86" IS_X86 "${Machine}")
|
||||
STRING(REGEX MATCH "86_64|amd64" IS_X86_64 "${Machine}")
|
||||
ENDIF(WIN32)
|
||||
IF(Machine MATCHES "arm|aarch64")
|
||||
IF(Machine MATCHES "arm64|aarch64")
|
||||
SET(IS_ARM64 TRUE)
|
||||
ELSE()
|
||||
SET(IS_ARM32 TRUE)
|
||||
ENDIF()
|
||||
ELSEIF(Machine MATCHES "rv|riscv")
|
||||
IF(Machine MATCHES "rv64|riscv64")
|
||||
SET(IS_RISCV64 TRUE)
|
||||
ELSE()
|
||||
SET(IS_RISCV32 TRUE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(IS_X86)
|
||||
MESSAGE("-- Target host is 32 bit")
|
||||
MESSAGE("-- Target host is 32 bit, Intel")
|
||||
SET(LMMS_HOST_X86 TRUE)
|
||||
ELSEIF(IS_X86_64)
|
||||
MESSAGE("-- Target host is 64 bit")
|
||||
MESSAGE("-- Target host is 64 bit, Intel")
|
||||
SET(LMMS_HOST_X86_64 TRUE)
|
||||
ELSE(IS_X86)
|
||||
ELSEIF(IS_ARM32)
|
||||
MESSAGE("-- Target host is 32 bit, ARM")
|
||||
SET(LMMS_HOST_ARM32 TRUE)
|
||||
ELSEIF(IS_ARM64)
|
||||
MESSAGE("-- Target host is 64 bit, ARM")
|
||||
SET(LMMS_HOST_ARM64 TRUE)
|
||||
ELSEIF(IS_RISCV32)
|
||||
MESSAGE("-- Target host is 32 bit, RISC-V")
|
||||
SET(LMMS_HOST_RISCV32 TRUE)
|
||||
ELSEIF(IS_RISCV64)
|
||||
MESSAGE("-- Target host is 64 bit, RISC-V")
|
||||
SET(LMMS_HOST_RISCV64 TRUE)
|
||||
ELSE()
|
||||
MESSAGE("Can't identify target host. Assuming 32 bit platform.")
|
||||
ENDIF(IS_X86)
|
||||
ENDIF()
|
||||
|
||||
IF(CMAKE_INSTALL_LIBDIR)
|
||||
SET(LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
|
||||
|
||||
@@ -16,6 +16,22 @@
|
||||
#define MACHINE "x86_64"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_HOST_ARM32
|
||||
#define MACHINE "arm32"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_HOST_ARM64
|
||||
#define MACHINE "arm64"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_HOST_RISCV32
|
||||
#define MACHINE "riscv32"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_HOST_RISCV64
|
||||
#define MACHINE "riscv64"
|
||||
#endif
|
||||
|
||||
#ifndef MACHINE
|
||||
#define MACHINE "unknown processor"
|
||||
#endif
|
||||
|
||||
2
src/3rdparty/rpmalloc/rpmalloc
vendored
2
src/3rdparty/rpmalloc/rpmalloc
vendored
Submodule src/3rdparty/rpmalloc/rpmalloc updated: 8d790d2b45...30cc0c7a8c
@@ -32,7 +32,7 @@
|
||||
#include "AudioEngine.h"
|
||||
#include "ThreadableJob.h"
|
||||
|
||||
#if defined(LMMS_HOST_X86) || defined(LMMS_HOST_X86_64)
|
||||
#if __SSE__
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
|
||||
@@ -98,7 +98,7 @@ void AudioEngineWorkerThread::JobQueue::wait()
|
||||
{
|
||||
while (m_itemsDone < m_writeIndex)
|
||||
{
|
||||
#if defined(LMMS_HOST_X86) || defined(LMMS_HOST_X86_64)
|
||||
#ifdef __SSE__
|
||||
_mm_pause();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ MemoryManager::ThreadGuard::ThreadGuard()
|
||||
MemoryManager::ThreadGuard::~ThreadGuard()
|
||||
{
|
||||
if (--thread_guard_depth == 0) {
|
||||
rpmalloc_thread_finalize();
|
||||
rpmalloc_thread_finalize(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
|
||||
#cmakedefine LMMS_HOST_X86
|
||||
#cmakedefine LMMS_HOST_X86_64
|
||||
#cmakedefine LMMS_HOST_ARM32
|
||||
#cmakedefine LMMS_HOST_ARM64
|
||||
#cmakedefine LMMS_HOST_RISCV32
|
||||
#cmakedefine LMMS_HOST_RISCV64
|
||||
|
||||
#cmakedefine LMMS_HAVE_ALSA
|
||||
#cmakedefine LMMS_HAVE_FLUIDSYNTH
|
||||
|
||||
Reference in New Issue
Block a user