// 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. // *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS. PLEASE // CONSULT THE OWNERS AND opensource-licensing@google.com BEFORE // DEPENDING ON IT IN YOUR PROJECT. *** package { default_applicable_licenses: ["external_python_cpython3_license"], } // See: http://go/android-license-faq license { name: "external_python_cpython3_license", visibility: [":__subpackages__"], license_kinds: [ "SPDX-license-identifier-0BSD", "SPDX-license-identifier-Apache-2.0", "SPDX-license-identifier-BSD", "SPDX-license-identifier-CC0-1.0", "SPDX-license-identifier-MIT", "SPDX-license-identifier-MS-RL", // by exception only "SPDX-license-identifier-PSF-2.0", "SPDX-license-identifier-Unicode-DFS", "SPDX-license-identifier-W3C", "SPDX-license-identifier-Zlib", "legacy_by_exception_only", // by exception only "legacy_notice", "legacy_unencumbered", // GPL removed. All GPL code either Autoconf exception or dual-licensed PSF ], license_text: [ "LICENSE", ], } build = [ "Android-bionic.bp", "Android-linux_arm64.bp", "Android-linux_x86_64.bp", "Android-darwin.bp", ] soong_config_module_type { name: "cpython3_cc_defaults", module_type: "cc_defaults", config_namespace: "cpython3", bool_variables: ["force_build_host"], properties: ["defaults"], } // By default, disable the source and use the prebuilts for host linux // and darwin. Overridden by cpython3-interp-force_build_host when // force_build_host is true (set on aosp-build-tools). cc_defaults { name: "cpython3-interp-host-prebuilts", defaults_visibility: ["//visibility:private"], target: { linux_glibc: { enabled: false, }, linux_musl: { enabled: false, }, darwin: { enabled: false, }, }, } cc_defaults { name: "cpython3-interp-force_build_host", defaults_visibility: ["//visibility:private"], target: { linux_glibc: { enabled: true, }, linux_musl: { enabled: true, }, darwin: { enabled: true, }, }, } cpython3_cc_defaults { name: "py3-interp-defaults", defaults_visibility: ["//visibility:private"], cflags: [ "-fwrapv", "-O3", "-Wall", "-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-310android-arm-android-bionic\""], }, android_arm64: { cflags: ["-DSOABI=\"cpython-310android-arm64-android-bionic\""], }, android_x86: { cflags: ["-DSOABI=\"cpython-310android-x86-android-bionic\""], }, android_x86_64: { cflags: ["-DSOABI=\"cpython-310android-x86_64-android-bionic\""], }, host: { // Host builds are moving to prebuilts, which has a higher risk of // having an incompatible libc++.so when installed. stl: "libc++_static", }, // Regenerate include dirs with android_regen.sh darwin: { local_include_dirs: ["android/darwin/pyconfig"], cflags: [ "-Wno-deprecated-declarations", "-Wno-pointer-arith", "-DSOABI=\"cpython-310android-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-310android-x86_64-linux-bionic\""], }, linux_glibc_x86: { enabled: false, }, linux_musl_x86: { enabled: false, }, linux_musl_arm: { enabled: false, }, linux_glibc_x86_64: { local_include_dirs: ["android/linux_x86_64/pyconfig"], cflags: ["-DSOABI=\"cpython-310android-x86_64-linux-gnu\""], }, linux_musl_x86_64: { local_include_dirs: ["android/linux_x86_64/pyconfig"], cflags: ["-DSOABI=\"cpython-310android-x86_64-linux-gnu\""], }, linux_musl_arm64: { local_include_dirs: ["android/linux_arm64/pyconfig"], cflags: ["-DSOABI=\"cpython-310android-arm64-linux-gnu\""], }, windows: { enabled: false, }, }, host_supported: true, compile_multilib: "both", multilib: { lib32: { suffix: "32", }, lib64: { suffix: "64", }, }, soong_config_variables: { force_build_host: { defaults: ["cpython3-interp-force_build_host"], }, }, } cc_library_static { name: "py3-interp", defaults: ["py3-interp-defaults", "cpython3-interp-host-prebuilts"], cflags: ["-DPy_BUILD_CORE", "-DPLATLIBDIR=\"lib\""], srcs: [ // Makefile.pre.in PEGEN_OBJS "Parser/pegen.c", "Parser/parser.c", "Parser/string_parser.c", "Parser/peg_api.c", // Makefile.pre.in PARSER_OBJS "Parser/myreadline.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/genericaliasobject.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/unionobject.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/hamt.c", "Python/hashtable.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/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/suggestions.c", "Python/dynload_shlib.c", ], target: { linux: { cflags: [ "-DPLATFORM=\"linux\"", "-DABIFLAGS=\"\"", ], }, darwin: { cflags: [ "-DPLATFORM=\"darwin\"", "-DABIFLAGS=\"\"", ], }, }, } cc_defaults { name: "py3-launcher-defaults", defaults: ["py3-interp-defaults", "cpython3-interp-host-prebuilts"], cflags: [ "-DVERSION=\"3.10\"", "-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", "libopenssl_ssl", "libopenssl_crypto", ], }, linux_bionic: { // Linux Bionic doesn't have openssl prebuilts exclude_static_libs: [ "libopenssl_ssl", "libopenssl_crypto", ], }, 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"], }, glibc_x86_64: { srcs: ["android/linux_x86_64/config.c"], }, musl_x86_64: { srcs: ["android/linux_x86_64/config.c"], }, musl_arm64: { srcs: ["android/linux_arm64/config.c"], }, darwin: { srcs: ["android/darwin/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"], } cc_binary_host { name: "py3-launcher-static", defaults: ["py3-launcher-defaults"], srcs: ["android/launcher_main.cpp"], static_libs: ["py3-launcher-lib"], static_executable: true, target: { glibc: { enabled: false, }, }, } cc_binary_host { name: "py3-launcher-autorun-static", defaults: ["py3-launcher-defaults"], srcs: ["android/launcher_main.cpp"], static_libs: ["py3-launcher-lib"], static_executable: true, cflags: ["-DANDROID_AUTORUN"], target: { glibc: { enabled: false, }, }, } 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", "cpython3-interp-host-prebuilts"], 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"], }, glibc_x86_64: { srcs: [":py3-c-modules-linux_x86_64"], static_libs: [ "libopenssl_ssl", "libopenssl_crypto", ], }, musl_x86_64: { srcs: [":py3-c-modules-linux_x86_64"], static_libs: [ "libopenssl_ssl", "libopenssl_crypto", ], }, musl_arm64: { srcs: [":py3-c-modules-linux_arm64"], static_libs: [ "libopenssl_ssl", "libopenssl_crypto", ], }, darwin: { cflags: ["-D__APPLE_USE_RFC_3542"], srcs: [":py3-c-modules-darwin"], static_libs: [ "libopenssl_ssl", "libopenssl_crypto", ], }, }, }