paulxstretch/deps/juce/extras/Build/CMake/JUCECheckAtomic.cmake
essej 25bd5d8adb git subrepo clone --branch=sono6good https://github.com/essej/JUCE.git deps/juce
subrepo:
  subdir:   "deps/juce"
  merged:   "b13f9084e"
upstream:
  origin:   "https://github.com/essej/JUCE.git"
  branch:   "sono6good"
  commit:   "b13f9084e"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"
2022-04-18 17:51:22 -04:00

87 lines
3.0 KiB
CMake

# ==============================================================================
#
# 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") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD")))
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 14
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 14
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}")
file(REMOVE_RECURSE "${test_bindir}")
endfunction()
_juce_create_atomic_target(juce_atomic_wrapper)