Skip to content

Commit d2dca9b

Browse files
burgholzerystade
andauthored
🚸 add convenience macro for adding MQT Core libraries (#961)
## Description Pulled out from #881. Adds a convenience macro for adding MQT Core libraries and corresponding aliases. ## Checklist: <!--- This checklist serves as a reminder of a couple of things that ensure your pull request will be merged swiftly. --> - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the new/changed functionality. - [x] I have updated the documentation to reflect these changes. - [x] I have added entries to the changelog for any noteworthy additions, changes, fixes or removals. - [x] I have added migration instructions to the upgrade guide (if needed). - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The changes are fully tested and pass the CI checks. - [x] I have reviewed my own code changes. --------- Signed-off-by: burgholzer <[email protected]> Co-authored-by: Yannick Stade <[email protected]>
1 parent 3e39a9a commit d2dca9b

File tree

10 files changed

+52
-38
lines changed

10 files changed

+52
-38
lines changed

CMakeLists.txt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ project(
1717
# Add path for custom modules
1818
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
1919

20-
include(cmake/StandardProjectSettings.cmake)
21-
include(cmake/PreventInSourceBuilds.cmake)
22-
include(cmake/PackageAddTest.cmake)
23-
include(cmake/Cache.cmake)
20+
include(StandardProjectSettings)
21+
include(PreventInSourceBuilds)
22+
include(PackageAddTest)
23+
include(Cache)
24+
include(AddMQTCoreLibrary)
2425

2526
option(BUILD_MQT_CORE_BINDINGS "Build the MQT Core Python bindings" OFF)
2627
if(BUILD_MQT_CORE_BINDINGS)
@@ -60,7 +61,7 @@ option(MQT_CORE_INSTALL "Generate installation instructions for MQT Core"
6061
option(BUILD_MQT_CORE_TESTS "Also build tests for the MQT Core project" ${MQT_CORE_MASTER_PROJECT})
6162

6263
# try to determine the project version
63-
include(cmake/GetVersion.cmake)
64+
include(GetVersion)
6465
get_mqt_core_version()
6566

6667
project(
@@ -69,7 +70,7 @@ project(
6970
VERSION ${MQT_CORE_VERSION}
7071
DESCRIPTION "MQT Core - The Backbone of the Munich Quantum Toolkit")
7172

72-
include(cmake/ExternalDependencies.cmake)
73+
include(ExternalDependencies)
7374

7475
# set the include directory for the build tree
7576
set(MQT_CORE_INCLUDE_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/mqt-core")

cmake/AddMQTCoreLibrary.cmake

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
3+
# All rights reserved.
4+
#
5+
# SPDX-License-Identifier: MIT
6+
#
7+
# Licensed under the MIT License
8+
9+
function(kebab_to_camel output input)
10+
string(REPLACE "-" ";" parts "${input}")
11+
set(result "")
12+
foreach(part ${parts})
13+
string(SUBSTRING ${part} 0 1 first)
14+
string(SUBSTRING ${part} 1 -1 rest)
15+
string(TOUPPER ${first} first)
16+
string(APPEND result "${first}${rest}")
17+
endforeach()
18+
set(${output}
19+
"${result}"
20+
PARENT_SCOPE)
21+
endfunction()
22+
23+
function(add_mqt_core_library name)
24+
cmake_parse_arguments(ARG "" "ALIAS_NAME" "" ${ARGN})
25+
if(BUILD_MQT_CORE_SHARED_LIBS)
26+
add_library(${name} SHARED ${ARG_UNPARSED_ARGUMENTS})
27+
else()
28+
add_library(${name} ${ARG_UNPARSED_ARGUMENTS})
29+
endif()
30+
if(NOT ARG_ALIAS_NAME)
31+
# remove prefix 'mqt-' from target name if exists
32+
string(REGEX REPLACE "^${MQT_CORE_TARGET_NAME}" "" ALIAS_NAME_ARG ${name})
33+
# transform kebab-case to camelCase
34+
kebab_to_camel(ARG_ALIAS_NAME ${ALIAS_NAME_ARG})
35+
endif()
36+
add_library(MQT::Core${ARG_ALIAS_NAME} ALIAS ${name})
37+
endfunction()

src/algorithms/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-algorithms)
1212
file(GLOB_RECURSE ALGO_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-algorithms)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-algorithms)
1616

1717
# add sources to target
1818
target_sources(${MQT_CORE_TARGET_NAME}-algorithms PRIVATE ${ALGO_SOURCES})
@@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-algorithms)
2828
PUBLIC MQT::CoreIR
2929
PRIVATE MQT::CoreCircuitOptimizer MQT::ProjectOptions MQT::ProjectWarnings)
3030

31-
# add MQT alias
32-
add_library(MQT::CoreAlgorithms ALIAS ${MQT_CORE_TARGET_NAME}-algorithms)
33-
3431
# set versioning information
3532
set_target_properties(
3633
${MQT_CORE_TARGET_NAME}-algorithms

src/circuit_optimizer/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-circuit-optimizer)
1212
file(GLOB_RECURSE CIRCUIT_OPTIMIZER_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-circuit-optimizer)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-circuit-optimizer)
1616

1717
# add sources to target
1818
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)
2929
PUBLIC MQT::CoreIR
3030
PRIVATE MQT::ProjectOptions MQT::ProjectWarnings)
3131

