-
Notifications
You must be signed in to change notification settings - Fork 183
Expand file tree
/
Copy pathboost-context-features.jam
More file actions
108 lines (97 loc) · 3.21 KB
/
Copy pathboost-context-features.jam
File metadata and controls
108 lines (97 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 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 <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
feature.feature htm : tsx : optional propagated composite ;
feature.compose <htm>tsx : <define>BOOST_USE_TSX ;
feature.feature valgrind : on : optional propagated composite ;
feature.compose <valgrind>on : <define>BOOST_USE_VALGRIND ;
rule default_binary_format ( properties * )
{
local tmp = elf ;
local target-os = [ property.select <target-os> : $(properties) ] ;
if $(target-os)
{
if <target-os>windows in $(properties) { tmp = pe ; }
else if <target-os>cygwin in $(properties) { tmp = pe ; }
else if <target-os>aix in $(properties) { tmp = xcoff ; }
else if <target-os>darwin in $(properties) { tmp = mach-o ; }
else if <target-os>iphone in $(properties) { tmp = mach-o ; }
else if <target-os>appletv in $(properties) { tmp = mach-o ; }
else if <target-os>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 <binary-format>$(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 <architecture> : $(properties) ] ;
if <target-os>windows in $(properties) { tmp = ms ; }
else if <target-os>cygwin in $(properties) { tmp = ms ; }
else if [ os.name ] = "NT" { tmp = ms ; }
else if [ os.name ] = "CYGWIN" { tmp = ms ; }
else if $(arch)
{
if <architecture>arm in $(properties) { tmp = aapcs ; }
else if <architecture>mips in $(properties)
{
if <address-model>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 <abi>$(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 <context-impl>ucontext : <define>BOOST_USE_UCONTEXT ;
feature.compose <context-impl>winfib : <define>BOOST_USE_WINFIB ;