mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-13 16:45:56 +00:00
The defaults were setting local variables, while the "option" command uses the values from the CMake cache. This made the CI not build the D3D12 or Metal backend on their platforms.
174 lines
6.0 KiB
CMake
174 lines
6.0 KiB
CMake
# Copyright 2017 The NXT Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
project(nxt C CXX)
|
|
|
|
################################################################################
|
|
# Configuration options
|
|
################################################################################
|
|
|
|
option(NXT_USE_WERROR "Treat warnings as error (useful for CI)" 0)
|
|
|
|
# Default values for the backend-enabling options
|
|
set(ENABLE_D3D12 OFF)
|
|
set(ENABLE_METAL OFF)
|
|
if (WIN32)
|
|
set(ENABLE_D3D12 ON)
|
|
elseif(APPLE)
|
|
set(ENABLE_METAL ON)
|
|
endif()
|
|
|
|
option(NXT_ENABLE_D3D12 "Enable compilation of the D3D12 backend" ${ENABLE_D3D12})
|
|
option(NXT_ENABLE_METAL "Enable compilation of the Metal backend" ${ENABLE_METAL})
|
|
option(NXT_ENABLE_NULL "Enable compilation of the Null backend" ON)
|
|
option(NXT_ENABLE_OPENGL "Enable compilation of the OpenGL backend" ON)
|
|
option(NXT_ENABLE_VULKAN "Enable compilation of the Vulkan backend" OFF)
|
|
|
|
################################################################################
|
|
# Precompute compile flags and defines, functions to set them
|
|
################################################################################
|
|
|
|
set(NXT_FLAGS "")
|
|
set(NXT_DEFS "")
|
|
set(NXT_INTERNAL_FLAGS "")
|
|
set(NXT_INTERNAL_DEFS "")
|
|
set(NXT_GENERATED_FLAGS "")
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
list(APPEND NXT_DEFS "NXT_ENABLE_ASSERTS")
|
|
endif()
|
|
|
|
if (NXT_ENABLE_D3D12)
|
|
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_D3D12")
|
|
endif()
|
|
if (NXT_ENABLE_METAL)
|
|
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_METAL")
|
|
endif()
|
|
if (NXT_ENABLE_NULL)
|
|
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_NULL")
|
|
endif()
|
|
if (NXT_ENABLE_OPENGL)
|
|
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_OPENGL")
|
|
endif()
|
|
if (NXT_ENABLE_VULKAN)
|
|
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_VULKAN")
|
|
endif()
|
|
|
|
if (WIN32)
|
|
# Define NOMINMAX to prevent conflicts between std::min/max and the min/max macros in WinDef.h
|
|
list(APPEND NXT_DEFS "NOMINMAX")
|
|
# Avoid Windows.h including a lot of headers
|
|
list(APPEND NXT_DEFS "WIN32_LEAN_AND_MEAN")
|
|
# Remove compile error where the mock NXT creates too many sections for the old obj format.
|
|
list(APPEND NXT_FLAGS "/bigobj")
|
|
endif()
|
|
|
|
if (MSVC)
|
|
list(APPEND NXT_FLAGS "/std:c++14")
|
|
list(APPEND NXT_INTERNAL_FLAGS "/W4")
|
|
# Allow declarations hiding members as it is used all over NXT
|
|
list(APPEND NXT_INTERNAL_FLAGS "/wd4458")
|
|
list(APPEND NXT_INTERNAL_FLAGS "/wd4996") # Allow deprecated functions like strncpy
|
|
|
|
list(APPEND NXT_GENERATED_FLAGS "/wd4702") # Allow unreachable code
|
|
list(APPEND NXT_GENERATED_FLAGS "/wd4189") # Allow unused variable
|
|
|
|
if(NXT_USE_WERROR)
|
|
list(APPEND NXT_INTERNAL_FLAGS "/WX")
|
|
endif()
|
|
else()
|
|
# Activate C++14 only on C++ files, not C files.
|
|
list(APPEND NXT_FLAGS "$<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,CXX>:-std=c++14>")
|
|
list(APPEND NXT_FLAGS "-fPIC")
|
|
|
|
list(APPEND NXT_INTERNAL_FLAGS "-Wall" "-Wextra")
|
|
list(APPEND NXT_GENERATED_FLAGS "-Wno-unused-variable" "-Wno-unused-function")
|
|
if(NXT_USE_WERROR)
|
|
list(APPEND NXT_INTERNAL_FLAGS "-Werror")
|
|
endif()
|
|
endif()
|
|
|
|
function(NXTExternalTarget folder target)
|
|
set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS ${NXT_FLAGS})
|
|
set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${NXT_DEFS})
|
|
set_property(TARGET ${target} PROPERTY FOLDER "nxt/${folder}")
|
|
endfunction()
|
|
|
|
function(NXTInternalTarget folder target)
|
|
NXTExternalTarget("${folder}" ${target})
|
|
set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS ${NXT_INTERNAL_FLAGS})
|
|
set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${NXT_INTERNAL_DEFS})
|
|
|
|
# Group the target sources by folder to have folders show in Visual Studio
|
|
if (MSVC)
|
|
get_target_property(targetSources ${target} SOURCES)
|
|
foreach(sourceFile IN ITEMS ${targetSources})
|
|
if (IS_ABSOLUTE "${sourceFile}")
|
|
file(RELATIVE_PATH sourceFile "${CMAKE_CURRENT_SOURCE_DIR}" "${sourceFile}")
|
|
endif()
|
|
get_filename_component(sourceDir "${sourceFile}" PATH)
|
|
string(REPLACE "/" "\\" sourceDir "${sourceDir}")
|
|
source_group("${sourceDir}" FILES "${sourceFile}")
|
|
endforeach()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Enable the creation of folders for Visual Studio projects
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
################################################################################
|
|
# Generate the C and C++ NXT APIs
|
|
################################################################################
|
|
|
|
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/include)
|
|
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
add_subdirectory(generator)
|
|
|
|
Generate(
|
|
LIB_NAME nxt
|
|
LIB_TYPE STATIC
|
|
PRINT_NAME libNXT
|
|
COMMAND_LINE_ARGS
|
|
${GENERATOR_COMMON_ARGS}
|
|
-T nxt
|
|
)
|
|
target_include_directories(nxt PUBLIC ${GENERATED_DIR})
|
|
|
|
Generate(
|
|
LIB_NAME nxtcpp
|
|
LIB_TYPE STATIC
|
|
PRINT_NAME libNXT++
|
|
COMMAND_LINE_ARGS
|
|
${GENERATOR_COMMON_ARGS}
|
|
-T nxtcpp
|
|
)
|
|
target_include_directories(nxtcpp PUBLIC ${GENERATED_DIR} PUBLIC ${INCLUDE_DIR})
|
|
target_link_libraries(nxtcpp nxt)
|
|
|
|
################################################################################
|
|
# Call to other CMakeLists.txt
|
|
################################################################################
|
|
|
|
add_subdirectory(third_party)
|
|
|
|
add_subdirectory(src/common)
|
|
add_subdirectory(src/backend)
|
|
add_subdirectory(src/wire)
|
|
add_subdirectory(src/utils)
|
|
add_subdirectory(src/tests)
|
|
|
|
add_subdirectory(examples)
|