mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
GH-114809: Add support for macOS multi-arch builds with the JIT enabled (#131751)
Co-authored-by: Ronald Oussoren <ronaldoussoren@mac.com> Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
This commit is contained in:
parent
2b67db7ce3
commit
26c0248b54
7 changed files with 152 additions and 102 deletions
2
.github/workflows/jit.yml
vendored
2
.github/workflows/jit.yml
vendored
|
@ -113,7 +113,7 @@ jobs:
|
||||||
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
|
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
|
||||||
brew install llvm@${{ matrix.llvm }}
|
brew install llvm@${{ matrix.llvm }}
|
||||||
export SDKROOT="$(xcrun --show-sdk-path)"
|
export SDKROOT="$(xcrun --show-sdk-path)"
|
||||||
./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }}
|
./configure --enable-experimental-jit --enable-universalsdk --with-universal-archs=universal2 ${{ matrix.debug && '--with-pydebug' || '' }}
|
||||||
make all --jobs 4
|
make all --jobs 4
|
||||||
./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
|
./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
|
||||||
|
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -138,7 +138,7 @@ Tools/unicode/data/
|
||||||
# hendrikmuhs/ccache-action@v1
|
# hendrikmuhs/ccache-action@v1
|
||||||
/.ccache
|
/.ccache
|
||||||
/cross-build/
|
/cross-build/
|
||||||
/jit_stencils.h
|
/jit_stencils*.h
|
||||||
/platform
|
/platform
|
||||||
/profile-clean-stamp
|
/profile-clean-stamp
|
||||||
/profile-run-stamp
|
/profile-run-stamp
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add support for macOS multi-arch builds with the JIT enabled
|
|
@ -25,6 +25,7 @@ TOOLS = TOOLS_JIT.parent
|
||||||
CPYTHON = TOOLS.parent
|
CPYTHON = TOOLS.parent
|
||||||
PYTHON_EXECUTOR_CASES_C_H = CPYTHON / "Python" / "executor_cases.c.h"
|
PYTHON_EXECUTOR_CASES_C_H = CPYTHON / "Python" / "executor_cases.c.h"
|
||||||
TOOLS_JIT_TEMPLATE_C = TOOLS_JIT / "template.c"
|
TOOLS_JIT_TEMPLATE_C = TOOLS_JIT / "template.c"
|
||||||
|
ASYNCIO_RUNNER = asyncio.Runner()
|
||||||
|
|
||||||
_S = typing.TypeVar("_S", _schema.COFFSection, _schema.ELFSection, _schema.MachOSection)
|
_S = typing.TypeVar("_S", _schema.COFFSection, _schema.ELFSection, _schema.MachOSection)
|
||||||
_R = typing.TypeVar(
|
_R = typing.TypeVar(
|
||||||
|
@ -35,6 +36,7 @@ _R = typing.TypeVar(
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class _Target(typing.Generic[_S, _R]):
|
class _Target(typing.Generic[_S, _R]):
|
||||||
triple: str
|
triple: str
|
||||||
|
condition: str
|
||||||
_: dataclasses.KW_ONLY
|
_: dataclasses.KW_ONLY
|
||||||
alignment: int = 1
|
alignment: int = 1
|
||||||
args: typing.Sequence[str] = ()
|
args: typing.Sequence[str] = ()
|
||||||
|
@ -188,7 +190,12 @@ class _Target(typing.Generic[_S, _R]):
|
||||||
return stencil_groups
|
return stencil_groups
|
||||||
|
|
||||||
def build(
|
def build(
|
||||||
self, out: pathlib.Path, *, comment: str = "", force: bool = False
|
self,
|
||||||
|
out: pathlib.Path,
|
||||||
|
*,
|
||||||
|
comment: str = "",
|
||||||
|
force: bool = False,
|
||||||
|
stencils_h: str = "jit_stencils.h",
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Build jit_stencils.h in the given directory."""
|
"""Build jit_stencils.h in the given directory."""
|
||||||
if not self.stable:
|
if not self.stable:
|
||||||
|
@ -197,14 +204,14 @@ class _Target(typing.Generic[_S, _R]):
|
||||||
outline = "=" * len(warning)
|
outline = "=" * len(warning)
|
||||||
print("\n".join(["", outline, warning, request, outline, ""]))
|
print("\n".join(["", outline, warning, request, outline, ""]))
|
||||||
digest = f"// {self._compute_digest(out)}\n"
|
digest = f"// {self._compute_digest(out)}\n"
|
||||||
jit_stencils = out / "jit_stencils.h"
|
jit_stencils = out / stencils_h
|
||||||
if (
|
if (
|
||||||
not force
|
not force
|
||||||
and jit_stencils.exists()
|
and jit_stencils.exists()
|
||||||
and jit_stencils.read_text().startswith(digest)
|
and jit_stencils.read_text().startswith(digest)
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
stencil_groups = asyncio.run(self._build_stencils())
|
stencil_groups = ASYNCIO_RUNNER.run(self._build_stencils())
|
||||||
jit_stencils_new = out / "jit_stencils.h.new"
|
jit_stencils_new = out / "jit_stencils.h.new"
|
||||||
try:
|
try:
|
||||||
with jit_stencils_new.open("w") as file:
|
with jit_stencils_new.open("w") as file:
|
||||||
|
@ -512,10 +519,12 @@ def get_target(host: str) -> _COFF | _ELF | _MachO:
|
||||||
"""Build a _Target for the given host "triple" and options."""
|
"""Build a _Target for the given host "triple" and options."""
|
||||||
target: _COFF | _ELF | _MachO
|
target: _COFF | _ELF | _MachO
|
||||||
if re.fullmatch(r"aarch64-apple-darwin.*", host):
|
if re.fullmatch(r"aarch64-apple-darwin.*", host):
|
||||||
target = _MachO(host, alignment=8, prefix="_")
|
condition = "defined(__aarch64__) && defined(__APPLE__)"
|
||||||
|
target = _MachO(host, condition, alignment=8, prefix="_")
|
||||||
elif re.fullmatch(r"aarch64-pc-windows-msvc", host):
|
elif re.fullmatch(r"aarch64-pc-windows-msvc", host):
|
||||||
args = ["-fms-runtime-lib=dll", "-fplt"]
|
args = ["-fms-runtime-lib=dll", "-fplt"]
|
||||||
target = _COFF(host, alignment=8, args=args)
|
condition = "defined(_M_ARM64)"
|
||||||
|
target = _COFF(host, condition, alignment=8, args=args)
|
||||||
elif re.fullmatch(r"aarch64-.*-linux-gnu", host):
|
elif re.fullmatch(r"aarch64-.*-linux-gnu", host):
|
||||||
args = [
|
args = [
|
||||||
"-fpic",
|
"-fpic",
|
||||||
|
@ -523,22 +532,27 @@ def get_target(host: str) -> _COFF | _ELF | _MachO:
|
||||||
# was required to disable them.
|
# was required to disable them.
|
||||||
"-mno-outline-atomics",
|
"-mno-outline-atomics",
|
||||||
]
|
]
|
||||||
target = _ELF(host, alignment=8, args=args)
|
condition = "defined(__aarch64__) && defined(__linux__)"
|
||||||
|
target = _ELF(host, condition, alignment=8, args=args)
|
||||||
elif re.fullmatch(r"i686-pc-windows-msvc", host):
|
elif re.fullmatch(r"i686-pc-windows-msvc", host):
|
||||||
args = [
|
args = [
|
||||||
"-DPy_NO_ENABLE_SHARED",
|
"-DPy_NO_ENABLE_SHARED",
|
||||||
# __attribute__((preserve_none)) is not supported
|
# __attribute__((preserve_none)) is not supported
|
||||||
"-Wno-ignored-attributes",
|
"-Wno-ignored-attributes",
|
||||||
]
|
]
|
||||||
target = _COFF(host, args=args, prefix="_")
|
condition = "defined(_M_IX86)"
|
||||||
|
target = _COFF(host, condition, args=args, prefix="_")
|
||||||
elif re.fullmatch(r"x86_64-apple-darwin.*", host):
|
elif re.fullmatch(r"x86_64-apple-darwin.*", host):
|
||||||
target = _MachO(host, prefix="_")
|
condition = "defined(__x86_64__) && defined(__APPLE__)"
|
||||||
|
target = _MachO(host, condition, prefix="_")
|
||||||
elif re.fullmatch(r"x86_64-pc-windows-msvc", host):
|
elif re.fullmatch(r"x86_64-pc-windows-msvc", host):
|
||||||
args = ["-fms-runtime-lib=dll"]
|
args = ["-fms-runtime-lib=dll"]
|
||||||
target = _COFF(host, args=args)
|
condition = "defined(_M_X64)"
|
||||||
|
target = _COFF(host, condition, args=args)
|
||||||
elif re.fullmatch(r"x86_64-.*-linux-gnu", host):
|
elif re.fullmatch(r"x86_64-.*-linux-gnu", host):
|
||||||
args = ["-fno-pic", "-mcmodel=medium", "-mlarge-data-threshold=0"]
|
args = ["-fno-pic", "-mcmodel=medium", "-mlarge-data-threshold=0"]
|
||||||
target = _ELF(host, args=args)
|
condition = "defined(__x86_64__) && defined(__linux__)"
|
||||||
|
target = _ELF(host, condition, args=args)
|
||||||
else:
|
else:
|
||||||
raise ValueError(host)
|
raise ValueError(host)
|
||||||
return target
|
return target
|
||||||
|
|
|
@ -11,7 +11,10 @@ if __name__ == "__main__":
|
||||||
comment = f"$ {shlex.join([pathlib.Path(sys.executable).name] + sys.argv)}"
|
comment = f"$ {shlex.join([pathlib.Path(sys.executable).name] + sys.argv)}"
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"target", type=_targets.get_target, help="a PEP 11 target triple to compile for"
|
"target",
|
||||||
|
nargs="+",
|
||||||
|
type=_targets.get_target,
|
||||||
|
help="a PEP 11 target triple to compile for",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-d", "--debug", action="store_true", help="compile for a debug build of Python"
|
"-d", "--debug", action="store_true", help="compile for a debug build of Python"
|
||||||
|
@ -23,6 +26,22 @@ if __name__ == "__main__":
|
||||||
"-v", "--verbose", action="store_true", help="echo commands as they are run"
|
"-v", "--verbose", action="store_true", help="echo commands as they are run"
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.target.debug = args.debug
|
for target in args.target:
|
||||||
args.target.verbose = args.verbose
|
target.debug = args.debug
|
||||||
args.target.build(pathlib.Path.cwd(), comment=comment, force=args.force)
|
target.force = args.force
|
||||||
|
target.verbose = args.verbose
|
||||||
|
target.build(
|
||||||
|
pathlib.Path.cwd(),
|
||||||
|
comment=comment,
|
||||||
|
stencils_h=f"jit_stencils-{target.triple}.h",
|
||||||
|
force=args.force,
|
||||||
|
)
|
||||||
|
|
||||||
|
with open("jit_stencils.h", "w") as fp:
|
||||||
|
for idx, target in enumerate(args.target):
|
||||||
|
fp.write(f"#{'if' if idx == 0 else 'elif'} {target.condition}\n")
|
||||||
|
fp.write(f'#include "jit_stencils-{target.triple}.h"\n')
|
||||||
|
|
||||||
|
fp.write("#else\n")
|
||||||
|
fp.write('#error "unexpected target"\n')
|
||||||
|
fp.write("#endif\n")
|
||||||
|
|
110
configure
generated
vendored
110
configure
generated
vendored
|
@ -900,6 +900,8 @@ LDSHARED
|
||||||
SHLIB_SUFFIX
|
SHLIB_SUFFIX
|
||||||
DSYMUTIL_PATH
|
DSYMUTIL_PATH
|
||||||
DSYMUTIL
|
DSYMUTIL
|
||||||
|
JIT_STENCILS_H
|
||||||
|
REGEN_JIT_COMMAND
|
||||||
UNIVERSAL_ARCH_FLAGS
|
UNIVERSAL_ARCH_FLAGS
|
||||||
WASM_STDLIB
|
WASM_STDLIB
|
||||||
WASM_ASSETS_DIR
|
WASM_ASSETS_DIR
|
||||||
|
@ -928,8 +930,6 @@ LLVM_AR
|
||||||
PROFILE_TASK
|
PROFILE_TASK
|
||||||
DEF_MAKE_RULE
|
DEF_MAKE_RULE
|
||||||
DEF_MAKE_ALL_RULE
|
DEF_MAKE_ALL_RULE
|
||||||
JIT_STENCILS_H
|
|
||||||
REGEN_JIT_COMMAND
|
|
||||||
ABI_THREAD
|
ABI_THREAD
|
||||||
ABIFLAGS
|
ABIFLAGS
|
||||||
LN
|
LN
|
||||||
|
@ -1092,13 +1092,13 @@ with_pydebug
|
||||||
with_trace_refs
|
with_trace_refs
|
||||||
enable_pystats
|
enable_pystats
|
||||||
with_assertions
|
with_assertions
|
||||||
enable_experimental_jit
|
|
||||||
enable_optimizations
|
enable_optimizations
|
||||||
with_lto
|
with_lto
|
||||||
enable_bolt
|
enable_bolt
|
||||||
with_strict_overflow
|
with_strict_overflow
|
||||||
enable_safety
|
enable_safety
|
||||||
enable_slower_safety
|
enable_slower_safety
|
||||||
|
enable_experimental_jit
|
||||||
with_dsymutil
|
with_dsymutil
|
||||||
with_address_sanitizer
|
with_address_sanitizer
|
||||||
with_memory_sanitizer
|
with_memory_sanitizer
|
||||||
|
@ -1823,9 +1823,6 @@ Optional Features:
|
||||||
--disable-gil enable experimental support for running without the
|
--disable-gil enable experimental support for running without the
|
||||||
GIL (default is no)
|
GIL (default is no)
|
||||||
--enable-pystats enable internal statistics gathering (default is no)
|
--enable-pystats enable internal statistics gathering (default is no)
|
||||||
--enable-experimental-jit[=no|yes|yes-off|interpreter]
|
|
||||||
build the experimental just-in-time compiler
|
|
||||||
(default is no)
|
|
||||||
--enable-optimizations enable expensive, stable optimizations (PGO, etc.)
|
--enable-optimizations enable expensive, stable optimizations (PGO, etc.)
|
||||||
(default is no)
|
(default is no)
|
||||||
--enable-bolt enable usage of the llvm-bolt post-link optimizer
|
--enable-bolt enable usage of the llvm-bolt post-link optimizer
|
||||||
|
@ -1834,6 +1831,9 @@ Optional Features:
|
||||||
no performance overhead
|
no performance overhead
|
||||||
--enable-slower-safety enable usage of the security compiler options with
|
--enable-slower-safety enable usage of the security compiler options with
|
||||||
performance overhead
|
performance overhead
|
||||||
|
--enable-experimental-jit[=no|yes|yes-off|interpreter]
|
||||||
|
build the experimental just-in-time compiler
|
||||||
|
(default is no)
|
||||||
--enable-loadable-sqlite-extensions
|
--enable-loadable-sqlite-extensions
|
||||||
support loadable extensions in the sqlite3 module,
|
support loadable extensions in the sqlite3 module,
|
||||||
see Doc/library/sqlite3.rst (default is no)
|
see Doc/library/sqlite3.rst (default is no)
|
||||||
|
@ -8367,51 +8367,6 @@ else
|
||||||
printf "%s\n" "no" >&6; }
|
printf "%s\n" "no" >&6; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for --enable-experimental-jit:
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-experimental-jit" >&5
|
|
||||||
printf %s "checking for --enable-experimental-jit... " >&6; }
|
|
||||||
# Check whether --enable-experimental-jit was given.
|
|
||||||
if test ${enable_experimental_jit+y}
|
|
||||||
then :
|
|
||||||
enableval=$enable_experimental_jit;
|
|
||||||
else case e in #(
|
|
||||||
e) enable_experimental_jit=no ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $enable_experimental_jit in
|
|
||||||
no) jit_flags=""; tier2_flags="" ;;
|
|
||||||
yes) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=1" ;;
|
|
||||||
yes-off) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=3" ;;
|
|
||||||
interpreter) jit_flags=""; tier2_flags="-D_Py_TIER2=4" ;;
|
|
||||||
interpreter-off) jit_flags=""; tier2_flags="-D_Py_TIER2=6" ;; # Secret option
|
|
||||||
*) as_fn_error $? "invalid argument: --enable-experimental-jit=$enable_experimental_jit; expected no|yes|yes-off|interpreter" "$LINENO" 5 ;;
|
|
||||||
esac
|
|
||||||
if ${tier2_flags:+false} :
|
|
||||||
then :
|
|
||||||
|
|
||||||
else case e in #(
|
|
||||||
e) as_fn_append CFLAGS_NODIST " $tier2_flags" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
if ${jit_flags:+false} :
|
|
||||||
then :
|
|
||||||
|
|
||||||
else case e in #(
|
|
||||||
e) as_fn_append CFLAGS_NODIST " $jit_flags"
|
|
||||||
REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host"
|
|
||||||
JIT_STENCILS_H="jit_stencils.h"
|
|
||||||
if test "x$Py_DEBUG" = xtrue
|
|
||||||
then :
|
|
||||||
as_fn_append REGEN_JIT_COMMAND " --debug"
|
|
||||||
fi ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tier2_flags $jit_flags" >&5
|
|
||||||
printf "%s\n" "$tier2_flags $jit_flags" >&6; }
|
|
||||||
|
|
||||||
# Enable optimization flags
|
# Enable optimization flags
|
||||||
|
|
||||||
|
|
||||||
|
@ -10706,42 +10661,50 @@ fi
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
|
UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT=""
|
ARCH_RUN_32BIT=""
|
||||||
|
ARCH_TRIPLES=`echo {ppc,i386}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
64-bit)
|
64-bit)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=`echo {ppc64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
all)
|
all)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
||||||
|
ARCH_TRIPLES=`echo {i386,ppc,ppc64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
universal2)
|
universal2)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
LIPO_INTEL64_FLAGS="-extract x86_64"
|
LIPO_INTEL64_FLAGS="-extract x86_64"
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=`echo {aarch64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
intel)
|
intel)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract i386"
|
LIPO_32BIT_FLAGS="-extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386"
|
||||||
|
ARCH_TRIPLES=`echo {i386,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
intel-32)
|
intel-32)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386"
|
UNIVERSAL_ARCH_FLAGS="-arch i386"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT=""
|
ARCH_RUN_32BIT=""
|
||||||
|
ARCH_TRIPLES=i386-apple-darwin
|
||||||
;;
|
;;
|
||||||
intel-64)
|
intel-64)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=x86_64-apple-darwin
|
||||||
;;
|
;;
|
||||||
3-way)
|
3-way)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
||||||
|
ARCH_TRIPLES=`echo {i386,ppc,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
as_fn_error $? "proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way" "$LINENO" 5
|
as_fn_error $? "proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way" "$LINENO" 5
|
||||||
|
@ -10858,6 +10821,51 @@ else case e in #(
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check for --enable-experimental-jit:
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-experimental-jit" >&5
|
||||||
|
printf %s "checking for --enable-experimental-jit... " >&6; }
|
||||||
|
# Check whether --enable-experimental-jit was given.
|
||||||
|
if test ${enable_experimental_jit+y}
|
||||||
|
then :
|
||||||
|
enableval=$enable_experimental_jit;
|
||||||
|
else case e in #(
|
||||||
|
e) enable_experimental_jit=no ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $enable_experimental_jit in
|
||||||
|
no) jit_flags=""; tier2_flags="" ;;
|
||||||
|
yes) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=1" ;;
|
||||||
|
yes-off) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=3" ;;
|
||||||
|
interpreter) jit_flags=""; tier2_flags="-D_Py_TIER2=4" ;;
|
||||||
|
interpreter-off) jit_flags=""; tier2_flags="-D_Py_TIER2=6" ;; # Secret option
|
||||||
|
*) as_fn_error $? "invalid argument: --enable-experimental-jit=$enable_experimental_jit; expected no|yes|yes-off|interpreter" "$LINENO" 5 ;;
|
||||||
|
esac
|
||||||
|
if ${tier2_flags:+false} :
|
||||||
|
then :
|
||||||
|
|
||||||
|
else case e in #(
|
||||||
|
e) as_fn_append CFLAGS_NODIST " $tier2_flags" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if ${jit_flags:+false} :
|
||||||
|
then :
|
||||||
|
|
||||||
|
else case e in #(
|
||||||
|
e) as_fn_append CFLAGS_NODIST " $jit_flags"
|
||||||
|
REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}"
|
||||||
|
JIT_STENCILS_H="jit_stencils.h"
|
||||||
|
if test "x$Py_DEBUG" = xtrue
|
||||||
|
then :
|
||||||
|
as_fn_append REGEN_JIT_COMMAND " --debug"
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tier2_flags $jit_flags" >&5
|
||||||
|
printf "%s\n" "$tier2_flags $jit_flags" >&6; }
|
||||||
|
|
||||||
case "$ac_cv_cc_name" in
|
case "$ac_cv_cc_name" in
|
||||||
mpicc)
|
mpicc)
|
||||||
CFLAGS_NODIST="$CFLAGS_NODIST"
|
CFLAGS_NODIST="$CFLAGS_NODIST"
|
||||||
|
|
78
configure.ac
78
configure.ac
|
@ -1802,41 +1802,6 @@ else
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for --enable-experimental-jit:
|
|
||||||
AC_MSG_CHECKING([for --enable-experimental-jit])
|
|
||||||
AC_ARG_ENABLE([experimental-jit],
|
|
||||||
[AS_HELP_STRING([--enable-experimental-jit@<:@=no|yes|yes-off|interpreter@:>@],
|
|
||||||
[build the experimental just-in-time compiler (default is no)])],
|
|
||||||
[],
|
|
||||||
[enable_experimental_jit=no])
|
|
||||||
case $enable_experimental_jit in
|
|
||||||
no) jit_flags=""; tier2_flags="" ;;
|
|
||||||
yes) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=1" ;;
|
|
||||||
yes-off) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=3" ;;
|
|
||||||
interpreter) jit_flags=""; tier2_flags="-D_Py_TIER2=4" ;;
|
|
||||||
interpreter-off) jit_flags=""; tier2_flags="-D_Py_TIER2=6" ;; # Secret option
|
|
||||||
*) AC_MSG_ERROR(
|
|
||||||
[invalid argument: --enable-experimental-jit=$enable_experimental_jit; expected no|yes|yes-off|interpreter]) ;;
|
|
||||||
esac
|
|
||||||
AS_VAR_IF([tier2_flags],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[AS_VAR_APPEND([CFLAGS_NODIST], [" $tier2_flags"])])
|
|
||||||
AS_VAR_IF([jit_flags],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"])
|
|
||||||
AS_VAR_SET([REGEN_JIT_COMMAND],
|
|
||||||
["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host"])
|
|
||||||
AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"])
|
|
||||||
AS_VAR_IF([Py_DEBUG],
|
|
||||||
[true],
|
|
||||||
[AS_VAR_APPEND([REGEN_JIT_COMMAND], [" --debug"])],
|
|
||||||
[])])
|
|
||||||
AC_SUBST([REGEN_JIT_COMMAND])
|
|
||||||
AC_SUBST([JIT_STENCILS_H])
|
|
||||||
AC_MSG_RESULT([$tier2_flags $jit_flags])
|
|
||||||
|
|
||||||
# Enable optimization flags
|
# Enable optimization flags
|
||||||
AC_SUBST([DEF_MAKE_ALL_RULE])
|
AC_SUBST([DEF_MAKE_ALL_RULE])
|
||||||
AC_SUBST([DEF_MAKE_RULE])
|
AC_SUBST([DEF_MAKE_RULE])
|
||||||
|
@ -2652,42 +2617,50 @@ AS_VAR_IF([ac_cv_gcc_compat], [yes], [
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
|
UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT=""
|
ARCH_RUN_32BIT=""
|
||||||
|
ARCH_TRIPLES=`echo {ppc,i386}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
64-bit)
|
64-bit)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=`echo {ppc64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
all)
|
all)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
||||||
|
ARCH_TRIPLES=`echo {i386,ppc,ppc64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
universal2)
|
universal2)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
LIPO_INTEL64_FLAGS="-extract x86_64"
|
LIPO_INTEL64_FLAGS="-extract x86_64"
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=`echo {aarch64,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
intel)
|
intel)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract i386"
|
LIPO_32BIT_FLAGS="-extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386"
|
||||||
|
ARCH_TRIPLES=`echo {i386,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
intel-32)
|
intel-32)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386"
|
UNIVERSAL_ARCH_FLAGS="-arch i386"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT=""
|
ARCH_RUN_32BIT=""
|
||||||
|
ARCH_TRIPLES=i386-apple-darwin
|
||||||
;;
|
;;
|
||||||
intel-64)
|
intel-64)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch x86_64"
|
||||||
LIPO_32BIT_FLAGS=""
|
LIPO_32BIT_FLAGS=""
|
||||||
ARCH_RUN_32BIT="true"
|
ARCH_RUN_32BIT="true"
|
||||||
|
ARCH_TRIPLES=x86_64-apple-darwin
|
||||||
;;
|
;;
|
||||||
3-way)
|
3-way)
|
||||||
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
|
UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
|
||||||
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
|
||||||
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
|
||||||
|
ARCH_TRIPLES=`echo {i386,ppc,x86_64}-apple-darwin`
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_MSG_ERROR([proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way])
|
AC_MSG_ERROR([proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way])
|
||||||
|
@ -2778,6 +2751,41 @@ AS_VAR_IF([ac_cv_gcc_compat], [yes], [
|
||||||
esac
|
esac
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# Check for --enable-experimental-jit:
|
||||||
|
AC_MSG_CHECKING([for --enable-experimental-jit])
|
||||||
|
AC_ARG_ENABLE([experimental-jit],
|
||||||
|
[AS_HELP_STRING([--enable-experimental-jit@<:@=no|yes|yes-off|interpreter@:>@],
|
||||||
|
[build the experimental just-in-time compiler (default is no)])],
|
||||||
|
[],
|
||||||
|
[enable_experimental_jit=no])
|
||||||
|
case $enable_experimental_jit in
|
||||||
|
no) jit_flags=""; tier2_flags="" ;;
|
||||||
|
yes) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=1" ;;
|
||||||
|
yes-off) jit_flags="-D_Py_JIT"; tier2_flags="-D_Py_TIER2=3" ;;
|
||||||
|
interpreter) jit_flags=""; tier2_flags="-D_Py_TIER2=4" ;;
|
||||||
|
interpreter-off) jit_flags=""; tier2_flags="-D_Py_TIER2=6" ;; # Secret option
|
||||||
|
*) AC_MSG_ERROR(
|
||||||
|
[invalid argument: --enable-experimental-jit=$enable_experimental_jit; expected no|yes|yes-off|interpreter]) ;;
|
||||||
|
esac
|
||||||
|
AS_VAR_IF([tier2_flags],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[AS_VAR_APPEND([CFLAGS_NODIST], [" $tier2_flags"])])
|
||||||
|
AS_VAR_IF([jit_flags],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"])
|
||||||
|
AS_VAR_SET([REGEN_JIT_COMMAND],
|
||||||
|
["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}"])
|
||||||
|
AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"])
|
||||||
|
AS_VAR_IF([Py_DEBUG],
|
||||||
|
[true],
|
||||||
|
[AS_VAR_APPEND([REGEN_JIT_COMMAND], [" --debug"])],
|
||||||
|
[])])
|
||||||
|
AC_SUBST([REGEN_JIT_COMMAND])
|
||||||
|
AC_SUBST([JIT_STENCILS_H])
|
||||||
|
AC_MSG_RESULT([$tier2_flags $jit_flags])
|
||||||
|
|
||||||
case "$ac_cv_cc_name" in
|
case "$ac_cv_cc_name" in
|
||||||
mpicc)
|
mpicc)
|
||||||
CFLAGS_NODIST="$CFLAGS_NODIST"
|
CFLAGS_NODIST="$CFLAGS_NODIST"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue