############################################################################### # # Licensed to Accellera Systems Initiative Inc. (Accellera) under one or # more contributor license agreements. See the NOTICE file distributed # with this work for additional information regarding copyright ownership. # Accellera licenses this file to you under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with the # License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License. # ############################################################################### ############################################################################### # # src/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### cmake_minimum_required(VERSION 3.8) # cxx_std_17 ############################################################################### # Build rules for SystemC library ############################################################################### function(add_systemc_library libName scBuildDefine) add_library(${libName} ${ARGN}) target_compile_features( ${libName} PUBLIC cxx_std_20) target_compile_definitions ( ${libName} PUBLIC $<$:WIN32> $<$,$,$>>: SC_WIN_DLL> $<$:SC_ALLOW_DEPRECATED_IEEE_API> PRIVATE ${scBuildDefine} SC_INCLUDE_FX $<$:DEBUG_SYSTEMC> $<$:SC_DISABLE_ASYNC_UPDATES> $<$:SC_DISABLE_COPYRIGHT_MESSAGE> $<$:SC_DISABLE_VCD_SCOPES> $<$:SC_ENABLE_ASSERTIONS> $<$:SC_USE_PTHREADS> $<$: SC_OVERRIDE_DEFAULT_STACK_SIZE=${OVERRIDE_DEFAULT_STACK_SIZE}> $<$,$>:_LIB>) target_compile_options( ${libName} PUBLIC $<$:/vmg /MP> PRIVATE $<$,$,$>: -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable> $<$,$,$,$>>: -xassembler-with-cpp> $<$,$,$>>: -Qunused-arguments> $<$:/W3 /wd4244 /wd4267 /wd4996>) target_include_directories( ${libName} PUBLIC $ $) if (APPLE) # sc_main is OK to be undefined target_link_options(systemc PRIVATE "LINKER:-U,_sc_main") # undefined symbols for Asan support on QuickThreads if (QT_ARCH) set(_undef_scope PRIVATE) if (NOT BUILD_SHARED_LIBS) set(_undef_scope INTERFACE) endif() set(_undef_syms ___sanitizer_start_switch_fiber ___sanitizer_finish_switch_fiber ) list(TRANSFORM _undef_syms PREPEND "LINKER:-U,") target_link_options(${libName} ${_undef_scope} ${_undef_syms}) endif() endif(APPLE) target_link_libraries( ${libName} PUBLIC $<$:Threads::Threads>) set_target_properties( ${libName} PROPERTIES LINKER_LANGUAGE CXX VERSION ${SystemCLanguage_VERSION} SOVERSION ${SystemCLanguage_SOVERSION} ) endfunction(add_systemc_library) set(SYSTEMC_CORE_SRC systemc sysc/communication/sc_clock.cpp sysc/communication/sc_event_finder.cpp sysc/communication/sc_event_queue.cpp sysc/communication/sc_export.cpp sysc/communication/sc_interface.cpp sysc/communication/sc_mutex.cpp sysc/communication/sc_port.cpp sysc/communication/sc_prim_channel.cpp sysc/communication/sc_semaphore.cpp sysc/communication/sc_signal.cpp sysc/communication/sc_signal_ports.cpp sysc/communication/sc_signal_resolved.cpp sysc/communication/sc_signal_resolved_ports.cpp sysc/datatypes/bit/sc_bit.cpp sysc/datatypes/bit/sc_bv_base.cpp sysc/datatypes/bit/sc_logic.cpp sysc/datatypes/bit/sc_lv_base.cpp sysc/datatypes/fx/sc_fxcast_switch.cpp sysc/datatypes/fx/sc_fxdefs.cpp sysc/datatypes/fx/sc_fxnum.cpp sysc/datatypes/fx/sc_fxnum_observer.cpp sysc/datatypes/fx/sc_fxtype_params.cpp sysc/datatypes/fx/sc_fxval.cpp sysc/datatypes/fx/sc_fxval_observer.cpp sysc/datatypes/fx/scfx_mant.cpp sysc/datatypes/fx/scfx_pow10.cpp sysc/datatypes/fx/scfx_rep.cpp sysc/datatypes/fx/scfx_utils.cpp sysc/datatypes/int/sc_int64_io.cpp sysc/datatypes/int/sc_int64_mask.cpp sysc/datatypes/int/sc_int_base.cpp sysc/datatypes/int/sc_length_param.cpp sysc/datatypes/int/sc_nbutils.cpp sysc/datatypes/int/sc_signed.cpp sysc/datatypes/int/sc_uint_base.cpp sysc/datatypes/int/sc_unsigned.cpp sysc/datatypes/misc/sc_value_base.cpp sysc/kernel/sc_attribute.cpp sysc/kernel/sc_cor_fiber.cpp sysc/kernel/sc_cor_pthread.cpp sysc/kernel/sc_cor_qt.cpp sysc/kernel/sc_cthread_process.cpp sysc/kernel/sc_event.cpp sysc/kernel/sc_except.cpp sysc/kernel/sc_join.cpp sysc/kernel/sc_method_process.cpp sysc/kernel/sc_module.cpp sysc/kernel/sc_module_name.cpp sysc/kernel/sc_initializer_function.h sysc/kernel/sc_module_registry.cpp sysc/kernel/sc_name_gen.cpp sysc/kernel/sc_object.cpp sysc/kernel/sc_object_manager.cpp sysc/kernel/sc_stage_callback_registry.cpp sysc/kernel/sc_process.cpp sysc/kernel/sc_reset.cpp sysc/kernel/sc_sensitive.cpp sysc/kernel/sc_simcontext.cpp sysc/kernel/sc_spawn_options.cpp sysc/kernel/sc_thread_process.cpp sysc/kernel/sc_time.cpp sysc/kernel/sc_ver.cpp sysc/kernel/sc_wait.cpp sysc/kernel/sc_wait_cthread.cpp sysc/tracing/sc_trace.cpp sysc/tracing/sc_trace_file_base.cpp sysc/tracing/sc_vcd_trace.cpp sysc/tracing/sc_wif_trace.cpp sysc/utils/sc_hash.cpp sysc/utils/sc_list.cpp sysc/utils/sc_mempool.cpp sysc/utils/sc_pq.cpp sysc/utils/sc_report.cpp sysc/utils/sc_report_handler.cpp sysc/utils/sc_stop_here.cpp sysc/utils/sc_utils_ids.cpp sysc/utils/sc_vector.cpp # TLM sources tlm_core/tlm_2/tlm_generic_payload/tlm_gp.cpp tlm_core/tlm_2/tlm_generic_payload/tlm_phase.cpp tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.cpp tlm_utils/convenience_socket_bases.cpp tlm_utils/instance_specific_extensions.cpp # SystemC headers sysc/communication/sc_buffer.h sysc/communication/sc_clock.h sysc/communication/sc_clock_ports.h sysc/communication/sc_communication_ids.h sysc/communication/sc_event_finder.h sysc/communication/sc_event_queue.h sysc/communication/sc_export.h sysc/communication/sc_fifo.h sysc/communication/sc_fifo_ifs.h sysc/communication/sc_fifo_ports.h sysc/communication/sc_host_mutex.h sysc/communication/sc_host_semaphore.h sysc/communication/sc_interface.h sysc/communication/sc_mutex.h sysc/communication/sc_mutex_if.h sysc/communication/sc_port.h sysc/communication/sc_prim_channel.h sysc/communication/sc_semaphore.h sysc/communication/sc_semaphore_if.h sysc/communication/sc_signal.h sysc/communication/sc_signal_ifs.h sysc/communication/sc_signal_ports.h sysc/communication/sc_signal_resolved.h sysc/communication/sc_signal_resolved_ports.h sysc/communication/sc_signal_rv.h sysc/communication/sc_signal_rv_ports.h sysc/communication/sc_writer_policy.h sysc/datatypes/bit/sc_bit.h sysc/datatypes/bit/sc_bit_ids.h sysc/datatypes/bit/sc_bit_proxies.h sysc/datatypes/bit/sc_bv.h sysc/datatypes/bit/sc_bv_base.h sysc/datatypes/bit/sc_logic.h sysc/datatypes/bit/sc_lv.h sysc/datatypes/bit/sc_lv_base.h sysc/datatypes/bit/sc_proxy.h sysc/datatypes/fx/fx.h sysc/datatypes/fx/sc_context.h sysc/datatypes/fx/sc_fix.h sysc/datatypes/fx/sc_fixed.h sysc/datatypes/fx/sc_fx_ids.h sysc/datatypes/fx/sc_fxcast_switch.h sysc/datatypes/fx/sc_fxdefs.h sysc/datatypes/fx/sc_fxnum.h sysc/datatypes/fx/sc_fxnum_observer.h sysc/datatypes/fx/sc_fxtype_params.h sysc/datatypes/fx/sc_fxval.h sysc/datatypes/fx/sc_fxval_observer.h sysc/datatypes/fx/sc_ufix.h sysc/datatypes/fx/sc_ufixed.h sysc/datatypes/fx/scfx_ieee.h sysc/datatypes/fx/scfx_mant.h sysc/datatypes/fx/scfx_other_defs.h sysc/datatypes/fx/scfx_params.h sysc/datatypes/fx/scfx_pow10.h sysc/datatypes/fx/scfx_rep.h sysc/datatypes/fx/scfx_string.h sysc/datatypes/fx/scfx_utils.h sysc/datatypes/int/sc_bigint.h sysc/datatypes/int/sc_bigint_inlines.h sysc/datatypes/int/sc_big_ops.h sysc/datatypes/int/sc_biguint.h sysc/datatypes/int/sc_biguint_inlines.h sysc/datatypes/int/sc_int.h sysc/datatypes/int/sc_int_base.h sysc/datatypes/int/sc_int_ids.h sysc/datatypes/int/sc_int_inlines.h sysc/datatypes/int/sc_length_param.h sysc/datatypes/int/sc_nbdefs.h sysc/datatypes/int/sc_nbutils.h sysc/datatypes/int/sc_signed.h sysc/datatypes/int/sc_signed_friends.h sysc/datatypes/int/sc_signed_inlines.h sysc/datatypes/int/sc_signed_ops.h sysc/datatypes/int/sc_uint.h sysc/datatypes/int/sc_uint_base.h sysc/datatypes/int/sc_uint_inlines.h sysc/datatypes/int/sc_unsigned.h sysc/datatypes/int/sc_unsigned_friends.h sysc/datatypes/int/sc_unsigned_inlines.h sysc/datatypes/int/sc_vector_utils.h sysc/datatypes/misc/sc_concatref.h sysc/datatypes/misc/sc_value_base.h sysc/kernel/sc_attribute.h sysc/kernel/sc_cmnhdr.h sysc/kernel/sc_constants.h sysc/kernel/sc_cor.h sysc/kernel/sc_cor_fiber.h sysc/kernel/sc_cor_pthread.h sysc/kernel/sc_cor_qt.h sysc/kernel/sc_cthread_process.h sysc/kernel/sc_dynamic_processes.h sysc/kernel/sc_event.h sysc/kernel/sc_except.h sysc/kernel/sc_externs.h sysc/kernel/sc_join.h sysc/kernel/sc_kernel_ids.h sysc/kernel/sc_macros.h sysc/kernel/sc_method_process.h sysc/kernel/sc_module.h sysc/kernel/sc_module_name.h sysc/kernel/sc_module_registry.h sysc/kernel/sc_name_gen.h sysc/kernel/sc_object.h sysc/kernel/sc_object_int.h sysc/kernel/sc_object_manager.h sysc/kernel/sc_stage_callback_registry.h sysc/kernel/sc_process.h sysc/kernel/sc_process_handle.h sysc/kernel/sc_reset.h sysc/kernel/sc_runnable.h sysc/kernel/sc_runnable_int.h sysc/kernel/sc_sensitive.h sysc/kernel/sc_simcontext.h sysc/kernel/sc_simcontext_int.h sysc/kernel/sc_spawn.h sysc/kernel/sc_spawn_options.h sysc/kernel/sc_status.h sysc/kernel/sc_thread_process.h sysc/kernel/sc_time.h sysc/kernel/sc_ver.h sysc/kernel/sc_wait.h sysc/kernel/sc_wait_cthread.h sysc/tracing/sc_trace.h sysc/tracing/sc_trace_file_base.h sysc/tracing/sc_tracing_ids.h sysc/tracing/sc_vcd_trace.h sysc/tracing/sc_wif_trace.h sysc/utils/sc_hash.h sysc/utils/sc_iostream.h sysc/utils/sc_list.h sysc/utils/sc_machine.h sysc/utils/sc_mempool.h sysc/utils/sc_pq.h sysc/utils/sc_ptr_flag.h sysc/utils/sc_pvector.h sysc/utils/sc_report.h sysc/utils/sc_report_handler.h sysc/utils/sc_stop_here.h sysc/utils/sc_string.h sysc/utils/sc_string_view.h sysc/utils/sc_temporary.h sysc/utils/sc_utils_ids.h sysc/utils/sc_vector.h systemc systemc.h # TLM headers tlm tlm.h tlm_core/tlm_1/tlm_analysis/tlm_analysis.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_fifo.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_port.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_triple.h tlm_core/tlm_1/tlm_analysis/tlm_write_if.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/circular_buffer.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_peek.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_put_get.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_resize.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_event_finder.h tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_nonblocking_port.h tlm_core/tlm_1/tlm_req_rsp/tlm_req_rsp.h tlm_core/tlm_2/tlm_2_interfaces/tlm_2_interfaces.h tlm_core/tlm_2/tlm_2_interfaces/tlm_dmi.h tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h tlm_core/tlm_2/tlm_generic_payload/tlm_array.h tlm_core/tlm_2/tlm_generic_payload/tlm_endian_conv.h tlm_core/tlm_2/tlm_generic_payload/tlm_generic_payload.h tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h tlm_core/tlm_2/tlm_generic_payload/tlm_helpers.h tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h tlm_core/tlm_2/tlm_quantum/tlm_quantum.h tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h tlm_core/tlm_2/tlm_sockets/tlm_sockets.h tlm_core/tlm_2/tlm_sockets/tlm_target_socket.h tlm_core/tlm_2/tlm_version.h tlm_utils/convenience_socket_bases.h tlm_utils/instance_specific_extensions.h tlm_utils/instance_specific_extensions_int.h tlm_utils/multi_passthrough_initiator_socket.h tlm_utils/multi_passthrough_target_socket.h tlm_utils/multi_socket_bases.h tlm_utils/passthrough_target_socket.h tlm_utils/peq_with_cb_and_phase.h tlm_utils/peq_with_get.h tlm_utils/simple_initiator_socket.h tlm_utils/simple_target_socket.h tlm_utils/tlm_quantumkeeper.h # SVC SystemC Elaboration support sc_elab/elab_alloc.h sc_elab/elab_alloc.cpp sc_elab/sc_tool_opts.h sc_elab/sc_tool_opts.cpp # QuickThreads $<$: sysc/packages/qt/qt.c $<$:sysc/packages/qt/md/iX86_64.s> $<$:sysc/packages/qt/md/i386.s> $<$:sysc/packages/qt/md/aarch64.s> $<$:sysc/packages/qt/md/multi.s> sysc/packages/qt/md/aarch64.h sysc/packages/qt/md/i386.h sysc/packages/qt/md/iX86_64.h sysc/packages/qt/qt.h sysc/packages/qt/qtmd.h > ) set(SYSTEMC_SC_MAIN_SRC systemc.h tlm.h sysc/kernel/sc_externs.h sysc/kernel/sc_main.cpp sysc/kernel/sc_main_main.cpp ) if (BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN)) # Windows DLLs can't contain unresolved symbols, so we need to spilt library # into two: # - ${SYSTEMC_DLL_TARGET}.dll is a shared library without unresolved symbols # - systemc.lib contains main() and unresolved sc_main() # Then we merge interface library ${SYSTEMC_DLL_TARGET}.lib into systemc.lib set(SYSTEMC_DLL_TARGET systemc-${SystemCLanguage_VERSION}) add_systemc_library(${SYSTEMC_DLL_TARGET} SC_BUILD SHARED ${SYSTEMC_CORE_SRC} ) add_systemc_library(systemc SC_BUILD_OFF STATIC ${SYSTEMC_SC_MAIN_SRC} ) if (MSVC) # lib.exe should be available from MSVC command promt add_custom_command( TARGET systemc POST_BUILD COMMAND lib.exe /OUT:$ $ $ COMMENT "Combining SystemC libs..." ) else(MSVC) add_custom_command( TARGET systemc POST_BUILD COMMAND ar x $ COMMAND ar x $ COMMAND del *.a COMMAND ar qc $ *.o *.obj COMMAND del *.o *.obj COMMENT "Combining SystemC libs..." ) endif(MSVC) set(SYSTEMC_TARGETS systemc ${SYSTEMC_DLL_TARGET}) else(BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN)) add_systemc_library(systemc SC_BUILD ${SYSTEMC_CORE_SRC} ${SYSTEMC_SC_MAIN_SRC} ) set(SYSTEMC_TARGETS systemc) endif(BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN)) add_library(SystemC::systemc ALIAS systemc) add_library (SVC::systemc ALIAS systemc) target_compile_features(systemc PUBLIC cxx_std_20) install(TARGETS ${SYSTEMC_TARGETS} EXPORT SystemCLanguageTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) ############################################################################### # Install rules for SystemC library ############################################################################### # Export targets to build tree root export (TARGETS ${SYSTEMC_TARGETS} NAMESPACE SystemC:: FILE ${CMAKE_BINARY_DIR}/SystemCLanguageTargets.cmake) install (TARGETS systemc EXPORT SVCTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) # Install the SystemC and TLM headers install (FILES systemc tlm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev) install (DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev FILES_MATCHING PATTERN "*.h") install (DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev FILES_MATCHING PATTERN "*.hpp")