Skip to content

Commit 44aaa3b

Browse files
committed
πŸ‘¨β€πŸ’»πŸ“¦ build QDMI generators and spdlog as shared libraries on install
Signed-off-by: burgholzer <burgholzer@me.com>
1 parent 64e02a8 commit 44aaa3b

File tree

3 files changed

+25
-39
lines changed

3 files changed

+25
-39
lines changed

β€Žcmake/ExternalDependencies.cmakeβ€Ž

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,21 @@ set(SPDLOG_SYSTEM_INCLUDES
9494
ON
9595
CACHE INTERNAL "Treat the library headers like system headers")
9696
cmake_dependent_option(SPDLOG_INSTALL "Install spdlog library" ON "MQT_CORE_INSTALL" OFF)
97+
cmake_dependent_option(SPDLOG_BUILD_SHARED "Build spdlog as shared library" ON
98+
"BUILD_MQT_CORE_SHARED_LIBS" OFF)
9799
FetchContent_Declare(spdlog URL ${SPDLOG_URL} FIND_PACKAGE_ARGS ${SPDLOG_VERSION})
98100
list(APPEND FETCH_PACKAGES spdlog)
99101

100102
# Make all declared dependencies available.
101103
FetchContent_MakeAvailable(${FETCH_PACKAGES})
102104

105+
# Ensure external shared libraries end up in a common lib layout used by our RUNPATH
106+
if(TARGET spdlog)
107+
set_target_properties(
108+
spdlog PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
109+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
110+
endif()
111+
103112
# Patch for spdlog cmake files to be installed in a common cmake directory
104113
if(SPDLOG_INSTALL)
105114
include(GNUInstallDirs)

β€Žsrc/qdmi/na/CMakeLists.txtβ€Ž

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ set(TARGET_NAME ${MQT_CORE_TARGET_NAME}-qdmi-na-device-gen)
1313
if(NOT TARGET ${TARGET_NAME})
1414

1515
# Add library for device generation
16-
#
17-
# Note: We use a static library here to avoid issues with RPATH and finding the executable during
18-
# the build process in Python builds
19-
add_library(${TARGET_NAME} STATIC)
20-
add_library(MQT::CoreQDMINaDeviceGen ALIAS ${TARGET_NAME})
16+
add_mqt_core_library(${TARGET_NAME} ALIAS_NAME QDMINaDeviceGen)
2117

2218
# add sources to target
2319
target_sources(${TARGET_NAME} PRIVATE Generator.cpp)
@@ -26,27 +22,20 @@ if(NOT TARGET ${TARGET_NAME})
2622
target_sources(${TARGET_NAME} PUBLIC FILE_SET HEADERS BASE_DIRS ${MQT_CORE_INCLUDE_BUILD_DIR}
2723
FILES ${MQT_CORE_INCLUDE_BUILD_DIR}/qdmi/na/Generator.hpp)
2824

29-
# Link nlohmann_json, spdlog
25+
# Link nlohmann_json and spdlog
3026
target_link_libraries(
3127
${TARGET_NAME}
3228
PUBLIC nlohmann_json::nlohmann_json
33-
PRIVATE spdlog::spdlog MQT::ProjectOptions MQT::ProjectWarnings)
34-
35-
# set versioning information
36-
set_target_properties(
37-
${TARGET_NAME}
38-
PROPERTIES VERSION ${PROJECT_VERSION}
39-
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
40-
EXPORT_NAME CoreNaDeviceGen)
41-
42-
# set c++ standard
43-
target_compile_features(${TARGET_NAME} PRIVATE cxx_std_20)
29+
PRIVATE spdlog::spdlog)
4430

4531
# add to list of MQT core targets
4632
list(APPEND MQT_CORE_TARGETS ${TARGET_NAME})
4733

48-
# Make version available
49-
target_compile_definitions(${TARGET_NAME} PRIVATE MQT_CORE_VERSION="${MQT_CORE_VERSION}")
34+
# place the generated library in a predictable location where the executable can find it
35+
set_target_properties(
36+
${TARGET_NAME}
37+
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
38+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
5039
endif()
5140

5241
# Set target name
@@ -193,6 +182,7 @@ if(NOT TARGET ${TARGET_NAME})
193182
endif()
194183
endif()
195184
endif()
185+
196186
set(MQT_CORE_TARGETS
197187
${MQT_CORE_TARGETS}
198188
PARENT_SCOPE)

β€Žsrc/qdmi/sc/CMakeLists.txtβ€Ž

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ set(TARGET_NAME ${MQT_CORE_TARGET_NAME}-qdmi-sc-device-gen)
1313
if(NOT TARGET ${TARGET_NAME})
1414

1515
# Add library for device generation
16-
#
17-
# Note: We use a static library here to avoid issues with RPATH and finding the executable during
18-
# the build process in Python builds
19-
add_library(${TARGET_NAME} STATIC)
20-
add_library(MQT::CoreQDMIScDeviceGen ALIAS ${TARGET_NAME})
16+
add_mqt_core_library(${TARGET_NAME} ALIAS_NAME QDMIScDeviceGen)
2117

2218
# add sources to target
2319
target_sources(${TARGET_NAME} PRIVATE Generator.cpp)
@@ -26,27 +22,17 @@ if(NOT TARGET ${TARGET_NAME})
2622
target_sources(${TARGET_NAME} PUBLIC FILE_SET HEADERS BASE_DIRS ${MQT_CORE_INCLUDE_BUILD_DIR}
2723
FILES ${MQT_CORE_INCLUDE_BUILD_DIR}/qdmi/sc/Generator.hpp)
2824

29-
# Link nlohmann_json, spdlog
25+
# Link nlohmann_json and spdlog
3026
target_link_libraries(
3127
${TARGET_NAME}
3228
PUBLIC nlohmann_json::nlohmann_json
33-
PRIVATE spdlog::spdlog MQT::ProjectOptions MQT::ProjectWarnings)
29+
PRIVATE spdlog::spdlog)
3430

35-
# set versioning information
31+
# place the generated library in a predictable location where the executable can find it
3632
set_target_properties(
3733
${TARGET_NAME}
38-
PROPERTIES VERSION ${PROJECT_VERSION}
39-
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
40-
EXPORT_NAME CoreScDeviceGen)
41-
42-
# set c++ standard
43-
target_compile_features(${TARGET_NAME} PRIVATE cxx_std_20)
44-
45-
# add to list of MQT core targets
46-
set(MQT_CORE_TARGETS ${MQT_CORE_TARGETS} ${TARGET_NAME})
47-
48-
# Make version available
49-
target_compile_definitions(${TARGET_NAME} PRIVATE MQT_CORE_VERSION="${MQT_CORE_VERSION}")
34+
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
35+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
5036
endif()
5137

5238
# Set target name
@@ -193,6 +179,7 @@ if(NOT TARGET ${TARGET_NAME})
193179
endif()
194180
endif()
195181
endif()
182+
196183
set(MQT_CORE_TARGETS
197184
${MQT_CORE_TARGETS}
198185
PARENT_SCOPE)

0 commit comments

Comments
Β (0)