Jump to content

VSCode + Custom Build Script

beepboop

342 views

I've got a bit of free time on my hands for a while. I plan to take up Leadwerks again and come up with a simple project to have fun with.

I use VSCode at work and I don't have a Windows machine at the moment. Codeblocks is a bit dated now and I'm not sure if it has all the features to fit my workflow so I can't use it. 

It's a bit fiddly to build C++ apps on VSCode. There's a prescribed method of setting up your C++ project in the official hubs but I don't think those are necessary in my case, I just need a script that builds the project which I have below.

By the way, VSCode website is here: https://code.visualstudio.com/

Have fun.

Save as build.sh in your project's root folder and run using build.sh or build.sh -r for release. Works for Stable version LW and any previous versions(?) - at least v4.5 (archived). BETA branch (4.6?) doesn't seem to build for me, missing Leadwerks.a file.

Disclaimer: not really fully tested for bigger projects? I've only tested this with sample projects that have no additional project folder structure in its Source so I'm not sure if the script will propagate its search for CPP files thoroughly and process each file successfully in bigger projects. Back-up project files before running the script for the first time please.

Updated: 26/02/2020

#!/bin/sh

if [ $1 == "-h" ]; then 
  echo "Build script is set to DEBUG by default. Set -r in first argument of the script to build for release.";
  exit 1;
fi

if [ $1 != "" ] && [ $1 != "-r" ] && [ $1 != "-h" ]; then 
  echo "Type build.sh -h to see brief help description.";
  exit 1;
fi

debugFlags='-g -DDEBUG -D_DEBUG';
debugLibPath='Debug';
PROJECT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
LEADWERKS_PATH=~/.local/share/Steam/steamapps/common/Leadwerks
declare a compiledFiles;
declare a includedFilePaths;

if [ $1 == "-r" ]; then 
  debugFlags=''; 
  debugLibPath='Release';
fi

truncate -s 0 $PROJECT_PATH/build.log
echo "Leadwerks Path: $LEADWERKS_PATH"
echo "Project Path: $PROJECT_PATH"
echo "Compiling source..."

if [ ! -d "$PROJECT_PATH/Compilations" ]; then
  mkdir $PROJECT_PATH/Compilations;
fi

if [ ! -d "$PROJECT_PATH/Compilations/$debugLibPath" ]; then
  mkdir $PROJECT_PATH/Compilations/$debugLibPath;
fi

for f in $(find $PROJECT_PATH/Source -name '*.h' ); do 
  includedFilePaths+=("-I $(dirname "${f}")")
done

includedFilesJoined=$(printf "%s " "${includedFilePaths[@]}")
includedFilesJoined="-${includedFilesJoined:1}"

for f in $(find $PROJECT_PATH/Source -name '*.cpp' ); do 
  originalSourcePath=$PROJECT_PATH/Source;
  compilationsPath=$PROJECT_PATH/Compilations/$debugLibPath;
  compiledFilePath=${f/.cpp/'.o'};
  compiledFilePath=${compiledFilePath/$originalSourcePath/$compilationsPath};
  mkdir -p $(dirname "${compiledFilePath}")
  
  g++ -std=c++0x $debugFlags -w -fexceptions -msse3 -DDG_DISABLE_ASSERT -DZLIB \
  -DPLATFORM_LINUX -D_NEWTON_STATIC_LIB -DFT2_BUILD_LIBRARY -DOPENGL \
  -Dunix -D__STEAM__ -D_POSIX_VER -D_POSIX_VER_64 -DDG_THREAD_EMULATION \
  -D_STATICLIB -DDG_USE_THREAD_EMULATION -DGL_GLEXT_PROTOTYPES -DLEADWERKS_3_1 \
  -DLUA_USE_LINUX -D_GLIBCXX_USE_CXX11_ABI=1 -D_CUSTOM_JOINTS_STATIC_LIB -fPIC -O2 -std=c++0x \
  $includedFilesJoined \
  -I $LEADWERKS_PATH/Include/Libraries/VHACD/src/VHACD_Lib/inc \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dMath \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dgNewton \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dContainers \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dgCore \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dgTimeTracker \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dgPhysics \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/sdk/dCustomJoints \
  -I $LEADWERKS_PATH/Include/Libraries/tolua++-1.0.93/include \
  -I $LEADWERKS_PATH/Include/Libraries/lua-5.1.4 \
  -I $LEADWERKS_PATH/Include/Libraries/freetype-2.4.7/include \
  -I $LEADWERKS_PATH/Include/Libraries/enet-1.3.1/include \
  -I $LEADWERKS_PATH/Include/Libraries/RecastNavigation/DebugUtils/Include \
  -I $LEADWERKS_PATH/Include/Libraries/RecastNavigation/Detour/Include \
  -I $LEADWERKS_PATH/Include/Libraries/RecastNavigation/DetourCrowd/Include \
  -I $LEADWERKS_PATH/Include/Libraries/RecastNavigation/DetourTileCache/Include \
  -I $LEADWERKS_PATH/Include/Libraries/RecastNavigation/Recast/Include \
  -I $LEADWERKS_PATH/Include/Libraries/libvorbis/include \
  -I $LEADWERKS_PATH/Include/Libraries/NewtonDynamics/packages/thirdParty/timeTracker \
  -I $LEADWERKS_PATH/Include/Libraries/libvorbis/lib  \
  -I $LEADWERKS_PATH/Include/Libraries/libogg/include \
  -I $LEADWERKS_PATH/Include \
  -I $LEADWERKS_PATH/Include/Libraries/zlib-1.2.5 \
  -I $LEADWERKS_PATH/Include/Libraries/zlib-1.2.5/contrib/minizip \
  -I $LEADWERKS_PATH/Include/Libraries/freetype-2.4.7/include/freetype \
  -I $LEADWERKS_PATH/Include/Libraries/freetype-2.4.7/include/freetype/config \
  -I $LEADWERKS_PATH/Include/Libraries/LuaJIT/dynasm \
  -I $LEADWERKS_PATH/Include/Libraries/glew-1.6.0/include \
  -c $f -o $compiledFilePath;
  compiledFiles+=($compiledFilePath)
