| # Copyright 2024 The Dawn & Tint Authors | |
| # | |
| # Redistribution and use in source and binary forms, with or without | |
| # modification, are permitted provided that the following conditions are met: | |
| # | |
| # 1. Redistributions of source code must retain the above copyright notice, this | |
| # list of conditions and the following disclaimer. | |
| # | |
| # 2. Redistributions in binary form must reproduce the above copyright notice, | |
| # this list of conditions and the following disclaimer in the documentation | |
| # and/or other materials provided with the distribution. | |
| # | |
| # 3. Neither the name of the copyright holder nor the names of its | |
| # contributors may be used to endorse or promote products derived from | |
| # this software without specific prior written permission. | |
| # | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| # Preserved for the c++ module interface to match the compile config | |
| # of the consuming project | |
| if (DEFINED CMAKE_CXX_STANDARD) | |
| set(DAWN_TOPLEVEL_CXX_STANDARD ${CMAKE_CXX_STANDARD}) | |
| else () | |
| set(DAWN_TOPLEVEL_CXX_STANDARD 20) | |
| endif () | |
| if (DEFINED CMAKE_CXX_EXTENSIONS) | |
| set(DAWN_TOPLEVEL_CXX_EXTENSIONS ${CMAKE_CXX_EXTENSIONS}) | |
| else () | |
| set(DAWN_TOPLEVEL_CXX_EXTENSIONS ${CMAKE_CXX_EXTENSIONS_DEFAULT}) | |
| endif () | |
| # Make sure we have C++20 enabled. | |
| # Needed to make sure libraries and executables not built by the | |
| # dawn_add_library still have the C++20 compiler flags enabled | |
| set(CMAKE_CXX_STANDARD 20) | |
| set(CMAKE_CXX_STANDARD_REQUIRED True) | |
| set(CMAKE_CXX_EXTENSIONS False) | |
| # Prevent scanning headers for module dependencies | |
| # Also needed for the module compile check below | |
| set(CMAKE_CXX_SCAN_FOR_MODULES OFF) | |
| # Check C++20 module support | |
| # Ref: https://cmake.org/cmake/help/latest/manual/cmake-cxxmodules.7.html | |
| if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28 | |
| # Supported generators | |
| AND | |
| ((CMAKE_GENERATOR MATCHES "Ninja") OR | |
| (CMAKE_GENERATOR MATCHES "^Visual Studio ([0-9]+) [0-9]+$" | |
| AND CMAKE_MATCH_1 GREATER_EQUAL 17)) | |
| # AppleClang, VisualStudio and certain Linux distros | |
| # don't bundle clang-scan-deps | |
| AND | |
| ((CMAKE_CXX_COMPILER_ID MATCHES Clang | |
| AND CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS) | |
| OR NOT CMAKE_CXX_COMPILER_ID MATCHES Clang)) | |
| include(CheckCXXSourceCompiles) | |
| if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
| set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fmodules-ts") | |
| endif() | |
| check_cxx_source_compiles([[ | |
| module; | |
| export module test; | |
| extern "C++" int main() {} | |
| ]] DAWN_SUPPORTS_CXX_MODULES) | |
| else() | |
| set(DAWN_SUPPORTS_CXX_MODULES False) | |
| endif() |