-
Notifications
You must be signed in to change notification settings - Fork 83
Add catalyst-dev install config #3023
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
5df1243
61a2f94
7bd7bb3
d1828b7
bed0412
fd4b91f
988ed65
70fcf17
de85d24
525c5bf
b31a62f
4c975df
387e1e3
316aca0
99c6c3f
5665e29
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -75,7 +75,7 @@ foreach(STABLEHLO_LIB IN LISTS STABLEHLO_LIBS) | |
| ) | ||
| endforeach() | ||
|
|
||
| add_library(ExternalStablehloLib INTERFACE) | ||
| add_library(ExternalStablehloLib INTERFACE IMPORTED GLOBAL) | ||
|
|
||
| foreach(STABLEHLO_LIB IN LISTS STABLEHLO_LIBS) | ||
| target_link_libraries(ExternalStablehloLib INTERFACE ${STABLEHLO_LIB}) | ||
|
|
@@ -280,3 +280,92 @@ endif() | |
| if(NOT CATALYST_DOCS_ONLY) | ||
| add_subdirectory(test) | ||
| endif() | ||
|
|
||
|
|
||
| ################################################################### | ||
|
joeycarter marked this conversation as resolved.
|
||
| ## Generate a Catalyst Development Package for External Projects ## | ||
| ################################################################### | ||
|
|
||
| include(GNUInstallDirs) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This will work fine on MacOS?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe so, yes. |
||
|
|
||
| # Re-fetch the exported targets and strip the same third-party ones the | ||
| # build-tree export already excludes (see cmake/modules/CMakeLists.txt). | ||
| get_property(CATALYST_INSTALL_TARGETS GLOBAL PROPERTY MLIR_EXPORTS) | ||
| set(TARGETS_TO_REMOVE | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we want any of these?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wondered this too, but opted to keep them excluded since I ran into issues with external dependencies that didn't seem worth pursuing right now. We don't need any of these libs for the internal plugin we're currently working on. Eventually we may want to include |
||
| nlohmann_json | ||
| tomlplusplus_tomlplusplus | ||
| ion-transforms | ||
| CatalystCompilerDriver | ||
| PBCUtils | ||
| QuantumCAPI | ||
| pbc-transforms | ||
| quantum-transforms # depends on decompsolver, which depends on boost; exclude | ||
| decompsolver # depends on boost; exclude | ||
| ) | ||
| list(REMOVE_ITEM CATALYST_INSTALL_TARGETS ${TARGETS_TO_REMOVE}) | ||
|
|
||
| # Static archives, shared libs, and any runtime artifacts from the dialects, | ||
| # transforms and utils. INCLUDES DESTINATION records the include path in the | ||
| # exported targets so consumers get it transitively. | ||
| # We use `COMPONENT catalyst-dev` since `add_mlir_public_c_api_library(QuantumCAPI ...) | ||
| # auto-generates its own install rule that we want to bypass. | ||
| install(TARGETS ${CATALYST_INSTALL_TARGETS} | ||
| EXPORT CatalystTargets | ||
| ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT catalyst-dev | ||
| LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT catalyst-dev | ||
| RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT catalyst-dev | ||
| INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||
|
|
||
| # Install license to share/doc/Catalyst/LICENSE | ||
| install(FILES "${PROJECT_SOURCE_DIR}/../LICENSE" | ||
| DESTINATION "${CMAKE_INSTALL_DOCDIR}" | ||
| COMPONENT catalyst-dev) | ||
|
|
||
| # Tools (binaries). These are usually not in MLIR_EXPORTS, so install by name. | ||
| # NOTE: We use the catalyst-bin component for tools to exclude from catalyst-dev. | ||
| if(NOT CATALYST_DOCS_ONLY) | ||
| # Need to wrap in `if(NOT CATALYST_DOCS_ONLY)` since `add_subdirectory(tools)` | ||
| # is also conditional on this predicate | ||
| install(TARGETS catalyst-cli quantum-opt quantum-lsp-server | ||
| RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT catalyst-bin) | ||
| endif() | ||
|
|
||
| # Hand-written headers (*.h and the *.td that TableGen consumers may want). | ||
| install(DIRECTORY ${CATALYST_MAIN_INCLUDE_DIR}/ | ||
| DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
| COMPONENT catalyst-dev | ||
| FILES_MATCHING | ||
| PATTERN "*.h" | ||
| PATTERN "*.td" | ||
| PATTERN "*.capi.h.inc") | ||
|
|
||
| # TableGen-generated headers (*.h.inc, *.cpp.inc) AND the generated | ||
| # frontend_catalyst_version_py.h all live under the build-tree include dir. | ||
| install(DIRECTORY ${CATALYST_GEN_INCLUDE_DIR}/ | ||
| DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
| COMPONENT catalyst-dev | ||
| FILES_MATCHING | ||
| PATTERN "*.h" | ||
| PATTERN "*.h.inc" | ||
| PATTERN "*.cpp.inc" | ||
| PATTERN "CMakeFiles" EXCLUDE) | ||
|
|
||
| # Bundle the StableHLO static archives that Catalyst links against. | ||
| install(DIRECTORY "${STABLEHLO_BUILD_DIR}/lib/" | ||
| DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
| COMPONENT catalyst-dev | ||
| FILES_MATCHING PATTERN "lib*.a") | ||
|
|
||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Worth adding the license file here too via
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added the license file to the install targets above: # Install license to share/doc/Catalyst/LICENSE
install(FILES "${PROJECT_SOURCE_DIR}/../LICENSE"
DESTINATION "${CMAKE_INSTALL_DOCDIR}"
COMPONENT catalyst-dev)Looks like
Anyway, probably no harm in adding it, along with
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, it looks like these variable have no effect for bare archive generators like tar or zip (but I assume they have effect for more formal system generators like DEB or RPM). Anyway, added here: 5665e29 |
||
| set(CPACK_PACKAGE_NAME "catalyst-dev") | ||
| set(CPACK_PACKAGE_VERSION "${CATALYST_PACKAGE_VERSION}") | ||
| set(CPACK_PACKAGE_VENDOR "Xanadu Quantum Technologies Inc.") | ||
| set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/../LICENSE") | ||
| set(CPACK_GENERATOR "TGZ") | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If this is set to
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can set the generator to One option might be to create a new |
||
| set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}_${CATALYST_PACKAGE_VERSION}") | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. All good on aarch64 too?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I assume so, my understanding is that the |
||
| set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) | ||
| set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY ON) # extracts into catalyst-dev-<ver>/ | ||
| set(CPACK_COMPONENTS_ALL catalyst-dev) # only catalyst-dev component | ||
| set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) # single archive, no per-component split | ||
|
|
||
| message(STATUS "Preparing CPack package ${CPACK_PACKAGE_FILE_NAME}") | ||
| include(CPack) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The variables are set before the inclusion? Just wondering if there's reason to this?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah it's a funny system, but the
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -28,7 +28,7 @@ set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}") | |||||||||||||||||||||||||
| get_property(MLIR_EXPORTS GLOBAL PROPERTY MLIR_EXPORTS) | ||||||||||||||||||||||||||
| set(TARGETS_TO_REMOVE nlohmann_json tomlplusplus_tomlplusplus ion-transforms CatalystCompilerDriver PBCUtils QuantumCAPI pbc-transforms) | ||||||||||||||||||||||||||
| list(REMOVE_ITEM MLIR_EXPORTS ${TARGETS_TO_REMOVE}) | ||||||||||||||||||||||||||
| export(TARGETS ${MLIR_EXPORTS} ExternalStablehloLib FILE ${catalyst_cmake_builddir}/CatalystTargets.cmake) | ||||||||||||||||||||||||||
| export(TARGETS ${MLIR_EXPORTS} FILE ${catalyst_cmake_builddir}/CatalystTargets.cmake) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # Generate MlirConfig.cmake for the build tree. | ||||||||||||||||||||||||||
| set(CATALYST_CONFIG_CMAKE_DIR "${catalyst_cmake_builddir}") | ||||||||||||||||||||||||||
|
|
@@ -48,3 +48,38 @@ configure_file( | |||||||||||||||||||||||||
| set(CATALYST_CONFIG_CMAKE_DIR) | ||||||||||||||||||||||||||
| set(CATALYST_CONFIG_LLVM_CMAKE_DIR) | ||||||||||||||||||||||||||
| set(CATALYST_CONFIG_INCLUDE_DIRS) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| include(GNUInstallDirs) | ||||||||||||||||||||||||||
| include(CMakePackageConfigHelpers) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # --- version string, reused from frontend/catalyst/_version.py --- | ||||||||||||||||||||||||||
| file(READ "${PROJECT_SOURCE_DIR}/../frontend/catalyst/_version.py" _ver_py) | ||||||||||||||||||||||||||
| string(REGEX MATCH "__version__ = \"([^\"]+)\"" _m "${_ver_py}") | ||||||||||||||||||||||||||
| set(CATALYST_PACKAGE_VERSION "${CMAKE_MATCH_1}" CACHE INTERNAL "Catalyst version") | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" CATALYST_NUMERIC_VERSION "${CATALYST_PACKAGE_VERSION}") | ||||||||||||||||||||||||||
|
Comment on lines
+56
to
+60
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rather than a scrape and regex, is it possible to call Python directly to output the version string from this file?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That's probably a good idea, let me try. For reference, this was some quick-and-dirty plagiarism from here: Lines 149 to 160 in 58a1a11
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| write_basic_package_version_file( | ||||||||||||||||||||||||||
| "${catalyst_cmake_builddir}/CatalystConfigVersion.cmake" | ||||||||||||||||||||||||||
| VERSION ${CATALYST_NUMERIC_VERSION} | ||||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We've chatted about versioning the libs in the past, so I presume this handles it? If so, is this following https://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info / https://www.gnu.org/software/libtool/manual/libtool.html#Managing-release-information ? If not, fine for now, but we should discuss how to tag these to be versioned right for LNX/MACOS (and the other one)
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not entirely sure, but I don't think so. What this command does is make a # This is a basic version file for the Config-mode of find_package().
# It is used by write_basic_package_version_file() as input file for configure_file()
# to create a version-file which can be installed along a config.cmake file.
#
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
# the requested version string are exactly the same and it sets
# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
# but only if the requested major version is the same as the current one.
# The variable CVF_VERSION must be set before calling configure_file().
set(PACKAGE_VERSION "0.16.0")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
if("0.16.0" MATCHES "^([0-9]+)\\.")
set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
endif()
else()
set(CVF_VERSION_MAJOR "0.16.0")
endif()
if(PACKAGE_FIND_VERSION_RANGE)
# both endpoints of the range must have the expected major version
math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
set(PACKAGE_VERSION_COMPATIBLE FALSE)
elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
set(PACKAGE_VERSION_COMPATIBLE TRUE)
else()
set(PACKAGE_VERSION_COMPATIBLE FALSE)
endif()
else()
if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
set(PACKAGE_VERSION_COMPATIBLE TRUE)
else()
set(PACKAGE_VERSION_COMPATIBLE FALSE)
endif()
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
endif()
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
return()
endif()
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
math(EXPR installedBits "8 * 8")
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
set(PACKAGE_VERSION_UNSUITABLE TRUE)
endif()I believe its main purpose is to handle By the way, the files under so they wouldn't follow the shared-library versioning convention (I think?). |
||||||||||||||||||||||||||
| COMPATIBILITY SameMajorVersion) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # --- install-tree config, generated from a *separate* template --- | ||||||||||||||||||||||||||
| set(CATALYST_INSTALL_TARGETS_LIST "${MLIR_EXPORTS}") # same list, minus removals | ||||||||||||||||||||||||||
| configure_package_config_file( | ||||||||||||||||||||||||||
| ${CMAKE_CURRENT_SOURCE_DIR}/CatalystConfig.install.cmake.in | ||||||||||||||||||||||||||
| "${catalyst_cmake_builddir}/install/CatalystConfig.cmake" | ||||||||||||||||||||||||||
| INSTALL_DESTINATION ${CATALYST_INSTALL_PACKAGE_DIR} | ||||||||||||||||||||||||||
| PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # --- install the export set + configs --- | ||||||||||||||||||||||||||
| install(EXPORT CatalystTargets | ||||||||||||||||||||||||||
| FILE CatalystTargets.cmake | ||||||||||||||||||||||||||
| DESTINATION ${CATALYST_INSTALL_PACKAGE_DIR} | ||||||||||||||||||||||||||
| COMPONENT catalyst-dev) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| install(FILES | ||||||||||||||||||||||||||
| "${catalyst_cmake_builddir}/install/CatalystConfig.cmake" | ||||||||||||||||||||||||||
| "${catalyst_cmake_builddir}/CatalystConfigVersion.cmake" | ||||||||||||||||||||||||||
| DESTINATION ${CATALYST_INSTALL_PACKAGE_DIR} | ||||||||||||||||||||||||||
| COMPONENT catalyst-dev) | ||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,3 +22,23 @@ set(CATALYST_INCLUDE_DIRS "@CATALYST_CONFIG_INCLUDE_DIRS@") | |
|
|
||
| # Provide all our library targets to users. | ||
| @CATALYST_CONFIG_INCLUDE_EXPORTS@ | ||
|
|
||
| # --- rebuild ExternalStablehloLib for build-tree consumers --- | ||
| set(_shlo_libs ChloCAPI ChloOps StablehloAssemblyFormat StablehloBase | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need this set if it is only used in the |
||
| StablehloBroadcastUtils StablehloBroadcastLowering StablehloCAPI | ||
| StablehloLinalgTransforms StablehloOps StablehloOptimizationPasses | ||
| StablehloPasses StablehloPassUtils StablehloRegister | ||
| StablehloTypeConversion StablehloTypeInference Version | ||
| VhloCAPI VhloOps VhloTypes) | ||
| if(NOT TARGET ExternalStablehloLib) | ||
| add_library(ExternalStablehloLib INTERFACE IMPORTED) | ||
| foreach(_l IN LISTS _shlo_libs) | ||
| if(NOT TARGET ${_l}) | ||
| add_library(${_l} STATIC IMPORTED) | ||
| set_target_properties(${_l} PROPERTIES | ||
| IMPORTED_LOCATION "@STABLEHLO_BUILD_DIR@/lib/lib${_l}.a") | ||
| endif() | ||
| set_property(TARGET ExternalStablehloLib APPEND | ||
| PROPERTY INTERFACE_LINK_LIBRARIES ${_l}) | ||
| endforeach() | ||
| endif() | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| @PACKAGE_INIT@ | ||
|
|
||
| include(CMakeFindDependencyMacro) | ||
| find_dependency(MLIR) | ||
|
|
||
| set_and_check(CATALYST_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") | ||
| set_and_check(CATALYST_LIBRARY_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@") | ||
|
|
||
| # Reconstruct the bundled StableHLO interface target. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same q as above. Though, is this already defined somewhere that we can use, or is this the trial to define the pieces we only care about? |
||
| set(_shlo_libs ChloCAPI ChloOps StablehloAssemblyFormat StablehloBase | ||
| StablehloBroadcastUtils StablehloBroadcastLowering StablehloCAPI | ||
| StablehloLinalgTransforms StablehloOps StablehloOptimizationPasses | ||
| StablehloPasses StablehloPassUtils StablehloRegister | ||
| StablehloTypeConversion StablehloTypeInference Version | ||
| VhloCAPI VhloOps VhloTypes) | ||
| if(NOT TARGET ExternalStablehloLib) | ||
| add_library(ExternalStablehloLib INTERFACE IMPORTED) | ||
| foreach(_l IN LISTS _shlo_libs) | ||
| if(NOT TARGET ${_l}) | ||
| add_library(${_l} STATIC IMPORTED) | ||
| set_target_properties(${_l} PROPERTIES | ||
| IMPORTED_LOCATION "${CATALYST_LIBRARY_DIR}/lib${_l}.a") | ||
| endif() | ||
| set_property(TARGET ExternalStablehloLib APPEND | ||
| PROPERTY INTERFACE_LINK_LIBRARIES ${_l}) | ||
| endforeach() | ||
| endif() | ||
|
|
||
| include("${CMAKE_CURRENT_LIST_DIR}/CatalystTargets.cmake") | ||
|
|
||
| set(CATALYST_EXPORTED_TARGETS "@CATALYST_INSTALL_TARGETS_LIST@") | ||
| check_required_components(Catalyst) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't normally document CI/build changes in our release notes. Unless we think this is a feature we'd like to advertise?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it warrants a changelog entry, it's not only a change to the build system, but an addition that plugin developers (internal and external) could be interested in.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we want to advertise it then it shouldn't be under internal changes imo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It makes no difference to me what section it's in, but Internal Changes seems like the best fit to me. It's not a new feature or improvement that an external user of Catalyst would care about, it's new functionality that a Catalyst developer would care about.