diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
| commit | 7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch) | |
| tree | 27fb39be241fdb5ac2734c574de678977d1856d0 /libs/libbsarch/CMakeLists.txt | |
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem,
Proton/umu-run integration, and Flatpak packaging.
Key features:
- FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak)
- Proton/GE-Proton/umu-run launcher with env var forwarding
- Flatpak support (sandbox-aware VFS, NXM handler, umu-run)
- Wine prefix management UI
- Case-insensitive path resolution for Linux filesystems
- QSettings-safe INI handling (avoids Bethesda INI corruption)
- Portable instance support with auto-generated launcher scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/libbsarch/CMakeLists.txt')
| -rw-r--r-- | libs/libbsarch/CMakeLists.txt | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/libs/libbsarch/CMakeLists.txt b/libs/libbsarch/CMakeLists.txt new file mode 100644 index 0000000..d3e994e --- /dev/null +++ b/libs/libbsarch/CMakeLists.txt @@ -0,0 +1,144 @@ +cmake_minimum_required(VERSION 3.16) + +include(CMakePackageConfigHelpers) + +project(libbsarch CXX) + +find_package(mo2-dds-header CONFIG REQUIRED) + +get_target_property(SRCS mo2::dds-header SOURCES) + +# libbsarch +add_library(libbsarch SHARED) +if(WIN32) + target_sources(libbsarch + PRIVATE + src/libbsarch.cpp + src/libbsarch.def + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include + FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h + ) +else() + target_sources(libbsarch + PRIVATE + src/libbsarch.cpp + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include + FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h + ) + # Set default symbol visibility to hidden, export only marked symbols + target_compile_options(libbsarch PRIVATE -fvisibility=hidden) +endif() +target_include_directories(libbsarch PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch) +set_target_properties(libbsarch PROPERTIES DEBUG_POSTFIX "d" CXX_STANDARD 11) +target_link_libraries(libbsarch PUBLIC mo2::dds-header) +target_compile_definitions(libbsarch PRIVATE BSARCH_DLL_EXPORT) + +# preprocessor definitions +if(MSVC) + target_compile_options(libbsarch PRIVATE + /W3 /EHsc /MP + $<$<CONFIG:DEBUG>:/MDd /Od> + $<$<CONFIG:RELEASE>:/Zi> + ) +endif() + + +# libbsarch_OOP +add_library(libbsarch_OOP STATIC) + +target_sources(libbsarch_OOP + PRIVATE + src/bs_archive_entries.cpp + src/utils/string_convert.cpp + src/utils/convertible_ostream.cpp + src/utils/convertible_string.cpp + src/bs_archive_auto.cpp + src/bs_archive.cpp + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/base_types.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive_auto.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive_entries.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/convertible_string.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/convertible_ostream.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/string_convert.hpp +) +target_include_directories(libbsarch_OOP PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch + ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils) +target_link_libraries(libbsarch_OOP PUBLIC mo2::dds-header) + +set_target_properties(libbsarch_OOP PROPERTIES + DEBUG_POSTFIX "d" + CXX_STANDARD 17 +) + +if (MSVC) + target_compile_options(libbsarch_OOP PRIVATE /MP) +endif() + +# target_link_libraries(libbsarch_OOP PUBLIC libbsarch) + +# install + +# finding 32 or 64bits +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + # 64 bits + set(lib_delphi "${CMAKE_CURRENT_SOURCE_DIR}/delphi/lib64") + message("libbsarch: using 64bits DLL") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + # 32 bits + set(lib_delphi "${CMAKE_CURRENT_SOURCE_DIR}/delphi/lib") + message("libbsarch: using 32bits DLL") +endif() + +install(TARGETS libbsarch libbsarch_OOP EXPORT libbsarchTargets FILE_SET HEADERS) +if(WIN32) + install(FILES $<TARGET_PDB_FILE:libbsarch> DESTINATION pdb OPTIONAL) +endif() +install(EXPORT libbsarchTargets + FILE mo2-libbsarch-targets.cmake + NAMESPACE mo2:: + DESTINATION lib/cmake/mo2-libbsarch +) + +if(WIN32) + # install the true DLLs (Windows only - Delphi-built BSArch) + install(FILES ${lib_delphi}/libbsarch.dll DESTINATION bin CONFIGURATIONS Release RelWithDebInfo MinSizeRel) + install(FILES ${lib_delphi}/libbsarchd.dll DESTINATION bin CONFIGURATIONS Debug) +endif() + +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config.cmake" + INSTALL_DESTINATION "lib/cmake/mo2-libbsarch" + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) + + +include(${CMAKE_CURRENT_SOURCE_DIR}/Version.cmake) +set(LIBBSARCH_VERSION + ${LIBBSARCH_MAJOR_VERSION}.${LIBBSARCH_MINOR_VERSION}.${LIBBSARCH_PATCH_VERSION}) + + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config-version.cmake" + VERSION "${LIBBSARCH_VERSION}" + COMPATIBILITY AnyNewerVersion + ARCH_INDEPENDENT +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config-version.cmake + DESTINATION lib/cmake/mo2-libbsarch +) |
