[haiku-commits] haiku: hrev53761 - in src: add-ons/kernel/file_systems/xfs tests/add-ons/kernel/file_systems/xfs/xfs_shell

  • From: Adrien Destugues <pulkomandy@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 25 Jan 2020 03:49:17 -0500 (EST)

hrev53761 adds 1 changeset to branch 'master'
old head: 89ae33c9f66f77b4679af79ba92e417dca322bc8
new head: 80f7396496d7e0907ef805c820401aea5c93e20f
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=80f7396496d7+%5E89ae33c9f66f

----------------------------------------------------------------------------

80f7396496d7: Making of xfs file system
  
  xfs_shell is modeled over bfs_shell.
  It fails to mount the filesystem as expected
  (the filesystem code isn't implemented).
  
  Change-Id: Iaf88c1f4aef338f249fdc58bc27a3ad76ebd5d95
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/2096
  Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>

                                    [ CruxBox <shubhambhagat111@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53761
Commit:      80f7396496d7e0907ef805c820401aea5c93e20f
URL:         https://git.haiku-os.org/haiku/commit/?id=80f7396496d7
Author:      CruxBox <shubhambhagat111@xxxxxxxxx>
Date:        Thu Jan  9 19:05:27 2020 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxx>
Commit-Date: Sat Jan 25 08:49:09 2020 UTC

----------------------------------------------------------------------------

7 files changed, 719 insertions(+)
src/add-ons/kernel/file_systems/Jamfile          |   1 +
src/add-ons/kernel/file_systems/xfs/Jamfile      |  36 ++
.../kernel/file_systems/xfs/kernel_interface.cpp | 560 +++++++++++++++++++
.../file_systems/xfs/system_dependencies.h       |  54 ++
src/tests/add-ons/kernel/file_systems/Jamfile    |   1 +
.../add-ons/kernel/file_systems/xfs/Jamfile      |   3 +
.../kernel/file_systems/xfs/xfs_shell/Jamfile    |  64 +++

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/Jamfile 
b/src/add-ons/kernel/file_systems/Jamfile
index fbee01605d..7ac800a7f9 100644
--- a/src/add-ons/kernel/file_systems/Jamfile
+++ b/src/add-ons/kernel/file_systems/Jamfile
@@ -19,5 +19,6 @@ SubInclude HAIKU_TOP src add-ons kernel file_systems ramfs ;
 SubInclude HAIKU_TOP src add-ons kernel file_systems reiserfs ;
 SubInclude HAIKU_TOP src add-ons kernel file_systems udf ;
 SubInclude HAIKU_TOP src add-ons kernel file_systems userlandfs ;
+SubInclude HAIKU_TOP src add-ons kernel file_systems xfs ;
 
 SubInclude HAIKU_TOP src add-ons kernel file_systems layers ;
diff --git a/src/add-ons/kernel/file_systems/xfs/Jamfile 
b/src/add-ons/kernel/file_systems/xfs/Jamfile
new file mode 100644
index 0000000000..edf605bb98
--- /dev/null
+++ b/src/add-ons/kernel/file_systems/xfs/Jamfile
@@ -0,0 +1,36 @@
+SubDir HAIKU_TOP src add-ons kernel file_systems xfs ;
+
+# set some additional defines
+{
+    local defines =
+        XFS_DEBUGGER_COMMANDS
+        ;
+
+    defines = [ FDefines $(defines) ] ;
+    SubDirCcFlags $(defines) ;
+    SubDirC++Flags $(defines) ;
+}
+
+UsePrivateHeaders [ FDirName kernel util ] ;
+UsePrivateHeaders shared storage file_systems ;
+UsePrivateKernelHeaders ;
+
+DEFINES += DEBUG_APP="\\\"xfs\\\"" ;
+
+UseHeaders [ FDirName $(HAIKU_TOP) src libs uuid ] : true ;
+
+local xfsSources =
+    kernel_cpp.cpp
+    kernel_interface.cpp
+    ;
+KernelAddon xfs :
+    $(xfsSources)
+    :
+       libuuid_kernel.a
+;
+
+SEARCH on [ FGristFiles $(xfsSources) ]
+    = [ FDirName  $(HAIKU_TOP) src add-ons kernel file_systems xfs ] ;
+
+SEARCH on [ FGristFiles kernel_cpp.cpp ]
+    = [ FDirName $(HAIKU_TOP) src system kernel util ] ;
\ No newline at end of file
diff --git a/src/add-ons/kernel/file_systems/xfs/kernel_interface.cpp 
b/src/add-ons/kernel/file_systems/xfs/kernel_interface.cpp
new file mode 100644
index 0000000000..905ad2752d
--- /dev/null
+++ b/src/add-ons/kernel/file_systems/xfs/kernel_interface.cpp
@@ -0,0 +1,560 @@
+/*
+ * Copyright 2020 Shubham Bhagat, shubhambhagat111@xxxxxxxxx
+ * All rights reserved. Distributed under the terms of the MIT License.
+ */
+#include "system_dependencies.h"
+
+#ifdef TRACE_XFS
+#define TRACE(x...) dprintf("\33[34mxfs:\33[0m " x)
+#else
+#define TRACE(x...) ;
+#endif
+
+
+struct identify_cookie
+{
+       /*      super_block_struct super_block;
+        *      No structure yet implemented.
+        */
+       int cookie;
+};
+
+
+//!    xfs_io() callback hook
+static status_t
+iterative_io_get_vecs_hook(void *cookie, io_request *request, off_t offset,
+                                               size_t size, struct file_io_vec 
*vecs, size_t *_count)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//!    xfs_io() callback hook
+static status_t
+iterative_io_finished_hook(void *cookie, io_request *request, status_t status,
+                                                  bool partialTransfer, size_t 
bytesTransferred)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//     #pragma mark - Scanning
+static float
+xfs_identify_partition(int fd, partition_data *partition, void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_scan_partition(int fd, partition_data *partition, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static void
+xfs_free_identify_partition_cookie(partition_data *partition, void *_cookie)
+{
+       dprintf("Unsupported in XFS currently.\n");
+       return;
+}
+
+
+//     #pragma mark -
+static status_t
+xfs_mount(fs_volume *_volume, const char *device, uint32 flags,
+                 const char *args, ino_t *_rootID)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_unmount(fs_volume *_volume)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_fs_info(fs_volume *_volume, struct fs_info *info)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//     #pragma mark -
+
+static status_t
+xfs_get_vnode(fs_volume *_volume, ino_t id, fs_vnode *_node, int *_type,
+                         uint32 *_flags, bool reenter)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_put_vnode(fs_volume *_volume, fs_vnode *_node, bool reenter)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static bool
+xfs_can_page(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_pages(fs_volume *_volume, fs_vnode *_node, void *_cookie,
+                          off_t pos, const iovec *vecs, size_t count, size_t 
*_numBytes)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_io(fs_volume *_volume, fs_vnode *_node, void *_cookie,
+          io_request *request)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_get_file_map(fs_volume *_volume, fs_vnode *_node, off_t offset,
+                                size_t size, struct file_io_vec *vecs, size_t 
*_count)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//     #pragma mark -
+
+static status_t
+xfs_lookup(fs_volume *_volume, fs_vnode *_directory, const char *name,
+                  ino_t *_vnodeID)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_ioctl(fs_volume *_volume, fs_vnode *_node, void *_cookie, uint32 cmd,
+                 void *buffer, size_t bufferLength)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_stat(fs_volume *_volume, fs_vnode *_node, struct stat *stat)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_open(fs_volume * /*_volume*/, fs_vnode *_node, int openMode,
+                void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read(fs_volume *_volume, fs_vnode *_node, void *_cookie, off_t pos,
+                void *buffer, size_t *_length)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_close(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_free_cookie(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+static status_t
+xfs_access(fs_volume *_volume, fs_vnode *_node, int accessMode)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_link(fs_volume *_volume, fs_vnode *_node, char *buffer,
+                         size_t *_bufferSize)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+status_t
+xfs_unlink(fs_volume *_volume, fs_vnode *_directory, const char *name)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//     #pragma mark - Directory functions
+
+static status_t
+xfs_create_dir(fs_volume *_volume, fs_vnode *_directory, const char *name,
+                          int mode)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_remove_dir(fs_volume *_volume, fs_vnode *_directory, const char *name)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_open_dir(fs_volume * /*_volume*/, fs_vnode *_node, void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_dir(fs_volume *_volume, fs_vnode *_node, void *_cookie,
+                        struct dirent *dirent, size_t bufferSize, uint32 *_num)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_rewind_dir(fs_volume * /*_volume*/, fs_vnode * /*node*/, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_close_dir(fs_volume * /*_volume*/, fs_vnode * /*node*/,
+                         void * /*_cookie*/)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_free_dir_cookie(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_open_attr_dir(fs_volume *_volume, fs_vnode *_node, void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_close_attr_dir(fs_volume *_volume, fs_vnode *_node, void *cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_free_attr_dir_cookie(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_attr_dir(fs_volume *_volume, fs_vnode *_node,
+                                 void *_cookie, struct dirent *dirent, size_t 
bufferSize, uint32 *_num)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_rewind_attr_dir(fs_volume *_volume, fs_vnode *_node, void *_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+/* attribute operations */
+static status_t
+xfs_create_attr(fs_volume *_volume, fs_vnode *_node,
+                               const char *name, uint32 type, int openMode, 
void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_open_attr(fs_volume *_volume, fs_vnode *_node, const char *name,
+                         int openMode, void **_cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_close_attr(fs_volume *_volume, fs_vnode *_node,
+                          void *cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_free_attr_cookie(fs_volume *_volume, fs_vnode *_node,
+                                        void *cookie)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_attr(fs_volume *_volume, fs_vnode *_node, void *_cookie,
+                         off_t pos, void *buffer, size_t *_length)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_write_attr(fs_volume *_volume, fs_vnode *_node, void *cookie,
+                          off_t pos, const void *buffer, size_t *length)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_read_attr_stat(fs_volume *_volume, fs_vnode *_node,
+                                  void *_cookie, struct stat *stat)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_write_attr_stat(fs_volume *_volume, fs_vnode *_node,
+                                       void *cookie, const struct stat *stat, 
int statMask)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_rename_attr(fs_volume *_volume, fs_vnode *fromVnode,
+                               const char *fromName, fs_vnode *toVnode, const 
char *toName)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_remove_attr(fs_volume *_volume, fs_vnode *vnode,
+                               const char *name)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static uint32
+xfs_get_supported_operations(partition_data *partition, uint32 mask)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_initialize(int fd, partition_id partitionID, const char *name,
+                       const char *parameterString, off_t partitionSize, 
disk_job_id job)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+static status_t
+xfs_uninitialize(int fd, partition_id partitionID, off_t partitionSize,
+                                uint32 blockSize, disk_job_id job)
+{
+       return B_NOT_SUPPORTED;
+}
+
+
+//     #pragma mark -
+
+static status_t
+xfs_std_ops(int32 op, ...)
+{
+       switch (op)
+       {
+       case B_MODULE_INIT:
+#ifdef XFS_DEBUGGER_COMMANDS
+               // Perform nothing at the moment
+               // add_debugger_commands();
+#endif
+               return B_OK;
+       case B_MODULE_UNINIT:
+#ifdef XFS_DEBUGGER_COMMANDS
+               // Perform nothing at the moment
+               // remove_debugger_commands();
+#endif
+               return B_OK;
+
+       default:
+               return B_ERROR;
+       }
+}
+
+fs_volume_ops gxfsVolumeOps = {
+       &xfs_unmount,
+       &xfs_read_fs_info,
+       NULL, // write_fs_info()
+       NULL, // fs_sync,
+       &xfs_get_vnode,
+};
+
+fs_vnode_ops gxfsVnodeOps = {
+       /* vnode operations */
+       &xfs_lookup,
+       NULL, // xfs_get_vnode_name - optional, and we can't do better than the
+                 // fallback implementation, so leave as NULL.
+       &xfs_put_vnode,
+       NULL, // xfs_remove_vnode,
+
+       /* VM file access */
+       &xfs_can_page,
+       &xfs_read_pages,
+       NULL, // xfs_write_pages,
+
+       &xfs_io, // io()
+       NULL,   // cancel_io()
+
+       &xfs_get_file_map,
+
+       &xfs_ioctl,
+       NULL,
+       NULL, // fs_select
+       NULL, // fs_deselect
+       NULL, // fs_fsync,
+
+       &xfs_read_link,
+       NULL, // fs_create_symlink,
+
+       NULL, // fs_link,
+       &xfs_unlink,
+       NULL, // fs_rename,
+
+       &xfs_access,
+       &xfs_read_stat,
+       NULL, // fs_write_stat,
+       NULL, // fs_preallocate
+
+       /* file operations */
+       NULL, // fs_create,
+       &xfs_open,
+       &xfs_close,
+       &xfs_free_cookie,
+       &xfs_read,
+       NULL, //        fs_write,
+
+       /* directory operations */
+       &xfs_create_dir,
+       &xfs_remove_dir,
+       &xfs_open_dir,
+       &xfs_close_dir,
+       &xfs_free_dir_cookie,
+       &xfs_read_dir,
+       &xfs_rewind_dir,
+
+       /* attribute directory operations */
+       &xfs_open_attr_dir,
+       &xfs_close_attr_dir,
+       &xfs_free_attr_dir_cookie,
+       &xfs_read_attr_dir,
+       &xfs_rewind_attr_dir,
+
+       /* attribute operations */
+       &xfs_create_attr,
+       &xfs_open_attr,
+       &xfs_close_attr,
+       &xfs_free_attr_cookie,
+       &xfs_read_attr,
+       &xfs_write_attr,
+       &xfs_read_attr_stat,
+       &xfs_write_attr_stat,
+       &xfs_rename_attr,
+       &xfs_remove_attr,
+};
+
+
+static file_system_module_info sxfsFileSystem = {
+       {
+               "file_systems/xfs" B_CURRENT_FS_API_VERSION,
+               0,
+               xfs_std_ops,
+       },
+
+       "xfs",                     // short_name
+       "XFS File System", // pretty_name
+
+       // DDM flags
+       0| B_DISK_SYSTEM_SUPPORTS_INITIALIZING 
|B_DISK_SYSTEM_SUPPORTS_CONTENT_NAME
+       //      | B_DISK_SYSTEM_SUPPORTS_WRITING
+       ,
+
+       // scanning
+       xfs_identify_partition,
+       xfs_scan_partition,
+       xfs_free_identify_partition_cookie,
+       NULL, // free_partition_content_cookie()
+
+       &xfs_mount,
+
+       /* capability querying operations */
+       &xfs_get_supported_operations,
+
+       NULL, // validate_resize
+       NULL, // validate_move
+       NULL, // validate_set_content_name
+       NULL, // validate_set_content_parameters
+       NULL, // validate_initialize,
+
+       /* shadow partition modification */
+       NULL, // shadow_changed
+
+       /* writing */
+       NULL, // defragment
+       NULL, // repair
+       NULL, // resize
+       NULL, // move
+       NULL, // set_content_name
+       NULL, // set_content_parameters
+       xfs_initialize,
+       xfs_uninitialize};
+
+module_info *modules[] = {
+       (module_info *)&sxfsFileSystem,
+       NULL,
+};
diff --git a/src/add-ons/kernel/file_systems/xfs/system_dependencies.h 
b/src/add-ons/kernel/file_systems/xfs/system_dependencies.h
new file mode 100644
index 0000000000..cb49f9f164
--- /dev/null
+++ b/src/add-ons/kernel/file_systems/xfs/system_dependencies.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2020 Shubham Bhagat, shubhambhagat111@xxxxxxxxx
+ * All rights reserved. Distributed under the terms of the MIT License.
+ */
+
+#ifndef _SYSTE_DEPENDENCIES_H
+#define _SYSTEM_DEPENDENCIES_H
+
+#ifdef FS_SHELL
+// This needs to be included before the fs_shell wrapper
+
+#include "fssh_api_wrapper.h"
+#include "fssh_auto_deleter.h"
+#include <new>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef unsigned char uuid_t[16];
+
+void uuid_generate(uuid_t out);        
+#ifdef __cplusplus
+}
+#endif
+
+
+#else // !FS_SHELL
+
+#include <AutoDeleter.h>
+#include <util/AutoLock.h>
+#include <util/DoublyLinkedList.h>
+#include <util/SinglyLinkedList.h>
+#include <util/Stack.h>
+
+#include <ByteOrder.h>
+#include <uuid.h>
+
+#include <tracing.h>
+#include <driver_settings.h>
+#include <fs_attr.h>
+#include <fs_cache.h>
+#include <fs_index.h>
+#include <fs_info.h>
+#include <fs_interface.h>
+#include <fs_query.h>
+#include <fs_volume.h>
+#include <Drivers.h>
+#include <KernelExport.h>
+#include <NodeMonitor.h>
+#include <SupportDefs.h>
+#include <TypeConstants.h>
+#endif // !FS_SHELL
+
+#endif // _SYSTEM_DEPENDENCIES
diff --git a/src/tests/add-ons/kernel/file_systems/Jamfile 
b/src/tests/add-ons/kernel/file_systems/Jamfile
index d52edbaf6e..ff5e501201 100644
--- a/src/tests/add-ons/kernel/file_systems/Jamfile
+++ b/src/tests/add-ons/kernel/file_systems/Jamfile
@@ -10,3 +10,4 @@ HaikuSubInclude random_file_actions ;
 HaikuSubInclude random_read ;
 HaikuSubInclude udf ;
 HaikuSubInclude userlandfs ;
+HaikuSubInclude xfs ;
diff --git a/src/tests/add-ons/kernel/file_systems/xfs/Jamfile 
b/src/tests/add-ons/kernel/file_systems/xfs/Jamfile
new file mode 100644
index 0000000000..3063de528b
--- /dev/null
+++ b/src/tests/add-ons/kernel/file_systems/xfs/Jamfile
@@ -0,0 +1,3 @@
+SubDir HAIKU_TOP src tests add-ons kernel file_systems xfs ;
+
+SubInclude HAIKU_TOP src tests add-ons kernel file_systems xfs xfs_shell ;
diff --git a/src/tests/add-ons/kernel/file_systems/xfs/xfs_shell/Jamfile 
b/src/tests/add-ons/kernel/file_systems/xfs/xfs_shell/Jamfile
new file mode 100644
index 0000000000..cefcc77947
--- /dev/null
+++ b/src/tests/add-ons/kernel/file_systems/xfs/xfs_shell/Jamfile
@@ -0,0 +1,64 @@
+SubDir HAIKU_TOP src tests add-ons kernel file_systems xfs xfs_shell ;
+
+SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems xfs ] 
;
+
+# prevent inclusion of HaikuBuildCompatibility.h
+DEFINES += HAIKU_BUILD_COMPATIBILITY_H ;
+
+# set some additional defines
+{
+       local defines =
+               FS_SHELL
+               ;
+
+       defines = [ FDefines $(defines) ] ;
+
+       local c++flags = ;
+
+       SubDirCcFlags $(defines) -Wno-multichar ;
+       SubDirC++Flags $(defines) $(c++flags) -Wno-multichar -fno-rtti ;
+}
+
+# platform specific libraries
+local fsShellCommandLibs ;
+if ! $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
+       fsShellCommandLibs = $(HOST_NETWORK_LIBS) ;
+}
+
+UseHeaders [ FDirName $(HAIKU_TOP) headers build ] : true ;
+
+if ! $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
+       UseHeaders [ FDirName $(HAIKU_TOP) headers build os ] : true ;
+       UseHeaders [ FDirName $(HAIKU_TOP) headers build os support ] : true ;
+}
+
+UsePrivateHeaders shared storage ;
+UsePrivateHeaders fs_shell ;
+UseHeaders [ FDirName $(HAIKU_TOP) headers private ] : true ;
+UseHeaders [ FDirName $(HAIKU_TOP) src tools fs_shell ] ;
+
+local xfsSource =
+       kernel_interface.cpp
+;
+
+BuildPlatformMergeObject <build>xfs.o : $(xfsSource) ;
+
+BuildPlatformMain <build>xfs_shell
+       :
+       :
+       <build>xfs.o
+       <build>fs_shell.a $(HOST_LIBSUPC++) $(HOST_LIBSTDC++)
+       $(HOST_LIBROOT) $(fsShellCommandLibs)
+;
+
+BuildPlatformMain <build>xfs_fuse
+       :
+       :
+       <build>xfs.o
+       <build>fuse_module.a
+       $(HOST_LIBSUPC++) $(HOST_LIBSTDC++)
+       $(HOST_STATIC_LIBROOT) $(fsShellCommandLibs) fuse
+;
+
+SEARCH on [ FGristFiles QueryParserUtils.cpp ]
+       += [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems shared ] ;


Other related posts:

  • » [haiku-commits] haiku: hrev53761 - in src: add-ons/kernel/file_systems/xfs tests/add-ons/kernel/file_systems/xfs/xfs_shell - Adrien Destugues