Skip to content

Building with the ENABLE_STD_THREADS option fails. #141

Description

@Hasnaoui-Youssef

Describe the bug
When trying to build SystemC using ccmake, toggling the ENABLE_STD_THREADS causes the following make command to fail.

To Reproduce
Steps to reproduce the behavior:

  1. Download the SystemC source code (tested with both the accellera website and cloning the github repo)
  2. Create build directory cd into it then run "ccmake .."
  3. Set the ENABLE_STD_THREADS on
  4. Configure and generate.
  5. Run make

Logs
~/.../build make -j8
[ 6%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_event_finder.cpp.o
[ 6%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_clock.cpp.o
[ 6%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_event_queue.cpp.o
[ 6%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_export.cpp.o
[ 9%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_mutex.cpp.o
[ 9%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_port.cpp.o
[ 9%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_interface.cpp.o
[ 9%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_prim_channel.cpp.o
[ 12%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_semaphore.cpp.o
[ 12%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_signal.cpp.o
[ 12%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_signal_ports.cpp.o
[ 16%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_signal_resolved.cpp.o
[ 16%] Building CXX object src/CMakeFiles/systemc.dir/sysc/communication/sc_signal_resolved_ports.cpp.o
[ 16%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/bit/sc_bit.cpp.o
[ 19%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/bit/sc_bv_base.cpp.o
[ 19%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/bit/sc_logic.cpp.o
[ 19%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/bit/sc_lv_base.cpp.o
[ 22%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxcast_switch.cpp.o
[ 22%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxdefs.cpp.o
[ 25%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxnum.cpp.o
[ 25%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxnum_observer.cpp.o
[ 25%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxtype_params.cpp.o
[ 29%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxval.cpp.o
[ 29%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/sc_fxval_observer.cpp.o
[ 29%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/scfx_mant.cpp.o
[ 32%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/scfx_pow10.cpp.o
[ 32%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/scfx_rep.cpp.o
[ 32%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/fx/scfx_utils.cpp.o
[ 35%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_int64_io.cpp.o
[ 35%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_int64_mask.cpp.o
[ 35%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_int_base.cpp.o
[ 38%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_length_param.cpp.o
[ 38%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_nbutils.cpp.o
[ 38%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_signed.cpp.o
[ 41%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_uint_base.cpp.o
[ 41%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/int/sc_unsigned.cpp.o
[ 45%] Building CXX object src/CMakeFiles/systemc.dir/sysc/datatypes/misc/sc_value_base.cpp.o
[ 45%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_attribute.cpp.o
[ 45%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_cor_fiber.cpp.o
[ 48%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_cor_pthread.cpp.o
[ 48%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_cor_qt.cpp.o
[ 48%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_cor_std_thread.cpp.o
[ 51%] Building CXX object src/CMakeFiles/systemc.dir/sysc/kernel/sc_cthread_process.cpp.o
In file included from /home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:36:
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:70:10: error: ‘condition_variable’ in namespace ‘std’ does not name a type
70 | std::condition_variable m_condition; // Condition waiting for.
| ^~~~~~~~~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:39:1: note: ‘std::condition_variable’ is defined in header ‘<condition_variable>’; this is probably fixable by adding ‘#include <condition_variable>’
38 | #include
+++ |+#include <condition_variable>
39 |
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:71:10: error: ‘mutex’ in namespace ‘std’ does not name a type
71 | std::mutex m_mutex; // Mutex
| ^~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:39:1: note: ‘std::mutex’ is defined in header ‘’; this is probably fixable by adding ‘#include ’
38 | #include
+++ |+#include
39 |
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:124:10: error: ‘condition_variable’ in namespace ‘std’ does not name a type
124 | std::condition_variable m_create_cond; // Condition waiting for.
| ^~~~~~~~~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:124:5: note: ‘std::condition_variable’ is defined in header ‘<condition_variable>’; this is probably fixable by adding ‘#include <condition_variable>’
124 | std::condition_variable m_create_cond; // Condition waiting for.
| ^~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:125:10: error: ‘mutex’ in namespace ‘std’ does not name a type
125 | std::mutex m_create_mutex; // Mutex for lock.
| ^~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.h:125:5: note: ‘std::mutex’ is defined in header ‘’; this is probably fixable by adding ‘#include ’
125 | std::mutex m_create_mutex; // Mutex for lock.
| ^~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp: In static member function ‘static void sc_core::sc_cor_std_thread::invoke_thread(void*)’:
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:98:58: error: ‘class sc_core::sc_cor_pkg_std_thread’ has no member named ‘m_create_mutex’
98 | std::unique_lockstd::mutex create_lock(p->m_pkg_p->m_create_mutex, std::defer_lock);
| ^~~~~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:99:48: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_mutex’
99 | std::unique_lockstd::mutex child_lock(p->m_mutex, std::defer_lock);
| ^~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:103:17: error: ‘class sc_core::sc_cor_pkg_std_thread’ has no member named ‘m_create_cond’
103 | p->m_pkg_p->m_create_cond.notify_one();
| ^~~~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:107:8: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_condition’
107 | p->m_condition.wait(child_lock);
| ^~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp: In member function ‘virtual sc_core::sc_cor* sc_core::sc_cor_pkg_std_thread::create(std::size_t, void ()(void), void*)’:
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:196:46: error: ‘m_create_mutex’ was not declared in this scope
196 | std::unique_lockstd::mutex create_lock(m_create_mutex, std::defer_lock);
| ^~~~~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:204:5: error: ‘m_create_cond’ was not declared in this scope; did you mean ‘create_lock’?
204 | m_create_cond.wait(create_lock);
| ^~~~~~~~~~~~~
| create_lock
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp: In member function ‘virtual void sc_core::sc_cor_pkg_std_thread::yield(sc_core::sc_cor*)’:
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:235:52: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_mutex’
235 | std::unique_lockstd::mutex to_lock(to_p->m_mutex,std::defer_lock);
| ^~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:236:56: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_mutex’
236 | std::unique_lockstd::mutex from_lock(from_p->m_mutex,std::defer_lock);
| ^~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:239:15: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_condition’
239 | to_p->m_condition.notify_one();
| ^~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:242:17: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_condition’
242 | from_p->m_condition.wait(from_lock);
| ^~~~~~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp: In member function ‘virtual void sc_core::sc_cor_pkg_std_thread::abort(sc_core::sc_cor*)’:
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:260:51: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_mutex’
260 | std::unique_lockstd::mutex to_lock(n_p->m_mutex);
| ^~~~~~~
/home/youssef/Downloads/systemc-3.0.2/src/sysc/kernel/sc_cor_std_thread.cpp:261:14: error: ‘class sc_core::sc_cor_std_thread’ has no member named ‘m_condition’
261 | n_p->m_condition.notify_one();
| ^~~~~~~~~~~
make[2]: *** [src/CMakeFiles/systemc.dir/build.make:650: src/CMakeFiles/systemc.dir/sysc/kernel/sc_cor_std_thread.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:776: src/CMakeFiles/systemc.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

Environment (please complete the following information)
OS: Ubuntu 24.04
Compiler: GCC 14.2.0
SystemC version: 3.0.2

Additional context
I believe, that as the compiler errors show, adding
condition_variable and mutex headers to the src/sysc/kernel/sc_cor_std_thread.h header should fix the issue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions