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:
Tres Finocchiaro
2021-09-22 09:28:16 -04:00
committed by GitHub
parent 8a9a2fae62
commit 131b273894
7 changed files with 92 additions and 19 deletions

View File

@@ -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)

View File

@@ -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}")

View File

@@ -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

View File

@@ -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
}

View File

@@ -53,7 +53,7 @@ MemoryManager::ThreadGuard::ThreadGuard()
MemoryManager::ThreadGuard::~ThreadGuard()
{
if (--thread_guard_depth == 0) {
rpmalloc_thread_finalize();
rpmalloc_thread_finalize(true);
}
}

View File

@@ -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