blob: 33a4fac2593db1be1119bdf8154e4ae5875fa3bf [file] [log] [blame]
# SPDX-License-Identifier: Apache-2.0
# ----------------------------------------------------------------------------
# Copyright 2020-2022 Arm Limited
#
# 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.
# ----------------------------------------------------------------------------
if(${UNIVERSAL_BUILD})
set(ASTC_TEST test-unit)
else()
set(ASTC_TEST test-unit-${ISA_SIMD})
endif()
add_executable(${ASTC_TEST})
target_sources(${ASTC_TEST}
PRIVATE
test_simd.cpp
test_softfloat.cpp
../astcenc_mathlib_softfloat.cpp)
target_include_directories(${ASTC_TEST}
PRIVATE
${gtest_SOURCE_DIR}/include)
target_compile_options(${ASTC_TEST}
PRIVATE
# Use pthreads on Linux/macOS
$<$<PLATFORM_ID:Linux,Darwin>:-pthread>
# MSVC compiler defines
$<$<CXX_COMPILER_ID:MSVC>:/EHsc>
# G++ and Clang++ compiler defines
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wextra>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wpedantic>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Werror>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wshadow>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-c++98-compat-pedantic>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-c++98-c++11-compat-pedantic>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-float-equal>
# Ignore things that the googletest build triggers
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-unknown-warning-option>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-double-promotion>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-undef>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-reserved-identifier>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-global-constructors>)
# Set up configuration for SIMD ISA builds
if(${ISA_SIMD} MATCHES "none")
if(NOT ${UNIVERSAL_BUILD})
target_compile_definitions(${ASTC_TEST}
PRIVATE
ASTCENC_NEON=0
ASTCENC_SSE=0
ASTCENC_AVX=0
ASTCENC_POPCNT=0
ASTCENC_F16C=0)
endif()
elseif(${ISA_SIMD} MATCHES "neon")
if(NOT ${UNIVERSAL_BUILD})
target_compile_definitions(${ASTC_TEST}
PRIVATE
ASTCENC_NEON=1
ASTCENC_SSE=0
ASTCENC_AVX=0
ASTCENC_POPCNT=0
ASTCENC_F16C=0)
endif()
elseif(${ISA_SIMD} MATCHES "sse2")
if(NOT ${UNIVERSAL_BUILD})
target_compile_definitions(${ASTC_TEST}
PRIVATE
ASTCENC_NEON=0
ASTCENC_SSE=20
ASTCENC_AVX=0
ASTCENC_POPCNT=0
ASTCENC_F16C=0)
endif()
target_compile_options(${ASTC_TEST}
PRIVATE
$<$<CXX_COMPILER_ID:${GNU_LIKE}>:-msse2>)
elseif(${ISA_SIMD} MATCHES "sse4.1")
if(NOT ${UNIVERSAL_BUILD})
target_compile_definitions(${ASTC_TEST}
PRIVATE
ASTCENC_NEON=0
ASTCENC_SSE=41
ASTCENC_AVX=0
ASTCENC_POPCNT=1
ASTCENC_F16C=0)
endif()
target_compile_options(${ASTC_TEST}
PRIVATE
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-msse4.1 -mpopcnt>)
elseif(${ISA_SIMD} MATCHES "avx2")
if(NOT ${UNIVERSAL_BUILD})
target_compile_definitions(${ASTC_TEST}
PRIVATE
ASTCENC_NEON=0
ASTCENC_SSE=41
ASTCENC_AVX=2
ASTCENC_POPCNT=1
ASTCENC_F16C=1)
endif()
target_compile_options(${ASTC_TEST}
PRIVATE
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-mavx2 -mpopcnt -mf16c>
$<$<CXX_COMPILER_ID:MSVC>:/arch:AVX2>)
endif()
target_link_libraries(${ASTC_TEST}
PRIVATE
gtest_main)
add_test(NAME ${ASTC_TEST}
COMMAND ${ASTC_TEST})
install(TARGETS ${ASTC_TEST} DESTINATION ${PACKAGE_ROOT})