cmake_minimum_required(VERSION 3.18..3.28) set(ArchiveProjectVersion 1.1) # The current revision of the project. set(ArchiveFormatVersion 1.0) # The current version of Redacted Software Archive specification. set(ArchiveAppVersion 1.1) # The current version of rsarchive.exe project(ReArchive VERSION ${ArchiveProjectVersion} LANGUAGES CXX) if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) message(FATAL_ERROR "In-source builds are not allowed") endif() set(CMAKE_CXX_STANDARD 20) file(GLOB_RECURSE HEADERS "include/*.h" "include/*.hpp") file(GLOB_RECURSE SOURCES "src/*.c" "src/*.cpp") if(UNIX) add_library(ReArchive SHARED ${SOURCES}) endif() if(WIN32) add_library(ReArchive STATIC ${SOURCES}) endif() include(cmake/CPM.cmake) CPMAddPackage(NAME mcolor URL https://git.redacted.cc/maxine/mcolor/archive/Release-1.zip) CPMAddPackage(NAME Endianness URL https://git.redacted.cc/josh/Endianness/archive/Release-1.zip) target_compile_definitions(ReArchive PUBLIC ARCHIVE_PROJECT_VERSION=${ArchiveProjectVersion}) target_compile_definitions(ReArchive PUBLIC ARCHIVE_FORMAT_VERSION=${ArchiveFormatVersion}) set_target_properties(ReArchive PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(ReArchive PUBLIC ${PROJECT_SOURCE_DIR}/include) target_include_directories(ReArchive PRIVATE ${Endianness_SOURCE_DIR}/include) target_link_libraries(ReArchive PRIVATE Endianness) add_executable(rsarchive main.cpp) target_compile_definitions(rsarchive PRIVATE ARCHIVE_APP_VERSION=${ArchiveAppVersion}) target_link_libraries(rsarchive PUBLIC ReArchive) target_include_directories(rsarchive PRIVATE ${mcolor_SOURCE_DIR}/include) target_link_libraries(rsarchive PRIVATE mcolor) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the build type" FORCE) endif() include(GNUInstallDirs) set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install path prefix" FORCE) install(TARGETS ReArchive DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS rsarchive DESTINATION ${CMAKE_INSTALL_BINDIR})