32-
# add MQT alias
33-
add_library(MQT::CoreCircuitOptimizer ALIAS ${MQT_CORE_TARGET_NAME}-circuit-optimizer)
34-
3532
# set versioning information
3633
set_target_properties(
3734
${MQT_CORE_TARGET_NAME}-circuit-optimizer

src/datastructures/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-ds)
1212
file(GLOB_RECURSE DS_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-ds)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-ds ALIAS_NAME DS)
1616

1717
# add sources to target
1818
target_sources(${MQT_CORE_TARGET_NAME}-ds PRIVATE ${DS_SOURCES})
@@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-ds)
2828
PUBLIC MQT::CoreIR
2929
PRIVATE MQT::ProjectOptions MQT::ProjectWarnings)
3030

31-
# add MQT alias
32-
add_library(MQT::CoreDS ALIAS ${MQT_CORE_TARGET_NAME}-ds)
33-
3431
# set versioning information
3532
set_target_properties(
3633
${MQT_CORE_TARGET_NAME}-ds

src/dd/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-dd)
1212
file(GLOB_RECURSE DD_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-dd)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-dd ALIAS_NAME DD)
1616

1717
# add sources to target
1818
target_sources(${MQT_CORE_TARGET_NAME}-dd PRIVATE ${DD_SOURCES})
@@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-dd)
2828
PUBLIC MQT::CoreIR nlohmann_json::nlohmann_json
2929
PRIVATE MQT::ProjectOptions MQT::ProjectWarnings)
3030

31-
# add MQT alias
32-
add_library(MQT::CoreDD ALIAS ${MQT_CORE_TARGET_NAME}-dd)
33-
3431
# set versioning information
3532
set_target_properties(
3633
mqt-core-dd

src/ir/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if(NOT TARGET MQT::CoreIR)
1313
file(GLOB_RECURSE IR_SOURCES **.cpp)
1414

1515
# create the library target (initially empty)
16-
add_library(${MQT_CORE_TARGET_NAME}-ir)
16+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-ir ALIAS_NAME IR)
1717

1818
# add sources to target
1919
target_sources(${MQT_CORE_TARGET_NAME}-ir PRIVATE ${IR_SOURCES})
@@ -26,9 +26,6 @@ if(NOT TARGET MQT::CoreIR)
2626
# add link libraries
2727
target_link_libraries(${MQT_CORE_TARGET_NAME}-ir PRIVATE MQT::ProjectOptions MQT::ProjectWarnings)
2828

29-
# add MQT alias
30-
add_library(MQT::CoreIR ALIAS ${MQT_CORE_TARGET_NAME}-ir)
31-
3229
# set required C++ standard
3330
target_compile_features(${MQT_CORE_TARGET_NAME}-ir PUBLIC cxx_std_17)
3431

src/na/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-na)
1212
file(GLOB_RECURSE NA_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-na)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-na ALIAS_NAME NA)
1616

1717
# add sources to target
1818
target_sources(${MQT_CORE_TARGET_NAME}-na PRIVATE ${NA_SOURCES})
@@ -28,9 +28,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-na)
2828
PUBLIC MQT::CoreIR
2929
PRIVATE MQT::ProjectOptions MQT::ProjectWarnings)
3030

31-
# add MQT alias
32-
add_library(MQT::CoreNA ALIAS ${MQT_CORE_TARGET_NAME}-na)
33-
3431
# set versioning information
3532
set_target_properties(
3633
${MQT_CORE_TARGET_NAME}-na

src/qasm3/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT TARGET MQT::CoreQASM)
1212
file(GLOB_RECURSE QASM_SOURCES **.cpp)
1313

1414
# create the library target (initially empty)
15-
add_library(${MQT_CORE_TARGET_NAME}-qasm)
15+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-qasm ALIAS_NAME QASM)
1616

1717
# add sources to target
1818
target_sources(${MQT_CORE_TARGET_NAME}-qasm PRIVATE ${QASM_SOURCES})
@@ -28,9 +28,6 @@ if(NOT TARGET MQT::CoreQASM)
2828
PRIVATE MQT::ProjectOptions MQT::ProjectWarnings
2929
PUBLIC MQT::CoreIR)
3030

31-
# add MQT alias
32-
add_library(MQT::CoreQASM ALIAS ${MQT_CORE_TARGET_NAME}-qasm)
33-
3431
# set versioning information
3532
set_target_properties(
3633
${MQT_CORE_TARGET_NAME}-qasm

src/zx/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-zx)
4848
file(GLOB_RECURSE ZX_SOURCES **.cpp)
4949

5050
# create the library target (initially empty)
51-
add_library(${MQT_CORE_TARGET_NAME}-zx)
51+
add_mqt_core_library(${MQT_CORE_TARGET_NAME}-zx ALIAS_NAME ZX)
5252

5353
# add sources to target
5454
target_sources(${MQT_CORE_TARGET_NAME}-zx PRIVATE ${ZX_SOURCES})
@@ -72,9 +72,6 @@ if(NOT TARGET ${MQT_CORE_TARGET_NAME}-zx)
7272
target_link_libraries(${MQT_CORE_TARGET_NAME}-zx PUBLIC GMP::gmp GMP::gmpxx)
7373
endif()
7474

75-
# add MQT alias
76-
add_library(MQT::CoreZX ALIAS ${MQT_CORE_TARGET_NAME}-zx)
77-
7875
# set versioning information
7976
set_target_properties(
8077
${MQT_CORE_TARGET_NAME}-zx

0 commit comments

Comments
 (0)