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