Skip to content

Simple library for embedding static resources into C++ binaries using CMake

License

Notifications You must be signed in to change notification settings

WerWolv/libromfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libromfs

libromfs is an easy way to bundle files, resources and entire directory structures directly into any C++ application and access them through a simple interface.

The main advantage of this library is that you no longer need to ship your application with a resources folder that contains data that is not intended to be modified anyways. Simply bundle it all into a single, standalone executable.

Usage

libromfs depends on CMake for code generation.

# Set the project name this romfs is being used for
set(LIBROMFS_PROJECT_NAME ${PROJECT_NAME})

# Set the location of our romfs folder
set(LIBROMFS_RESOURCE_LOCATION "${CMAKE_SOURCE_DIR}/romfs")


# Include libromfs
add_subdirectory(libromfs)

# Link libromfs into our application
target_link_libraries(my_application PUBLIC ${LIBROMFS_LIBRARY})

Now, you can place all your files and folders into the ./romfs folder next to your CMakeLists.txt file. All files in this folder will now be packed into the .rodata section of a static library which then can be linked to your main application.

To access the files in the ./romfs directory structure now, simply use romfs::get to get back an object containing functions to access the file's data. The interface is comparable to regular C File I/O, romfs::get() is the counterpart to fopen() and the data access functions inside of the object are counterparts to fread().

/* Include libromfs header */
#include <romfs/romfs.hpp>

#include <cstdio>

int main() {
  /* Get file relative to the romfs folder */
  auto my_file = romfs::get("path/to/my/file.txt"); 
  
  /* Print size and content of file */
  std::printf("File Size: %zu bytes\n", my_file.size());
  std::printf("File content: %s\n", my_file.data());
}

About

Simple library for embedding static resources into C++ binaries using CMake

Resources

License

Stars

Watchers

Forks