From 38fe780558a59a7818cf69c69f8e51f57a742b29 Mon Sep 17 00:00:00 2001 From: Carlos Segarra Date: Tue, 15 Apr 2025 14:46:39 +0000 Subject: [PATCH 1/2] jwt: support native install --- tasks/jwt.py | 78 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/tasks/jwt.py b/tasks/jwt.py index 412cb42..718e15c 100644 --- a/tasks/jwt.py +++ b/tasks/jwt.py @@ -8,7 +8,7 @@ @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 """ @@ -18,20 +18,40 @@ 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) @@ -42,28 +62,40 @@ 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) From e1b18c1630cf61bdd81681da16a80f2cd5f594d3 Mon Sep 17 00:00:00 2001 From: Carlos Segarra Date: Tue, 15 Apr 2025 14:50:17 +0000 Subject: [PATCH 2/2] fix requirements --- requirements.txt | 1 + tasks/jwt.py | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 154af17..468a490 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 diff --git a/tasks/jwt.py b/tasks/jwt.py index 718e15c..505344f 100644 --- a/tasks/jwt.py +++ b/tasks/jwt.py @@ -4,7 +4,7 @@ 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) @@ -27,7 +27,11 @@ def build(ctx, clean=False, native=False): lib_dir = "/usr/local/lib/tless-jwt" header_dir = "/usr/include/tless-jwt" src_lib = join( - jwt_dir, "target", "wasm32-wasip1" if not native else "", "release", "libtless_jwt.a" + jwt_dir, + "target", + "wasm32-wasip1" if not native else "", + "release", + "libtless_jwt.a", ) if native: if not exists(lib_dir): @@ -43,7 +47,9 @@ def build(ctx, clean=False, native=False): 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") + dst_lib = join( + build_env["FAASM_WASM_LIB_INSTALL_DIR"], "libtless-jwt.a" + ) if in_docker(): copy(src_lib, dst_lib) else: @@ -51,7 +57,9 @@ def build(ctx, clean=False, native=False): # Build the CPP bindings library, and cross-compile it to WASM tles_jwt_cpp_dir = join(jwt_dir, "cpp-bindings") - build_dir = join(tles_jwt_cpp_dir, "build-native" if native else "build-wasm") + build_dir = join( + tles_jwt_cpp_dir, "build-native" if native else "build-wasm" + ) if clean and exists(build_dir): rmtree(build_dir) @@ -62,7 +70,11 @@ def build(ctx, clean=False, native=False): "cmake", "-GNinja", "-DCMAKE_BUILD_TYPE=Release", - "-DCMAKE_TOOLCHAIN_FILE={}".format(CMAKE_TOOLCHAIN_FILE) if not native else "", + ( + "-DCMAKE_TOOLCHAIN_FILE={}".format(CMAKE_TOOLCHAIN_FILE) + if not native + else "" + ), tles_jwt_cpp_dir, ] cmake_cmd = " ".join(cmake_cmd) @@ -89,7 +101,7 @@ def build(ctx, clean=False, native=False): # Install the header too src_header = join(tles_jwt_cpp_dir, "tless_jwt.h") - if not native + if not native: dst_header = join( build_env["FAASM_WASM_HEADER_INSTALL_DIR"], "tless_jwt.h" )