From 0807db4629b6e8536d7dd44334eadb8c4db45ea8 Mon Sep 17 00:00:00 2001 From: Yannick Stade <100073938+ystade@users.noreply.github.com> Date: Thu, 22 May 2025 14:23:15 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=9A=B8=20add=20convenience=20macro=20?= =?UTF-8?q?for=20adding=20MQT=20Core=20libraries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: burgholzer --- CMakeLists.txt | 13 +++++----- cmake/AddMQTCoreLibrary.cmake | 37 ++++++++++++++++++++++++++++ src/algorithms/CMakeLists.txt | 5 +--- src/circuit_optimizer/CMakeLists.txt | 5 +--- src/datastructures/CMakeLists.txt | 5 +--- src/dd/CMakeLists.txt | 5 +--- src/ir/CMakeLists.txt | 5 +--- src/na/CMakeLists.txt | 5 +--- src/qasm3/CMakeLists.txt | 5 +--- src/zx/CMakeLists.txt | 5 +--- 10 files changed, 52 insertions(+), 38 deletions(-) create mode 100644 cmake/AddMQTCoreLibrary.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f9d8839b8c..cb9e5b808e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,10 +17,11 @@ project( # Add path for custom modules list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -include(cmake/StandardProjectSettings.cmake) -include(cmake/PreventInSourceBuilds.cmake) -include(cmake/PackageAddTest.cmake) -include(cmake/Cache.cmake) +include(StandardProjectSettings) +include(PreventInSourceBuilds) +include(PackageAddTest) +include(Cache) +include(AddMQTCoreLibrary) option(BUILD_MQT_CORE_BINDINGS "Build the MQT Core Python bindings" OFF) if(BUILD_MQT_CORE_BINDINGS) @@ -60,7 +61,7 @@ option(MQT_CORE_INSTALL "Generate installation instructions for MQT Core" option(BUILD_MQT_CORE_TESTS "Also build tests for the MQT Core project" ${MQT_CORE_MASTER_PROJECT}) # try to determine the project version -include(cmake/GetVersion.cmake) +include(GetVersion) get_mqt_core_version() project( @@ -69,7 +70,7 @@ project( VERSION ${MQT_CORE_VERSION} DESCRIPTION "MQT Core - The Backbone of the Munich Quantum Toolkit") -include(cmake/ExternalDependencies.cmake) +include(ExternalDependencies) # set the include directory for the build tree set(MQT_CORE_INCLUDE_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/mqt-core") diff --git a/cmake/AddMQTCoreLibrary.cmake b/cmake/AddMQTCoreLibrary.cmake new file mode 100644 index 0000000000..ec151ed16b --- /dev/null +++ b/cmake/AddMQTCoreLibrary.cmake @@ -0,0 +1,37 @@ +# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM +# Copyright (c) 2025 Munich Quantum Software Company GmbH +# All rights reserved. +# +# SPDX-License-Identifier: MIT +# +# Licensed under the MIT License + +function(kebab_to_camel output input) + string(REPLACE "-" ";" parts "${input}") + set(result "") + foreach(part ${parts}) + string(SUBSTRING ${part} 0 1 first) + string(SUBSTRING ${part} 1 -1 rest) + string(TOUPPER ${first} first) + string(APPEND result "${first}${rest}") + endforeach() + set(${output} + "${result}" + PARENT_SCOPE) +endfunction() + +function(add_mqt_core_library name) + cmake_parse_arguments(ARG "" "ALIAS_NAME" "" ${ARGN}) + if(BUILD_MQT_CORE_SHARED_LIBS) + add_library(${name} SHARED ${ARG_UNPARSED_ARGUMENTS}) + else() + add_library(${name} ${ARG_UNPARSED_ARGUMENTS}) + endif() + if(NOT ARG_ALIAS_NAME) + # remove prefix 'mqt-' from target name if exists + string(REGEX REPLACE "^${MQT_CORE_TARGET_NAME}" "" ALIAS_NAME_ARG ${name}) + # transform kebab-case to camelCase + kebab_to_camel(ARG_ALIAS_NAME ${ALIAS_NAME_ARG}) + endif() + add_library(MQT::Core${ARG_ALIAS_NAME} ALIAS ${name}) +endfunction() diff --git a/src/algorithms/CMakeLists.txt b/src/algorithms/CMakeLists.txt index 99adf5afe4..9ea273690c 100644 --- a/src/algorithms/CMakeLists.txt +++ b/src/algorithms/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-algorithms) file(GLOB_RECURSE ALGO_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-algorithms) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-algorithms) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-algorithms PRIVATE ${ALGO_SOURCES}) @@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-algorithms) PUBLIC MQT::CoreIR PRIVATE MQT::CoreCircuitOptimizer MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreAlgorithms ALIAS ${MQT_CORE_TARGET_NAME}-algorithms) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-algorithms diff --git a/src/circuit_optimizer/CMakeLists.txt b/src/circuit_optimizer/CMakeLists.txt index 4d79fd9fb2..056c95b362 100644 --- a/src/circuit_optimizer/CMakeLists.txt +++ b/src/circuit_optimizer/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-circuit-optimizer) file(GLOB_RECURSE CIRCUIT_OPTIMIZER_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-circuit-optimizer) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-circuit-optimizer) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-circuit-optimizer PRIVATE ${CIRCUIT_OPTIMIZER_SOURCES}) @@ -29,9 +29,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-circuit-optimizer) PUBLIC MQT::CoreIR PRIVATE MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreCircuitOptimizer ALIAS ${MQT_CORE_TARGET_NAME}-circuit-optimizer) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-circuit-optimizer diff --git a/src/datastructures/CMakeLists.txt b/src/datastructures/CMakeLists.txt index 662af037b7..880b2789f9 100644 --- a/src/datastructures/CMakeLists.txt +++ b/src/datastructures/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-ds) file(GLOB_RECURSE DS_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-ds) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-ds ALIAS_NAME DS) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-ds PRIVATE ${DS_SOURCES}) @@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-ds) PUBLIC MQT::CoreIR PRIVATE MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreDS ALIAS ${MQT_CORE_TARGET_NAME}-ds) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-ds diff --git a/src/dd/CMakeLists.txt b/src/dd/CMakeLists.txt index a26ac7a772..83e70080e0 100644 --- a/src/dd/CMakeLists.txt +++ b/src/dd/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-dd) file(GLOB_RECURSE DD_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-dd) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-dd ALIAS_NAME DD) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-dd PRIVATE ${DD_SOURCES}) @@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-dd) PUBLIC MQT::CoreIR nlohmann_json::nlohmann_json PRIVATE MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreDD ALIAS ${MQT_CORE_TARGET_NAME}-dd) - # set versioning information set_target_properties( mqt-core-dd diff --git a/src/ir/CMakeLists.txt b/src/ir/CMakeLists.txt index 8d29756d59..81c592942b 100644 --- a/src/ir/CMakeLists.txt +++ b/src/ir/CMakeLists.txt @@ -13,7 +13,7 @@ if(NOT TARGET MQT::CoreIR) file(GLOB_RECURSE IR_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-ir) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-ir ALIAS_NAME IR) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-ir PRIVATE ${IR_SOURCES}) @@ -26,9 +26,6 @@ if(NOT TARGET MQT::CoreIR) # add link libraries target_link_libraries(${MQT_CORE_TARGET_NAME}-ir PRIVATE MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreIR ALIAS ${MQT_CORE_TARGET_NAME}-ir) - # set required C++ standard target_compile_features(${MQT_CORE_TARGET_NAME}-ir PUBLIC cxx_std_17) diff --git a/src/na/CMakeLists.txt b/src/na/CMakeLists.txt index 470b8f6d26..abaffa474e 100644 --- a/src/na/CMakeLists.txt +++ b/src/na/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-na) file(GLOB_RECURSE NA_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-na) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-na ALIAS_NAME NA) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-na PRIVATE ${NA_SOURCES}) @@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-na) PUBLIC MQT::CoreIR PRIVATE MQT::ProjectOptions MQT::ProjectWarnings) - # add MQT alias - add_library(MQT::CoreNA ALIAS ${MQT_CORE_TARGET_NAME}-na) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-na diff --git a/src/qasm3/CMakeLists.txt b/src/qasm3/CMakeLists.txt index f03ff9ff15..a763e9077d 100644 --- a/src/qasm3/CMakeLists.txt +++ b/src/qasm3/CMakeLists.txt @@ -12,7 +12,7 @@ if(NOT TARGET MQT::CoreQASM) file(GLOB_RECURSE QASM_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-qasm) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-qasm ALIAS_NAME QASM) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-qasm PRIVATE ${QASM_SOURCES}) @@ -28,9 +28,6 @@ if(NOT TARGET MQT::CoreQASM) PRIVATE MQT::ProjectOptions MQT::ProjectWarnings PUBLIC MQT::CoreIR) - # add MQT alias - add_library(MQT::CoreQASM ALIAS ${MQT_CORE_TARGET_NAME}-qasm) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-qasm diff --git a/src/zx/CMakeLists.txt b/src/zx/CMakeLists.txt index f9deaa6b1d..1e2f0e35bb 100644 --- a/src/zx/CMakeLists.txt +++ b/src/zx/CMakeLists.txt @@ -48,7 +48,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-zx) file(GLOB_RECURSE ZX_SOURCES **.cpp) # create the library target (initially empty) - add_library(${MQT_CORE_TARGET_NAME}-zx) + add_mqt_core_library(${MQT_CORE_TARGET_NAME}-zx ALIAS_NAME ZX) # add sources to target target_sources(${MQT_CORE_TARGET_NAME}-zx PRIVATE ${ZX_SOURCES}) @@ -72,9 +72,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-zx) target_link_libraries(${MQT_CORE_TARGET_NAME}-zx PUBLIC GMP::gmp GMP::gmpxx) endif() - # add MQT alias - add_library(MQT::CoreZX ALIAS ${MQT_CORE_TARGET_NAME}-zx) - # set versioning information set_target_properties( ${MQT_CORE_TARGET_NAME}-zx From a589d5d36776fab4d29c0e62f358a7d2d0030cbb Mon Sep 17 00:00:00 2001 From: burgholzer Date: Thu, 22 May 2025 14:25:43 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=8E=A8=20use=20generator=20expression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: burgholzer --- cmake/AddMQTCoreLibrary.cmake | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmake/AddMQTCoreLibrary.cmake b/cmake/AddMQTCoreLibrary.cmake index ec151ed16b..1f1a155890 100644 --- a/cmake/AddMQTCoreLibrary.cmake +++ b/cmake/AddMQTCoreLibrary.cmake @@ -22,11 +22,7 @@ endfunction() function(add_mqt_core_library name) cmake_parse_arguments(ARG "" "ALIAS_NAME" "" ${ARGN}) - if(BUILD_MQT_CORE_SHARED_LIBS) - add_library(${name} SHARED ${ARG_UNPARSED_ARGUMENTS}) - else() - add_library(${name} ${ARG_UNPARSED_ARGUMENTS}) - endif() + add_library(${name} $<$:SHARED> ${ARG_UNPARSED_ARGUMENTS}) if(NOT ARG_ALIAS_NAME) # remove prefix 'mqt-' from target name if exists string(REGEX REPLACE "^${MQT_CORE_TARGET_NAME}" "" ALIAS_NAME_ARG ${name}) From 941ddc2f47a14295fde27fa6cad345916b930754 Mon Sep 17 00:00:00 2001 From: burgholzer Date: Thu, 22 May 2025 14:57:58 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Revert=20"=F0=9F=8E=A8=20use=20generator=20?= =?UTF-8?q?expression"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a589d5d36776fab4d29c0e62f358a7d2d0030cbb. --- cmake/AddMQTCoreLibrary.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/AddMQTCoreLibrary.cmake b/cmake/AddMQTCoreLibrary.cmake index 1f1a155890..ec151ed16b 100644 --- a/cmake/AddMQTCoreLibrary.cmake +++ b/cmake/AddMQTCoreLibrary.cmake @@ -22,7 +22,11 @@ endfunction() function(add_mqt_core_library name) cmake_parse_arguments(ARG "" "ALIAS_NAME" "" ${ARGN}) - add_library(${name} $<$:SHARED> ${ARG_UNPARSED_ARGUMENTS}) + if(BUILD_MQT_CORE_SHARED_LIBS) + add_library(${name} SHARED ${ARG_UNPARSED_ARGUMENTS}) + else() + add_library(${name} ${ARG_UNPARSED_ARGUMENTS}) + endif() if(NOT ARG_ALIAS_NAME) # remove prefix 'mqt-' from target name if exists string(REGEX REPLACE "^${MQT_CORE_TARGET_NAME}" "" ALIAS_NAME_ARG ${name})