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