mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-22 15:04:34 +00:00
138 lines
5.2 KiB
CMake
138 lines
5.2 KiB
CMake
# Copyright 2014 Google Inc. All rights reserved.
|
|
#
|
|
# 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.12)
|
|
|
|
set(PROJECT_NAME MathFu)
|
|
project(MathFu)
|
|
|
|
# Call fplutil to get locations of dependencies and set common build settings.
|
|
include("cmake/find_fplutil.cmake")
|
|
include("${fplutil_dir}/buildutil/cmake_common.txt")
|
|
set_common_build_variables()
|
|
|
|
# Options that control the build configuration.
|
|
# To configure MathFu flags per build target, see the
|
|
# mathfu_configure_flags() function.
|
|
option(mathfu_enable_simd "Use SIMD implementations when available." ON)
|
|
option(mathfu_build_benchmarks "Build MathFu benchmarks." ON)
|
|
option(mathfu_build_tests "Build MathFu unit tests." ON)
|
|
|
|
# Save the mathfu directory, store this in the cache so that it's globally
|
|
# accessible from mathfu_configure_flags().
|
|
set(mathfu_dir ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "mathfu directory")
|
|
|
|
# Set build options for ${target} that are required to build with MathFu.
|
|
# This takes the optional arguments "enable_simd force_padding".
|
|
#
|
|
# If enable_simd is specified it configures whether the project should be
|
|
# built with SIMD optimized functions. If force_padding is specified and
|
|
# SIMD is enabled, some data structures are padded to work more efficiently
|
|
# with SIMD instructions.
|
|
#
|
|
# If enable_simd is not specified, the mathfu_enable_simd option is used.
|
|
# If force_padding isn't specified padding is enabled based upon the
|
|
# best general configuration for the target architecture.
|
|
function(mathfu_configure_flags target)
|
|
if(fpl_ios)
|
|
set(enable_simd NO)
|
|
else()
|
|
set(enable_simd ${mathfu_enable_simd})
|
|
endif()
|
|
|
|
# Add required includes to the target.
|
|
target_include_directories(${target}
|
|
PRIVATE ${mathfu_dir}/include ${dependencies_vectorial_dir}/include)
|
|
|
|
# Parse optional arguments.
|
|
set(additional_args ${ARGN})
|
|
list(LENGTH additional_args num_additional_args)
|
|
if(${num_additional_args} GREATER 0)
|
|
list(GET additional_args 0 enable_simd)
|
|
endif()
|
|
if(${num_additional_args} GREATER 1)
|
|
list(GET additional_args 1 force_padding)
|
|
endif()
|
|
|
|
# If the SIMD build option is enabled.
|
|
if(enable_simd)
|
|
# Enable SSE4.1 when building with GCC / Clang.
|
|
# NOTE: It's also possible to build the library using using SSE2 with GCC /
|
|
# Clang, change -msse4.1 to -msse2.
|
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR
|
|
CMAKE_COMPILER_IS_CLANGXX)
|
|
target_compile_options(${target} PRIVATE -msse4.1)
|
|
endif()
|
|
# Enable SSE2 by default when building with MSVC for 32-bit targets.
|
|
# Note that SSE2 is enabled by default for 64-bit targets, and the
|
|
# compile option will generate an "unknown option" warning.
|
|
if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
target_compile_options(${target} PRIVATE /arch:SSE2)
|
|
endif()
|
|
# Conditionally enable padding.
|
|
if(DEFINED force_padding)
|
|
if(force_padding)
|
|
target_compile_definitions(${target} PRIVATE
|
|
-DMATHFU_COMPILE_FORCE_PADDING=1)
|
|
else()
|
|
target_compile_definitions(${target} PRIVATE
|
|
-DMATHFU_COMPILE_FORCE_PADDING=0)
|
|
endif()
|
|
endif()
|
|
else()
|
|
target_compile_definitions(${target} PRIVATE
|
|
-DMATHFU_COMPILE_WITHOUT_SIMD_SUPPORT)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Modify CMAKE_C_FLAGS and CMAKE_CXX_FLAGS to enable a maximum reasonable
|
|
# warning level.
|
|
function(mathfu_enable_warnings target)
|
|
get_target_property(target_compile_flags ${target} COMPILE_FLAGS)
|
|
if(MSVC)
|
|
# C4127: conditional expression is constant
|
|
# C4577: 'noexcept' used with no exception handling mode specified.
|
|
target_compile_options(${target} PRIVATE /W4 /WX /wd4127 /wd4577)
|
|
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR
|
|
CMAKE_COMPILER_IS_CLANGXX)
|
|
# Set the maximum warning level for gcc.
|
|
target_compile_options(${target} PRIVATE -Wall -Wextra -Werror
|
|
-Wno-long-long -Wno-variadic-macros)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Macro defined here so that it can be used by all projects included
|
|
macro(mathfu_set_ios_attributes project)
|
|
if(fpl_ios)
|
|
set_target_properties(${project} PROPERTIES
|
|
XCODE_ATTRIBUTE_SDKROOT "iphoneos")
|
|
set_target_properties(${project} PROPERTIES
|
|
XCODE_ATTRIBUTE_ARCHS "$(ARCHS_STANDARD)")
|
|
set_target_properties(${project} PROPERTIES
|
|
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
|
|
set_target_properties(${project} PROPERTIES
|
|
XCODE_ATTRIBUTE_VALID_ARCHS "$(ARCHS_STANDARD)")
|
|
set_target_properties(${project} PROPERTIES
|
|
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "8.0")
|
|
endif()
|
|
endmacro(mathfu_set_ios_attributes)
|
|
|
|
file(GLOB_RECURSE MATHFU_HEADERS ${CMAKE_CURRENT_LIST_DIR}/include/mathfu *.h)
|
|
|
|
if(mathfu_build_benchmarks)
|
|
add_subdirectory(benchmarks)
|
|
endif()
|
|
if(mathfu_build_tests)
|
|
add_subdirectory(unit_tests)
|
|
endif()
|