Aller Anfang ist schwer.
This commit is contained in:
commit
16f964f41d
5 changed files with 74 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
.venv
|
||||||
|
compose.override.yaml
|
||||||
36
Containerfile.debian
Normal file
36
Containerfile.debian
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
ARG GOLANG_VERSION=1.25
|
||||||
|
ARG DEBIAN_VERSION=trixie
|
||||||
|
ARG PYTHON_VERSION=3.14
|
||||||
|
|
||||||
|
FROM docker.io/library/golang:${GOLANG_VERSION}-${DEBIAN_VERSION} AS gobuilder
|
||||||
|
|
||||||
|
RUN --mount=type=bind,source=./libmxclient,target=/build <<EOF
|
||||||
|
cd /build
|
||||||
|
CGO_ENABLED=1 GOARCH=${GOARCH} go build -buildmode=c-shared -o /pygomx-build/libmxclient.so .
|
||||||
|
EOF
|
||||||
|
|
||||||
|
FROM docker.io/library/python:${PYTHON_VERSION}-${DEBIAN_VERSION} AS pybuilder
|
||||||
|
|
||||||
|
COPY --from=gobuilder /pygomx-build/libmxclient.so /usr/local/lib/libmxclient.so
|
||||||
|
COPY --from=gobuilder /pygomx-build/libmxclient.h /usr/local/include/libmxclient.h
|
||||||
|
|
||||||
|
RUN pip install cffi setuptools
|
||||||
|
|
||||||
|
COPY pygomx /pygomx
|
||||||
|
|
||||||
|
RUN <<EOF
|
||||||
|
cd /pygomx
|
||||||
|
python3 build_ffi.py
|
||||||
|
ls -la
|
||||||
|
EOF
|
||||||
|
|
||||||
|
FROM docker.io/library/python:${PYTHON_VERSION}-${DEBIAN_VERSION}
|
||||||
|
|
||||||
|
RUN pip install cffi
|
||||||
|
|
||||||
|
COPY --from=gobuilder /pygomx-build/libmxclient.so /usr/local/lib/
|
||||||
|
COPY --from=pybuilder /pygomx/_pygomx.cpython-314-x86_64-linux-gnu.so /usr/local/lib/python3.14/site-packages/
|
||||||
|
RUN ldconfig
|
||||||
|
|
||||||
3
libmxclient/go.mod
Normal file
3
libmxclient/go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module mxclientlib
|
||||||
|
|
||||||
|
go 1.23.5
|
||||||
12
libmxclient/mxclientlib.go
Normal file
12
libmxclient/mxclientlib.go
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
//export hello
|
||||||
|
func hello(name *C.char) *C.char {
|
||||||
|
goName := C.GoString(name)
|
||||||
|
result := "Hello " + goName
|
||||||
|
return C.CString(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {}
|
||||||
21
pygomx/build_ffi.py
Normal file
21
pygomx/build_ffi.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
from cffi import FFI
|
||||||
|
|
||||||
|
ffibuilder = FFI()
|
||||||
|
|
||||||
|
ffibuilder.set_source(
|
||||||
|
module_name="_pygomx",
|
||||||
|
source=""" //passed to the real C compiler
|
||||||
|
#include "libmxclient.h"
|
||||||
|
""",
|
||||||
|
libraries=["mxclient"],
|
||||||
|
)
|
||||||
|
|
||||||
|
ffibuilder.cdef(
|
||||||
|
csource="""
|
||||||
|
extern char* hello(char* p0);
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ffibuilder.compile(verbose=True)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue