From 1c9809d8b3f89f3023a71c14d3d7a4d059cd9035 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Sun, 19 Jan 2025 01:29:28 +0330 Subject: [PATCH 1/4] Build: Add support for Apple-Frameworks builds Signed-off-by: Treata11 --- CMakeLists.txt | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73895604..aa9bfd5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,10 @@ project(brotli C) option(BUILD_SHARED_LIBS "Build shared libraries" ON) set(BROTLI_BUILD_TOOLS ON CACHE BOOL "Build/install CLI tools") +if(APPLE) + option(BUILD_FRAMEWORK "Build as Apple Frameworks" OFF) +endif() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to Release as none was specified.") set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build" FORCE) @@ -92,6 +96,12 @@ set(BROTLI_LIBRARIES_CORE brotlienc brotlidec brotlicommon) set(BROTLI_LIBRARIES ${BROTLI_LIBRARIES_CORE} ${LIBM_LIBRARY}) mark_as_advanced(BROTLI_LIBRARIES) +set(BROTLI_PUBLIC_HDRS + docs/constants.h.3 + docs/decode.h.3 + docs/encode.h.3 + docs/types.h.3) + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") add_definitions(-DOS_LINUX) elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") @@ -107,17 +117,19 @@ if(BROTLI_EMSCRIPTEN) endif() file(GLOB_RECURSE BROTLI_COMMON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/common/*.c) -add_library(brotlicommon ${BROTLI_COMMON_SOURCES}) +add_library(brotlicommon ${BROTLI_COMMON_SOURCES} ${BROTLI_PUBLIC_HDRS}) file(GLOB_RECURSE BROTLI_DEC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/dec/*.c) -add_library(brotlidec ${BROTLI_DEC_SOURCES}) +add_library(brotlidec ${BROTLI_DEC_SOURCES} ${BROTLI_PUBLIC_HDRS}) file(GLOB_RECURSE BROTLI_ENC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/enc/*.c) -add_library(brotlienc ${BROTLI_ENC_SOURCES}) +add_library(brotlienc ${BROTLI_ENC_SOURCES} ${BROTLI_PUBLIC_HDRS}) # Older CMake versions does not understand INCLUDE_DIRECTORIES property. include_directories(${BROTLI_INCLUDE_DIRS}) +set(BROTLI_FULL_VERSION "${BROTLI_ABI_COMPATIBILITY}.${BROTLI_ABI_AGE}.${BROTLI_ABI_REVISION}") + if(BUILD_SHARED_LIBS) foreach(lib ${BROTLI_LIBRARIES_CORE}) target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) @@ -126,11 +138,30 @@ if(BUILD_SHARED_LIBS) endforeach() endif() +if(BUILD_FRAMEWORK) + foreach(lib ${BROTLI_LIBRARIES_CORE}) + set_target_properties(${lib} PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION "${BROTLI_FULL_VERSION}" + PRODUCT_BUNDLE_IDENTIFIER "github.com/google/brotli.${lib}" + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + OUTPUT_NAME "${lib}" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO" + PUBLIC_HEADER "${BROTLI_PUBLIC_HDRS}" + MACOSX_FRAMEWORK_IDENTIFIER "github.com/google/brotli.${lib}" + MACOSX_FRAMEWORK_BUNDLE_VERSION "${BROTLI_FULL_VERSION}" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${BROTLI_ABI_COMPATIBILITY}" + MACOSX_RPATH TRUE) + endforeach() +endif() + foreach(lib ${BROTLI_LIBRARIES_CORE}) target_link_libraries(${lib} ${LIBM_LIBRARY}) set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS}) set_target_properties(${lib} PROPERTIES - VERSION "${BROTLI_ABI_COMPATIBILITY}.${BROTLI_ABI_AGE}.${BROTLI_ABI_REVISION}" + VERSION "${BROTLI_FULL_VERSION}" SOVERSION "${BROTLI_ABI_COMPATIBILITY}") if(NOT BROTLI_EMSCRIPTEN) set_target_properties(${lib} PROPERTIES POSITION_INDEPENDENT_CODE TRUE) @@ -174,6 +205,9 @@ if(NOT BROTLI_BUNDLED_MODE) ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + FRAMEWORK DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime OPTIONAL + # INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + # PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) install( @@ -350,7 +384,7 @@ if (BROTLI_BUILD_TOOLS) DESTINATION "${CMAKE_INSTALL_FULL_MANDIR}/man1") endif() -install(FILES docs/constants.h.3 docs/decode.h.3 docs/encode.h.3 docs/types.h.3 +install(FILES ${BROTLI_PUBLIC_HDRS} DESTINATION "${CMAKE_INSTALL_FULL_MANDIR}/man3") if (ENABLE_COVERAGE STREQUAL "yes") From c9306e910d1de3bf9e5236258cf9e8777d3f0221 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Sun, 19 Jan 2025 01:43:05 +0330 Subject: [PATCH 2/4] Ignore build directories and MacOS temp files Signed-off-by: Treata11 --- .gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index bb2c71f8..2eeb5a60 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,11 @@ __pycache__/ *.txt.uncompressed *.br *.unbr + +# Build +/build +/_build +/out + +# OSX +*.DS_Store \ No newline at end of file From c22d1b18f99c8d108571ddee8c6fde5fe86c50b2 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Fri, 24 Jan 2025 01:02:07 +0330 Subject: [PATCH 3/4] Fix framework installation Signed-off-by: Treata11 --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa9bfd5a..1bffa8d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,14 +143,14 @@ if(BUILD_FRAMEWORK) set_target_properties(${lib} PROPERTIES FRAMEWORK TRUE FRAMEWORK_VERSION "${BROTLI_FULL_VERSION}" - PRODUCT_BUNDLE_IDENTIFIER "github.com/google/brotli.${lib}" + PRODUCT_BUNDLE_IDENTIFIER "github.com/google/brotli/${lib}" XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" OUTPUT_NAME "${lib}" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO" PUBLIC_HEADER "${BROTLI_PUBLIC_HDRS}" - MACOSX_FRAMEWORK_IDENTIFIER "github.com/google/brotli.${lib}" + MACOSX_FRAMEWORK_IDENTIFIER "github.com/google/brotli/${lib}" MACOSX_FRAMEWORK_BUNDLE_VERSION "${BROTLI_FULL_VERSION}" MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${BROTLI_ABI_COMPATIBILITY}" MACOSX_RPATH TRUE) @@ -197,6 +197,9 @@ if(NOT BROTLI_BUNDLED_MODE) install( TARGETS brotli RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + FRAMEWORK DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime OPTIONAL + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) endif() @@ -206,8 +209,8 @@ if(NOT BROTLI_BUNDLED_MODE) LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" FRAMEWORK DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime OPTIONAL - # INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - # PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) install( From 66cf8c2e41bc445c30e7f18bbdbdaa3ecf316b32 Mon Sep 17 00:00:00 2001 From: Treata11 Date: Fri, 24 Jan 2025 01:10:11 +0330 Subject: [PATCH 4/4] Silence MacOS Bundle err for simulator builds Signed-off-by: Treata11 --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1bffa8d0..2c9babef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,6 +198,7 @@ if(NOT BROTLI_BUNDLED_MODE) TARGETS brotli RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" FRAMEWORK DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime OPTIONAL + BUNDLE DESTINATION "${CMAKE_SOURCE_DIR}" INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" )