X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6d9c67b14f86e16e2c4fefe44443e18bada3ed1a..4d9b0b89d262961f5a594bfbcb7a1312bcbe43de:/doc/doxygen/install.doc diff --git a/doc/doxygen/install.doc b/doc/doxygen/install.doc index d78e20aaa9..1ce4cd84ec 100644 --- a/doc/doxygen/install.doc +++ b/doc/doxygen/install.doc @@ -1,370 +1,344 @@ -/*! -\page install Installing Simgrid +/*! +@page install Installing Simgrid -\section install_cmake Installing the SimGrid library +@tableofcontents -\subsection install_installing_cmake Installing cmake +SimGrid should work out of the box on Linux, Mac OSX, FreeBSD and +Windows (under windows, only the Java interfaces are available atm). -You must have cmake in order to compile SimGrid. If you cannot find a -binary package of cmake for your system, you'll need to recompile it. -In turn, cmake has a few dependencies: +The easiest way to install SimGrid is to go for a binary package. +Under Debian or Ubuntu, this is very easy as SimGrid is directly +integrated to the official repositories. If you just want to use +Java, simply copy the jar file on your disk and you're set. -For Unix and MacOS: - \li make - \li perl and libpcre - \li c and c++ compiler - \li ccmake for graphical used of CMake - \li cmake (download page) +Recompiling an official archive is not much more complex, actually. +SimGrid has very few dependencies and rely only on very standard +tools. First, download the *@SimGridRelease.tar.gz* archive +from [the download page](https://gforge.inria.fr/frs/?group_id=12). +Then, recompiling the archive should be done in a few lines: -On MacOSX some users reported that it is still possible to build with clang, provided that you -use at least clang3.0 installed with macport or with xcode. If it fails on you, try to - use gcc47. -\verbatim -port install clang-3.0 -port install gcc47 -\endverbatim - -For Windows: - \li cmake 2.8 (download page) - \li MinGW (download page) - \li perl (download page) - \li git (download page) - -Note that if you want change the compiler, you can simply specify the environment variables CC and CXX. -\verbatim - export CC=gcc-4.4 - export CXX=g++-4.4 - export CC=clang - export CXX=clang++ -\endverbatim - -\subsubsection install_cmakeoption1 SimGrid configuration options - -\verbatim -"cmake -D[name]=[value] ... ./" - -[name] enable_gtnets [value] ON/OFF or TRUE/FALSE or 1/0 - enable_ns3 ON/OFF or TRUE/FALSE or 1/0 - enable_lua ON/OFF or TRUE/FALSE or 1/0 - enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0 - enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0 - enable_smpi ON/OFF or TRUE/FALSE or 1/0 - enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0 - enable_tracing ON/OFF or TRUE/FALSE or 1/0 - enable_coverage ON/OFF or TRUE/FALSE or 1/0 - enable_memcheck ON/OFF or TRUE/FALSE or 1/0 - enable_model-checking ON/OFF or TRUE/FALSE or 1/0 - enable_debug ON/OFF or TRUE/FALSE or 1/0 - enable_jedule ON/OFF or TRUE/FALSE or 1/0 - enable_latency_bound_tracking ON/OFF or TRUE/FALSE or 1/0 - enable_lib_static ON/OFF or TRUE/FALSE or 1/0 - enable_supernovae ON/OFF or TRUE/FALSE or 1/0 - enable_msg_deprecated ON/OFF or TRUE/FALSE or 1/0 - enable_print_message ON/OFF or TRUE/FALSE or 1/0 - gtnets_path - ns3_path - CMAKE_INSTALL_PREFIX - pipol_user -\endverbatim - - \li enable_gtnets: set to true implies that user wants to use gtnets. - - \li enable_ns3: set to true implies that user wants to use ns3. - - \li enable_lua: set to true implies that user wants to add lua language into simgrid compilation. - - \li enable_compile_optimizations: add flags "-O3 -finline-functions -funroll-loops -fno-strict-aliasing" - - \li enable_compile_warnings: add flags "-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror" - - \li enable_smpi: Set to true if you want to use smpi lib. Actually on simgrid v3.4.1 Mac doesn't support lib smpi. - - \li enable_maintainer_mode: set to true it remakes some files. - - \li enable_tracing: To enable the generation of simulation traces for visualization. - - \li enable_coverage: When set to true this option enable code coverage by setting -fprofile-arcs -ftest-coverage flags. - - \li enable_memcheck: When set to true this option enable tests for memcheck. - - \li enable_model-checking: Enable the model checking when set to true. - - \li enable_debug: If enable_debug is set to 'off' Simgrid compile flag has '-DNDEBUG' option. - - \li enable_jedule: To enable jedule mode, which creates visualizations of task schedules with Simdag. - - \li enable_latency_bound_tracking: Set to on if you want to be warned when communications are limited by round trip time. - - \li enable_lib_static: Enable generated Simgrid and smpi static libraries. - - \li enable_supernovae: Set to true make one file for each lib and compile with those generated files. - - \li enable_msg_deprecated: Simgrid is compiled with msg deprecated functions. - - \li enable_print_message: When set to true configuration print more debug output. - - \li gtnets_path: Path to gtnets install directory (ex /usr) - - \li ns3_path: Path to ns3 install directory (ex /usr) - - \li CMAKE_INSTALL_PREFIX: Path where are installed lib/ doc/ and include/ directories (ex /usr/local) - - \li pipol_user: specify your pipol username if you want to use the pipol-remote command. - -\subsubsection install_cmakeoption3 Initialization - -Those options are initialized the first time you launch "cmake ." without specified option. - -\verbatim -enable_gtnets on -enable_lua on -enable_smpi on -enable_tracing on -enable_compile_optimizations on -enable_debug on -enable_compile_warnings off -enable_maintainer_mode off -enable_coverage off -enable_memcheck off -enable_model-checking off -enable_jedule off -enable_latency_bound_tracking off -enable_lib_static off -CMAKE_INSTALL_PREFIX /usr/local -gtnets_path null -pipol_user null -\endverbatim - -\subsubsection install_cmakeoption4 How to reset the cache of options - -When options have been set they are keep into a cache file named "CMakeCache.txt". So if you want -reset values you just delete this file located to the project directory. - -\subsection install_cmakecompilation Cmake compilation - -\subsubsection install_cmakecompilation1 With command line. - -On Unix or Mac platform: - -\verbatim -cmake -D[name]=[value] ... ./ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.sh} +tar xf @SimGridRelease.tar.gz +cd @SimGridRelease +cmake -DCMAKE_INSTALL_PREFIX=/opt/simgrid . make -\endverbatim - -On Windows platform: - -\verbatim -cmake -G"MinGW Makefiles" -D[name]=[value] ... ./ -mingw32-make -\endverbatim - -\subsubsection install_cmakecompilation2 With ccmake tool. - -\verbatim -"ccmake ./" -\endverbatim -Then follow instructions. - -\subsubsection install_cmakecompilation2bis Build out of source. - -As cmake generate many files used for compilation, we recommend to make a build directory. -For examples you can make: - -\verbatim -"navarrop@caraja:~/Developments$ cd simgrid/" -"navarrop@caraja:~/Developments/simgrid$ mkdir build_directory" -"navarrop@caraja:~/Developments/simgrid$ cd build_directory/" -"navarrop@caraja:~/Developments/simgrid/build_directory$ cmake ../" -"navarrop@caraja:~/Developments/simgrid/build_directory$ make" -\endverbatim - -Or completely out of sources: - -\verbatim -"navarrop@caraja:~/Developments$ mkdir build_dir" -"navarrop@caraja:~/Developments$ cd build_dir/" -"navarrop@caraja:~/Developments/build_dir$ cmake ../simgrid/" -"navarrop@caraja:~/Developments/build_dir$ make" -\endverbatim +make install +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you want to stay on the bleeding edge, you should get the latest +git version, and recompile it as you would do for an official archive. +Depending on the files you change in the source tree, some extra +tools may be needed. + +@section install_binary Installing a binary package + +@subsection install_binary_linux Binary packages for linux + +Most of the developers use a Debian or Ubuntu system, and some of us +happen to be Debian Maintainers, so the packages for these systems are +well integrated with these systems and very up-to-date. To install them, +simply type: + +@verbatim +apt-get install simgrid +@endverbatim + +On other Linux variants, you probably want to go for a source install. +Please contact us if you want to contribute the build scripts for your +preferred distribution. + +@subsection install_binary_java Using the binary jar file + +The easiest way to install the Java bindings of SimGrid is to grab the +jar file from the +Download page, +and copy it in your classpath (typically, in the same directory than +your source code). If you go for that version, there is no need to +install the C library as it is bundled within the jar file. Actually, +only a bunch of architectures are supported this way to keep the +jar file size under control and because we don't have access to every +exotic architectures ourselves. + +If the jarfile fails on you, complaining that your architecture is not +supported, drop us an email: we may extend the jarfile for you, if we +have access to your architecture to build SimGrid on it. + +If the error message is about the boost-context library, then you +should install that library on your machine. This is a known issue in +the 3.12 release that will be fixed in the next release. + +You can retrieve a nightly build of the jar file from our autobuilders. +For Windows, head to +AppVeyor. +Click on the artefact link on the right, and grab your file. If the +latest build failed, there will be no artefact so you will need to +first click on "History" on the top to search for the last successful +build. +For non-Windows systems (Linux, Mac or FreeBSD), head to +Jenkins. +In the build history, pick the last green (or at least yellow) build +that is not blinking (ie, that is done building). In the list, pick a +system that is close to your system, and click on the ball in the +Debug row. The build artefact appear on the top of the resulting page. + +@section install_src Installing from source + +@subsection install_src_deps Resolving the dependencies + +SimGrid only uses very standard tools: + - C compiler, C++ compiler, make and friends. + - perl (but you may try to go without it) + - We use cmake to configure our compilation + (download page). + You need cmake version 2.8.8 or higher. You may want to use ccmake + for a graphical interface over cmake. + - LibBoost: + - osX: with fink: `fink install boost1.53.nopython`, + or with homebrew: `brew install boost` + - debian: `apt-get install libboost-dev libboost-context-dev` + - Java (only needed if you want to use the Java bindings): Grab a + full JDK from http://www.oracle.com/technetwork/java/javase/downloads + +For platform specific details, please see @ref install_cmake_mac and +@ref install_cmake_windows. + +@subsection install_src_fetch Retrieving the source + +If you just want to use SimGrid, you should probably grab the latest +stable version available from the +download page. +We do our best to release soon and release often, but sometimes you +need to install the developer version of SimGrid, directly from the +git repository. Avoid the git version if you are not sure, as it may +break on you, or even worse. + +@verbatim +git clone git://scm.gforge.inria.fr/simgrid/simgrid.git simgrid +@endverbatim -Those two kinds of compilation allow to delete files created by compilation more easily. +@subsection install_src_config Configuring the build -\subsubsection install_cmakecompilation3 Resume of command line +Note that compile-time options are very different from @ref options +"run-time options". - \li CMake -\verbatim -cmake configure the project for Unix and Mac -cmake -G"MinGW Makefiles" configure the project for Windows -make build all targets for Unix and Mac -ming32-make build all targets for windows -(g)make VERBOSE=1 build all targets and print build command lines -make check test all targets and summarize -make dist make the distrib -make distcheck check the dist (make + make dist + make check) -(g)make install install the project (doc/ bin/ lib/ include/) -(g)make uninstall uninstall the project (doc/ bin/ lib/ include/) -(g)make clean clean all targets -make simgrid_documentation Create simgrid documentation -\endverbatim +\subsubsection install_cmake_howto Setting compilation options -When the project have been successfully compiling and build you can make tests. +The default configuration should be ok for most usages, but if you +need to change something, there is several ways to do so. First, you +can use environment variables. For example, you can change the used +compilers by issuing these commands before launching cmake: - \li CTest -\verbatim -ctest launch only tests -ctest -D Continuous -ctest -D Continuous(Start|Update|Configure|Build) -ctest -D Continuous(Test|Coverage|MemCheck|Submit) -ctest -D Experimental -ctest -D Experimental(Start|Update|Configure|Build) -ctest -D Experimental(Test|Coverage|MemCheck|Submit) -ctest -D Nightly -ctest -D Nightly(Start|Update|Configure|Build) -ctest -D Nightly(Test|Coverage|MemCheck|Submit) -ctest -D NightlyMemoryCheck -\endverbatim - -If you want to test before make a commit you can simply make "ctest -D Experimental" and then you can visualize results submitted into Cdash. (Go to Cdash site). +@verbatim +export CC=gcc-4.7 +export CXX=g++-4.7 +@endverbatim + +Note that other variables are available, such as CFLAGS and CXXFLAGS to add +options for respectively the C compiler and the C++ compiler. + +Another way to do so is to use the -D argument of cmake as follows. +Note that the terminating dot is mandatory (see @ref +install_cmake_outsrc to understand its meaning). + +@verbatim +cmake -DCC=clang -DCXX=clang++ . +@endverbatim + +Finally, you can use a graphical interface such as ccmake to change +these settings. Simply follow the instructions after starting the +interface. + +@verbatim +ccmake . +@endverbatim + +\subsubsection install_cmake_list SimGrid compilation options + +In addition to the classical cmake configuration variables, SimGrid +accepts several options, as listed below. + + @li CMAKE_INSTALL_PREFIX (path): Where to install SimGrid + (/opt/simgrid or /usr/local or elsewhere). + + @li enable_compile_optimizations (ON/OFF): request the + compiler to produce efficient code. You want to activate it, + unless you want to debug SimGrid itself (as efficient code may + be appear mangled to the debuggers). + + @li enable_debug (ON/OFF): disable this if simulation speed + really matters to you. All log messages of gravity debug or + below will be discarded at compilation time. Since there is + quite a bunch of such log messages in SimGrid itself, this can + reveal faster than discarding them at runtime as usually. But of + course, it is then impossible to get any debug message from + SimGrid if something goes wrong. + + @li enable_model-checking (ON/OFF): Only enable this if you + actually plan to use the model-checking aspect of SimGrid. This + mode of execution is still under heavy work, but it should be + rather usable now. Be warned that this option will hinder + your simulation speed even if you simulate without activating + the model-checker. We are working on improving this situation. + + @li enable_compile_warnings (ON/OFF): request the compiler to + issue error message whenever the source code is not perfectly + clean. If you develop SimGrid itself, you must activate it to + ensure the code quality, but as a user, that option will only + bring you issues. + + @li enable_maintainer_mode (ON/OFF): you only need to set + this option if you modify very specific parts of SimGrid itself + (the XML parsers and other related elements). Adds an extra + dependency on flex and flexml. + + @li enable_smpi (ON/OFF): disable this if you have issues + with the module allowing to run MPI code on top of SimGrid. This + module very stable, but if you really don't need it, you can + disable it. + + @li enable_mallocators (ON/OFF): disable this when tracking + memory issues within SimGrid, or the caching mechanism used + internally will fool the debuggers. + + @li enable_jedule (ON/OFF): enable this to get SimDag + producing traces that can then be visualized with the Jedule + external tool. + + @li enable_lua (ON/OFF): enable this if you want to enjoy the + lua bindings of SimGrid. Adds an extra dependency on lua library + and developer header files. + + + @li enable_ns3 (ON/OFF): whether you want to use ns3. + See section @ref pls_simgrid_configuration_ns3. + @li NS3_HINT (path): Where to search for NS3 (eg /usr or /opt). + @li enable_documentation (ON/OFF) : whether the documentation should be + generated during the compilation. Default is ON. + +\subsubsection install_cmake_reset Resetting the compilation configuration + +If you need to empty the cache of values saved by cmake (either +because you added a new library or because something seriously went +wrong), you can simply delete the file CMakeCache.txt that is created +at the root of the source tree. You may also want to edit this file +directly in some circumstances. + +\subsubsection install_cmake_outsrc Compiling into a separate directory + +By default, the files produced during the compilation are placed in +the source directory. As the compilation generates a lot of files, it +is advised to to put them all in a separate directory. It is then +easier to cleanup, and this allows to compile several configurations +out of the same source tree. For that, simply enter the directory +where you want the produced files to land, and invoke cmake (or +ccmake) with the full path to the SimGrid source as last argument. +This approach is called "compilation out of source tree". + +@verbatim +mkdir build +cd build +cmake [options] .. +make +@endverbatim -\subsection install_cmakeinstall How to install with cmake? +\subsubsection install_cmake_mac Building on Mac OS X -\subsubsection install_cmakeinstall1 From Git. +SimGrid compiles like a charm with clang (version 3.0 or higher) on Mac OS X: -\verbatim -git clone git://scm.gforge.inria.fr/simgrid/simgrid.git simgrid -cd simgrid -cmake -Denable_maintainer_mode=on -DCMAKE_INSTALL_PREFIX=/home/navarrop/Bureau/install_simgrid ./ +@verbatim +cmake -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ . make -make install -\endverbatim - -\subsubsection install_cmakeinstall2 From a distrib - -\verbatim -wget https://gforge.inria.fr/frs/download.php/28674/simgrid-3.6.1.tar.gz -tar xf simgrid-3.6.1.tar.gz -cd simgrid-3.6.1 -cmake -DCMAKE_INSTALL_PREFIX=/home/navarrop/Bureau/install_simgrid ./ +@endverbatim + +With the XCode version of clang 4.1, you may get the following error message: +@verbatim +CMake Error: Parse error in cache file build_dir/CMakeCache.txt. Offending entry: /SDKs/MacOSX10.8.sdk +@endverbatim + +In that case, edit the CMakeCache.txt file directly, so that the +CMAKE_OSX_SYSROOT is similar to the following. Don't worry about the +warning that the "-pthread" argument is not used, if it appears. +@verbatim +CMAKE_OSX_SYSROOT:PATH=/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer +@endverbatim + +In the El Capitan version of Max OS X, Apple decided that users don't +need no /usr/include directory anymore. If you are hit by this pure +madness, just run the following command to restore that classical +UNIX directory: `xcode-select -install` + +\subsubsection install_cmake_windows Building on Windows + +Building from the source on Windows, may be something of an adventure. +We never managed to compile SimGrid with something else than MinGW-64 +ourselves. We usually use the +activestate +version of Perl, and the +msys +version of git on this architecture, but YMMV. You can have a look at +the configuration scripts in the appveyor.yml file, but you are +basically on your own here. Sorry. We are not fluent with Windows so +we cannot really help. + +The drawback of MinGW-64 is that the produced DLL are not compatible +with MS Visual C. If you need it, clang-cl +sounds promising. If you manage to get something working, please tell +us how you achieved it. + +\subsection install_src_compil SimGrid main compilation targets + +In most cases, compiling and installing SimGrid is enough: + +@verbatim make -make install -\endverbatim - -\section install_Win Installing the SimGrid framework on Windows - -\subsection install_Win_install Installing SimGrid with the automatic installer - -Before start the installation, you need to be sure to have the following dependencies: - \li cmake 2.8 (download page) - \li MinGW (download page) - \li perl (download page) - \li git (download page) - -Then download the package SimGrid Installer, -execute it and follow instructions. - -\htmlonly - -\endhtmlonly - -Step 1: Accept the license. - -\htmlonly - -\endhtmlonly - -Step 2: Select packets to install. - -\htmlonly - -\endhtmlonly - -Step 3: Choice where to install packets previously selected. Please don't use spaces in path. +make install # try "sudo make install" if you don't have the permission to write +@endverbatim + +In addition, several compilation targets are provided in SimGrid. If +your system is well configured, the full list of targets is available +for completion when using the Tab key. Note that some of the existing +targets are not really for public consumption so don't worry if some +stuff don't work for you. + +@verbatim +make simgrid Build only the SimGrid library and not any example +make masterslave Build only this example (and its dependencies) +make clean Clean the results of a previous compilation +make install Install the project (doc/ bin/ lib/ include/) +make uninstall Uninstall the project (doc/ bin/ lib/ include/) +make dist Build a distribution archive (tgz) +make distcheck Check the dist (make + make dist + tests on the distribution) +make doc Create SimGrid documentation +@endverbatim + +If you want to see what is really happening, try adding VERBOSE=1 to +your compilation requests: + +@verbatim +make VERBOSE=1 +@endverbatim + +@subsection install_src_test Testing SimGrid + +Once everything is built, you may want to test the result. SimGrid +comes with an extensive set of regression tests (see @ref +inside_tests "that page of the insider manual" for more +details). Running the tests is done using the ctest binary that comes +with cmake. These tests are run for every commit and the result is +publicly available. -\htmlonly - -\endhtmlonly - -Step 4: Add CLASSPATH to environment variables. - -\htmlonly - -\endhtmlonly - -Step 5: Add PATH to environment variables. - -\htmlonly - -\endhtmlonly - -Step 6: Restart your computer to take in consideration environment variables. - -\subsection install_Win_compile1 Compile a project "HelloWorld" - -In the SimGrid install directory you should have an HelloWorld project to explain you how to start -compiling a source file. There are: -\verbatim -- HelloWorld.c The example source file. -- CMakeLists.txt It allows to configure the project. -- FindPCRE.cmake This finds and links to the pcre library (Normally included - into Simgrid directory "GnuWin32"). -- README This explaination. -\endverbatim - -Now let's compile this example: -\li Run windows shell "cmd". -\li Open HelloWorld Directory ('cd' command line). -\li Create a build directory and change directory. (optional) -\li Type 'cmake -G"MinGW Makefiles" \' -\li Run mingw32-make -\li You should obtain a runnable example ("HelloWorld.exe"). - -For compiling your own code you can simply copy the HelloWorld project and rename source name. It will -create a target with the same name of the source. - -\subsection install_Win_compile2 How to add and compile a new example - -\li Put your source file into the helloWord directory. -\li Edit CMakeLists.txt by removing the Find Targets section and add those two lines into this section -\verbatim -################ -# FIND TARGETS # -################ -#It creates a target called 'TARGET_NAME.exe' with the sources 'SOURCES' -add_executable(TARGET_NAME SOURCES) -#Links TARGET_NAME with simgrid and pcre -target_link_libraries(TARGET_NAME simgrid pcre) -\endverbatim -\li To initialize and build your project, you'll need to run \verbatim -cmake -G"MinGW Makefiles" \ +ctest # Launch all tests +ctest -R msg # Launch only the tests which name match the string "msg" +ctest -j4 # Launch all tests in parallel, at most 4 at the same time +ctest --verbose # Display all details on what's going on +ctest --output-on-failure # Only get verbose for the tests that fail + +ctest -R msg- -j5 --output-on-failure # You changed MSG and want to check that you didn't break anything, huh? + # That's fine, I do so all the time myself. \endverbatim -\li Run "mingw32-make" -\li You should obtain "TARGET_NAME.exe". -\subsection install_Win_ruby Setup a virtualbox to use SimGrid-Ruby on windows - -Allan Espinosa made these set of Vagrant rules available so that you -can use the SimGrid Ruby bindings in a virtual machine using -VirtualBox. Thanks to him for that. You can find his project here: -https://github.com/aespinosa/simgrid-vagrant - -\section install_mac Installing the SimGrid framework on Mac OS X - -The Mac OS X system is part of the UNIX family, but it exhibits some -specificities that complicate a bit the build of SimGrid. Current -versions of SimGrid (3.7.x) can only be build with the GCC Compiler, -but recent OS X version provide only an ancient version of that tool -in the hope to see the users switch to the LLVM compiler family. The -problem is that SimGrid uses internal libraries of GCC, for stack -manipulation for example. We are working on removing this dependency -onto gcc to ease the build process, but this is still ongoing. - -For the time being, you need to get a recent version of GCC on your -system to build SimGrid. Version 3.7.1 was successfully built on Mac -Lion 10.7.4 using a GCC compiler retrieved from macport. The package -used were gcc47, and the binary in the package were gcc-mp-4.7. - -\section install_setting_MSG Setting up your own MSG code +\section install_setting_own Setting up your own code Do not build your simulator by modifying the SimGrid examples. Go outside the SimGrid source tree and create your own working directory @@ -393,53 +367,66 @@ Makefile. It is a generic Makefile that we have used many times with our students when we teach the C language. \verbatim +# The first rule of a Makefile is the default target. It will be built when make is called with no parameter +# Here, we want to build the binary 'masterslave' all: masterslave + +# This second rule lists the dependencies of the masterslave binary +# How this dependencies are linked is described in an implicit rule below masterslave: masterslave.o sched.o -INSTALL_PATH = $$HOME -CC = gcc -PEDANTIC_PARANOID_FREAK = -O0 -Wshadow -Wcast-align \ - -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \ - -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \ - -Wmissing-noreturn -Wredundant-decls -Wnested-externs \ - -Wpointer-arith -Wwrite-strings -finline-functions -REASONABLY_CAREFUL_DUDE = -Wall -NO_PRAYER_FOR_THE_WICKED = -w -O2 -WARNINGS = $(REASONABLY_CAREFUL_DUDE) -CFLAGS = -g $(WARNINGS) - -INCLUDES = -I$(INSTALL_PATH)/include -DEFS = -L$(INSTALL_PATH)/lib/ -LDADD = -lm -lsimgrid -LIBS = +# These third give the dependencies of the each source file +masterslave.o: masterslave.c sched.h # list every .h that you use +sched.o: sched.c sched.h -%: %.o - $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ +# Some configuration +SIMGRID_INSTALL_PATH = /opt/simgrid # Where you installed simgrid +CC = gcc # Your compiler +WARNING = -Wshadow -Wcast-align -Waggregate-return -Wmissing-prototypes \ + -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes \ + -Wmissing-declarations -Wmissing-noreturn -Wredundant-decls \ + -Wnested-externs -Wpointer-arith -Wwrite-strings -finline-functions +# CFLAGS = -g -O0 $(WARNINGS) # Use this line to make debugging easier +CFLAGS = -g -O2 $(WARNINGS) # Use this line to get better performances + +# No change should be mandated past that line +############################################# +# The following are implicit rules, used by default to actually build +# the targets for which you listed the dependencies above. + +# The blanks before the $(CC) must be a Tab char, not spaces +%: %.o + $(CC) -L$(SIMGRID_INSTALL_PATH)/lib/ $(CFLAGS) $^ -lsimgrid -o $@ %.o: %.c - $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $< + $(CC) -I$(SIMGRID_INSTALL_PATH)/include $(CFLAGS) -c -o $@ $< clean: - rm -f $(BIN_FILES) *.o *~ -.SUFFIXES: + rm -f *.o *~ .PHONY: clean - \endverbatim -The first two lines indicates what should be build when typing make -(masterslave) and of which files it is to be made of -(masterslave.o and sched.o). This makefile assumes -that you have set up correctly your LD_LIBRARY_PATH variable -(look, there is a LDADD = -lm -lsimgrid). If you prefer using -the static version, remove the -lsimgrid and add a -$(INSTALL_PATH)/lib/libsimgrid.a on the next line, right -after the LIBS = . - -More generally, if you have never written a Makefile by yourself, type -in a terminal: info make and read the introduction. The -previous example should be enough for a first try but you may want to -perform some more complex compilations... - - +The comments of this file should be enough to understand what's going +on. If you are completely new to makefiles, you should install the +make-doc package and type this command in a terminal: +info make. + +Sometimes, the following error message (or similar) will be produced. +@verbatim +masterworker.c:209: undefined reference to `sg_version_check' +masterworker.c:209: undefined reference to `MSG_init_nocheck' +(and possibly many other undefined references) +@endverbatim + +It means that the system does not manage to find simgrid when it tries +to execute your programs. Specify where to search with the +LD_LIBRARY_PATH variable. Try running the following command +before executing your code. If it helps, you should add this line to +your ~/.bashrc so that it gets executed each time you log into your +computer. + +@verbatim +export LD_LIBRARY_PATH=/opt/simgrid/lib +@endverbatim */