done

compiledFilesJoined=$(printf "%s " "${compiledFiles[@]}")
compiledFilesJoined="/${compiledFilesJoined:1}"

echo "Building project...";

g++ -o $PROJECT_PATH/${PWD##*/} $compiledFilesJoined -s  "$LEADWERKS_PATH/Library/Linux/$debugLibPath/Leadwerks.a" -ldl \
-lopenal -lGL -lGLU "$LEADWERKS_PATH/Library/Linux/libluajit.a" $PROJECT_PATH/libsteam_api.so \
-lX11 -lXext -lXrender -lXft -lpthread -lcurl "$LEADWERKS_PATH/Library/Linux/libopenvr_api.so"

echo "Build complete. See build.log for result summary."

About the game: I'm kind of disappointed with the Action RPGs released recently. I want to give the genre a shot, present my own interpretation of how it should look like? Dark, medieval, less electric, modest if not rare use of glow shaders... maybe?

25A1DE6502251F2133DE7DEF866C2DDC27894F0D

  • Like 2


4 Comments


Recommended Comments

Welcome back

Visual Code is awesome.

The c++ debugger is good also, no more gdb from terminal.

Another thing somehow the leadwerks editor is now working on ubuntu 18.04 :)

I use some cmake project (linux/windows), can send if you want.

 

When i hear arpgs im thinking Diablo1, maybe something more modest in size but with same kind of dark feeling

  • Like 1
Link to comment
1 hour ago, aiaf said:

Welcome back

Visual Code is awesome.

The c++ debugger is good also, no more gdb from terminal.

Another thing somehow the leadwerks editor is now working on ubuntu 18.04 :)

I use some cmake project (linux/windows), can send if you want.

 

When i hear arpgs im thinking Diablo1, maybe something more modest in size but with same kind of dark feeling

Hey aiaf! Sure, send a link over, please. Thanks. 

And yes, Diablo would be the most fitting example. The recent Diablo installments are too vibrant for me, it doesn't fit the title. Blizzard needs to cut down on the use of glow and shine, it should be reserved for special or high grade items/high tier skills. I think they are cutting the use of colours a bit in the latest one, not enough for my liking though.

Link to comment

There are some good GDC talks about how they designed the art for the Diablo games and the choices they had to make to make things more readable.  For example, a beam of lightning and a beam of ice might look very similar, especially if you're playing the game on a couch, at a distance from your monitor/TV.  It's also more stylish to not have the same shades of gray in every level.  But I agree with you and them that they may have turned the colors up a bit too much in the last installments.  It's an interesting compromise between making things stylish and readable versus true to the nature of the game, which often limits your palette.

  • Like 1
Link to comment

I updated the script to include the header files of projects. I've tested the script today with multi-folder project structure as I move ahead with my project, it builds. 

Also, there's a better script using CMAKE, if you want it please ask @aiaf.

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...