mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-29 04:57:48 +01:00
a little cleanup
This commit is contained in:
29
.github/workflows/server.yml
vendored
29
.github/workflows/server.yml
vendored
@@ -108,10 +108,9 @@ jobs:
|
|||||||
distribution: "zulu"
|
distribution: "zulu"
|
||||||
cache: maven
|
cache: maven
|
||||||
|
|
||||||
- name: Cmake build
|
- name: Build the library
|
||||||
run: |
|
run: |
|
||||||
cmake -B"build" -S"libdhfs_support" -DDHFS_LIB_INSTALL="$(pwd)/result"
|
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release" DO_LOCAL_BUILD=True libdhfs_support/builder/cross-build.sh both build "$(pwd)/result"
|
||||||
cmake --build build --target install
|
|
||||||
|
|
||||||
- name: Upload build
|
- name: Upload build
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
@@ -127,12 +126,13 @@ jobs:
|
|||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
- name: build
|
- name: Build the library
|
||||||
run: |
|
run: |
|
||||||
CROSS_PLATFORM="linux/arm64" libdhfs_support/builder/cross-build.sh both build "$(pwd)/result"
|
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release" CROSS_PLATFORM="linux/arm64" libdhfs_support/builder/cross-build.sh both build "$(pwd)/result"
|
||||||
|
|
||||||
- name: Upload build
|
- name: Upload build
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
@@ -152,14 +152,15 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: downloaded-libs
|
path: downloaded-libs
|
||||||
|
|
||||||
- name: Merge
|
- name: Merge all
|
||||||
run: rsync -av downloaded-libs/NativeLib*/* result/
|
run: rsync -av downloaded-libs/NativeLib*/* result/
|
||||||
|
|
||||||
- name: Check paths
|
- name: Check that libs exists
|
||||||
run: |
|
run: |
|
||||||
test -f "result/Linux-x86_64/libdhfs_support.so" || exit 1
|
test -f "result/Linux-x86_64/libdhfs_support.so" || exit 1
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: NativeLibs
|
name: NativeLibs
|
||||||
path: result
|
path: result
|
||||||
@@ -179,17 +180,20 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- name: Download server package
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: DHFS Server Package
|
name: DHFS Server Package
|
||||||
path: dhfs-package-downloaded
|
path: dhfs-package-downloaded
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- name: Download webui
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: Webui
|
name: Webui
|
||||||
path: webui-dist-downloaded
|
path: webui-dist-downloaded
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- name: Download native libs
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: NativeLibs
|
name: NativeLibs
|
||||||
path: dhfs-native-downloaded
|
path: dhfs-native-downloaded
|
||||||
@@ -314,7 +318,8 @@ jobs:
|
|||||||
- name: Tar run wrapper
|
- name: Tar run wrapper
|
||||||
run: tar -cvf ~/run-wrapper.tar.gz ./run-wrapper-out
|
run: tar -cvf ~/run-wrapper.tar.gz ./run-wrapper-out
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: Run wrapper
|
name: Run wrapper
|
||||||
path: ~/run-wrapper.tar.gz
|
path: ~/run-wrapper.tar.gz
|
||||||
|
|||||||
@@ -15,4 +15,6 @@ class DhfsSupportNative {
|
|||||||
|
|
||||||
static native void dropByteBuffer(long token);
|
static native void dropByteBuffer(long token);
|
||||||
|
|
||||||
|
static native int getPageSize();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,12 +3,47 @@ project(libdhfs_support CXX)
|
|||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
if (NOT SANITIZE)
|
||||||
|
set(SANITIZE YES)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
|
||||||
|
if (SANITIZE STREQUAL "YES")
|
||||||
|
message(WARNING "Enabling sanitizers!")
|
||||||
|
add_compile_options(-Werror -Wall -Wextra -pedantic -Wshadow -Wformat=2 -Wfloat-equal -D_GLIBCXX_DEBUG -Wconversion)
|
||||||
|
check_cxx_compiler_flag(-fsanitize-trap=all CAN_TRAP)
|
||||||
|
if (CAN_TRAP)
|
||||||
|
add_compile_options(-fsanitize=undefined -fsanitize-trap=all -fno-sanitize-recover)
|
||||||
|
add_link_options(-fsanitize=undefined -fsanitize-trap=all -fno-sanitize-recover)
|
||||||
|
else ()
|
||||||
|
message(WARNING "Sanitizers not supported!")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
|
add_compile_options(-flto)
|
||||||
|
add_link_options(-flto)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
add_compile_options(-O3)
|
||||||
|
add_link_options(-O3)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
add_compile_options(-Wno-unused-parameter)
|
||||||
|
|
||||||
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
||||||
|
|
||||||
find_package(JNI REQUIRED COMPONENTS JVM)
|
find_package(JNI REQUIRED COMPONENTS JVM)
|
||||||
find_package(Java REQUIRED)
|
find_package(Java REQUIRED)
|
||||||
include(UseJava)
|
include(UseJava)
|
||||||
|
|
||||||
add_jar(DhfsSupportNative
|
add_jar(DhfsSupportNative
|
||||||
"${PROJECT_SOURCE_DIR}/../dhfs-parent/supportlib/src/main/java/com/usatiuk/dhfs/supportlib/DhfsSupportNative.java"
|
"${PROJECT_SOURCE_DIR}/../dhfs-parent/supportlib/src/main/java/com/usatiuk/dhfs/supportlib/DhfsSupportNative.java"
|
||||||
|
"${PROJECT_SOURCE_DIR}/LibPathDummy.java"
|
||||||
GENERATE_NATIVE_HEADERS DhfsSupportNative-native)
|
GENERATE_NATIVE_HEADERS DhfsSupportNative-native)
|
||||||
|
|
||||||
add_library(dhfs_support SHARED DhfsSupportNative.cpp)
|
add_library(dhfs_support SHARED DhfsSupportNative.cpp)
|
||||||
|
|||||||
@@ -7,18 +7,40 @@
|
|||||||
|
|
||||||
#include "com_usatiuk_dhfs_supportlib_DhfsSupportNative.h"
|
#include "com_usatiuk_dhfs_supportlib_DhfsSupportNative.h"
|
||||||
|
|
||||||
long get_page_size() {
|
#pragma GCC diagnostic push
|
||||||
static const long PAGE_SIZE = sysconf(_SC_PAGESIZE);
|
#pragma GCC diagnostic ignored "-Wsign-conversion"
|
||||||
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
|
|
||||||
|
template<typename To, typename From>
|
||||||
|
constexpr To checked_cast(const From& f) {
|
||||||
|
To result = static_cast<To>(f);
|
||||||
|
assert(f == result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
unsigned int get_page_size() {
|
||||||
|
static const auto PAGE_SIZE = checked_cast<unsigned int>(sysconf(_SC_PAGESIZE));
|
||||||
return PAGE_SIZE;
|
return PAGE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr uintptr_t align_up(uintptr_t what, size_t alignment) {
|
template<typename T, typename A>
|
||||||
|
T align_up(T what, A alignment) {
|
||||||
assert(__builtin_popcount(alignment) == 1);
|
assert(__builtin_popcount(alignment) == 1);
|
||||||
const uintptr_t mask = alignment - 1;
|
|
||||||
if (what & mask) {
|
const T mask = checked_cast<T>(alignment - 1);
|
||||||
return (what & ~mask) + alignment;
|
|
||||||
}
|
T ret;
|
||||||
return what;
|
|
||||||
|
if (what & mask)
|
||||||
|
ret = (what + mask) & ~mask;
|
||||||
|
else
|
||||||
|
ret = what;
|
||||||
|
|
||||||
|
assert((ret & mask) == 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -28,28 +50,33 @@ JNIEXPORT void JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_hello(
|
|||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_allocateUninitializedByteBuffer
|
JNIEXPORT jlong JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_allocateUninitializedByteBuffer
|
||||||
(JNIEnv* env, jclass klass, jobjectArray bb, jint size) {
|
(JNIEnv* env, jclass klass, jobjectArray bb, jint size) {
|
||||||
|
if (size < 0) {
|
||||||
|
env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "Size less than 0?");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t checked_size = checked_cast<size_t>(size);
|
||||||
|
|
||||||
void* buf;
|
void* buf;
|
||||||
if (size < get_page_size())
|
if (checked_size < get_page_size())
|
||||||
buf = malloc(size);
|
buf = malloc(checked_size);
|
||||||
else
|
else
|
||||||
buf = std::aligned_alloc(get_page_size(), align_up(size, get_page_size()));
|
buf = std::aligned_alloc(get_page_size(), align_up(checked_size, get_page_size()));
|
||||||
|
|
||||||
if (buf == nullptr) {
|
if (buf == nullptr) {
|
||||||
env->ThrowNew(env->FindClass("java/lang/OutOfMemoryError"), "Buffer memory allocation failed");
|
env->ThrowNew(env->FindClass("java/lang/OutOfMemoryError"), "Buffer memory allocation failed");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
env->SetObjectArrayElement(bb, 0, env->NewDirectByteBuffer(buf, size));
|
env->SetObjectArrayElement(bb, 0, env->NewDirectByteBuffer(buf, checked_cast<jlong>(checked_size)));
|
||||||
|
|
||||||
jlong token = static_cast<jlong>((uintptr_t) buf);
|
jlong token = checked_cast<jlong>((uintptr_t) buf);
|
||||||
assert(token == (uintptr_t)buf);
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_dropByteBuffer
|
JNIEXPORT void JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_dropByteBuffer
|
||||||
(JNIEnv* env, jclass klass, jlong token) {
|
(JNIEnv* env, jclass klass, jlong token) {
|
||||||
uintptr_t addr = static_cast<uintptr_t>(token);
|
const auto addr = checked_cast<uintptr_t>(token);
|
||||||
assert(addr == token);
|
|
||||||
|
|
||||||
if (addr == 0) {
|
if (addr == 0) {
|
||||||
env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "Trying to free null pointer");
|
env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "Trying to free null pointer");
|
||||||
@@ -58,4 +85,9 @@ JNIEXPORT void JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_dropBy
|
|||||||
|
|
||||||
free((void*) addr);
|
free((void*) addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_com_usatiuk_dhfs_supportlib_DhfsSupportNative_getPageSize
|
||||||
|
(JNIEnv*, jclass) {
|
||||||
|
return checked_cast<jint>(get_page_size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CMAKE_ARGS="${CMAKE_ARGS:--DCMAKE_BUILD_TYPE=Debug}"
|
||||||
|
|
||||||
export SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
export SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
if [[ -z "${INSIDE_DOCKER_ALREADY}" ]]; then
|
if [[ -z "${DO_LOCAL_BUILD}" ]]; then
|
||||||
if [[ "$(uname)" == "Linux" ]]; then
|
if [[ "$(uname)" == "Linux" ]]; then
|
||||||
if [[ -z "${CROSS_PLATFORM}" ]]; then
|
if [[ -z "${CROSS_PLATFORM}" ]]; then
|
||||||
echo "Already on linux"
|
echo "Already on linux"
|
||||||
@@ -26,7 +28,7 @@ CONFIGURE_DIR="$2"
|
|||||||
INSTALL_DIR="$3"
|
INSTALL_DIR="$3"
|
||||||
|
|
||||||
function configure() {
|
function configure() {
|
||||||
cmake -B"$CONFIGURE_DIR" -S"$PROJECT_DIR" -DDHFS_LIB_INSTALL="$INSTALL_DIR"
|
cmake -B"$CONFIGURE_DIR" -S"$PROJECT_DIR" -DDHFS_LIB_INSTALL="$INSTALL_DIR" $CMAKE_ARGS
|
||||||
}
|
}
|
||||||
|
|
||||||
function build() {
|
function build() {
|
||||||
|
|||||||
@@ -14,5 +14,5 @@ docker build $PLATFORM_ARG --iidfile "$DOCKER_IMG_FILE" .
|
|||||||
|
|
||||||
ROOT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
ROOT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
||||||
|
|
||||||
docker run $PLATFORM_ARG --rm -v "$ROOT_DIR:$ROOT_DIR" -e INSIDE_DOCKER_ALREADY=TRUE "$(cat "$DOCKER_IMG_FILE")" \
|
docker run $PLATFORM_ARG --rm -v "$ROOT_DIR:$ROOT_DIR" -e DO_LOCAL_BUILD=TRUE "$(cat "$DOCKER_IMG_FILE")" \
|
||||||
"$SCRIPT_DIR/cross-build.sh" "$@"
|
"$SCRIPT_DIR/cross-build.sh" "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user