# Copyright René Ferdinand Rivera Morell 2023-2024 # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) import feature ; import os ; import property ; feature.feature segmented-stacks : on : optional propagated composite ; feature.compose on : BOOST_USE_SEGMENTED_STACKS ; feature.feature htm : tsx : optional propagated composite ; feature.compose tsx : BOOST_USE_TSX ; feature.feature valgrind : on : optional propagated composite ; feature.compose on : BOOST_USE_VALGRIND ; rule default_binary_format ( properties * ) { local tmp = elf ; local target-os = [ property.select : $(properties) ] ; if $(target-os) { if windows in $(properties) { tmp = pe ; } else if cygwin in $(properties) { tmp = pe ; } else if aix in $(properties) { tmp = xcoff ; } else if darwin in $(properties) { tmp = mach-o ; } else if iphone in $(properties) { tmp = mach-o ; } else if appletv in $(properties) { tmp = mach-o ; } else if watchos in $(properties) { tmp = mach-o ; } # else: android, linux, freebsd, solaris, qnx, vxworks, ... -> elf } else { if [ os.name ] = "NT" { tmp = pe ; } else if [ os.name ] = "CYGWIN" { tmp = pe ; } else if [ os.name ] = "AIX" { tmp = xcoff ; } else if [ os.name ] = "MACOSX" { tmp = mach-o ; } } return $(tmp) ; } feature.feature binary-format : elf mach-o pe xcoff : propagated ; feature.set-default binary-format : elf ; rule default_abi ( properties * ) { local tmp = sysv ; local arch = [ property.select : $(properties) ] ; if windows in $(properties) { tmp = ms ; } else if cygwin in $(properties) { tmp = ms ; } else if [ os.name ] = "NT" { tmp = ms ; } else if [ os.name ] = "CYGWIN" { tmp = ms ; } else if $(arch) { if arm in $(properties) { tmp = aapcs ; } else if mips in $(properties) { if 64 in $(properties) { tmp = n64 ; } else { tmp = o32 ; } } } else { # Avoid using "in" operator here: it returns true if its left # part is empty, which happens e.g. with os.platform on # some uncommon architectures. if [ os.platform ] = "ARM" { tmp = aapcs ; } else if [ os.platform ] = "ARM64" { tmp = aapcs ; } else if [ os.platform ] = "MIPS32" { tmp = o32 ; } else if [ os.platform ] = "MIPS64" { tmp = n64 ; } } return $(tmp) ; } feature.feature abi : aapcs eabi ms n32 n64 o32 o64 sysv x32 : propagated ; feature.set-default abi : sysv ; feature.feature context-impl : fcontext ucontext winfib : propagated composite ; feature.set-default context-impl : fcontext ; feature.compose ucontext : BOOST_USE_UCONTEXT ; feature.compose winfib : BOOST_USE_WINFIB ;