diff --git a/build.sh b/build.sh index 73bada98..8c00356a 100755 --- a/build.sh +++ b/build.sh @@ -73,4 +73,6 @@ fi [ "${PORTS_PICOCOM}" = "y" ] && ./phoenix-rtos-ports/picocom/build.sh +[ "${PORTS_FS_MARK}" = "y" ] && ./phoenix-rtos-ports/fs_mark/build.sh + exit 0 diff --git a/fs_mark/build.sh b/fs_mark/build.sh new file mode 100755 index 00000000..66660e3c --- /dev/null +++ b/fs_mark/build.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +set -e + +FS_MARK_VER="3.3" +FS_MARK=fs_mark-${FS_MARK_VER} +FS_MARK_COMMIT="2628be58146de63a13260ff64550f84275556c0e" +PKG_URL="https://github.com/josefbacik/fs_mark/archive/${FS_MARK_COMMIT}.tar.gz" +PKG_MIRROR_URL="https://files.phoesys.com/ports/${FS_MARK}.tar.gz" + +b_log "Building fs_mark" +PREFIX_FS_MARK=${PREFIX_PROJECT}/phoenix-rtos-ports/fs_mark +PREFIX_FS_MARK_BUILD="${PREFIX_BUILD}/fs_mark" +PREFIX_FS_MARK_SRC="${PREFIX_FS_MARK_BUILD}/${FS_MARK}" +PREFIX_FS_MARK_MARKERS="${PREFIX_FS_MARK_BUILD}/markers" + +# +# Download and unpack +# +mkdir -p "$PREFIX_FS_MARK_BUILD" "$PREFIX_FS_MARK_MARKERS" +if ! [ -f "${PREFIX_FS_MARK}/${FS_MARK}.tar.gz" ]; then + if ! wget "$PKG_URL" -O "${PREFIX_FS_MARK}/${FS_MARK}.tar.gz" --no-check-certificate; then + wget "$PKG_MIRROR_URL" -P "${PREFIX_FS_MARK}" --no-check-certificate + fi +fi + +if ! [ -d "${PREFIX_FS_MARK_SRC}" ]; then + tar xzf "${PREFIX_FS_MARK}/${FS_MARK}.tar.gz" -C "${PREFIX_FS_MARK_BUILD}" && mv "${PREFIX_FS_MARK_BUILD}"/fs_mark-"${FS_MARK_COMMIT}" "${PREFIX_FS_MARK_BUILD}"/${FS_MARK} +fi + +# +# Apply patches +# +for patchfile in "$PREFIX_FS_MARK"/patch/*; do + if [ ! -f "$PREFIX_FS_MARK_MARKERS/$(basename "$patchfile").applied" ]; then + echo "applying patch: $patchfile" + patch -d "$PREFIX_FS_MARK_SRC" -p1 < "$patchfile" + touch "$PREFIX_FS_MARK_MARKERS/$(basename "$patchfile").applied" + fi +done + +# Build fs_mark +cd "${PREFIX_FS_MARK_BUILD}/${FS_MARK}" && make + +cp -a "$PREFIX_FS_MARK_BUILD/${FS_MARK}/fs_mark" "$PREFIX_PROG/fs_mark" +"${CROSS}strip" -s "${PREFIX_PROG}/fs_mark" -o "${PREFIX_PROG_STRIPPED}/fs_mark" +b_install "$PREFIX_PORTS_INSTALL/fs_mark" /usr/bin diff --git a/fs_mark/patch/fs_mark.patch b/fs_mark/patch/fs_mark.patch new file mode 100644 index 00000000..65f8b78a --- /dev/null +++ b/fs_mark/patch/fs_mark.patch @@ -0,0 +1,60 @@ +--- fs_mark-3.3/fs_mark.c 2023-07-10 15:47:05.889696230 +0200 ++++ fs_mark-3.3.phoenix/fs_mark.c 2023-07-31 12:40:45.016383503 +0200 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +@@ -42,9 +42,8 @@ + #include + #include + +-#include +-#include +-#include ++#include ++#include + + #include "fs_mark.h" + +@@ -142,7 +141,8 @@ + break; + + case 'l': /* Log file name */ +- strncpy(log_file_name, optarg, PATH_MAX); ++ strncpy(log_file_name, optarg, sizeof(log_file_name)); ++ log_file_name[sizeof(log_file_name) - 1] = '\0'; + break; + + case 'L': /* number of iterations */ +@@ -493,11 +493,11 @@ + */ + int get_df_full(char *dir_name) + { +- struct statfs fs_buf; ++ struct statvfs fs_buf; + float df_used, used_blocks; + int df_percent_used; + +- if (statfs(dir_name, &fs_buf) == -1) { ++ if (statvfs(dir_name, &fs_buf) == -1) { + fprintf(stderr, "fs_mark: statfs failed on %s %s\n", dir_name, + strerror(errno)); + cleanup_exit(); +@@ -517,10 +517,10 @@ + */ + unsigned long long get_bytes_free(char *dir_name) + { +- struct statfs fs_buf; ++ struct statvfs fs_buf; + unsigned long long bytes_free; + +- if (statfs(dir_name, &fs_buf) == -1) { ++ if (statvfs(dir_name, &fs_buf) == -1) { + fprintf(stderr, "fs_mark: statfs failed on %s %s\n", dir_name, + strerror(errno)); + cleanup_exit(); diff --git a/fs_mark/patch/fs_mark_h.patch b/fs_mark/patch/fs_mark_h.patch new file mode 100644 index 00000000..e4644d3f --- /dev/null +++ b/fs_mark/patch/fs_mark_h.patch @@ -0,0 +1,11 @@ +--- fs_mark-3.3/fs_mark.h 2023-07-10 15:47:05.889696230 +0200 ++++ fs_mark-3.3.phoenix/fs_mark.h 2023-08-01 12:19:29.380631828 +0200 +@@ -125,7 +125,7 @@ + int num_threads = 1; /* Number of threads */ + int do_fill_fs = 0; /* Run until the file system is full */ + int verbose_stats = 0; /* Print complete stats for each system call */ +-char log_file_name[PATH_MAX] = "fs_log.txt"; /* Log file name for run */ ++char log_file_name[PATH_MAX - 16] = "fs_log.txt"; /* Log file name for run - reserve place for suffix */ + FILE *log_file_fp; /* Parent file pointer for log file */ + FILE *child_log_file_fp; /* Child file pointer for log file */ + diff --git a/fs_mark/patch/lib_timing.patch b/fs_mark/patch/lib_timing.patch new file mode 100644 index 00000000..0d2721ce --- /dev/null +++ b/fs_mark/patch/lib_timing.patch @@ -0,0 +1,10 @@ +--- fs_mark-3.3/lib_timing.c 2023-07-10 14:20:00.192932272 +0200 ++++ fs_mark-3.3.phoenix/lib_timing.c 2023-07-10 14:20:25.032448754 +0200 +@@ -24,7 +24,6 @@ + #include + #include + #include +-#include + + #define nz(x) ((x) == 0 ? 1 : (x)) + \ No newline at end of file