aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2023-11-04 01:58:40 +0100
committerJohannes Stoelp <johannes.stoelp@gmail.com>2023-11-04 01:58:40 +0100
commitdcea35a1bfc12d5ff35929971cba5a48638deb85 (patch)
tree04dbc75e16cf82e99ac379ca91b9662606bf6aaf /cmake
parentcedf79f0264f3cdbe61a293e345bbd368e1e6c65 (diff)
downloadsysc-playground-dcea35a1bfc12d5ff35929971cba5a48638deb85.tar.gz
sysc-playground-dcea35a1bfc12d5ff35929971cba5a48638deb85.zip
cmake: integrate systemc build into cmake build (offer source/external integration, mainly for own cmake experiments)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CMakeLists-sysc-external.txt40
-rw-r--r--cmake/CMakeLists-sysc-fetch.txt20
2 files changed, 60 insertions, 0 deletions
diff --git a/cmake/CMakeLists-sysc-external.txt b/cmake/CMakeLists-sysc-external.txt
new file mode 100644
index 0000000..8346c34
--- /dev/null
+++ b/cmake/CMakeLists-sysc-external.txt
@@ -0,0 +1,40 @@
+# Integrate SYSTEMC as external project.
+#
+# External projects are not available during cmake configuration step, but only
+# during the build step. Therefore we must maintain some targets manually,
+# representing the parts of the external project we want to use (eg library).
+
+include(ExternalProject)
+
+set(SYSTEMC_HOME ${CMAKE_BINARY_DIR}/deps/systemc)
+
+ExternalProject_Add(
+ systemc_external
+ GIT_REPOSITORY https://github.com/accellera-official/systemc
+ GIT_TAG master
+ GIT_SHALLOW ON
+ GIT_PROGRESS ON
+ CMAKE_ARGS
+ # Fwd cmake outer cmake args.
+ -DCMAKE_INSTALL_PREFIX=${SYSTEMC_HOME}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+ # SystemC specific args.
+ -DBUILD_SHARED_LIBS=OFF
+ -DENABLE_ASSERTIONS=ON
+ INSTALL_BYPRODUCTS
+ ${CMAKE_BINARY_DIR}/deps/systemc/lib/libsystemc.a
+)
+
+# Define pseudo target (import lib) for usage in cmake.
+add_library(SystemC::systemc STATIC IMPORTED GLOBAL)
+add_dependencies(SystemC::systemc systemc_external)
+
+# Create include dir such that we can set include dir property below.
+file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/deps/systemc/include)
+
+# Set library properties.
+set_target_properties(SystemC::systemc PROPERTIES
+ IMPORTED_LOCATION ${SYSTEMC_HOME}/lib/libsystemc.a
+ INTERFACE_INCLUDE_DIRECTORIES ${SYSTEMC_HOME}/include
+)
diff --git a/cmake/CMakeLists-sysc-fetch.txt b/cmake/CMakeLists-sysc-fetch.txt
new file mode 100644
index 0000000..4afd154
--- /dev/null
+++ b/cmake/CMakeLists-sysc-fetch.txt
@@ -0,0 +1,20 @@
+# Integrate SYSTEMC as source project.
+#
+# FetchContent makes the dependency available during cmake configuration step
+# and acts similar to *add_subdirectory*, that means all targets of the
+# sub-project are available in the main project.
+#
+# NOTE: Target name must be unique across the main project and all sub-project,
+# names may clash :^)
+
+include(FetchContent)
+
+FetchContent_Declare(
+ systemc
+ GIT_REPOSITORY https://github.com/accellera-official/systemc
+ GIT_TAG master
+ EXCLUDE_FROM_ALL
+)
+
+# This makes all targets from the sub-project available.
+FetchContent_MakeAvailable(systemc)