#
# This file is part of Magnum.
#
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
# 2020, 2021, 2022, 2023, 2024, 2025
# Vladimír Vondruš <mosra@centrum.cz>
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
# IDE folder in VS, Xcode etc. CMake 3.12+, older versions have only the FOLDER
# property that would have to be set on each target separately.
set ( CMAKE_FOLDER "Magnum/TextureTools" )
# Somehow, due to MagnumTradeObjects having target_include_directories() with
# $<TARGET_PROPERTY:Corrade::PluginManager,INTERFACE_INCLUDE_DIRECTORIES>,
# if MAGNUM_DISTANCEFIELDCONVERTER_STATIC_PLUGINS is non-empty then CMake fails
# with
#
# Target "Corrade::PluginManager" not found.
#
# unless the find_package() is here. Not sure why, probably some bug in CMake
# dependency handling? Changing target_include_directories() to PRIVATE doesn't
# help, removing it altogether helps.
find_package ( Corrade REQUIRED PluginManager )
set ( MagnumTextureTools_GracefulAssert_SRCS
A t l a s . c p p )
set ( MagnumTextureTools_HEADERS
A t l a s . h
T e x t u r e T o o l s . h
v i s i b i l i t y . h )
if ( MAGNUM_TARGET_GL )
corrade_add_resource ( MagnumTextureTools_RESOURCES resources.conf )
if ( MAGNUM_BUILD_STATIC )
# On the static build we're importing the resources manually, so no
# need to have the implicit initializers as well.
set_property ( SOURCE ${ MagnumTextureTools_RESOURCES } APPEND PROPERTY
C O M P I L E _ D E F I N I T I O N S
" C O R R A D E _ A U T O M A T I C _ I N I T I A L I Z E R = C O R R A D E _ N O O P "
" C O R R A D E _ A U T O M A T I C _ F I N A L I Z E R = C O R R A D E _ N O O P " )
endif ( )
list ( APPEND MagnumTextureTools_GracefulAssert_SRCS
D i s t a n c e F i e l d G L . c p p
$ { M a g n u m T e x t u r e T o o l s _ R E S O U R C E S } )
list ( APPEND MagnumTextureTools_HEADERS DistanceFieldGL.h )
if ( MAGNUM_BUILD_DEPRECATED )
list ( APPEND MagnumTextureTools_HEADERS DistanceField.h )
endif ( )
endif ( )
# TextureTools library
add_library ( MagnumTextureTools ${ SHARED_OR_STATIC }
$ { M a g n u m T e x t u r e T o o l s _ G r a c e f u l A s s e r t _ S R C S }
$ { M a g n u m T e x t u r e T o o l s _ H E A D E R S } )
set_target_properties ( MagnumTextureTools PROPERTIES DEBUG_POSTFIX "-d" )
if ( NOT MAGNUM_BUILD_STATIC )
set_target_properties ( MagnumTextureTools PROPERTIES VERSION ${ MAGNUM_LIBRARY_VERSION } SOVERSION ${ MAGNUM_LIBRARY_SOVERSION } )
elseif ( MAGNUM_BUILD_STATIC_PIC )
set_target_properties ( MagnumTextureTools PROPERTIES POSITION_INDEPENDENT_CODE ON )
endif ( )
target_link_libraries ( MagnumTextureTools PUBLIC
M a g n u m )
if ( MAGNUM_TARGET_GL )
target_link_libraries ( MagnumTextureTools PUBLIC MagnumGL )
endif ( )
install ( TARGETS MagnumTextureTools
R U N T I M E D E S T I N A T I O N $ { M A G N U M _ B I N A R Y _ I N S T A L L _ D I R }
L I B R A R Y D E S T I N A T I O N $ { M A G N U M _ L I B R A R Y _ I N S T A L L _ D I R }
A R C H I V E D E S T I N A T I O N $ { M A G N U M _ L I B R A R Y _ I N S T A L L _ D I R } )
install ( FILES ${ MagnumTextureTools_HEADERS } DESTINATION ${ MAGNUM_INCLUDE_INSTALL_DIR } /TextureTools )
if ( MAGNUM_WITH_DISTANCEFIELDCONVERTER )
if ( NOT MAGNUM_TARGET_GL )
message ( SEND_ERROR "The magnum-distancefieldconverter utility is available only if MAGNUM_TARGET_GL is enabled" )
endif ( )
if ( CORRADE_TARGET_EMSCRIPTEN )
message ( SEND_ERROR "The magnum-distancefieldconverter utility isn't available on Emscripten due to lack of GPU access from Node.js. Set MAGNUM_WITH_DISTANCEFIELDCONVERTER to OFF to skip building it." )
endif ( )
find_package ( Corrade REQUIRED Main )
add_executable ( magnum-distancefieldconverter distancefieldconverter.cpp )
target_link_libraries ( magnum-distancefieldconverter PRIVATE
C o r r a d e : : M a i n
M a g n u m
M a g n u m T e x t u r e T o o l s
M a g n u m T r a d e
$ { M A G N U M _ D I S T A N C E F I E L D C O N V E R T E R _ S T A T I C _ P L U G I N S } )
if ( MAGNUM_TARGET_EGL )
target_link_libraries ( magnum-distancefieldconverter PRIVATE MagnumWindowlessEglApplication )
elseif ( CORRADE_TARGET_IOS )
target_link_libraries ( magnum-distancefieldconverter PRIVATE MagnumWindowlessIosApplication )
elseif ( CORRADE_TARGET_APPLE )
target_link_libraries ( magnum-distancefieldconverter PRIVATE MagnumWindowlessCglApplication )
elseif ( CORRADE_TARGET_UNIX )
target_link_libraries ( magnum-distancefieldconverter PRIVATE MagnumWindowlessGlxApplication )
elseif ( CORRADE_TARGET_WINDOWS )
target_link_libraries ( magnum-distancefieldconverter PRIVATE MagnumWindowlessWglApplication )
else ( )
message ( FATAL_ERROR "magnum-distancefieldconverter is not available on this platform. Set MAGNUM_WITH_DISTANCEFIELDCONVERTER to OFF to suppress this warning." )
endif ( )
install ( TARGETS magnum-distancefieldconverter DESTINATION ${ MAGNUM_BINARY_INSTALL_DIR } )
# Magnum distancefieldconverter target alias for superprojects
add_executable ( Magnum::distancefieldconverter ALIAS magnum-distancefieldconverter )
endif ( )
if ( MAGNUM_BUILD_TESTS )
# Library with graceful assert for testing
add_library ( MagnumTextureToolsTestLib ${ SHARED_OR_STATIC } ${ EXCLUDE_FROM_ALL_IF_TEST_TARGET }
$ { M a g n u m T e x t u r e T o o l s _ G r a c e f u l A s s e r t _ S R C S } )
set_target_properties ( MagnumTextureToolsTestLib PROPERTIES DEBUG_POSTFIX "-d" )
if ( CMAKE_GENERATOR STREQUAL Xcode )
# Xcode's "new build system" doesn't like when the same (generated)
# source file is used by two different targets (MagnumTextureTools and
# MagnumTextureToolsTestLib) that don't have any other dependency
# between them. WTF.
add_dependencies ( MagnumTextureToolsTestLib MagnumTextureTools )
endif ( )
target_compile_definitions ( MagnumTextureToolsTestLib PRIVATE
" C O R R A D E _ G R A C E F U L _ A S S E R T " " M a g n u m T e x t u r e T o o l s _ E X P O R T S " )
if ( MAGNUM_BUILD_STATIC_PIC )
set_target_properties ( MagnumTextureToolsTestLib PROPERTIES POSITION_INDEPENDENT_CODE ON )
endif ( )
target_link_libraries ( MagnumTextureToolsTestLib PUBLIC
M a g n u m )
if ( MAGNUM_TARGET_GL )
target_link_libraries ( MagnumTextureToolsTestLib PUBLIC MagnumGL )
endif ( )
add_subdirectory ( Test ${ EXCLUDE_FROM_ALL_IF_TEST_TARGET } )
endif ( )
# Magnum TextureTools target alias for superprojects
add_library ( Magnum::TextureTools ALIAS MagnumTextureTools )