112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de    sc_ver.cpp -- copyright information.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de    Original Author: Stan Y. Liao, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de  CHANGE LOG AT THE END OF THE FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de#include <cstddef>
3012027Sjungma@eit.uni-kl.de#include <cstdlib>
3112027Sjungma@eit.uni-kl.de
3212027Sjungma@eit.uni-kl.de#define SC_DISABLE_API_VERSION_CHECK // for in-library sc_ver.h inclusion
3312027Sjungma@eit.uni-kl.de
3412027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_ver.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_kernel_ids.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_iostream.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report.h"
3812027Sjungma@eit.uni-kl.de
3912027Sjungma@eit.uni-kl.deusing std::getenv;
4012027Sjungma@eit.uni-kl.deusing std::strcmp;
4112027Sjungma@eit.uni-kl.deusing std::cerr;
4212027Sjungma@eit.uni-kl.deusing std::endl;
4312027Sjungma@eit.uni-kl.de
4412027Sjungma@eit.uni-kl.denamespace sc_core {
4512027Sjungma@eit.uni-kl.de
4612027Sjungma@eit.uni-kl.de
4712027Sjungma@eit.uni-kl.destatic
4812027Sjungma@eit.uni-kl.deconst char systemc_version[] =
4912027Sjungma@eit.uni-kl.de    "SystemC " SC_VERSION " --- " __DATE__ " " __TIME__;
5012027Sjungma@eit.uni-kl.de
5112027Sjungma@eit.uni-kl.deconst unsigned int sc_version_major = SC_VERSION_MAJOR;
5212027Sjungma@eit.uni-kl.deconst unsigned int sc_version_minor = SC_VERSION_MINOR;
5312027Sjungma@eit.uni-kl.deconst unsigned int sc_version_patch = SC_VERSION_PATCH;
5412027Sjungma@eit.uni-kl.deconst bool         sc_is_prerelease = SC_IS_PRERELEASE;
5512027Sjungma@eit.uni-kl.de
5612027Sjungma@eit.uni-kl.deconst std::string  sc_version_originator   = SC_VERSION_ORIGINATOR;
5712027Sjungma@eit.uni-kl.deconst std::string  sc_version_release_date = SC_VERSION_RELEASE_DATE;
5812027Sjungma@eit.uni-kl.deconst std::string  sc_version_prerelease   = SC_VERSION_PRERELEASE;
5912027Sjungma@eit.uni-kl.deconst std::string  sc_version_string       = SC_VERSION;
6012027Sjungma@eit.uni-kl.deconst std::string  sc_copyright_string     = SC_COPYRIGHT;
6112027Sjungma@eit.uni-kl.de
6212027Sjungma@eit.uni-kl.deconst char*
6312027Sjungma@eit.uni-kl.desc_copyright()
6412027Sjungma@eit.uni-kl.de{
6512027Sjungma@eit.uni-kl.de    return SC_COPYRIGHT;
6612027Sjungma@eit.uni-kl.de}
6712027Sjungma@eit.uni-kl.de
6812027Sjungma@eit.uni-kl.de
6912027Sjungma@eit.uni-kl.deconst char*
7012027Sjungma@eit.uni-kl.desc_release()
7112027Sjungma@eit.uni-kl.de{
7212027Sjungma@eit.uni-kl.de    return SC_VERSION;
7312027Sjungma@eit.uni-kl.de}
7412027Sjungma@eit.uni-kl.de
7512027Sjungma@eit.uni-kl.de
7612027Sjungma@eit.uni-kl.deconst char*
7712027Sjungma@eit.uni-kl.desc_version()
7812027Sjungma@eit.uni-kl.de{
7912027Sjungma@eit.uni-kl.de    return systemc_version;
8012027Sjungma@eit.uni-kl.de}
8112027Sjungma@eit.uni-kl.de
8212027Sjungma@eit.uni-kl.de
8312027Sjungma@eit.uni-kl.de#if !defined(SC_DISABLE_COPYRIGHT_MESSAGE)
8412027Sjungma@eit.uni-kl.de#  define SC_DISABLE_COPYRIGHT_MESSAGE 0
8512027Sjungma@eit.uni-kl.de#endif
8612027Sjungma@eit.uni-kl.de
8712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
8812027Sjungma@eit.uni-kl.de
8912027Sjungma@eit.uni-kl.devoid
9012027Sjungma@eit.uni-kl.depln()
9112027Sjungma@eit.uni-kl.de{
9212027Sjungma@eit.uni-kl.de    static bool lnp = SC_DISABLE_COPYRIGHT_MESSAGE;
9312027Sjungma@eit.uni-kl.de    if ( lnp || getenv("SYSTEMC_DISABLE_COPYRIGHT_MESSAGE") != 0 )
9412027Sjungma@eit.uni-kl.de        lnp = true;
9512027Sjungma@eit.uni-kl.de    if ( const char * lnp_env = getenv("SC_COPYRIGHT_MESSAGE") ) {
9612027Sjungma@eit.uni-kl.de        lnp = !strcmp( lnp_env, "DISABLE" );
9712027Sjungma@eit.uni-kl.de    }
9812027Sjungma@eit.uni-kl.de    if( ! lnp ) {
9912027Sjungma@eit.uni-kl.de
10012027Sjungma@eit.uni-kl.de        static const char indent[] = "        ";
10112027Sjungma@eit.uni-kl.de        std::string       line;
10212027Sjungma@eit.uni-kl.de        std::stringstream copyright;
10312027Sjungma@eit.uni-kl.de
10412027Sjungma@eit.uni-kl.de        // temporary stream to print copyright line-wise with indentation
10512027Sjungma@eit.uni-kl.de        copyright << sc_copyright();
10612027Sjungma@eit.uni-kl.de
10712027Sjungma@eit.uni-kl.de        cerr << endl;
10812027Sjungma@eit.uni-kl.de        cerr << indent << sc_version() << endl;
10912027Sjungma@eit.uni-kl.de        while( getline( copyright, line ) )
11012027Sjungma@eit.uni-kl.de            cerr << indent << line << endl;
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de        //  regressions check point
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.de        if( getenv( "SYSTEMC_REGRESSION" ) != 0 ) {
11512027Sjungma@eit.uni-kl.de            cerr << "SystemC Simulation" << endl;
11612027Sjungma@eit.uni-kl.de        }
11712027Sjungma@eit.uni-kl.de
11812027Sjungma@eit.uni-kl.de        lnp = true;
11912027Sjungma@eit.uni-kl.de    }
12012027Sjungma@eit.uni-kl.de}
12112027Sjungma@eit.uni-kl.de
12212027Sjungma@eit.uni-kl.de#define SC_API_PERFORM_CHECK_( Type, Name, Symbol ) \
12312027Sjungma@eit.uni-kl.de  do { \
12412027Sjungma@eit.uni-kl.de    static bool SC_CONCAT_UNDERSCORE_( Name, config_seen ) = false; \
12512027Sjungma@eit.uni-kl.de    static Type SC_CONCAT_UNDERSCORE_( Name, config ); \
12612027Sjungma@eit.uni-kl.de    if( ! SC_CONCAT_UNDERSCORE_( Name, config_seen ) ) { \
12712027Sjungma@eit.uni-kl.de      SC_CONCAT_UNDERSCORE_( Name, config_seen ) = true; \
12812027Sjungma@eit.uni-kl.de      SC_CONCAT_UNDERSCORE_( Name, config ) = Name; \
12912027Sjungma@eit.uni-kl.de    } else if( SC_CONCAT_UNDERSCORE_( Name, config ) != Name ) { \
13012027Sjungma@eit.uni-kl.de      SC_REPORT_FATAL( SC_ID_INCONSISTENT_API_CONFIG_, Symbol ); \
13112027Sjungma@eit.uni-kl.de    } \
13212027Sjungma@eit.uni-kl.de  } while( false )
13312027Sjungma@eit.uni-kl.de
13412027Sjungma@eit.uni-kl.de// THIS CONSTRUCTOR ROOTS OUT OLD OBJECTS AT LINK TIME
13512027Sjungma@eit.uni-kl.de//
13612027Sjungma@eit.uni-kl.de// Each source file which includes sc_ver.h for this SystemC version
13712027Sjungma@eit.uni-kl.de// will have a static instance of the class sc_api_version_XXX defined
13812027Sjungma@eit.uni-kl.de// in it. That object instanciation will cause the constructor below
13912027Sjungma@eit.uni-kl.de// to be invoked. If the version of the SystemC being linked against
14012027Sjungma@eit.uni-kl.de// does not contain the constructor below a linkage error will occur.
14112027Sjungma@eit.uni-kl.de//
14212027Sjungma@eit.uni-kl.de// Some preprocessor switches need to be consistent between the application
14312027Sjungma@eit.uni-kl.de// and the library (e.g. if sizes of classes are affected or other parts of
14412027Sjungma@eit.uni-kl.de// the ABI are affected).  (Some of) these are checked here at link-time as
14512027Sjungma@eit.uni-kl.de// well, by setting template parameters to sc_api_version_XXX, while only
14612027Sjungma@eit.uni-kl.de// one variant is defined here.
14712027Sjungma@eit.uni-kl.de//
14812027Sjungma@eit.uni-kl.de// Some preprocessor switches need to be consistent between different
14912027Sjungma@eit.uni-kl.de// translation units of an application.  Those can't be easily checked
15012027Sjungma@eit.uni-kl.de// during link-time.  Instead, perform a check during run-time by
15112027Sjungma@eit.uni-kl.de// passing the value to the constructor of the api_version_check object.
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de// const int DEBUG_SYSTEMC_CHECK_           = 1;
15412027Sjungma@eit.uni-kl.deconst int SC_DISABLE_VIRTUAL_BIND_CHECK_ = 1;
15512027Sjungma@eit.uni-kl.de
15612027Sjungma@eit.uni-kl.detemplate<>
15712027Sjungma@eit.uni-kl.deSC_API_VERSION_STRING
15812027Sjungma@eit.uni-kl.de<
15912027Sjungma@eit.uni-kl.de//   & DEBUG_SYSTEMC_CHECK_,
16012027Sjungma@eit.uni-kl.de  & SC_DISABLE_VIRTUAL_BIND_CHECK_
16112027Sjungma@eit.uni-kl.de>
16212027Sjungma@eit.uni-kl.de::SC_API_VERSION_STRING
16312027Sjungma@eit.uni-kl.de(
16412027Sjungma@eit.uni-kl.de  sc_writer_policy default_writer_policy
16512027Sjungma@eit.uni-kl.de)
16612027Sjungma@eit.uni-kl.de{
16712027Sjungma@eit.uni-kl.de  SC_API_PERFORM_CHECK_( sc_writer_policy
16812027Sjungma@eit.uni-kl.de                          , default_writer_policy
16912027Sjungma@eit.uni-kl.de                          , "SC_DEFAULT_WRITER_POLICY" );
17012027Sjungma@eit.uni-kl.de}
17112027Sjungma@eit.uni-kl.de
17212027Sjungma@eit.uni-kl.de} // namespace sc_core
17312027Sjungma@eit.uni-kl.de
17412027Sjungma@eit.uni-kl.de// $Log: sc_ver.cpp,v $
17512027Sjungma@eit.uni-kl.de// Revision 1.14  2011/08/26 21:56:55  acg
17612027Sjungma@eit.uni-kl.de//  Torsten Maehne: use usings rather than absolute namespace addressing.
17712027Sjungma@eit.uni-kl.de//
17812027Sjungma@eit.uni-kl.de// Revision 1.13  2011/08/26 20:46:11  acg
17912027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
18012027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
18112027Sjungma@eit.uni-kl.de//
18212027Sjungma@eit.uni-kl.de// Revision 1.12  2011/07/25 10:20:34  acg
18312027Sjungma@eit.uni-kl.de//  Andy Goodrich: check in aftermath of call to automake.
18412027Sjungma@eit.uni-kl.de//
18512027Sjungma@eit.uni-kl.de// Revision 1.11  2011/07/02 12:55:19  acg
18612027Sjungma@eit.uni-kl.de//  Andy Goodrich: automake refresh.
18712027Sjungma@eit.uni-kl.de//
18812027Sjungma@eit.uni-kl.de// Revision 1.10  2011/07/01 18:49:07  acg
18912027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved pln() from sc_simcontext.cpp to sc_ver.cpp.
19012027Sjungma@eit.uni-kl.de//
19112027Sjungma@eit.uni-kl.de// Revision 1.9  2011/07/01 18:33:08  acg
19212027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for IEEE 1666, removal of macros and use of them.
19312027Sjungma@eit.uni-kl.de//
19412027Sjungma@eit.uni-kl.de// Revision 1.8  2011/04/08 18:27:53  acg
19512027Sjungma@eit.uni-kl.de//  Andy Goodrich: respin of the PoC.
19612027Sjungma@eit.uni-kl.de//
19712027Sjungma@eit.uni-kl.de// Revision 1.7  2011/04/05 20:50:57  acg
19812027Sjungma@eit.uni-kl.de//  Andy Goodrich:
19912027Sjungma@eit.uni-kl.de//    (1) changes to make sure that event(), posedge() and negedge() only
20012027Sjungma@eit.uni-kl.de//        return true if the clock has not moved.
20112027Sjungma@eit.uni-kl.de//    (2) fixes for method self-resumes.
20212027Sjungma@eit.uni-kl.de//    (3) added SC_PRERELEASE_VERSION
20312027Sjungma@eit.uni-kl.de//    (4) removed kernel events from the object hierarchy, added
20412027Sjungma@eit.uni-kl.de//        sc_hierarchy_name_exists().
20512027Sjungma@eit.uni-kl.de//
20612027Sjungma@eit.uni-kl.de// Revision 1.6  2011/02/18 20:27:14  acg
20712027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyrights.
20812027Sjungma@eit.uni-kl.de//
20912027Sjungma@eit.uni-kl.de// Revision 1.5  2011/02/13 21:47:38  acg
21012027Sjungma@eit.uni-kl.de//  Andy Goodrich: update copyright notice.
21112027Sjungma@eit.uni-kl.de//
21212027Sjungma@eit.uni-kl.de// Revision 1.4  2011/01/18 20:10:45  acg
21312027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for IEEE1666_2011 semantics.
21412027Sjungma@eit.uni-kl.de//
21512027Sjungma@eit.uni-kl.de// Revision 1.3  2010/11/20 17:10:57  acg
21612027Sjungma@eit.uni-kl.de//  Andy Goodrich: reset processing changes for new IEEE 1666 standard.
21712027Sjungma@eit.uni-kl.de//
21812027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/22 17:06:27  acg
21912027Sjungma@eit.uni-kl.de//  Andy Goodrich: updated copyright notice to include 2008.
22012027Sjungma@eit.uni-kl.de//
22112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:05  acg
22212027Sjungma@eit.uni-kl.de// SystemC 2.3
22312027Sjungma@eit.uni-kl.de//
22412027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:44:30  acg
22512027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source.
22612027Sjungma@eit.uni-kl.de//
22712027Sjungma@eit.uni-kl.de
22812027Sjungma@eit.uni-kl.de// Taf!
229