Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ black>=22.3.0
faasmctl>=0.32.0
flake8>=4.0.1
invoke>=1.7.1
python-lsp-server[all]>=1.12.0
PyYAML>=6.0.1
92 changes: 68 additions & 24 deletions tasks/jwt.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
from os.path import exists, join
from shutil import copy, rmtree
from subprocess import run
from tasks.env import EXAMPLES_DIR
from tasks.env import EXAMPLES_DIR, in_docker


@task(default=True)
def build(ctx, clean=False):
def build(ctx, clean=False, native=False):
"""
Compile TLess-JWT library (in Rust) and C++ bindings into a WASM library
"""
Expand All @@ -18,20 +18,48 @@ def build(ctx, clean=False):
rmtree(join(jwt_dir, "target"))

# First, cross-compile the rust library to WASM
cargo_cmd = "cargo build --release --target=wasm32-wasip1"
cargo_cmd = "cargo build --release"
if not native:
cargo_cmd += " --target=wasm32-wasip1"
run(cargo_cmd, shell=True, check=True, cwd=jwt_dir)

# Install it in the WASM sysroot
build_env = get_faasm_build_env_dict()
# Install it
lib_dir = "/usr/local/lib/tless-jwt"
header_dir = "/usr/include/tless-jwt"
src_lib = join(
jwt_dir, "target", "wasm32-wasip1", "release", "libtless_jwt.a"
jwt_dir,
"target",
"wasm32-wasip1" if not native else "",
"release",
"libtless_jwt.a",
)
dst_lib = join(build_env["FAASM_WASM_LIB_INSTALL_DIR"], "libtless-jwt.a")
copy(src_lib, dst_lib)
if native:
if not exists(lib_dir):
if in_docker():
makedirs(lib_dir)
else:
run(f"sudo mkdir -p {lib_dir}", shell=True, check=True)
if not exists(header_dir):
if in_docker():
makedirs(header_dir)
else:
run(f"sudo mkdir -p {header_dir}", shell=True, check=True)
dst_lib = join(lib_dir, "libtless_jwt.a")
else:
build_env = get_faasm_build_env_dict()
dst_lib = join(
build_env["FAASM_WASM_LIB_INSTALL_DIR"], "libtless-jwt.a"
)
if in_docker():
copy(src_lib, dst_lib)
else:
run(f"sudo cp {src_lib} {dst_lib}", shell=True, check=True)

# Build the CPP bindings library, and cross-compile it to WASM
rabe_cpp_dir = join(jwt_dir, "cpp-bindings")
build_dir = join(rabe_cpp_dir, "build")
tles_jwt_cpp_dir = join(jwt_dir, "cpp-bindings")
build_dir = join(
tles_jwt_cpp_dir, "build-native" if native else "build-wasm"
)

if clean and exists(build_dir):
rmtree(build_dir)
Expand All @@ -42,28 +70,44 @@ def build(ctx, clean=False):
"cmake",
"-GNinja",
"-DCMAKE_BUILD_TYPE=Release",
"-DCMAKE_TOOLCHAIN_FILE={}".format(CMAKE_TOOLCHAIN_FILE),
rabe_cpp_dir,
(
"-DCMAKE_TOOLCHAIN_FILE={}".format(CMAKE_TOOLCHAIN_FILE)
if not native
else ""
),
tles_jwt_cpp_dir,
]
cmake_cmd = " ".join(cmake_cmd)
print(cmake_cmd)

work_env = environ.copy()
work_env.update(get_faasm_build_env_dict())
print(build_dir)
if not native:
work_env.update(get_faasm_build_env_dict())
run(cmake_cmd, shell=True, check=True, cwd=build_dir, env=work_env)
run("ninja", shell=True, check=True, cwd=build_dir)

# Install the library in the WASM sysroot
src_lib = join(build_dir, "libtless-jwt-cpp.a")
dst_lib = join(
build_env["FAASM_WASM_LIB_INSTALL_DIR"], "libtless-jwt-cpp.a"
)
copy(src_lib, dst_lib)
if not native:
dst_lib = join(
build_env["FAASM_WASM_LIB_INSTALL_DIR"], "libtless-jwt-cpp.a"
)
else:
dst_lib = join(lib_dir, "libtless-jwt-cpp.a")
if in_docker():
copy(src_lib, dst_lib)
else:
run(f"sudo cp {src_lib} {dst_lib}", shell=True, check=True)

# Install the header in the WASM sysroot too
src_header = join(rabe_cpp_dir, "tless_jwt.h")
dst_header = join(
build_env["FAASM_WASM_HEADER_INSTALL_DIR"], "tless_jwt.h"
)
copy(src_header, dst_header)
# Install the header too
src_header = join(tles_jwt_cpp_dir, "tless_jwt.h")
if not native:
dst_header = join(
build_env["FAASM_WASM_HEADER_INSTALL_DIR"], "tless_jwt.h"
)
else:
dst_header = join(header_dir, "tless_jwt.h")
if in_docker():
copy(src_header, dst_header)
else:
run(f"sudo cp {src_header} {dst_header}", shell=True, check=True)
Loading