PKGInstall/CMakeLists.txt

127 lines
3.5 KiB
CMake

cmake_minimum_required(VERSION 3.24)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
project(PKGInstall LANGUAGES CXX)
if(APPLE)
enable_language(OBJC)
set(CMAKE_OSX_DEPLOYMENT_TARGET 14)
endif()
option(FORCE_UAC "Requires running as Admin on Windows" ON)
# First, determine whether to use CMAKE_OSX_ARCHITECTURES or CMAKE_SYSTEM_PROCESSOR.
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
set(BASE_ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}")
else()
set(BASE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
endif()
# Next, match common architecture strings down to a known common value.
if (BASE_ARCHITECTURE MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
set(ARCHITECTURE "x86_64")
elseif (BASE_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
set(ARCHITECTURE "arm64")
else()
message(FATAL_ERROR "Unsupported CPU architecture: ${BASE_ARCHITECTURE}")
endif()
# Setup a custom clang-format target (if clang-format can be found) that will run
# against all the src files. This should be used before making a pull request.
if (CLANG_FORMAT)
set(SRCS ${PROJECT_SOURCE_DIR)
set(CCOMMENT "Running clang format against all the .h and .cpp files in src/")
if (WIN32)
add_custom_target(clang-format
COMMAND powershell.exe -Command "Get-ChildItem '${SRCS}/*' -Include *.cpp,*.h,*.mm -Recurse | Foreach {&'${CLANG_FORMAT}' -i $_.fullname}"
COMMENT ${CCOMMENT})
else()
add_custom_target(clang-format
COMMAND find ${SRCS} -iname *.h -o -iname *.cpp -o -iname *.mm | xargs ${CLANG_FORMAT} -i
COMMENT ${CCOMMENT})
endif()
unset(SRCS)
unset(CCOMMENT)
endif()
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR NOT MSVC)
find_package(cryptopp 8.9.0 MODULE)
endif()
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
find_package(ZLIB 1.3 MODULE)
find_package(fmt 10.2.0 CONFIG)
find_package(toml11 4.2.0 CONFIG)
add_subdirectory(externals)
set(PROJECT_SOURCES
src/alignment.h
src/concepts.h
src/crypto.cpp
src/crypto.h
src/endian.h
src/enum.h
src/io_file.cpp
src/io_file.h
src/keys.h
src/loader.cpp
src/loader.h
src/nt_api.cpp
src/nt_api.h
src/pfs.h
src/pkg.cpp
src/pkg.h
src/pkg_type.cpp
src/pkg_type.h
src/psf.cpp
src/psf.h
src/types.h
main.cpp
mainWindow.cpp
mainWindow.h
mainWindow.ui
dist/PKGIcon.icns
)
qt_add_executable(PKGInstall
${PROJECT_SOURCES}
)
if (WIN32)
target_sources(PKGInstall PRIVATE dist/PKGInstall.rc)
endif()
target_link_libraries(PKGInstall PRIVATE Qt6::Widgets Qt6::Concurrent)
target_link_libraries(PKGInstall PRIVATE cryptopp::cryptopp ZLIB::ZLIB fmt::fmt toml11::toml11)
set_target_properties(PKGInstall PROPERTIES
WIN32_EXECUTABLE TRUE
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0"
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_ICON_FILE "PKGIcon.icns"
)
set_source_files_properties(dist/PKGIcon.icns PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
target_include_directories(PKGInstall PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/dist)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
install(FILES "PKGInstall.desktop" DESTINATION "share/applications")
install(FILES "PKGIcon.png" DESTINATION "share/icons/hicolor/512x512/apps")
endif()