Difference between revisions of "Metamod:Source Environment"
m |
m (Fixed a typo) |
||
(16 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | This article explains how to set up your Windows or Linux environment to compile Metamod:Source | + | This article explains how to set up your Windows or Linux environment to compile Metamod:Source's sample plugins. |
− | This article does not guarantee that you will be able to build third-party plugins, which may have their own build environment requirements. However, it creates a baseline for making sure you can successfully build plugins | + | This article does not guarantee that you will be able to build third-party plugins, which may have their own build environment requirements. However, it creates a baseline for making sure you can successfully build plugins. |
'''Note:''' You can use Valve's HL2SDK source tree, but we have our own available. It fixes all of Valve's mistakes such that you can build on both GCC and Visual Studio with no warnings or errors. | '''Note:''' You can use Valve's HL2SDK source tree, but we have our own available. It fixes all of Valve's mistakes such that you can build on both GCC and Visual Studio with no warnings or errors. | ||
− | '''Note:''' This article | + | '''Note:''' This article is intended to be used against Metamod:Source 1.7. |
=Requirements= | =Requirements= | ||
==Windows== | ==Windows== | ||
− | *Microsoft Visual C++ | + | *Microsoft Visual C++ 2008 (Express or higher) is supported and used for official builds. |
− | *Microsoft Visual C++ | + | *Microsoft Visual C++ 2005 (Express or higher) is unsupported, though it should work as it is capable of building compatible binaries. |
*Microsoft Visual C++ 2003 7.1 is unsupported. It is capable of building compatible binaries against the original (non-Orange Box SDK) only. | *Microsoft Visual C++ 2003 7.1 is unsupported. It is capable of building compatible binaries against the original (non-Orange Box SDK) only. | ||
*Microsoft Visual C++ 2003 7.0 or lower '''cannot''' be used. | *Microsoft Visual C++ 2003 7.0 or lower '''cannot''' be used. | ||
Line 26: | Line 26: | ||
=Setup= | =Setup= | ||
==Getting the Files== | ==Getting the Files== | ||
− | This section describes which files you must | + | This section describes which files you must have and how to get them. Do not worry about where to place them yet -- that will be discussed on a per-platform basis. You can download the files anywhere you'd like. |
− | + | You can use the HL2SDK from Valve, but it's recommended you use the one linked to here. We have a patched version that fixes many compilation bugs and it will make your life easier on both operating systems. Link for [http://hg.alliedmods.net/hl2sdks/ HLSDK changes] located at bottom of Metamod:Source downloads page. | |
− | + | You need each SDK for each game you want to compile against (if your plugin requires knowledge about the game). | |
− | + | ||
− | + | To get Metamod:Source files, visit [http://www.metamodsource.net/?go=downloads Metamod:Source downloads]. Make sure to get the source code and not the binaries. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Linux== | ==Linux== | ||
Line 54: | Line 43: | ||
Note that you must use <tt>gcc</tt> and not <tt>g++</tt>. Using <tt>g++</tt> creates a <tt>libstdc++</tt> dependency, which may interfere with Valve's <tt>libstdc++</tt> usage and will cause platform portability problems in general. As a corollary you should avoid using STL, RTTI (Run-Time Type Information), or exceptions. | Note that you must use <tt>gcc</tt> and not <tt>g++</tt>. Using <tt>g++</tt> creates a <tt>libstdc++</tt> dependency, which may interfere with Valve's <tt>libstdc++</tt> usage and will cause platform portability problems in general. As a corollary you should avoid using STL, RTTI (Run-Time Type Information), or exceptions. | ||
− | Metamod:Source's Makefiles have a strict directory organization. You must have a top-level folder. For this document, we'll assume it is called <tt> | + | Metamod:Source's Makefiles have a strict directory organization. You must have a top-level folder. For this document, we'll assume it is called <tt>project</tt>, though it can be named anything. The layout of <tt>project</tt> should be: |
− | *<tt> | + | *<tt>project</tt>/ |
+ | **<tt>mmsource-1.7</tt> - symlink or folder containing Metamod:Source 1.7 source code | ||
**<tt>hl2sdk</tt> - symlink or folder containing the HL2SDK for Episode 1 | **<tt>hl2sdk</tt> - symlink or folder containing the HL2SDK for Episode 1 | ||
**<tt>hl2sdk-ob</tt> - symlink or folder containing the HL2SDK for Orange Box/TF | **<tt>hl2sdk-ob</tt> - symlink or folder containing the HL2SDK for Orange Box/TF | ||
− | **<tt> | + | **<tt>hl2sdk-l4d</tt> - symlink or folder containing the HL2SDK for Left 4 Dead |
− | |||
If you are using a 64-bit version of Linux, you may need to install extra packages to be able to compile SourceMod. On Debian-based distros, these are typically: | If you are using a 64-bit version of Linux, you may need to install extra packages to be able to compile SourceMod. On Debian-based distros, these are typically: | ||
<pre> | <pre> | ||
#prerequisites | #prerequisites | ||
− | #apt-get install g++-4.1 gcc-4.1 make | + | #apt-get install g++-4.1 gcc-4.1 make mercurial |
− | #apt-get | + | #apt-get install libz libz-dev |
#only needed if you want to use the build tool | #only needed if you want to use the build tool | ||
#apt-get install mono mono-devel | #apt-get install mono mono-devel | ||
Line 73: | Line 62: | ||
apt-get install libc6-dev-i386 libc6-i386 | apt-get install libc6-dev-i386 libc6-i386 | ||
</pre> | </pre> | ||
+ | |||
+ | In your projects, you should use <tt>mmsource-1.7/core</tt> for the new (1.6+) API and <tt>mmsource-1.7/core-legacy</tt> for the legacy (1.4-) API, needed for compatibility with the original MM:S engine. | ||
==Windows== | ==Windows== | ||
Line 82: | Line 73: | ||
You can add your environment variables to either your User settings or your System settings. Create a new variable for each item in the list below. The item names are in <tt>fixed-width font</tt> and their value descriptions follow. | You can add your environment variables to either your User settings or your System settings. Create a new variable for each item in the list below. The item names are in <tt>fixed-width font</tt> and their value descriptions follow. | ||
− | *<tt> | + | *<tt>MMSOURCE18</tt> - Path to Metamod:Source 1.8 source code. |
− | *<tt> | + | *<tt>HL2SDK</tt> - Path to HL2SDK for Ep1/Original |
− | *<tt> | + | *<tt>HL2SDKOB</tt> - Path to HL2SDK for Ep2/OrangeBox |
− | *<tt> | + | *<tt>HL2SDKL4D</tt> - Path to HL2SDK for Left 4 Dead |
+ | |||
+ | In your projects, you should use <tt>$(MMSOURCE18)/core</tt> for the new (1.6+) API and <tt>$(MMSOURCE18)/core-legacy</tt> for the legacy (1.4-) API, needed for compatibility with the original MM:S engine. | ||
[[Category:Metamod:Source Development]] | [[Category:Metamod:Source Development]] |
Latest revision as of 03:51, 25 August 2021
This article explains how to set up your Windows or Linux environment to compile Metamod:Source's sample plugins.
This article does not guarantee that you will be able to build third-party plugins, which may have their own build environment requirements. However, it creates a baseline for making sure you can successfully build plugins.
Note: You can use Valve's HL2SDK source tree, but we have our own available. It fixes all of Valve's mistakes such that you can build on both GCC and Visual Studio with no warnings or errors.
Note: This article is intended to be used against Metamod:Source 1.7.
Requirements
Windows
- Microsoft Visual C++ 2008 (Express or higher) is supported and used for official builds.
- Microsoft Visual C++ 2005 (Express or higher) is unsupported, though it should work as it is capable of building compatible binaries.
- Microsoft Visual C++ 2003 7.1 is unsupported. It is capable of building compatible binaries against the original (non-Orange Box SDK) only.
- Microsoft Visual C++ 2003 7.0 or lower cannot be used.
If you are installing Visual C++ 2005 Express, it may not come with Microsoft's Platform SDK installed. If this is the case, you must manually install the Platform SDK. You can find directions on how to do this and test your setup here. According to Microsoft, Visual C++ 2008 "streamlines" the Platform SDK installation for you.
Linux
For Linux, Metamod:Source requires the GNU C/C++ Compiler (from GCC):
- Version 4.1 is used for official binaries and is guaranteed to build.
- Versions 3.4 through 4.2 are guaranteed to be binary (ABI) compatible. Metamod:Source and its sample plugins will probably build fine on them.
- Any GCC version below 3.4 cannot be used.
Setup
Getting the Files
This section describes which files you must have and how to get them. Do not worry about where to place them yet -- that will be discussed on a per-platform basis. You can download the files anywhere you'd like.
You can use the HL2SDK from Valve, but it's recommended you use the one linked to here. We have a patched version that fixes many compilation bugs and it will make your life easier on both operating systems. Link for HLSDK changes located at bottom of Metamod:Source downloads page.
You need each SDK for each game you want to compile against (if your plugin requires knowledge about the game).
To get Metamod:Source files, visit Metamod:Source downloads. Make sure to get the source code and not the binaries.
Linux
As of this writing, SourceMod's Makefiles are hardcoded to use a binary called "gcc-4.1" You can override this, for example:
make CPP=gcc
Otherwise, you can also just create a symlink:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.1
Note that you must use gcc and not g++. Using g++ creates a libstdc++ dependency, which may interfere with Valve's libstdc++ usage and will cause platform portability problems in general. As a corollary you should avoid using STL, RTTI (Run-Time Type Information), or exceptions.
Metamod:Source's Makefiles have a strict directory organization. You must have a top-level folder. For this document, we'll assume it is called project, though it can be named anything. The layout of project should be:
- project/
- mmsource-1.7 - symlink or folder containing Metamod:Source 1.7 source code
- hl2sdk - symlink or folder containing the HL2SDK for Episode 1
- hl2sdk-ob - symlink or folder containing the HL2SDK for Orange Box/TF
- hl2sdk-l4d - symlink or folder containing the HL2SDK for Left 4 Dead
If you are using a 64-bit version of Linux, you may need to install extra packages to be able to compile SourceMod. On Debian-based distros, these are typically:
#prerequisites #apt-get install g++-4.1 gcc-4.1 make mercurial #apt-get install libz libz-dev #only needed if you want to use the build tool #apt-get install mono mono-devel #32-bit support apt-get install ia32-libs apt-get install lib32z1 lib32z1-dev apt-get install libc6-dev-i386 libc6-i386
In your projects, you should use mmsource-1.7/core for the new (1.6+) API and mmsource-1.7/core-legacy for the legacy (1.4-) API, needed for compatibility with the original MM:S engine.
Windows
On Windows, there is no particular directory layout required -- environment variables are used instead. The directions below apply to Windows XP, and are assumed to be similar for other versions of Windows.
- Open the Control Panel (for example, via Start -> Settings).
- Open the System control. If you don't see it, you may need to switch to "Classic view" (either via the left-hand pane or by going to Tools -> Folder Options).
- Click the Advanced tab.
- Click the Environment Variables button.
You can add your environment variables to either your User settings or your System settings. Create a new variable for each item in the list below. The item names are in fixed-width font and their value descriptions follow.
- MMSOURCE18 - Path to Metamod:Source 1.8 source code.
- HL2SDK - Path to HL2SDK for Ep1/Original
- HL2SDKOB - Path to HL2SDK for Ep2/OrangeBox
- HL2SDKL4D - Path to HL2SDK for Left 4 Dead
In your projects, you should use $(MMSOURCE18)/core for the new (1.6+) API and $(MMSOURCE18)/core-legacy for the legacy (1.4-) API, needed for compatibility with the original MM:S engine.