| INSTALL NOTES FOR SystemC Release 2.3 | |
| ------------------------------------- | |
| Contents: | |
| 1. Installation Notes for Unix | |
| 2. Installation Notes for Windows | |
| 3. SystemC Library Configuration Switches | |
| 1. Installation Notes for Unix | |
| ------------------------------ | |
| System Requirements | |
| =================== | |
| SystemC can be installed on the following UNIX, or UNIX-like platforms: | |
| o Linux | |
| * Architectures | |
| - x86 (32-bit) | |
| - x86_64 (64-bit) | |
| - x86 (32-bit) application running on x86_64 (64-bit) kernel | |
| (../configure --host=i686-linux-gnu) | |
| * Compilers | |
| - GNU C++ compiler | |
| - Clang C++ compiler | |
| - or compatible | |
| o Mac OS X | |
| * Architectures | |
| - x86 (32-bit) | |
| - x86_64 (64-bit) | |
| - powerpc (32-bit) [deprecated] | |
| - powerpc64 (64-bit) [deprecated] | |
| * Compilers | |
| - GNU C++ compiler | |
| - Clang C++ compiler | |
| - or compatible | |
| o Solaris | |
| * Architectures | |
| - SPARC (32-bit) | |
| * Compilers | |
| - GNU C++ compiler | |
| - Sun/Solaris Studio | |
| o BSD | |
| * Architectures | |
| - x86 (32-bit) | |
| - x86_64 (64-bit) | |
| * Compilers | |
| - GNU C++ compiler | |
| - Clang C++ compiler | |
| - or compatible | |
| o Windows | |
| * Compatibility layer | |
| - Cygwin | |
| - MinGW / MSYS | |
| * Architectures | |
| - x86 (32-bit) | |
| - x86_64 (64-bit) | |
| * Compilers | |
| - GNU C++ compiler | |
| - or compatible | |
| Note: Not all combinations are equally well-tested and some combinations | |
| may not work as expected. Please report your findings by following | |
| the instructions in the README file. | |
| The README file contains a list of detailed platforms, architectures, | |
| and compiler versions that have been used for testing this release. | |
| Sources for Compilers and Related Tools | |
| ======================================= | |
| To build, install, and use SystemC on UNIX platforms, you need | |
| the following tools: | |
| 1. GNU C++ compiler, version 3.4 or later | |
| or | |
| Clang C++ compiler version 3.0 or later | |
| 2. GNU Make (gmake) | |
| GCC, Clang, and gmake are free software that you can | |
| obtain from the following sources: | |
| GCC http://www.gnu.org/software/gcc/gcc.html | |
| Clang http://clang.llvm.org/ | |
| gmake http://www.gnu.org/software/make/make.html | |
| Basic SystemC Installation | |
| ========================== | |
| To install SystemC on a UNIX system, do the following steps: | |
| 1. Change to the top level directory (systemc-2.3.1) | |
| 2. Create a temporary directory, e.g., | |
| > mkdir objdir | |
| 3. Change to the temporary directory, e.g., | |
| > cd objdir | |
| 4. Choose your compiler by setting the CXX environment variable | |
| (the configure script tries to guess the default compiler, if | |
| this step is omitted): | |
| If you use a POSIX-compatible shell (e.g. bash): | |
| > export CXX="<compiler>" | |
| e.g. for GCC compilers | |
| > export CXX=g++ | |
| The Clang compiler is usually named 'clang++', thus e.g. | |
| > export CXX=clang++ | |
| When using a C shell (e.g. csh/tcsh), the syntax to set the | |
| environment variable is different: | |
| > setenv CXX g++ | |
| For the Sun/Solaris Studio compilers, use | |
| > setenv CXX CC | |
| You can also specify an absolute path to the compiler of your choice. | |
| See also the Section "Compilation and Linking Options" below. | |
| 5. Configure the package for your system, e.g., | |
| (The configure script is explained below.) | |
| > ../configure | |
| While the 'configure' script is running, which takes a few moments, | |
| it prints messages to inform you of the features it is checking. | |
| It also detects the platform. | |
| Note for System V users: | |
| If you are using `csh' on an older version of System V, you might | |
| need to use the `sh ../configure' command instead of '../configure'. | |
| Otherwise, `csh' will attempt to `configure' itself. | |
| SystemC 2.3 includes a fixed-point package that is always built. | |
| When compiling your applications with fixed-point types, you still have | |
| to use compiler flag -DSC_INCLUDE_FX. Note that compile times increase | |
| significantly when using this compiler flag. | |
| In case you want to install the package in another place than the | |
| top level directory (systemc-2.3.1), configure the package e.g. as | |
| follows: | |
| > ../configure --prefix=/usr/local/systemc-2.3.1 | |
| Note: make sure you have created the target directory before installing | |
| the package. Do _not_ use /usr/local as a prefix, unless you | |
| follow the Unix/FHS directory layouts (see below). | |
| A fine grained configuration of the installation directories can | |
| be achieved via additional options, given to the configure script. | |
| By default, the files are installed directly to the PREFIX directory | |
| root and the library is installed to PREFIX/lib-<TARGETARCH>, | |
| depending on the current target architecture. This may be undesired | |
| in cases where the package is meant to be installed in a system-wide | |
| location as part of shared (default) library and include hierarchies | |
| (e.g. /usr/local, /usr, /opt, ...). To follow the Unix/FHS directory | |
| standards, you can use the following options: | |
| --with-unix-layout use Unix directory layout for installation | |
| [default=no] | |
| when "yes", the following (fine-grained) settings will be used: | |
| --includedir=DIR C++ header files [PREFIX/include] | |
| --libdir=DIR object code libraries [EPREFIX/lib] | |
| --docdir=DIR documentation root [DATAROOTDIR/doc/systemc] | |
| The library destination itself can be further and separately configured | |
| by using the following option: | |
| --with-arch-suffix add suffix to library installation directory | |
| [default=-<TARGETARCH>] | |
| With this option, one can easily follow e.g. the "multi-arch" | |
| conventions on some platforms: | |
| ../configure --with-arch-suffix=32 # lib32 | |
| ../configure --with-arch-suffix=/x86_64-linux-gnu # lib/x86_64-linux-gnu | |
| Several options are available to the configure script to modify | |
| the compiler configuration and the selection of certain features: | |
| --disable-shared do not build shared library (libsystemc.so) | |
| --enable-debug include debugging symbols | |
| --disable-optimize disable compiler optimization | |
| --disable-async-updates disable request_async_update support | |
| --enable-pthreads use POSIX threads for SystemC processes | |
| --enable-phase-callbacks | |
| enable simulation phase callbacks (experimental) | |
| See the section on the general usage of the configure script and | |
| "../configure --help" for more information. | |
| Note: If you change the configuration after having compiled the | |
| package already, you should run a "gmake clean" before | |
| recompiling. | |
| 6. Compile the package. | |
| > gmake | |
| Note: The explicit gmake targets "opt" and "debug", etc. have | |
| been removed in this package. Use the corresponding | |
| options to the configure script instead. | |
| 7. At this point you may wish to verify the compiled package by | |
| testing the example suite. | |
| > gmake check | |
| This will compile and run the examples in the subdirectory | |
| examples. | |
| 8. Install the package. | |
| > gmake install | |
| 9. You can now remove the temporary directory, .e.g, | |
| > cd .. | |
| > rm -rf objdir | |
| Alternatively, you can keep the temporary directory to allow you to: | |
| a) Experiment with the examples. | |
| b) Later uninstall the package. To clean up the temporary | |
| directory, enter: | |
| > gmake clean | |
| To uninstall the package, enter: | |
| > gmake uninstall | |
| Running the Examples | |
| ==================== | |
| Copies of the examples reside in the temporary directory - see | |
| instruction 7 above for details on building and running them. | |
| In addition, a copy of the example code resides in the directory | |
| examples at the highest level of the installation (or in the | |
| shared documentation install directory). | |
| Use the makefiles provided in the 'examples' directory as templates | |
| for makefiles you need for compiling your own examples. | |
| Using the Configure Script | |
| ========================== | |
| The `configure' shell script tries to determine the correct values for | |
| various system-dependent variables used during compilation. It uses | |
| these values to create a `Makefile' in each directory of the package. | |
| It also creates one or more `.h' files containing system-dependent | |
| definitions if needed. Then, it creates the following files: | |
| config.status A shell script that you can run at another time to | |
| recreate the current configuration. | |
| config.cache A file in which the configure test results are | |
| saved to speed up reconfiguration. | |
| Data is appended to the config.cache file. | |
| You can remove unwanted data. | |
| config.log A file in which compiler output is saved. | |
| This is used to debug the configure script. | |
| If you need to use other commands to successfully compile the package | |
| on your system, please try to determine if the configure script can be used | |
| for these commands. Then, send either a diff file or instructions about | |
| the commands you used to the email address provided in the README file. | |
| This information will be used to improve the installation process in | |
| the next release. | |
| The `configure.ac' file is provided in case you want to change or regenerate | |
| the `configure' script, for example to use a newer version of `autoconf'. | |
| The `configure.ac' file is used by the `autoconf' program to create the | |
| `configure' script. | |
| Note for (key) developers: | |
| In case you have changed the `configure.ac' file or one of the | |
| `Makefile.am' files: | |
| - Use the `config/distclean' script to remove the generated `configure' | |
| script, the generated `aclocal.m4' file and the generated `Makefile.in' | |
| files. | |
| - Use the `config/bootstrap' script to generate the `configure' script | |
| and the necessary `Makefile.in' files. This script makes use of the | |
| GNU auto-tools `aclocal', `automake', and `autoconf'. | |
| Compilation and Linking Options | |
| =============================== | |
| Some systems require compilation or linking options that the `configure' | |
| script does not define. You can define the initial values for these | |
| options by setting them in your environment before running the | |
| `configure' script. | |
| Instead of passing the variables via the environment, it is preferred | |
| to pass the values as options to the configure script: | |
| > ../configure CXX=g++-4.4 LIBS=-lposix | |
| Specifying the System Type | |
| ========================== | |
| Some features cannot be automatically determined by `configure' unless | |
| it can detect the host type on which the package will run. | |
| If it prints a message that it cannot determine the host type, | |
| use the `--host=TYPE' option to define it. TYPE can either be a | |
| short system name, such as `sun4', or a canonical name with three fields: | |
| CPU-COMPANY-SYSTEM | |
| See the `config.sub' file for details about the values of each field. If | |
| the `config.sub' file is not included in the package, the package does not | |
| need to know the host type. | |
| If you are building compiler tools for cross-compiling, you can also | |
| use the `--target=TYPE' option to select the type of system for which | |
| the code is produced and the `--build=TYPE' option to select the type of | |
| system on which you are compiling the package. | |
| Sharing Defaults | |
| ================ | |
| You can set the default values that `configure' scripts share by | |
| creating a site shell script called `config.site'. This file contains the | |
| default values for variables like `CC', `cache_file', and `prefix'. | |
| The `configure' script looks for the `config.site' file in the following | |
| search precedence: | |
| 1. PREFIX/share/config.site | |
| 2. PREFIX/etc/config.site | |
| Alternatively, you can set the `CONFIG_SITE' environment variable to the | |
| site script path. | |
| Note: The `configure' script for some systems does not look for a site script. | |
| Operation Controls | |
| ================== | |
| The `configure' script recognizes the following additional options to control | |
| its operation: | |
| `--cache-file=FILE' | |
| Use and save the test results in FILE instead of | |
| `./config.cache'. Set FILE to `/dev/null' to disable caching | |
| when debugging `configure'. | |
| `--help' | |
| Print a summary of `configure' options and exit. | |
| `--quiet' | |
| `--silent' | |
| `-q' | |
| Do not print messages about checks being made. | |
| To suppress all normal output, redirect it to `/dev/null'. | |
| Error messages continue to print. | |
| `--srcdir=DIR' | |
| Look for the package's source code in directory DIR. | |
| Typically `configure' determines the directory automatically. | |
| `--version' | |
| Print the version of `autoconf' used to generate the `configure' | |
| script and exit. | |
| Other options that are rarely used are available in the `configure' script. | |
| Use the `--help' option to print a list. | |
| 2. Installation Notes for Windows | |
| --------------------------------- | |
| This release has been tested on Visual C++ versions 2005 through 2013, | |
| running on Windows 7. | |
| Note: This section covers the installation based on Microsoft Visual C++. | |
| For Cygwin or MinGW-based installations, see Section 1. | |
| Note: If you experience spurious errors about missing files in the | |
| downloaded archive, please make sure to either download the | |
| ZIP archive from accellera.org or use a reliable archive software, | |
| fully supporting modern tar archive versions. | |
| Some paths in the SystemC archive are longer than the historical | |
| 99 character limit, and several Windows archivers (e.g. WinZip) | |
| have been reported to trip over this. The open source archiver | |
| 7-zip (http://7-zip.org) is known to work. | |
| Microsoft Visual C++ 2005 (compiler version 8.0) or later | |
| --------------------------------------------------------- | |
| The download directory contains two subdirectories: 'msvc80' and | |
| 'examples'. | |
| The 'msvc80' directory contains the project and workspace files to | |
| compile the 'systemc.lib' library. Double-click on the 'SystemC.sln' | |
| file to launch Visual C++ 2005 with the workspace file. The workspace file | |
| will have the proper switches set to compile for Visual C++ 2005. | |
| Select `Build SystemC' under the Build menu or press F7 to build | |
| `systemc.lib'. | |
| The `examples' directory contains the project and workspace files to | |
| compile the SystemC examples. Go to one of the examples subdirectories | |
| and double-click on the .vcproj file to launch Visual C++ with the | |
| workspace file. The workspace file will have the proper switches set | |
| to compile for Visual C++ 2005. Select 'Build <example>.exe' under the | |
| Build menu or press F7 to build the example executable. | |
| For convenience, a combined solution file 'SystemC-examples.sln' with | |
| all example projects can be found in the 'msvc80' directory. A similar | |
| solution file for the TLM examples is located in 'examples/tlm/build-msvc'. | |
| The provided project files are prepared for both the 32-bit 'Win32' and | |
| 64-bit 'x64' configurations. Please refer to the Microsoft Visual Studio | |
| documentation for details about 64-bit builds. | |
| Creating SystemC Applications | |
| ----------------------------- | |
| 1. Start Visual Studio. From the Start Page select New Project and Win32 | |
| Console Project. Type the project name and select a suitable location | |
| then click OK. | |
| 2. Select the Application Settings page of the Win32 Application Wizard | |
| and make sure the 'Empty project' box is ticked. Click 'Finish' to | |
| complete the wizard. | |
| 3. Add new/existing C++ files to the project and edit code. | |
| 4. Display the project Property Pages by selecting 'Properties...' from | |
| the Project menu. | |
| 5. From the C/C++ tab, select the General properties and set | |
| 'Detect 64-bit Portability Issues' to No | |
| 6. From the C/C++ tab, select the Language properties and set | |
| 'Enable Run-Time Type Info' to Yes | |
| 7. From the C/C++ tab, select the Command Line properties and add /vmg | |
| to the 'Additional Options:' box. | |
| 8. From the Linker tab, select the Input properties and type 'systemc.lib' | |
| in the 'Additional Dependencies' box. | |
| 9. Click OK | |
| Also make sure that the compiler and linker can find the SystemC header | |
| and library files respectively. There are two ways to do this: | |
| To update the include file and library directory search paths for all | |
| projects: | |
| 1. Select Tools -> Options... and the Projects -> VC++ Directories tab | |
| 2. Select show directories for: Library files | |
| 3. Select the 'New' icon and browse to: C:\systemc-2.3.1\msvc80\systemc\debug | |
| 4. Select show directories for: Include files | |
| 5. Select the 'New' icon and browse to: C:\systemc-2.3.1\src | |
| To add the include file and library directory search paths for the current | |
| project only: | |
| 1. Display the project Property Pages by selecting 'Properties...' from | |
| the Project menu. | |
| 2. From the C/C++ tab, select the General properties and type the path to the | |
| SystemC 'src' directory in the text entry field labeled | |
| 'Additional include directories' (e.g. the examples use '..\..\..\src'). | |
| 3. From the Linker tab, select the General properties and type the path to | |
| the SystemC library: ...\systemc-2.3.1\msvc80\systemc\debug'systemc.lib' | |
| in the 'Additional Library Directories:' box. | |
| 9. Click OK | |
| 3. SystemC Library Configuration Switches | |
| ----------------------------------------- | |
| In addition to the explicitly selectable feature given as options to | |
| the `configure' script (see 1.), some aspects of the library | |
| implementation can be controlled via | |
| - preprocessor switches given during library build | |
| - preprocessor switches added while building a SystemC application | |
| - environment variables | |
| The currently supported switches are documented in this section. | |
| Preprocessor switches | |
| ===================== | |
| Additional preprocessor switches for the library build can be passed | |
| to the configure script via the CXXFLAGS variable: | |
| ../configure CXXFLAGS="-DSC_OVERRIDE_DEFAULT_STACK_SIZE=0x80000" | |
| In Visual C++, the preprocessor symbols can be added to the project | |
| configuration via the 'C/C++' tab under the 'Preprocessor' properties | |
| in the 'Preprocessor definitions' setting. | |
| * SC_DEFAULT_WRITER_POLICY=<sc_writer_policy> - | |
| Override default value for the signal writer policy | |
| This setting allows deactivating the multiple writer checks for | |
| sc_signals at (application) compile time. This mechanism supersedes | |
| the old environment variable SC_SIGNAL_WRITE_CHECK (see below). | |
| Supported values: | |
| SC_ONE_WRITER (default) | |
| SC_MANY_WRITERS (allow multiple writers in different deltas) | |
| SC_UNCHECKED_WRITERS (non-standard, disable all checks) | |
| Note: Only effective when building an application. | |
| Note: This setting needs to be consistently set across all | |
| translation units of an application. | |
| * SC_DISABLE_ASYNC_UPDATES - | |
| Exclude the "async_request_update" support | |
| Note: This option is usually set by the `configure` option | |
| --disable-async-update, or | |
| --enable-async-update=no | |
| On non-Automake platforms (e.g. Visual C++), this preprocessor | |
| symbol can be used to manually build the library with this feature. | |
| Note: Only effective during library build. | |
| * SC_DISABLE_VIRTUAL_BIND - | |
| Keep the "bind" function of sc_ports non-virtual | |
| When this symbol is defined, the "bind" function in sc_ports is | |
| kept non-virtual (although it is required to be 'virtual' since | |
| IEEE 1666-2011). | |
| Note: This symbol needs to be consistently defined in the library | |
| and any application linking against the built library. | |
| * SC_DISABLE_COPYRIGHT_MESSAGE - | |
| Do not print the copyright message when starting the application | |
| Note: This does not remove the copyright from the binary. | |
| sc_core::sc_copyright() still works as expected. | |
| Note: Only effective during library build. | |
| See : Environment variable SC_COPYRIGHT_MESSAGE | |
| * SC_ENABLE_IMMEDIATE_SELF_NOTIFICATIONS - | |
| Allow a process to trigger itself immediately | |
| Allow a method process to trigger itself immediately by using | |
| next_trigger( ev ); // or a static sensitivity | |
| ev.notify(); | |
| This behaviour has been disabled by default in IEEE 1666-2011 and | |
| can be reenabled by this option. | |
| Note: Only effective during library build. | |
| * SC_ENABLE_EARLY_MAXTIME_CREATION - | |
| Allow creation of sc_time objects with a value of sc_max_time() | |
| before finalizing the time resolution | |
| In IEEE 1666-2011, it is not allowed to create sc_time objects with | |
| a non-SC_ZERO_TIME value before setting/changing the time resolution. | |
| This preprocessor switch activates an extension to allow the | |
| initialization of sc_time variables with sc_max_time() while | |
| still accepting changes to the time resolution afterwards. | |
| sc_time t = sc_max_time(); | |
| sc_set_time_resolution( 1, SC_NS ); // OK, with this extension | |
| The time resolution will still be fixed, once you have explicitly or | |
| implicitly relied on the physical value (i.e. the relation to seconds) | |
| of any sc_time object. | |
| Note: Only effective during library build. | |
| * SC_ENABLE_SIMULATION_PHASE_CALLBACKS (experimental) | |
| SC_ENABLE_SIMULATION_PHASE_CALLBACKS_TRACING (experimental) - | |
| Enable a generic simulation phase callback mechanism. | |
| Note: This option is usually set by the `configure` option | |
| --enable-phase-callbacks, or | |
| --enable-phase-callbacks=tracing | |
| See the RELEASENOTES for more information about this feature. | |
| The *_TRACING variant of this flag enables the sc_trace | |
| implementation use these callbacks, instead of hard-coded updates | |
| from the main simulator loop. | |
| Note: Setting tracing flag includes the generic phase callback | |
| infrastructure automatically. | |
| Note: Only effective during library build. | |
| * SC_INCLUDE_DYNAMIC_PROCESSES - | |
| Enable dynamic process support (sc_spawn, sc_bind) | |
| To improve compilation times, the functions for spawing dynamic | |
| processes are not included by default in an SystemC application. | |
| Define this symbol before including the SystemC header in your | |
| application, if you want to use dynamically spawned processes. | |
| Note: Can be optionally set per translation unit in an application. | |
| Note: Some TLM convenience sockets require this feature and define | |
| the symbol for you if needed. | |
| * SC_INCLUDE_FX - | |
| Enable SystemC fix-point datatypes | |
| To improve compilation times, the fixpoint datatypes are not enabled | |
| by default in an SystemC application. | |
| Define this symbol before including the SystemC header in your | |
| application, if you want to use the SystemC fixpoint types. | |
| Note: Is by default always defined during the library build to enable | |
| later use of the fixpoint datatypes in an application. | |
| Note: Can be optionally set per translation unit in an application. | |
| * SC_INCLUDE_STRSTREAM - | |
| Include (deprecated) <strstream> header from <systemc.h> | |
| Pre-standard C++ compilers had support for an old stringstream | |
| implementation called 'strstream'. In the unlikely case that your | |
| application still relies on this deprecated class and that <systemc.h> | |
| includes this header for you automatically, you now need to define this | |
| symbol when building your application. | |
| Note: Only effective when building an application. | |
| * SC_INCLUDE_WINDOWS_H - | |
| Explicitly include <windows.h> header from <systemc> header | |
| Previous versions of SystemC always included the full <windows.h> | |
| header on all Windows platforms. This adds unnecessary bloat to | |
| many SystemC applications, reducing compilation times. | |
| If you rely on the inclusion of the <windows.h> header in your | |
| application, you can add this symbol to the list of preprocessor | |
| switches for your compiler. | |
| Note: Only effective when building an application. | |
| * SC_OVERRIDE_DEFAULT_STACK_SIZE=<size> - | |
| Define the default stack size used for SystemC (thread) processes | |
| Note: Only effective during library build. | |
| * SC_USE_SC_STRING_OLD / SC_USE_STD_STRING - | |
| Define 'sc_string' symbol. | |
| Pre-IEEE-1666 versions of SystemC included an 'sc_string' class for | |
| string objects. This class has been superseeded by 'std::string' these | |
| days. | |
| If your application still relies on 'sc_string' being available, set one | |
| of the two supported preprocessor switches to provide it: | |
| SC_USE_SC_STRING_OLD - | |
| Uses old implementation `sc_string_old' to provide `sc_string': | |
| typedef sc_string_old sc_string; | |
| SC_USE_STD_STRING - | |
| Provide `sc_string' as an alias to `std::string': | |
| typedef std::string sc_string; | |
| Influential environment variables | |
| ================================= | |
| Currently, three environment variables are checked at library load time | |
| and influence the SystemC library's behaviour: | |
| 1) SC_COPYRIGHT_MESSAGE=DISABLE - | |
| Run-time alternative to SC_DISABLE_COPYRIGHT_MESSAGE (see above). | |
| 2) SC_SIGNAL_WRITE_CHECK=DISABLE | |
| Run-time alternative to SC_DEFAULT_WRITER_POLICY=SC_UNCHECKED_WRITERS | |
| (see above) | |
| 3) SC_DEPRECATION_WARNINGS=DISABLE | |
| Do not issue warnings about using deprecated features as of | |
| IEEE 1666-2011. | |
| Usually, it is not recommended to use any of these variables in new or | |
| on-going projects. They have been added to simplify the transition of | |
| legacy code. | |
| // Taf! |