Andrei Tatar [Tue, 29 Aug 2023 00:03:58 +0000 (02:03 +0200)]
patches: Fix ctypes import error
This change adds a patch that allows ctypes to be imported by ignoring
a failing PyDLL() call (which is not supported under Unikraft due to
lack of dynamic linking).
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #18
Andrei Tatar [Tue, 29 Aug 2023 00:10:01 +0000 (02:10 +0200)]
Makefile.uk: Fix generated header include path
Previously LIBPYTHON3_SRC was in the include path, leading to a wrong
pyconfig.h, if present, to be pulled into the Python build. Such a file
could remain after being generated by a rootfs build.
This change both removes LIBPYTHON3_SRC from the include path, as it
provides no needed headers, as well as ensures that the rootfs build
does not leave a pyconfig.h file in the origin directory.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #19
Eduard Vintilă [Sun, 9 Apr 2023 19:09:53 +0000 (22:09 +0300)]
include/pyconfig.h: Define `SIZEOF_PHTREAD_T` based on chosen libc
The size of the `pthread_t` type varies between the libc/posix-threads
implementations, so we need to define the `SIZEOF_PTHREAD_T` macro
accordingly. This commit implements an additional
check for the Pthread Embedded library.
Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #12
Andrei Tatar [Tue, 18 Jul 2023 20:31:37 +0000 (22:31 +0200)]
Makefile.uk: Improve generating the python rootfs
This change reworks the make targets that generate the python rootfs:
- Do not use hardcoded python version
- Provide the option of generating .pyc files in the root or not
- Error out or warn the user if a python version mismatch might subtly
break the resulting rootfs
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #15
Andrei Tatar [Tue, 18 Jul 2023 20:24:57 +0000 (22:24 +0200)]
Makefile.uk: Remove forceful setting of config
Previously the python Makefile would forcefully set the Kconfig value
`STACK_SIZE_PAGE_ORDER` to 10, a minimum value for python to work.
This change removes this fairly invasive behavior in favor of an
explicit check and error message if the value is too low.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #15
Stefan Jumarea [Mon, 3 Jul 2023 14:27:29 +0000 (17:27 +0300)]
Makefile.uk: Allow configuring with custom config file
The `.config.orig` rule does a backup of the config file before changing
it to set `CONFIG_STACK_SIZE_PAGE_ORDER=10`. This used a hardcoded path
to the default `.config` file instead of `$(C)`, which can be set to a
custom one.
Using a hardcoded path will fail if trying to build with a different
config file than the default one (i.e. using `make C=path-to-config`).
One of the usecases is `kraftkit`, which uses `.config.python3...`
instead of the default `.config` file.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #13
Maria Sfiraiala [Thu, 10 Nov 2022 16:26:54 +0000 (18:26 +0200)]
include/pyconfig.h: Add guard for x86 specific macros
HAVE_GCC_ASM_FOR_X64 and HAVE_GCC_ASM_FOR_X87 macros break the build
for app-python3 on AArch64. Therefore, this commit adds an architecture
specific guard for each one of them, as on x86 they behave just fine.
Github-Fixes: #10
Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #11
Vlad Badoiu [Tue, 18 Jan 2022 20:59:50 +0000 (22:59 +0200)]
python: Add patch to disable SOCK_CLOEXEC usage
We create a patch that undefines this symbol inside
the posix socket module of Python. We do this because
the functionality is not available under lwip and it
causes an error under Python.
Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@upb.ro> Reviewed-by: Daniel Dinca <daniel.dinca@unikraft.io> Approved-by: Razvan Deaconescu <razvan.deaconescu@cs.pub.ro> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #5
Release 0.10 added `posix-socket` and `posix-event` internal libraries
to the Unikraft core. Consequently, libraries depending on networking
functionality need to be updated to include `posix-socket` and
`posix-event`.
This commit adds `LIBPOSIX_SOCKET` and `LIBPOSIX_EVENT` dependency to
`Config.uk`.
Signed-off-by: Razvan Deaconescu <razvan.deaconescu@cs.pub.ro> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Alexander Jung <alex@unikraft.org> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Pull-Request-Closes: #6
Vlad Badoiu [Sat, 15 Jan 2022 14:45:13 +0000 (16:45 +0200)]
python3: Fix sqlite3 module
This patch fixes several problems that would cause compilation errors
when the sqlite3 module is selected. This patch fixes the name of
the module to sqlite3 as it defined in the oficial documentation, adds
missing export in module_config.c and defines passes two symbols
MODULE_NAME and SQLITE_OMIT_LOAD_EXTENSION.
Signed-off-by: Vlad Badoiu <vlad_andrei.badoiu@upb.ro> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@gmail.com> Approved-by: Razvan Deaconescu <razvan.deaconescu@cs.pub.ro> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Pull-Request: #4
Simon Kuenzer [Tue, 13 Jul 2021 19:21:45 +0000 (21:21 +0200)]
Correct license headers introduced by University Politehnica of Bucharest
This commit removes the additional clause
"THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY"
from BSD license headers that got introduced by mistake
with the following commits: 5772e54 - Add stubs.c for stubbed functions (Vlad-Andrei Badoiu) 2b241d4 - Add Makefile.uk (Vlad-Andrei Badoiu) ab18836 - Add init.c for initialization (Vlad-Andrei Badoiu)
On the one hand, this additional clause is redundant because
the BSD license already states that it must remain and the
copyright notice must be kept.
On the other hand, the clause freezes the file header
and prohibits future contributors from extending the
copyright notice for their contributions. This additional
clause is not part of the official BSD 3-clause.
The original author(s) or an authorized representative from
the author's affiliation consents to the change with a
`Reviewed-by` tag to this commit.
Signed-off-by: Simon Kuenzer <simon.kuenzer@neclab.eu> Reviewed-by: Razvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Costin Lupu [Wed, 16 Oct 2019 14:22:44 +0000 (17:22 +0300)]
Config.uk: Add configuration options for extensions
We currently configure the following extensions: XML parsing with Expat lib,
decimal operations with libmpdec, SSL, UUID and zlib. Sqlite will be
automatically supported when the external library will be released.
Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro> Reviewed-by: Felipe Huici <felipe.huici@neclab.eu>
Costin Lupu [Wed, 16 Oct 2019 14:22:43 +0000 (17:22 +0300)]
Provide main() function if configured to do so
Sometimes all you want to run is the Python shell. In this case you can tick the
option in menuconfig so that the library provides the main() function for you.
Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro> Reviewed-by: Felipe Huici <felipe.huici@neclab.eu>
Costin Lupu [Wed, 16 Oct 2019 14:22:42 +0000 (17:22 +0300)]
Makefile.uk: Add rule for creating root filesystem
The Python interpreter needs a filesystem where to keep its libraries. This
patch creates a Python virtual environment and installs the Python 3 standard
library in /lib/python3.7 directory. For creating the filesystem the following
command has to be run:
$ make python-rootfs path=<directory>
Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro> Reviewed-by: Felipe Huici <felipe.huici@neclab.eu>
This file is copied from a './Modules/config.c' of a Linux build and it contains
the modules init functions and their registration as Python extensions. We
commented the registration of the modules that we do not support yet. They
should be enabled back when we will add support for them by porting the
underlying native libraries.
_sysconfigdata.py contains all the configuration data used by the interpreter at
runtime. This patch adds the slightly changed file generated by a ./configure
run.
pyconfig.h is generated when running ./configure and it contains the features
that are available on the build machine. This is copied from a local build.
In the original build, there are two kinds of sources: for core functionality
and for extensions. Each of them has a different set of compiler flags. In
order to emulate the same behavior, we define two libraries: 'python3-core' and
'python3-extensions'. Please notice that we still keep a 'python3' library as
the main logical library.