// Copyright 2019 Google Inc. All rights reserved. // // 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. build = [ "Android-bionic.bp", "Android-linux_x86_64.bp", "Android-darwin_x86_64.bp", ] cc_defaults { name: "py3-interp-defaults", cflags: [ "-fwrapv", "-O3", "-Wall", "-Wstrict-prototypes", "-DPy_BUILD_CORE", "-Werror", "-Wno-invalid-source-encoding", "-Wno-int-conversion", "-Wno-missing-field-initializers", "-Wno-null-pointer-arithmetic", "-Wno-register", "-Wno-shift-count-overflow", "-Wno-sign-compare", "-Wno-tautological-compare", "-Wno-tautological-constant-out-of-range-compare", "-Wno-unused-function", "-Wno-unused-parameter", "-Wno-unused-result", ], local_include_dirs: [ "Include", "Include/internal", ], static_libs: ["libffi"], target: { android: { local_include_dirs: ["android/bionic/pyconfig"], }, android_arm: { cflags: ["-DSOABI=\"cpython-38android-arm-android-bionic\""], }, android_arm64: { cflags: ["-DSOABI=\"cpython-38android-arm64-android-bionic\""], }, android_x86: { cflags: ["-DSOABI=\"cpython-38android-x86-android-bionic\""], }, android_x86_64: { cflags: ["-DSOABI=\"cpython-38android-x86_64-android-bionic\""], }, // Regenerate include dirs with android_regen.sh darwin_x86_64: { local_include_dirs: ["android/darwin_x86_64/pyconfig"], cflags: [ "-Wno-deprecated-declarations", "-Wno-pointer-arith", "-DSOABI=\"cpython-38android-x86_64-darwin\"", ], }, linux_bionic: { // NB linux_bionic is a 'host' architecture but it uses the bionic libc like 'android' // targets so use the android pyconfig. local_include_dirs: ["android/bionic/pyconfig"], cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-bionic\""], }, linux_glibc_x86: { enabled: false, }, linux_glibc_x86_64: { local_include_dirs: ["android/linux_x86_64/pyconfig"], cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-gnu\""], }, windows: { enabled: false, }, }, host_supported: true, compile_multilib: "both", multilib: { lib32: { suffix: "32", }, lib64: { suffix: "64", }, }, } cc_library_static { name: "py3-interp", defaults: ["py3-interp-defaults"], cflags: ["-DPy_BUILD_CORE"], srcs: [ // Makefile.pre.in PARSER_OBJS "Parser/acceler.c", "Parser/grammar1.c", "Parser/listnode.c", "Parser/myreadline.c", "Parser/node.c", "Parser/parser.c", "Parser/parsetok.c", "Parser/token.c", "Parser/tokenizer.c", // Makefile.pre.in OBJECT_OBJS "Objects/abstract.c", "Objects/accu.c", "Objects/boolobject.c", "Objects/bytes_methods.c", "Objects/bytearrayobject.c", "Objects/bytesobject.c", "Objects/call.c", "Objects/capsule.c", "Objects/cellobject.c", "Objects/classobject.c", "Objects/codeobject.c", "Objects/complexobject.c", "Objects/descrobject.c", "Objects/enumobject.c", "Objects/exceptions.c", "Objects/genobject.c", "Objects/fileobject.c", "Objects/floatobject.c", "Objects/frameobject.c", "Objects/funcobject.c", "Objects/interpreteridobject.c", "Objects/iterobject.c", "Objects/listobject.c", "Objects/longobject.c", "Objects/dictobject.c", "Objects/odictobject.c", "Objects/memoryobject.c", "Objects/methodobject.c", "Objects/moduleobject.c", "Objects/namespaceobject.c", "Objects/object.c", "Objects/obmalloc.c", "Objects/picklebufobject.c", "Objects/rangeobject.c", "Objects/setobject.c", "Objects/sliceobject.c", "Objects/structseq.c", "Objects/tupleobject.c", "Objects/typeobject.c", "Objects/unicodeobject.c", "Objects/unicodectype.c", "Objects/weakrefobject.c", // Makefile.pre.in PYTHON_OBJS "Python/_warnings.c", "Python/Python-ast.c", "Python/asdl.c", "Python/ast.c", "Python/ast_opt.c", "Python/ast_unparse.c", "Python/bltinmodule.c", "Python/ceval.c", "Python/codecs.c", "Python/compile.c", "Python/context.c", "Python/dynamic_annotations.c", "Python/errors.c", "Python/frozen.c", "Python/frozenmain.c", "Python/future.c", "Python/getargs.c", "Python/getcompiler.c", "Python/getcopyright.c", "Python/getplatform.c", "Python/getversion.c", "Python/graminit.c", "Python/hamt.c", "Python/import.c", "Python/importdl.c", "Python/initconfig.c", "Python/marshal.c", "Python/modsupport.c", "Python/mysnprintf.c", "Python/mystrtoul.c", "Python/pathconfig.c", "Python/peephole.c", "Python/preconfig.c", "Python/pyarena.c", "Python/pyctype.c", "Python/pyfpe.c", "Python/pyhash.c", "Python/pylifecycle.c", "Python/pymath.c", "Python/pystate.c", "Python/pythonrun.c", "Python/pytime.c", "Python/bootstrap_hash.c", "Python/structmember.c", "Python/symtable.c", "Python/sysmodule.c", "Python/thread.c", "Python/traceback.c", "Python/getopt.c", "Python/pystrcmp.c", "Python/pystrtod.c", "Python/pystrhex.c", "Python/dtoa.c", "Python/formatter_unicode.c", "Python/fileutils.c", "Python/dynload_shlib.c", ], target: { linux: { cflags: [ "-DPLATFORM=\"linux2\"", ], }, darwin_x86_64: { cflags: [ "-DPLATFORM=\"darwin\"", ], }, }, } cc_defaults { name: "py3-launcher-defaults", defaults: ["py3-interp-defaults"], cflags: [ "-DVERSION=\"3.8\"", "-DVPATH=\"\"", "-DPREFIX=\"\"", "-DEXEC_PREFIX=\"\"", "-DPYTHONPATH=\"..:\"", "-DANDROID_SKIP_ZIP_PATH", "-DANDROID_SKIP_EXEC_PREFIX_PATH", "-DANDROID_LIB_PYTHON_PATH=\"internal/stdlib\"", "-DDATE=\"Dec 31 1969\"", "-DTIME=\"23:59:59\"", ], static_libs: [ "libbase", "libexpat", "libz", ], target: { linux_glibc_x86_64: { host_ldlibs: ["-lutil"], }, linux: { // Due to test infra limitations, Python native symbols are linked // statically to py3-launcher(s). Hence, need this flag to export // these symbols so that runtime imported native extensions can use // them (e.g. PyBaseObject_Type) ldflags: ["-Wl,--export-dynamic"], }, darwin: { host_ldlibs: [ "-framework SystemConfiguration", "-framework CoreFoundation", ], }, host: { static_libs: [ "libsqlite", "liblog", ], }, android: { shared_libs: [ // Use shared libsqlite for device side, otherwise // the executable size will be really huge. "libsqlite", // Dependency from libbase "liblog", ], }, }, } cc_library_static { name: "py3-launcher-lib", defaults: ["py3-launcher-defaults"], cflags: ["-DPy_BUILD_CORE"], srcs: [ // Makefile.pre.in MODULE_OBJS "Modules/getpath.c", "Modules/main.c", "Modules/gcmodule.c", // Makefile.pre.in LIBRARY_OBJS_OMIT_FROZEN "Modules/getbuildinfo.c", ], whole_static_libs: [ "py3-interp", "py3-c-modules", ], target: { android: { srcs: ["android/bionic/config.c"], }, linux_bionic: { srcs: ["android/bionic/config.c"], }, linux_glibc_x86_64: { srcs: ["android/linux_x86_64/config.c"], }, darwin: { srcs: ["android/darwin_x86_64/config.c"], }, }, } cc_binary { name: "py3-launcher", defaults: ["py3-launcher-defaults"], srcs: ["android/launcher_main.cpp"], static_libs: ["py3-launcher-lib"], } cc_binary { name: "py3-launcher-autorun", defaults: ["py3-launcher-defaults"], srcs: ["android/launcher_main.cpp"], static_libs: ["py3-launcher-lib"], cflags: ["-DANDROID_AUTORUN"], } python_binary_host { name: "py3-cmd", autorun: false, version: { py3: { embedded_launcher: true, }, }, } // Enabled extension py3-c-modules. cc_library_static { name: "py3-c-modules", defaults: ["py3-interp-defaults"], cflags: [ "-DPy_BUILD_CORE_BUILTIN", "-DUSE_PYEXPAT_CAPI", ], static_libs: [ "libexpat", "libz", ], target: { android: { srcs: [":py3-c-modules-bionic"], }, linux_bionic: { srcs: [":py3-c-modules-bionic"], }, linux_glibc_x86_64: { srcs: [":py3-c-modules-linux_x86_64"], }, darwin: { srcs: [":py3-c-modules-darwin_x86_64"], }, }, }