Difference between revisions of "Compiling tpt++ with Visual studio"

From The Powder Toy
Jump to: navigation, search
(update repo link)
(Add vs2017 premade project)
Line 1: Line 1:
 
This is a guide to get you started on coding for The Powder Toy. If you have any questions, just ask in the Development assistance section on [https://powdertoy.co.uk/Discussions/Categories/Topics.html?Category=5 The Powder Toy forums]. If you want to use the old tpt compiling tutorial, not the tpt++ one, find it [[Compiling_tpt_with_Visual_Studio_(old)|here]]
 
This is a guide to get you started on coding for The Powder Toy. If you have any questions, just ask in the Development assistance section on [https://powdertoy.co.uk/Discussions/Categories/Topics.html?Category=5 The Powder Toy forums]. If you want to use the old tpt compiling tutorial, not the tpt++ one, find it [[Compiling_tpt_with_Visual_Studio_(old)|here]]
 
It would help if you have programmed before, but it is fine if you never have.
 
  
 
This takes a while to setup, so be patient and follow the instructions CAREFULLY. If you get any errors, 90% of the time that means you missed a step or did something incorrectly.
 
This takes a while to setup, so be patient and follow the instructions CAREFULLY. If you get any errors, 90% of the time that means you missed a step or did something incorrectly.
  
Its not recommended to begin coding elements until you are able to compile a clean source.
+
Do not begin coding elements until you are able to compile a clean source.
  
 
Good luck!
 
Good luck!
Line 16: Line 14:
 
===  Setup  ===
 
===  Setup  ===
  
* Download [https://go.microsoft.com/fwlink/?LinkId=691978&clcid=0x409 Visual C++ 2015 Community] because of it's great debugging and auto-code tools. It is completely free, if it asks for a license see the next list item. You will need a Microsoft account to download this.
+
* Download [https://www.visualstudio.com/downloads/ Visual C++ 2017 Community] because of it's great debugging and auto-code tools. It is completely free, if it asks for a license see the next list item. You will need a Microsoft account to download this.
 
+
* On the Workloads tab, select "Desktop development with C++". Then go into the Individual components tab, scroll down to the "Compilers, build tools, and runtimes" section, and select "Windows XP support for C++"
 
* Open Visual Studio. You should register it (you don't have to pay anything; it's free) with your Microsoft account if you plan on using it for more than 30 days.
 
* Open Visual Studio. You should register it (you don't have to pay anything; it's free) with your Microsoft account if you plan on using it for more than 30 days.
* If you wish, (this should already be on by default), turn on line numbers by going to Tools > Options > Text Editor > C/C++, and turn on "Line numbers" in the Display subsection.
+
* Download this: [https://drive.google.com/uc?id=0B1XWtCTn2YPASHFkeGZZZzR4U28&export=download Required Libraries vs2015.zip], and extract it right into your source code folder. This download also works for Visual Studio 2017. If you are using Visual Studio 2013 download [https://drive.google.com/uc?id=0B1XWtCTn2YPANXYzQXkwT1JKdFk&export=download Required Libraries.zip these] instead
  
* Download this: [https://drive.google.com/uc?id=0B1XWtCTn2YPASHFkeGZZZzR4U28&export=download Required Libraries vs2015.zip], and extract it right into your source code folder. If you are using Visual Studio 2013 download [https://drive.google.com/uc?id=0B1XWtCTn2YPANXYzQXkwT1JKdFk&export=download Required Libraries.zip these] instead
+
* You now need python installed to run generator.py. Get python [https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi here]. Python 3 also works, but it will not work if you decide to use SCons later. After you have it installed, just '''double click the generator.py file''' and it should show a console window for a second and then close. This means it worked. You '''need''' to run generator.py again every time a new element is added.
  
* You now need python installed to run generator.py. Get python [https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi here]. Python 3 also works, but it will not work if you decide to use SCons later. After you have it installed, just '''double click the generator.py file''' and it should show a console window for a second and then close. This means it worked. You '''need''' to run generator.py again every time a new element is added.
+
====  Premade project ====
  
====  Premade project ====
+
Instead of going through all the steps of setting up the code, it is much easier to use a project already set up for you. You can get that here: [https://drive.google.com/uc?id=0B1XWtCTn2YPAamw3ODBna1laUVE&export=download vs 2017 project.zip]
 +
It has all the options described here, plus the tpt++ source is organized in a way that makes it easier to find useful files and gets the useless ones out of the way. This is up to date fully as of August 13th, 2017. Older projects are also available but aren't updated and don't have the latest files and compiler settings:<br/>
 +
[https://drive.google.com/uc?id=0B1XWtCTn2YPASlVBQXZqU1BzOFE&export=download vs2015] (August 13th, 2017)<br/>
 +
[https://drive.google.com/uc?id=0B1XWtCTn2YPAVWFTMzQzODFhYUU&export=download vs2013] (April 26th, 2016)<br/>
  
Instead of going through all the steps of setting up the code, it is much easier to use a project already set up for you. You can get that here: [https://drive.google.com/uc?id=0B1XWtCTn2YPASlVBQXZqU1BzOFE&export=download vs 2015 project.zip]
 
It has all the options described here, plus the tpt++ source is organized in a way that makes it easier to find useful files and gets the useless ones out of the way. This is up to date fully as of October 16th, 2016. Older projects are also available but aren't updated and don't have the latest files and compiler settings: [https://drive.google.com/uc?id=0B1XWtCTn2YPAVWFTMzQzODFhYUU&export=download vs2013] [https://drive.google.com/uc?id=0B1XWtCTn2YPAZTNzVFBUbHVuaUE&export=download vs2012]
 
  
 
====  Manual Setup ====
 
====  Manual Setup ====
  
It is not recommended that you manually set up the project. It is easy to make mistakes and have compiling errors. Also, step one "New Project from Existing Code" is only available in Visual Studio 2010 or earlier, unless you download the Community edition or buy the full version. The Premade project should work fine in newer versions of Visual Studio.
+
It is not recommended that you manually set up the project. It is easy to make mistakes and have compiling errors.
 +
 
 +
* '''Make sure''' you have done everything in the Setup step correctly.
  
* '''Make sure''' you have done the past two steps correctly, if not you will have to edit the solution later. Open Visual Studio and press Press File > New > New Project from Existing Code.
+
* Open Visual Studio and press Press File > New > New Project from Existing Code.
  
 
* Choose the folder that contains the source code, not src/, but the folder that contains src/, build/, includes/, and a few others. Name the project whatever you want. Click Next
 
* Choose the folder that contains the source code, not src/, but the folder that contains src/, build/, includes/, and a few others. Name the project whatever you want. Click Next

Revision as of 22:20, 13 August 2017

This is a guide to get you started on coding for The Powder Toy. If you have any questions, just ask in the Development assistance section on The Powder Toy forums. If you want to use the old tpt compiling tutorial, not the tpt++ one, find it here

This takes a while to setup, so be patient and follow the instructions CAREFULLY. If you get any errors, 90% of the time that means you missed a step or did something incorrectly.

Do not begin coding elements until you are able to compile a clean source.

Good luck!

Get the Source

Setup

  • Download Visual C++ 2017 Community because of it's great debugging and auto-code tools. It is completely free, if it asks for a license see the next list item. You will need a Microsoft account to download this.
  • On the Workloads tab, select "Desktop development with C++". Then go into the Individual components tab, scroll down to the "Compilers, build tools, and runtimes" section, and select "Windows XP support for C++"
  • Open Visual Studio. You should register it (you don't have to pay anything; it's free) with your Microsoft account if you plan on using it for more than 30 days.
  • Download this: Required Libraries vs2015.zip, and extract it right into your source code folder. This download also works for Visual Studio 2017. If you are using Visual Studio 2013 download Required Libraries.zip these instead
  • You now need python installed to run generator.py. Get python here. Python 3 also works, but it will not work if you decide to use SCons later. After you have it installed, just double click the generator.py file and it should show a console window for a second and then close. This means it worked. You need to run generator.py again every time a new element is added.

Premade project

Instead of going through all the steps of setting up the code, it is much easier to use a project already set up for you. You can get that here: vs 2017 project.zip It has all the options described here, plus the tpt++ source is organized in a way that makes it easier to find useful files and gets the useless ones out of the way. This is up to date fully as of August 13th, 2017. Older projects are also available but aren't updated and don't have the latest files and compiler settings:
vs2015 (August 13th, 2017)
vs2013 (April 26th, 2016)


Manual Setup

It is not recommended that you manually set up the project. It is easy to make mistakes and have compiling errors.

  • Make sure you have done everything in the Setup step correctly.
  • Open Visual Studio and press Press File > New > New Project from Existing Code.
  • Choose the folder that contains the source code, not src/, but the folder that contains src/, build/, includes/, and a few others. Name the project whatever you want. Click Next
  • Choose Windows application project if it isn't selected already and leave everything unchecked. Click Next.
  • Under Preprocessor definitions, type "WIN, X86, X86_SSE2, USE_SDL, STABLE, GRAVFFT, LUACONSOLE, LUA_COMPAT_ALL, IGNORE_UPDATES, _SCL_SECURE_NO_WARNINGS" without the quotes.
  • Click Finish. The project will be created
  • Under Build > Configuration Manager, open the drop-down box under "Active Solution Configuration:" and change it to "Release". (unless you have a good reason to keep it as Debug, which runs slower than Release).
  • Go to Project > Properties.
  • On the very top, where it says Configuration: Active(Release), open the dropdown and change it to All Configurations. This will make it easier if you want to switch to debug mode. If you don't ever want to, this step is optional
  • Under Configuration Properties > General:
  • Change Output Directory from
$(SolutionDir)$(Configuration)\

to

$(SolutionDir)Build\

(notice that there is no backslash between "$(SolutionDir)" and "Build\").

  • Change Target Name to whatever name you want the compiled file to have, minus the ".exe" extension. (or just leave it be to have the file named as the project name)
  • Under Configuration Properties > VC++ Directories:
  • Open the drop down menu for Include Directories (if you don't see the arrow that opens the drop-down menu, try clicking on the line), click "<Edit...>", and add
$(ProjectDir)includes
$(ProjectDir)includes\SDL
$(ProjectDir)includes\lua5.2
$(ProjectDir)data
$(ProjectDir)src
$(ProjectDir)generated

(type that exactly -- also note that there is no backslash between "$(ProjectDir)" and "includes", and that they are all on separate lines)

  • Open the drop down menu for Library Directories, click "<Edit...>", and add
$(ProjectDir)Libraries

(note that there is no backslash between "$(ProjectDir)" and "Libraries")

  • Go to Configuration Properties > C/C++.
  • Under "General", open the drop-down menu for "Warning Level" and choose "Level1 (/W1)". This will make it easier if you get any errors during compiling, as you won't have to dig through a bunch of unimportant warnings to get to the errors.
  • Under "Code Generation", open up the drop-down menu for "Floating Point Model" and set it to Fast. (this will get you a noticeable speed improvement). Also, right above it, change "Enable Enhanced Instruction Set" to SSE2.
  • Go to Configuration Properties > Linker > Input.
  • Open the drop down menu for "Additional Dependencies," click "<Edit...>", and enter the following text
shell32.lib
ws2_32.lib
SDL.lib
SDLmain.lib
libbz2.lib
pthreadVC2.lib
lua5.2.lib
libfftw3f-3.lib
zlib.lib
  • Press OK until you close the project properties.
  • Hit the F7 key on your keyboard, or click Build > Build Solution. You can also click the green "Start Debugging" arrow.
  • If something goes wrong (i.e. you get an error of some sort), ask on The Powder Toy forums.
  • The resulting executable and its required DLLs can be found in the "Build" folder in your source code directory.

Optional: Statically Compile tpt:

If you are using the premade project, it already has the Static option built in. On the top bar, select the dropdown that says "Debug" and select "Static".

When statically compiling tpt, you do not need to have the dlls to run it, or distribute them with your project. The official tpt does it this way. It takes longer to compile though, so you might only want to do this for release versions.

  • Under Build > Configuration Manager, go under Active Solution Configuration and hit new. Name it Static (or whatever you want to call it), and select to Copy the settings from Release.
  • Under Configuration Properties > VC++ Directories, open the drop down menu for Library Directories, click "<Edit...>", and change it from $(ProjectDir)Libraries to:
$(ProjectDir)Staticlibs
  • Go to Configuration Properties > Linker > Input, open the drop down menu for "Additional Dependencies," and click "<Edit...>", and add these to the list:
winmm.lib
dxguid.lib
  • Go to Configuration Properties > C/C++ > Preprocessor, open the drop down menu for Preprocessor definitions, click "<Edit...>", and add these to the list:
PTW32_STATIC_LIB
ZLIB_WINAPI
  • Under "Code Generation", change "Runtime Library" to "Multi-Threaded (/MT)"
  • Go to Configuration Properties > Linker > Advanced, change "Image Has Safe Exception Handlers" to "No (/SAFESEH:NO)"

You will now be able to easily change between compiling in "Debug" mode, for quick, normal testing, and "Static" mode, for when you want to release an exe for people to use.


Optional: Set Up Git

If you use github, you can easily keep up to date with the current changes. This way, your mod won't be out of date, and you won't have to copy everything over just to update to a newer version. You can find the tutorial with this link.

SCons

You can use SCons from the command line to compile with the visual studio compiler. This option probably isn't useful in most cases but is still there. Use the command "scons.py --msvc" and it will attempt to find and use a 32 bit msvc compiler. It supports most of the options in the SConscript, including --static which should generate completely static binaries (not even needing msvcr120.dll like this guide needs)