From 4dffe1bd8343399bcd93c2af051e42c307689662 Mon Sep 17 00:00:00 2001 From: f0e <7321764+f0e@users.noreply.github.com> Date: Sun, 24 Nov 2024 21:56:23 +1000 Subject: [PATCH] feat: mac bundling and icon --- CMakeLists.txt | 310 +++++++++++++++++++++++--------------------- resources/blur.icns | Bin 0 -> 44729 bytes src/Info.plist | 31 +++++ 3 files changed, 194 insertions(+), 147 deletions(-) create mode 100644 resources/blur.icns create mode 100644 src/Info.plist diff --git a/CMakeLists.txt b/CMakeLists.txt index d8aecbc..23af103 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,155 +1,171 @@ -cmake_minimum_required(VERSION 3.20) - -set(VCPKG_LIBRARY_LINKAGE static) - -# Force static runtime on Windows -set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") - -project(blur LANGUAGES CXX) - -# global settings -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY - ${PROJECT_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}) -set(CMAKE_BINARY_DIR ${PROJECT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}) - -# packages -find_package(fmt CONFIG REQUIRED) -find_package(nlohmann_json CONFIG REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem) -find_package(CLI11 CONFIG REQUIRED) -find_package(ZLIB REQUIRED) - -# source files -file( - GLOB_RECURSE - COMMON_SOURCES - "src/common/*.cpp" - "src/common/*.hpp" - "src/common/*.h") - -file( - GLOB_RECURSE - CLI_SOURCES - "src/cli/*.cpp" - "src/cli/*.hpp" - "src/cli/*.h") - -file( - GLOB_RECURSE - GUI_SOURCES - "src/gui/*.cpp" - "src/gui/*.hpp" - "src/gui/*.h") - -file(GLOB_RECURSE RESOURCES "resources/*") - -# common settings -function(setup_target target) - target_include_directories(${target} PRIVATE src) - target_link_libraries( - ${target} - PRIVATE # Gdiplus - fmt::fmt - nlohmann_json::nlohmann_json - Boost::system - Boost::filesystem - CLI11::CLI11) - target_compile_definitions( - ${target} - PRIVATE NOMINMAX - FMT_HEADER_ONLY - $<$:_DEBUG> - $<$:NDEBUG>) - if (WIN32) - set(${target} - resources/resources_win32.rc) - endif() -endfunction() - -# cli -add_executable( - blur-cli - ${COMMON_SOURCES} - ${CLI_SOURCES} - ${RESOURCES} - src/cli/cli_pch.cpp) -target_precompile_headers(blur-cli PRIVATE src/cli/cli_pch.h) -setup_target(blur-cli) - -# gui -set(LAF_BACKEND "skia") -set(SKIA_DIR ${PROJECT_SOURCE_DIR}/dependencies/skia) - -# download platform specific skia to dependencies/skia -include(FetchContent) - -if(UNIX AND NOT APPLE) - set(SKIA_REPOSITORY - https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-Linux-Release-x64-libstdc++.zip - ) - set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-x64) -elseif(APPLE) - if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + cmake_minimum_required(VERSION 3.20) + + set(VCPKG_LIBRARY_LINKAGE static) + + # Force static runtime on Windows + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + + project(blur LANGUAGES CXX) + + # global settings + set(CMAKE_CXX_STANDARD 20) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}) + set(CMAKE_BINARY_DIR ${PROJECT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}) + + # packages + find_package(fmt CONFIG REQUIRED) + find_package(nlohmann_json CONFIG REQUIRED) + find_package(Boost REQUIRED COMPONENTS system filesystem) + find_package(CLI11 CONFIG REQUIRED) + find_package(ZLIB REQUIRED) + + # source files + file( + GLOB_RECURSE + COMMON_SOURCES + "src/common/*.cpp" + "src/common/*.hpp" + "src/common/*.h") + + file( + GLOB_RECURSE + CLI_SOURCES + "src/cli/*.cpp" + "src/cli/*.hpp" + "src/cli/*.h") + + file( + GLOB_RECURSE + GUI_SOURCES + "src/gui/*.cpp" + "src/gui/*.hpp" + "src/gui/*.h") + + file(GLOB_RECURSE RESOURCES "resources/*") + + # common settings + function(setup_target target) + target_include_directories(${target} PRIVATE src) + target_link_libraries( + ${target} + PRIVATE # Gdiplus + fmt::fmt + nlohmann_json::nlohmann_json + Boost::system + Boost::filesystem + CLI11::CLI11) + target_compile_definitions( + ${target} + PRIVATE NOMINMAX + FMT_HEADER_ONLY + $<$:_DEBUG> + $<$:NDEBUG>) + if (WIN32) + set(${target} + resources/resources_win32.rc) + endif() + endfunction() + + # cli + add_executable( + blur-cli + ${COMMON_SOURCES} + ${CLI_SOURCES} + ${RESOURCES} + src/cli/cli_pch.cpp) + target_precompile_headers(blur-cli PRIVATE src/cli/cli_pch.h) + setup_target(blur-cli) + + # gui + set(LAF_BACKEND "skia") + set(SKIA_DIR ${PROJECT_SOURCE_DIR}/dependencies/skia) + + # download platform specific skia to dependencies/skia + include(FetchContent) + + if(UNIX AND NOT APPLE) set(SKIA_REPOSITORY - https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-macOS-Release-arm64.zip + https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-Linux-Release-x64-libstdc++.zip ) - set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-arm64) - elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-x64) + elseif(APPLE) + if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + set(SKIA_REPOSITORY + https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-macOS-Release-arm64.zip + ) + set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-arm64) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + set(SKIA_REPOSITORY + https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-macOS-Release-x64.zip + ) + set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-x64) + else() + message(FATAL_ERROR "Unsupported macOS architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}") + endif() + elseif(WIN32) set(SKIA_REPOSITORY - https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-macOS-Release-x64.zip + https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-Windows-Release-x64.zip ) set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-x64) - else() - message(FATAL_ERROR "Unsupported macOS architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}") endif() -elseif(WIN32) - set(SKIA_REPOSITORY - https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-Windows-Release-x64.zip + + FetchContent_Declare(skia + URL ${SKIA_REPOSITORY} + SOURCE_DIR ${SKIA_DIR} + DOWNLOAD_EXTRACT_TIMESTAMP true ) - set(SKIA_LIBRARY_DIR ${SKIA_DIR}/out/Release-x64) -endif() - -FetchContent_Declare(skia - URL ${SKIA_REPOSITORY} - SOURCE_DIR ${SKIA_DIR} - DOWNLOAD_EXTRACT_TIMESTAMP true -) - -FetchContent_GetProperties(skia) -if(NOT skia_POPULATED) - FetchContent_MakeAvailable(skia) -endif() - -set(LAF_WITH_EXAMPLES OFF) # disable examples -set(LAF_WITH_TESTS OFF) # disable tests - -add_subdirectory(dependencies/laf) - -add_executable( - blur-gui WIN32 - ${COMMON_SOURCES} - ${GUI_SOURCES} - ${RESOURCES} - src/gui/gui_pch.cpp) -target_link_libraries( - blur-gui - PRIVATE laf-base - laf-gfx - laf-os - ZLIB::ZLIB) -target_precompile_headers(blur-gui PRIVATE src/gui/gui_pch.h) - -if(APPLE) - target_link_libraries(blur-gui PRIVATE - "-framework CoreVideo" - "-framework CoreGraphics" - ) -endif() -set_target_properties(blur-gui PROPERTIES LINK_FLAGS - "${LAF_BACKEND_LINK_FLAGS}") -set_target_properties(blur-gui PROPERTIES OUTPUT_NAME "blur") -setup_target(blur-gui) + FetchContent_GetProperties(skia) + if(NOT skia_POPULATED) + FetchContent_MakeAvailable(skia) + endif() + + set(LAF_WITH_EXAMPLES OFF) # disable examples + set(LAF_WITH_TESTS OFF) # disable tests + + add_subdirectory(dependencies/laf) + + add_executable( + blur-gui WIN32 + ${COMMON_SOURCES} + ${GUI_SOURCES} + ${RESOURCES} + src/gui/gui_pch.cpp) + target_link_libraries( + blur-gui + PRIVATE laf-base + laf-gfx + laf-os + ZLIB::ZLIB) + target_precompile_headers(blur-gui PRIVATE src/gui/gui_pch.h) + + if(APPLE) + target_link_libraries(blur-gui PRIVATE + "-framework CoreVideo" + "-framework CoreGraphics" + ) + + # set(MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/src/Info.plist") + + # set_target_properties(blur-gui PROPERTIES + # MACOSX_BUNDLE TRUE + # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/src/Info.plist + # ) + + # Specify the .icns file as the app icon + set(MACOSX_BUNDLE_ICON_FILE blur.icns) + + # Ensure the .icns file is included in the app bundle's Resources folder + set_source_files_properties(resources/blur.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + + # Link the .icns file to the target + target_sources(blur-gui PRIVATE resources/blur.icns) + endif() + + set_target_properties(blur-gui PROPERTIES LINK_FLAGS + "${LAF_BACKEND_LINK_FLAGS}") + set_target_properties(blur-gui PROPERTIES OUTPUT_NAME "blur") + setup_target(blur-gui) diff --git a/resources/blur.icns b/resources/blur.icns new file mode 100644 index 0000000000000000000000000000000000000000..0f99944340a1e15ef46812e5a0ccab5aeea0ad2d GIT binary patch literal 44729 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 literal 0 HcmV?d00001 diff --git a/src/Info.plist b/src/Info.plist new file mode 100644 index 0000000..7c0910c --- /dev/null +++ b/src/Info.plist @@ -0,0 +1,31 @@ + + + + + + CFBundleName + Blur + CFBundleDisplayName + Blur + CFBundleIdentifier + com.f0e.blur + CFBundleVersion + 1.0 + CFBundleShortVersionString + 1.0 + CFBundleExecutable + Blur + CFBundlePackageType + APPL + CFBundleIconFile + blur + + + NSHighResolutionCapable + + + + NSPrincipalClass + NSApplication + +