diff --git a/build.sh b/build.sh index 8b68b537..7f861b41 100755 --- a/build.sh +++ b/build.sh @@ -26,11 +26,12 @@ else fi export HOST_TARGET HOST -# use CFLAGS/LDFLAGS/STRIP taken from make +# use CFLAGS/CPPFLAGS/LDFLAGS/STRIP taken from make CFLAGS="$EXPORT_CFLAGS" +CPPFLAGS="$EXPORT_CPPFLAGS" LDFLAGS="$EXPORT_LDFLAGS" STRIP="$EXPORT_STRIP" -export CFLAGS LDFLAGS STRIP +export CFLAGS CPPFLAGS LDFLAGS STRIP export PORTS_MIRROR_BASEURL="https://files.phoesys.com/ports/" diff --git a/fs_mark/build.sh b/fs_mark/build.sh index e7e16ef9..1216ef9d 100755 --- a/fs_mark/build.sh +++ b/fs_mark/build.sh @@ -2,43 +2,50 @@ set -e -FS_MARK_VER="3.3" -FS_MARK=fs_mark-${FS_MARK_VER} +VER="3.3" +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" -PREFIX_FS_MARK_SRC="${PREFIX_PORT_BUILD}/${FS_MARK}" +PREFIX_FS_MARK_SRC="${PREFIX_PORT_BUILD}/src" PREFIX_FS_MARK_MARKERS="${PREFIX_PORT_BUILD}/markers" +mkdir -p "$PREFIX_FS_MARK_MARKERS" + # -# Download and unpack +# # Download and unpack # -mkdir -p "$PREFIX_PORT_BUILD" "$PREFIX_FS_MARK_MARKERS" if ! [ -f "${PREFIX_PORT}/${FS_MARK}.tar.gz" ]; then if ! wget "$PKG_URL" -O "${PREFIX_PORT}/${FS_MARK}.tar.gz" --no-check-certificate; then - wget "$PKG_MIRROR_URL" -P "${PREFIX_PORT}" --no-check-certificate + wget "$PKG_MIRROR_URL" -P "$PREFIX_PORT" --no-check-certificate fi fi -if ! [ -d "${PREFIX_FS_MARK_SRC}" ]; then - tar xzf "${PREFIX_PORT}/${FS_MARK}.tar.gz" -C "${PREFIX_PORT_BUILD}" && mv "${PREFIX_PORT_BUILD}"/fs_mark-"${FS_MARK_COMMIT}" "${PREFIX_PORT_BUILD}"/${FS_MARK} +if [ ! -d "$PREFIX_FS_MARK_SRC" ]; then + tar xzf "${PREFIX_PORT}/${FS_MARK}.tar.gz" -C "$PREFIX_PORT_BUILD" + mv "${PREFIX_PORT_BUILD}/fs_mark-$FS_MARK_COMMIT" "$PREFIX_FS_MARK_SRC" fi # -# Apply patches +# # Apply patches # -for patchfile in "$PREFIX_PORT"/patch/*; do - if [ ! -f "$PREFIX_FS_MARK_MARKERS/$(basename "$patchfile").applied" ]; then +for patchfile in "${PREFIX_PORT}/patches/"*.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" + touch "${PREFIX_FS_MARK_MARKERS}/$(basename "$patchfile").applied" fi done -# Build fs_mark -cd "${PREFIX_PORT_BUILD}/${FS_MARK}" && make +# +# # Build fs_mark +# +cd "$PREFIX_FS_MARK_SRC" && make -cp -a "$PREFIX_PORT_BUILD/${FS_MARK}/fs_mark" "$PREFIX_PROG/fs_mark" -$STRIP -o "${PREFIX_PROG_STRIPPED}/fs_mark" "${PREFIX_PROG}/fs_mark" -b_install "$PREFIX_PORTS_INSTALL/fs_mark" /bin +# +# # Strip and install +# +cp -a "${PREFIX_FS_MARK_SRC}/fs_mark" "${PREFIX_PROG}/fs_mark" +eval "$STRIP" -o "${PREFIX_PROG_STRIPPED}/fs_mark" "${PREFIX_PROG}/fs_mark" +b_install "${PREFIX_PROG_STRIPPED}/fs_mark" /bin diff --git a/fs_mark/patch/fs_mark.patch b/fs_mark/patch/fs_mark.patch deleted file mode 100644 index 65f8b78a..00000000 --- a/fs_mark/patch/fs_mark.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- 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 deleted file mode 100644 index 56ea8e3a..00000000 --- a/fs_mark/patch/fs_mark_h.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- 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/patches/Makefile.patch b/fs_mark/patches/Makefile.patch new file mode 100644 index 00000000..8c596cf8 --- /dev/null +++ b/fs_mark/patches/Makefile.patch @@ -0,0 +1,19 @@ +--- fs_mark-3.3/Makefile 2025-01-02 19:10:48.757969200 +0100 ++++ fs_mark-3.3.phoenix/Makefile 2025-01-02 19:10:48.757969200 +0100 +@@ -14,14 +14,14 @@ + CC ?= gcc + CFLAGS ?= -O2 + LDFLAGS ?= +-CFLAGS += -Wall -D_FILE_OFFSET_BITS=64 ++CFLAGS += -Wall -D_FILE_OFFSET_BITS=64 -z stack-size=8192 + + all: fs_mark + + fs_mark.o: fs_mark.c fs_mark.h + + fs_mark: fs_mark.o lib_timing.o +- $(CC) $(CFLAGS) -o fs_mark fs_mark.o lib_timing.o $(LDFLAGS) ++ $(CC) $(CPPFLAGS) $(CFLAGS) -o fs_mark fs_mark.o lib_timing.o $(LDFLAGS) + + test: fs_mark + ./fs_mark -d ${DIR1} -d ${DIR2} -s 51200 -n 4096 diff --git a/fs_mark/patches/fs_mark.patch b/fs_mark/patches/fs_mark.patch new file mode 100644 index 00000000..36315164 --- /dev/null +++ b/fs_mark/patches/fs_mark.patch @@ -0,0 +1,90 @@ +--- fs_mark-3.3/fs_mark.c 2025-01-02 19:10:48.757969200 +0100 ++++ fs_mark-3.3.phoenix/fs_mark.c 2025-01-02 19:10:48.757969200 +0100 +@@ -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" + +@@ -493,12 +492,12 @@ + */ + 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) { +- fprintf(stderr, "fs_mark: statfs failed on %s %s\n", dir_name, ++ if (statvfs(dir_name, &fs_buf) == -1) { ++ fprintf(stderr, "fs_mark: statvfs failed on %s %s\n", dir_name, + strerror(errno)); + cleanup_exit(); + } +@@ -517,11 +516,11 @@ + */ + 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) { +- fprintf(stderr, "fs_mark: statfs failed on %s %s\n", dir_name, ++ if (statvfs(dir_name, &fs_buf) == -1) { ++ fprintf(stderr, "fs_mark: statvfs failed on %s %s\n", dir_name, + strerror(errno)); + cleanup_exit(); + } +@@ -1115,6 +1114,10 @@ + + do_run(my_pid); + ++#ifdef NOMMU ++ memset(names, 0, sizeof(struct name_entry) * num_files); ++#endif ++ + fclose(child_log_file_fp); + } + +@@ -1137,8 +1140,15 @@ + * Fork one thread for each of the specified children + */ + ++#ifdef NOMMU ++ #define FORK vfork ++ file_count = 0; ++#else ++ #define FORK fork ++#endif ++ + for (i = 0; i < num_threads; i++) { +- if ((child_tasks[i].child_pid = fork()) == -1) { ++ if ((child_tasks[i].child_pid = FORK()) == -1) { + fprintf(stderr, "fs_mark: fork failed: %s\n", + strerror(errno)); + cleanup_exit(); +@@ -1262,6 +1272,7 @@ + */ + df_full = get_df_full(child_tasks[0].test_dir); + ++ usleep(100000); + if (verbose_stats) + fprintf(log_fp, + "%6u %12u %12u %12.1f %16llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu %8llu\n", diff --git a/fs_mark/patches/fs_mark_h.patch b/fs_mark/patches/fs_mark_h.patch new file mode 100644 index 00000000..de87a369 --- /dev/null +++ b/fs_mark/patches/fs_mark_h.patch @@ -0,0 +1,26 @@ +--- fs_mark-3.3/fs_mark.h 2025-01-02 19:10:48.757969200 +0100 ++++ fs_mark-3.3.phoenix/fs_mark.h 2025-01-02 19:10:48.757969200 +0100 +@@ -29,6 +29,14 @@ + #define FILENAME_SIZE (128) /* Max length of filenames */ + #define MAX_STRING_SIZE (160) /* Max number of bytes in a string */ + ++#ifdef NOMMU ++ #undef MAX_IO_BUFFER_SIZE ++ #undef MAX_NAME_PATH ++ ++ #define MAX_IO_BUFFER_SIZE (1024 * 32) /* Max write buffer size is 32KB */ ++ #define MAX_NAME_PATH (200) /* Length of the pathname before the leaf */ ++#endif ++ + /* + * Default values + */ +@@ -125,7 +133,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 space 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/patches/lib_timing.patch similarity index 51% rename from fs_mark/patch/lib_timing.patch rename to fs_mark/patches/lib_timing.patch index 0959d8a0..8d3ed006 100644 --- a/fs_mark/patch/lib_timing.patch +++ b/fs_mark/patches/lib_timing.patch @@ -1,5 +1,5 @@ ---- 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 +--- fs_mark-3.3/lib_timing.c 2025-01-02 19:10:48.757969200 +0100 ++++ fs_mark-3.3.phoenix/lib_timing.c 2025-01-02 19:10:48.757969200 +0100 @@ -24,7 +24,6 @@ #include #include