diff options
Diffstat (limited to 'libs/archive/src/CMakeLists.txt')
| -rw-r--r-- | libs/archive/src/CMakeLists.txt | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/libs/archive/src/CMakeLists.txt b/libs/archive/src/CMakeLists.txt new file mode 100644 index 0000000..75e9b53 --- /dev/null +++ b/libs/archive/src/CMakeLists.txt @@ -0,0 +1,101 @@ +cmake_minimum_required(VERSION 3.16) + +if(WIN32) + find_package(7zip CONFIG REQUIRED) +endif() + +add_library(archive) + +set_target_properties(archive PROPERTIES CXX_STANDARD 20) + +# On Linux, we use the bundled 7zip SDK headers and dlopen the 7z.so at runtime +# On Windows, we use the vcpkg 7zip package +if(WIN32) + target_link_libraries(archive PRIVATE 7zip::7zip) +else() + # Add 7zip SDK headers from thirdparty + target_include_directories(archive PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/../thirdparty/CPP + ) + # We need to compile MyWindows.cpp for BSTR/Variant support on Linux + target_sources(archive PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/../thirdparty/CPP/Common/MyWindows.cpp + ) + target_link_libraries(archive PRIVATE dl) + target_compile_definitions(archive PRIVATE -DARCHIVE_LINUX_PORT) +endif() + +set(ARCHIVE_SOURCES + archive.cpp + compat.h + extractcallback.cpp + extractcallback.h + fileio.cpp + fileio.h + formatter.h + inputstream.cpp + inputstream.h + instrument.h + interfaceguids.cpp + library.h + multioutputstream.cpp + multioutputstream.h + opencallback.cpp + opencallback.h + propertyvariant.cpp + propertyvariant.h + unknown_impl.h +) + +if(WIN32) + list(APPEND ARCHIVE_SOURCES version.rc) +endif() + +target_sources(archive + PRIVATE + ${ARCHIVE_SOURCES} + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_LIST_DIR}/../include + FILES ${CMAKE_CURRENT_LIST_DIR}/../include/archive/archive.h +) + +target_include_directories(archive PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../include/archive) + +if (MSVC) + target_compile_options(archive + PRIVATE + "/MP" + "/W4" + "/external:anglebrackets" + "/external:W0" + ) + target_link_options(archive + PRIVATE + $<$<CONFIG:RelWithDebInfo>:/LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF> + ) + + set_target_properties(archive PROPERTIES VS_STARTUP_PROJECT archive) +endif() + +if(NOT MSVC) + target_compile_options(archive PRIVATE -Wall -Wextra -Wno-unused-parameter) +endif() + +if (BUILD_STATIC) + target_compile_definitions(archive PUBLIC -DMO2_ARCHIVE_BUILD_STATIC) +else() + target_compile_definitions(archive PRIVATE -DMO2_ARCHIVE_BUILD_EXPORT) +endif() + +add_library(mo2::archive ALIAS archive) + +install(TARGETS archive EXPORT archiveTargets FILE_SET HEADERS) +if (NOT BUILD_STATIC AND WIN32) + install(FILES $<TARGET_PDB_FILE:archive> DESTINATION pdb OPTIONAL) +endif() +install(EXPORT archiveTargets + FILE mo2-archive-targets.cmake + NAMESPACE mo2:: + DESTINATION lib/cmake/mo2-archive +) |
