mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
CMake: Add explicit check for atomic lib, and link it if necessary
This commit is contained in:
parent
23bc385864
commit
f51db729c0
3 changed files with 88 additions and 0 deletions
|
|
@ -125,6 +125,7 @@ configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in"
|
|||
install(FILES "${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
|
||||
"${JUCE_BINARY_DIR}/JUCEConfig.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEHelperTargets.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCECheckAtomic.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEUtils.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/LaunchScreen.storyboard"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in"
|
||||
|
|
|
|||
82
extras/Build/CMake/JUCECheckAtomic.cmake
Normal file
82
extras/Build/CMake/JUCECheckAtomic.cmake
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2020 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 6 End-User License
|
||||
# Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-6-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
function(_juce_create_atomic_target target_name)
|
||||
add_library("${target_name}" INTERFACE)
|
||||
add_library("juce::${target_name}" ALIAS "${target_name}")
|
||||
|
||||
if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux"))
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(test_file_contents
|
||||
[[
|
||||
#include <atomic>
|
||||
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
std::atomic<long long> ll { static_cast<long long> (argc) };
|
||||
ll ^= 1;
|
||||
return static_cast<int> (ll);
|
||||
}
|
||||
]])
|
||||
|
||||
string(RANDOM LENGTH 16 random_file_string)
|
||||
set(test_file_name "${CMAKE_CURRENT_BINARY_DIR}/check_atomic_${random_file_string}.cpp")
|
||||
|
||||
string(RANDOM LENGTH 16 random_dir_string)
|
||||
set(test_bindir "${CMAKE_CURRENT_BINARY_DIR}/check_atomic_dir_${random_dir_string}")
|
||||
|
||||
file(WRITE "${test_file_name}" "${test_file_contents}")
|
||||
|
||||
try_compile(compile_result "${test_bindir}" "${test_file_name}"
|
||||
OUTPUT_VARIABLE test_build_output_0
|
||||
CXX_STANDARD 11
|
||||
CXX_STANDARD_REQUIRED TRUE
|
||||
CXX_EXTENSIONS FALSE)
|
||||
|
||||
if(NOT compile_result)
|
||||
try_compile(compile_result "${test_bindir}" "${test_file_name}"
|
||||
OUTPUT_VARIABLE test_build_output_1
|
||||
LINK_LIBRARIES atomic
|
||||
CXX_STANDARD 11
|
||||
CXX_STANDARD_REQUIRED TRUE
|
||||
CXX_EXTENSIONS FALSE)
|
||||
|
||||
if (NOT compile_result)
|
||||
message(FATAL_ERROR
|
||||
"First build output:\n"
|
||||
"${test_build_output_0}"
|
||||
"\n\nSecond build output:\n"
|
||||
"${test_build_output_1}"
|
||||
"\n\nJUCE requires support for std::atomic, but this system cannot "
|
||||
"successfully compile a program which uses std::atomic. "
|
||||
"You may need to install a dedicated libatomic package using your "
|
||||
"system's package manager.")
|
||||
endif()
|
||||
|
||||
target_link_libraries("${target_name}" INTERFACE atomic)
|
||||
endif()
|
||||
|
||||
file(REMOVE "${test_file_name}")
|
||||
endfunction()
|
||||
|
|
@ -123,6 +123,9 @@ set(JUCE_CMAKE_UTILS_DIR ${CMAKE_CURRENT_LIST_DIR}
|
|||
CACHE INTERNAL "The path to the folder holding this file and other resources")
|
||||
|
||||
include("${JUCE_CMAKE_UTILS_DIR}/JUCEHelperTargets.cmake")
|
||||
include("${JUCE_CMAKE_UTILS_DIR}/JUCECheckAtomic.cmake")
|
||||
|
||||
_juce_create_atomic_target(juce_atomic_wrapper)
|
||||
|
||||
# Tries to discover the target platform architecture, which is necessary for
|
||||
# naming VST3 bundle folders correctly.
|
||||
|
|
@ -518,6 +521,8 @@ function(juce_add_module module_path)
|
|||
if(${module_name} STREQUAL "juce_core")
|
||||
_juce_add_standard_defs(${module_name})
|
||||
|
||||
target_link_libraries(juce_core INTERFACE juce::juce_atomic_wrapper)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
target_sources(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c")
|
||||
target_include_directories(juce_core INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue