Set up build system
This commit is contained in:
parent
b8ea6d1f7b
commit
7d582e4b6e
|
@ -8,3 +8,8 @@ Saved
|
||||||
|
|
||||||
# Other
|
# Other
|
||||||
Doxygen
|
Doxygen
|
||||||
|
Util/Build
|
||||||
|
Util/Install
|
||||||
|
|
||||||
|
*.log
|
||||||
|
*.pid
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"FileVersion": 3,
|
"FileVersion": 3,
|
||||||
"Version": 1,
|
"Version": 1,
|
||||||
"VersionName": "0.4.6",
|
"VersionName": "0.5.0",
|
||||||
"FriendlyName": "CARLA",
|
"FriendlyName": "CARLA",
|
||||||
"Description": "",
|
"Description": "",
|
||||||
"Category": "Science",
|
"Category": "Science",
|
||||||
|
|
8
Doxyfile
8
Doxyfile
|
@ -1,4 +1,4 @@
|
||||||
PROJECT_NAME = "CARLA UE4 Plugin"
|
PROJECT_NAME = CARLA
|
||||||
OUTPUT_DIRECTORY = Doxygen
|
OUTPUT_DIRECTORY = Doxygen
|
||||||
CREATE_SUBDIRS = YES
|
CREATE_SUBDIRS = YES
|
||||||
FULL_PATH_NAMES = NO
|
FULL_PATH_NAMES = NO
|
||||||
|
@ -11,8 +11,8 @@ CASE_SENSE_NAMES = YES
|
||||||
SORT_BRIEF_DOCS = YES
|
SORT_BRIEF_DOCS = YES
|
||||||
WARN_IF_UNDOCUMENTED = NO
|
WARN_IF_UNDOCUMENTED = NO
|
||||||
WARN_LOGFILE = Doxygen/warnings.log
|
WARN_LOGFILE = Doxygen/warnings.log
|
||||||
INPUT = Source
|
INPUT = Source Util/CarlaServer/source Util/PythonClient
|
||||||
FILE_PATTERNS = *.cpp *.h *.hpp *.cc
|
FILE_PATTERNS = *.cpp *.h *.hpp *.cc *.py
|
||||||
RECURSIVE = YES
|
RECURSIVE = YES
|
||||||
SOURCE_BROWSER = YES
|
SOURCE_BROWSER = YES
|
||||||
STRIP_CODE_COMMENTS = NO
|
STRIP_CODE_COMMENTS = NO
|
||||||
|
@ -26,7 +26,7 @@ FORMULA_FONTSIZE = 12
|
||||||
GENERATE_LATEX = NO
|
GENERATE_LATEX = NO
|
||||||
MACRO_EXPANSION = YES
|
MACRO_EXPANSION = YES
|
||||||
EXPAND_ONLY_PREDEF = YES
|
EXPAND_ONLY_PREDEF = YES
|
||||||
INCLUDE_PATH = "Source/Carla" "Source/Common" "Source/CarlaServer/source"
|
INCLUDE_PATH = Source Util/CarlaServer/source Util/Install/include
|
||||||
INCLUDE_FILE_PATTERNS = *.h *.hpp
|
INCLUDE_FILE_PATTERNS = *.h *.hpp
|
||||||
HIDE_UNDOC_RELATIONS = NO
|
HIDE_UNDOC_RELATIONS = NO
|
||||||
HAVE_DOT = YES
|
HAVE_DOT = YES
|
||||||
|
|
84
Makefile
84
Makefile
|
@ -1,9 +1,81 @@
|
||||||
CarlaServer:
|
INSTALL_FOLDER=$(PWD)/Util/Install
|
||||||
cd Source/CarlaServer && $(MAKE)
|
PYTHON_CLIENT_FOLDER=$(PWD)/Util/PythonClient
|
||||||
|
BASE_BUILD_FOLDER=$(PWD)/Util/Build/carlaserver-build
|
||||||
|
MY_CMAKE_FOLDER=$(PWD)/Util/cmake
|
||||||
|
MY_CMAKE_FLAGS=-B"$(BUILD_FOLDER)" -DCMAKE_INSTALL_PREFIX="$(INSTALL_FOLDER)"
|
||||||
|
|
||||||
all:
|
ifeq ($(OS),Windows_NT)
|
||||||
cd Source/CarlaServer && $(MAKE) debug
|
BUILD_RULE=build_windows
|
||||||
cd Source/CarlaServer && $(MAKE) release
|
PROTOC_CALL=echo "Error!"
|
||||||
|
else
|
||||||
|
BUILD_RULE=build_linux
|
||||||
|
PROTOC_CALL=./Util/Protoc.sh
|
||||||
|
endif
|
||||||
|
|
||||||
|
default: release
|
||||||
|
|
||||||
|
### Build ######################################################################
|
||||||
|
|
||||||
|
debug: BUILD_FOLDER=$(BASE_BUILD_FOLDER)/debug
|
||||||
|
debug: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Debug
|
||||||
|
debug: $(BUILD_RULE)
|
||||||
|
|
||||||
|
release: BUILD_FOLDER=$(BASE_BUILD_FOLDER)/release
|
||||||
|
release: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Release
|
||||||
|
release: $(BUILD_RULE)
|
||||||
|
|
||||||
|
build_linux: MY_CMAKE_FLAGS+=-G "Ninja"
|
||||||
|
build_linux: call_cmake
|
||||||
|
cd $(BUILD_FOLDER) && ninja && ninja install
|
||||||
|
|
||||||
|
build_windows: MY_CMAKE_FLAGS+=-G "NMake Makefiles"
|
||||||
|
build_windows: call_cmake
|
||||||
|
cd $(BUILD_FOLDER) && nmake && nmake install
|
||||||
|
|
||||||
|
vsproject: BUILD_FOLDER=$(BASE_BUILD_FOLDER)/visualstudio
|
||||||
|
vsproject: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Debug
|
||||||
|
vsproject: MY_CMAKE_FLAGS+=-G "Visual Studio 14 2015 Win64"
|
||||||
|
vsproject: call_cmake
|
||||||
|
|
||||||
|
call_cmake: protobuf
|
||||||
|
mkdir -p $(BUILD_FOLDER)
|
||||||
|
cd $(BUILD_FOLDER) && cmake $(MY_CMAKE_FLAGS) "$(MY_CMAKE_FOLDER)"
|
||||||
|
|
||||||
|
protobuf:
|
||||||
|
$(PROTOC_CALL)
|
||||||
|
|
||||||
|
### Docs #######################################################################
|
||||||
|
|
||||||
|
docs:
|
||||||
|
doxygen
|
||||||
|
@echo "Documentation index at ./Doxygen/html/index.html"
|
||||||
|
|
||||||
|
### Clean ######################################################################
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
cd Source/CarlaServer && $(MAKE) clean
|
rm -Rf $(BASE_BUILD_FOLDER) $(INSTALL_FOLDER) Doxygen
|
||||||
|
$(PROTOC_CALL) --clean
|
||||||
|
|
||||||
|
### Test #######################################################################
|
||||||
|
|
||||||
|
check: debug launch_test_clients run_test_debug kill_test_clients
|
||||||
|
|
||||||
|
check_release: release launch_test_clients run_test_release kill_test_clients
|
||||||
|
|
||||||
|
run_test_debug:
|
||||||
|
@-LD_LIBRARY_PATH=$(INSTALL_FOLDER)/lib $(INSTALL_FOLDER)/bin/test_carlaserverd --gtest_shuffle
|
||||||
|
|
||||||
|
run_test_release:
|
||||||
|
@-LD_LIBRARY_PATH=$(INSTALL_FOLDER)/lib $(INSTALL_FOLDER)/bin/test_carlaserver --gtest_shuffle
|
||||||
|
|
||||||
|
launch_test_clients:
|
||||||
|
@echo "Launch echo_client.py"
|
||||||
|
@python $(PYTHON_CLIENT_FOLDER)/echo_client.py -p 4000 & echo $$! > echo_client.pid
|
||||||
|
@echo "Launch carla_client.py"
|
||||||
|
@python $(PYTHON_CLIENT_FOLDER)/carla_client.py -p 2000 & echo $$! > carla_client.pid
|
||||||
|
|
||||||
|
kill_test_clients:
|
||||||
|
@echo "Kill echo_client.py"
|
||||||
|
@kill `cat echo_client.pid` && rm echo_client.pid
|
||||||
|
@echo "Kill carla_client.py"
|
||||||
|
@kill `cat carla_client.pid` && rm carla_client.pid
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# CARLA Util Setup
|
||||||
|
#
|
||||||
|
# This downloads and compiles libc++. So we can build and compile our
|
||||||
|
# dependencies with libc++ for linking against Unreal.
|
||||||
|
#
|
||||||
|
# Thanks to the people at https://github.com/Microsoft/AirSim for providing the
|
||||||
|
# important parts of this script.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# set -x
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
pushd "$SCRIPT_DIR" >/dev/null
|
||||||
|
|
||||||
|
mkdir -p Util/Build
|
||||||
|
pushd Util/Build >/dev/null
|
||||||
|
|
||||||
|
# Require clang 3.9
|
||||||
|
command -v clang++-3.9 >/dev/null 2>&1 || {
|
||||||
|
echo >&2 "clang 3.9 is required, but it's not installed.";
|
||||||
|
echo >&2 "make sure you build Unreal Engine with clang 3.9 too.";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Get and compile libc++ ----------------------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Get libc++ source
|
||||||
|
if [[ ! -d "llvm-source" ]]; then
|
||||||
|
echo "Retrieving libc++..."
|
||||||
|
git clone --depth=1 -b release_39 https://github.com/llvm-mirror/llvm.git llvm-source
|
||||||
|
git clone --depth=1 -b release_39 https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx
|
||||||
|
git clone --depth=1 -b release_39 https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi
|
||||||
|
else
|
||||||
|
echo "Folder llvm-source already exists, skipping git clone..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build libc++
|
||||||
|
rm -rf llvm-build
|
||||||
|
mkdir -p llvm-build
|
||||||
|
|
||||||
|
pushd llvm-build >/dev/null
|
||||||
|
|
||||||
|
export C_COMPILER=clang-3.9
|
||||||
|
export COMPILER=clang++-3.9
|
||||||
|
|
||||||
|
cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} \
|
||||||
|
-LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF -DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=OFF \
|
||||||
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="../llvm-install" \
|
||||||
|
../llvm-source
|
||||||
|
|
||||||
|
make cxx
|
||||||
|
|
||||||
|
#install libc++ locally in llvm-install folder
|
||||||
|
make install-libcxx install-libcxxabi
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Get Boost and compile it with libc++ --------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Get boost source
|
||||||
|
if [[ ! -d "boost-source" ]]; then
|
||||||
|
echo "Retrieving boost..."
|
||||||
|
wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz
|
||||||
|
tar -xvzf boost_1_64_0.tar.gz
|
||||||
|
rm boost_1_64_0.tar.gz
|
||||||
|
mv boost_1_64_0 boost-source
|
||||||
|
else
|
||||||
|
echo "Folder boost-source already exists, skipping download..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd boost-source >/dev/null
|
||||||
|
|
||||||
|
BOOST_TOOLSET="clang-3.9"
|
||||||
|
BOOST_CFLAGS="-fPIC -std=c++1y -stdlib=libc++ -I../llvm-install/include/c++/v1"
|
||||||
|
BOOST_LFLAGS="-stdlib=libc++ -L../llvm-install/lib"
|
||||||
|
|
||||||
|
./bootstrap.sh --with-toolset=clang --prefix=../boost-install
|
||||||
|
./b2 clean
|
||||||
|
./b2 toolset="${BOOST_TOOLSET}" cxxflags="${BOOST_CFLAGS}" linkflags="${BOOST_LFLAGS}" --prefix="../boost-install" -j 4 stage release
|
||||||
|
./b2 install toolset="${BOOST_TOOLSET}" cxxflags="${BOOST_CFLAGS}" linkflags="${BOOST_LFLAGS}" --prefix="../boost-install"
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Get Protobuf and compile it with libc++ -----------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Get protobuf source
|
||||||
|
if [[ ! -d "protobuf-source" ]]; then
|
||||||
|
echo "Retrieving protobuf..."
|
||||||
|
git clone --depth=1 -b v3.3.0 https://github.com/google/protobuf.git protobuf-source
|
||||||
|
else
|
||||||
|
echo "Folder protobuf-source already exists, skipping git clone..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd protobuf-source >/dev/null
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/../llvm-install/lib/"
|
||||||
|
|
||||||
|
./autogen.sh
|
||||||
|
./configure \
|
||||||
|
CC="clang-3.9" \
|
||||||
|
CXX="clang++-3.9" \
|
||||||
|
CXXFLAGS="-fPIC -stdlib=libc++ -I$PWD/../llvm-install/include/c++/v1" \
|
||||||
|
LDFLAGS="-stdlib=libc++ -L$PWD/../llvm-install/lib/" \
|
||||||
|
--prefix="$PWD/../protobuf-install"
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Get GTest and compile it with libc++ --------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Get googletest source
|
||||||
|
if [[ ! -d "googletest-source" ]]; then
|
||||||
|
echo "Retrieving googletest..."
|
||||||
|
git clone --depth=1 -b release-1.8.0 https://github.com/google/googletest.git googletest-source
|
||||||
|
else
|
||||||
|
echo "Folder googletest-source already exists, skipping git clone..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd googletest-source >/dev/null
|
||||||
|
|
||||||
|
cmake -H. -B./build \
|
||||||
|
-DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} \
|
||||||
|
-DCMAKE_CXX_FLAGS="-stdlib=libc++ -I$PWD/../llvm-install/include/c++/v1 -Wl,-L$PWD/../llvm-install/lib" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="../googletest-install" \
|
||||||
|
-G "Ninja"
|
||||||
|
|
||||||
|
pushd build >/dev/null
|
||||||
|
ninja
|
||||||
|
ninja install
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- ...and we are done --------------------------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
set +x
|
||||||
|
echo ""
|
||||||
|
echo "****************"
|
||||||
|
echo "*** Success! ***"
|
||||||
|
echo "****************"
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using UnrealBuildTool;
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
@ -47,16 +48,7 @@ public class Carla : ModuleRules
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
AddBoostDependency(Target);
|
|
||||||
AddProtobufDependency(Target);
|
|
||||||
AddLibPNGDependency(Target);
|
|
||||||
AddCarlaServerDependency(Target);
|
AddCarlaServerDependency(Target);
|
||||||
|
|
||||||
if (Target.Platform == UnrealTargetPlatform.Linux)
|
|
||||||
{
|
|
||||||
// Fails to link the std libraries.
|
|
||||||
PublicAdditionalLibraries.Add("stdc++");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsWindows(TargetInfo Target)
|
private bool IsWindows(TargetInfo Target)
|
||||||
|
@ -75,118 +67,46 @@ public class Carla : ModuleRules
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// On Linux on the other hand, we need to use the version of the libraries
|
|
||||||
// without optimizations due to the crash in the std::string destructor.
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddBoostDependency(TargetInfo Target)
|
delegate string ADelegate(string s);
|
||||||
{
|
|
||||||
if (IsWindows(Target))
|
|
||||||
{
|
|
||||||
string BoostRoot = System.Environment.GetEnvironmentVariable("BOOST_ROOT");
|
|
||||||
if (string.IsNullOrEmpty(BoostRoot) || !System.IO.Directory.Exists(BoostRoot))
|
|
||||||
{
|
|
||||||
throw new System.Exception("BOOST_ROOT is not defined, or points to a non-existant directory, please set this environment variable.");
|
|
||||||
}
|
|
||||||
PrivateIncludePaths.Add(BoostRoot);
|
|
||||||
|
|
||||||
string BoostLib = Path.Combine(BoostRoot, "stage", "lib");
|
|
||||||
if (!System.IO.Directory.Exists(BoostLib))
|
|
||||||
{
|
|
||||||
throw new System.Exception("Please build boost and make sure the libraries are at " + BoostLib + ". ");
|
|
||||||
}
|
|
||||||
bool found = System.IO.Directory.GetFiles(BoostLib, "libboost_system-*.lib").Length > 0;
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
throw new System.Exception("Not finding libboost_system-*.lib in " + BoostLib + ".");
|
|
||||||
}
|
|
||||||
PublicLibraryPaths.Add(Path.Combine(BoostLib));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PublicAdditionalLibraries.Add("boost_system");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddProtobufDependency(TargetInfo Target)
|
|
||||||
{
|
|
||||||
if (IsWindows(Target))
|
|
||||||
{
|
|
||||||
string ProtobufRoot = System.Environment.GetEnvironmentVariable("PROTOBUF_ROOT");
|
|
||||||
string ProtobufLib;
|
|
||||||
if (UseDebugLibs(Target))
|
|
||||||
{
|
|
||||||
ProtobufRoot = Path.Combine(ProtobufRoot, "Debug");
|
|
||||||
ProtobufLib = "libprotobufd.lib";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ProtobufRoot = Path.Combine(ProtobufRoot, "Release");
|
|
||||||
ProtobufLib = "libprotobuf.lib";
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(ProtobufRoot) || !System.IO.Directory.Exists(ProtobufRoot))
|
|
||||||
{
|
|
||||||
throw new System.Exception("PROTOBUF_ROOT is not defined, or points to a non-existant directory, please set this environment variable.");
|
|
||||||
}
|
|
||||||
PrivateIncludePaths.Add(Path.Combine(ProtobufRoot, "include"));
|
|
||||||
PublicAdditionalLibraries.Add(Path.Combine(ProtobufRoot, "lib", ProtobufLib));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PublicAdditionalLibraries.Add("protobuf");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddLibPNGDependency(TargetInfo Target)
|
|
||||||
{
|
|
||||||
if (Target.Platform == UnrealTargetPlatform.Linux)
|
|
||||||
{
|
|
||||||
string UE4Root = System.Environment.GetEnvironmentVariable("UE4_ROOT");
|
|
||||||
if (string.IsNullOrEmpty(UE4Root))
|
|
||||||
{
|
|
||||||
PublicAdditionalLibraries.Add("png");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!System.IO.Directory.Exists(UE4Root))
|
|
||||||
{
|
|
||||||
throw new System.Exception("UE4_ROOT points to a non-existant directory, please correct this environment variable.");
|
|
||||||
}
|
|
||||||
PublicAdditionalLibraries.Add("ThirdParty/libPNG/libPNG-1.5.2/lib/Linux/x86_64-unknown-linux-gnu/libpng.a");
|
|
||||||
PublicAdditionalLibraries.Add("ThirdParty/zlib/v1.2.8/lib/Linux/x86_64-unknown-linux-gnu/libz_fPIC.a");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddCarlaServerDependency(TargetInfo Target)
|
private void AddCarlaServerDependency(TargetInfo Target)
|
||||||
{
|
{
|
||||||
string CarlaServerIncludePath = Path.Combine(ModuleDirectory, "..", "CarlaServer/include");
|
string CarlaServerInstallPath = Path.GetFullPath(Path.Combine(ModuleDirectory, "../../Util/Install"));
|
||||||
string CarlaServerLibPath = Path.Combine(ModuleDirectory, "..", "CarlaServer/lib");
|
Console.WriteLine("CarlaServer install path = " + CarlaServerInstallPath);
|
||||||
|
|
||||||
string CarlaServerLibBaseName;
|
|
||||||
if (UseDebugLibs(Target))
|
|
||||||
{
|
|
||||||
CarlaServerLibBaseName = "carlaserverd";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CarlaServerLibBaseName = "carlaserver";
|
|
||||||
}
|
|
||||||
|
|
||||||
string CarlaServerLib;
|
string CarlaServerLib;
|
||||||
if (IsWindows(Target))
|
if (UseDebugLibs(Target))
|
||||||
{
|
{
|
||||||
CarlaServerLib = Path.Combine(CarlaServerLibPath, CarlaServerLibBaseName + ".lib");
|
CarlaServerLib = "carlaserverd";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CarlaServerLib = Path.Combine(CarlaServerLibPath, "lib" + CarlaServerLibBaseName + ".a");
|
CarlaServerLib = "carlaserver";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ADelegate GetSharedLibName = (string BaseName) => {
|
||||||
|
if (IsWindows(Target))
|
||||||
|
{
|
||||||
|
return BaseName + ".dll";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "lib" + BaseName + ".so";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Link dependencies.
|
||||||
|
PublicAdditionalLibraries.Add(Path.Combine(CarlaServerInstallPath, "lib", GetSharedLibName("boost_system")));
|
||||||
|
PublicAdditionalLibraries.Add(Path.Combine(CarlaServerInstallPath, "lib", GetSharedLibName("protobuf")));
|
||||||
|
PublicAdditionalLibraries.Add(Path.Combine(CarlaServerInstallPath, "lib", GetSharedLibName(CarlaServerLib)));
|
||||||
|
|
||||||
|
// Include path.
|
||||||
|
string CarlaServerIncludePath = Path.Combine(CarlaServerInstallPath, "include");
|
||||||
PublicIncludePaths.Add(CarlaServerIncludePath);
|
PublicIncludePaths.Add(CarlaServerIncludePath);
|
||||||
PrivateIncludePaths.Add(CarlaServerIncludePath);
|
PrivateIncludePaths.Add(CarlaServerIncludePath);
|
||||||
PublicAdditionalLibraries.Add(CarlaServerLib);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,2 @@
|
||||||
*.log
|
*.pb.cc
|
||||||
*.pid
|
*.pb.h
|
||||||
*.sublime-workspace
|
|
||||||
bin
|
|
||||||
bin_debug
|
|
||||||
build
|
|
||||||
lib
|
|
||||||
|
|
|
@ -1,158 +0,0 @@
|
||||||
cmake_minimum_required (VERSION 3.4.2)
|
|
||||||
project (CarlaServer)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- Compiler config -----------------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
if (UNIX)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -Werror -Wall -Wextra -Wno-unused-parameter")
|
|
||||||
find_package(Threads)
|
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DEBUG -O0")
|
|
||||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG -O3")
|
|
||||||
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
|
|
||||||
endif (UNIX)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- Suppress windows warning --------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# http://stackoverflow.com/a/40217291
|
|
||||||
if (WIN32)
|
|
||||||
macro(get_WIN32_WINNT version)
|
|
||||||
if (CMAKE_SYSTEM_VERSION)
|
|
||||||
set(ver ${CMAKE_SYSTEM_VERSION})
|
|
||||||
string(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver})
|
|
||||||
string(REGEX MATCH "^([0-9]+)" verMajor ${ver})
|
|
||||||
# Check for Windows 10, b/c we'll need to convert to hex 'A'.
|
|
||||||
if ("${verMajor}" MATCHES "10")
|
|
||||||
set(verMajor "A")
|
|
||||||
string(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver})
|
|
||||||
endif ("${verMajor}" MATCHES "10")
|
|
||||||
# Remove all remaining '.' characters.
|
|
||||||
string(REPLACE "." "" ver ${ver})
|
|
||||||
# Prepend each digit with a zero.
|
|
||||||
string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
|
|
||||||
set(${version} "0x${ver}")
|
|
||||||
endif(CMAKE_SYSTEM_VERSION)
|
|
||||||
endmacro(get_WIN32_WINNT)
|
|
||||||
get_WIN32_WINNT(ver)
|
|
||||||
add_definitions(-D_WIN32_WINNT=${ver})
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- Boost ---------------------------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
|
||||||
find_package(Boost REQUIRED system date_time regex)
|
|
||||||
include_directories(${Boost_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- Protobuf ------------------------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
if (UNIX)
|
|
||||||
|
|
||||||
include(FindProtobuf)
|
|
||||||
find_package(Protobuf REQUIRED)
|
|
||||||
include_directories(${PROTOBUF_INCLUDE_DIR})
|
|
||||||
set(Protobuf_LIBRARIES protobuf)
|
|
||||||
|
|
||||||
elseif (WIN32)
|
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
||||||
|
|
||||||
if (EXISTS $ENV{PROTOBUF_ROOT}/Debug)
|
|
||||||
message(STATUS "Using Protobuf DEBUG at " $ENV{PROTOBUF_ROOT}/Debug)
|
|
||||||
include_directories($ENV{PROTOBUF_ROOT}/Debug/include)
|
|
||||||
link_directories($ENV{PROTOBUF_ROOT}/Debug/lib)
|
|
||||||
set(Protobuf_LIBRARIES libprotobufd.lib)
|
|
||||||
else (EXISTS $ENV{PROTOBUF_ROOT}/Debug)
|
|
||||||
message(FATAL_ERROR "Cannot find PROTOBUF_ROOT/Debug")
|
|
||||||
endif (EXISTS $ENV{PROTOBUF_ROOT}/Debug)
|
|
||||||
|
|
||||||
else (CMAKE_BUILD_TYPE MATCHES Release)
|
|
||||||
|
|
||||||
if (EXISTS $ENV{PROTOBUF_ROOT}/Release)
|
|
||||||
message(STATUS "Using Protobuf RELEASE at " $ENV{PROTOBUF_ROOT}/Release)
|
|
||||||
include_directories($ENV{PROTOBUF_ROOT}/Release/include)
|
|
||||||
link_directories($ENV{PROTOBUF_ROOT}/Release/lib)
|
|
||||||
set(Protobuf_LIBRARIES libprotobuf.lib)
|
|
||||||
else (EXISTS $ENV{PROTOBUF_ROOT}/Release)
|
|
||||||
message(FATAL_ERROR "Cannot find PROTOBUF_ROOT/Release")
|
|
||||||
endif (EXISTS $ENV{PROTOBUF_ROOT}/Release)
|
|
||||||
|
|
||||||
endif (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
||||||
|
|
||||||
endif (UNIX)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- GTest ---------------------------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# Download and unpack googletest at configure time.
|
|
||||||
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
|
|
||||||
if(result)
|
|
||||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
|
||||||
endif()
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
|
|
||||||
if(result)
|
|
||||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Prevent overriding the parent project's compiler/linker
|
|
||||||
# settings on Windows.
|
|
||||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
||||||
|
|
||||||
# Add googletest directly to our build. This defines
|
|
||||||
# the gtest and gtest_main targets.
|
|
||||||
add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
|
|
||||||
${CMAKE_BINARY_DIR}/googletest-build)
|
|
||||||
|
|
||||||
# The gtest/gtest_main targets carry header search path
|
|
||||||
# dependencies automatically when using CMake 2.8.11 or
|
|
||||||
# later. Otherwise we have to add them here ourselves.
|
|
||||||
if (CMAKE_VERSION VERSION_LESS 2.8.11)
|
|
||||||
include_directories("${gtest_SOURCE_DIR}/include")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(GTest_LIBRARIES gtest_main)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# -- Project config ------------------------------------------------------------
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
set(CarlaServer_Deps_LIBRARIES
|
|
||||||
${Protobuf_LIBRARIES}
|
|
||||||
${GTest_LIBRARIES}
|
|
||||||
${Boost_DATE_TIME_LIBRARY}
|
|
||||||
${Boost_REGEX_LIBRARY}
|
|
||||||
${Boost_SYSTEM_LIBRARY}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT})
|
|
||||||
|
|
||||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin_debug)
|
|
||||||
set(CarlaServer_LIBRARIES carlaserverd ${CarlaServer_Deps_LIBRARIES})
|
|
||||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
|
|
||||||
set(CarlaServer_LIBRARIES carlaserver ${CarlaServer_Deps_LIBRARIES})
|
|
||||||
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
|
|
||||||
include_directories("${PROJECT_SOURCE_DIR}/source")
|
|
||||||
include_directories("${PROJECT_SOURCE_DIR}/include")
|
|
||||||
|
|
||||||
add_subdirectory(source/carla/server)
|
|
||||||
add_subdirectory(source/test)
|
|
|
@ -1,15 +0,0 @@
|
||||||
cmake_minimum_required (VERSION 3.0.2)
|
|
||||||
|
|
||||||
project(googletest-download NONE)
|
|
||||||
|
|
||||||
include(ExternalProject)
|
|
||||||
ExternalProject_Add(googletest
|
|
||||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
|
||||||
GIT_TAG master
|
|
||||||
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
|
|
||||||
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND ""
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
TEST_COMMAND ""
|
|
||||||
)
|
|
|
@ -1,52 +0,0 @@
|
||||||
{
|
|
||||||
"folders":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"folder_exclude_patterns": ["build"],
|
|
||||||
"path": "."
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"build_systems":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"file_regex": "^../../(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
|
|
||||||
"name": "make - CarlaServer",
|
|
||||||
"shell_cmd": "make",
|
|
||||||
"syntax": "Packages/Makefile/Make Output.sublime-syntax",
|
|
||||||
"variants":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": "All",
|
|
||||||
"shell_cmd": "make all"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Check",
|
|
||||||
"shell_cmd": "make check"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Clean",
|
|
||||||
"shell_cmd": "make clean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Doxygen Documentation",
|
|
||||||
"shell_cmd": "doxygen"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"working_dir": "${project_path}"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"SublimeLinter":
|
|
||||||
{
|
|
||||||
"linters":
|
|
||||||
{
|
|
||||||
"clang":
|
|
||||||
{
|
|
||||||
"extra_flags": "-std=c++14 -Wno-pragma-once-outside-header",
|
|
||||||
"include_dirs":
|
|
||||||
[
|
|
||||||
"${project_folder}/source"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
PROJECT_NAME = "CARLA UE4 Plugin"
|
|
||||||
OUTPUT_DIRECTORY = Doxygen
|
|
||||||
CREATE_SUBDIRS = YES
|
|
||||||
FULL_PATH_NAMES = NO
|
|
||||||
JAVADOC_AUTOBRIEF = YES
|
|
||||||
LOOKUP_CACHE_SIZE = 3
|
|
||||||
EXTRACT_ALL = YES
|
|
||||||
EXTRACT_PRIVATE = YES
|
|
||||||
EXTRACT_STATIC = YES
|
|
||||||
CASE_SENSE_NAMES = YES
|
|
||||||
SORT_BRIEF_DOCS = YES
|
|
||||||
WARN_IF_UNDOCUMENTED = NO
|
|
||||||
WARN_LOGFILE = Doxygen/warnings.log
|
|
||||||
INPUT = Source
|
|
||||||
FILE_PATTERNS = *.cpp *.h *.hpp *.cc
|
|
||||||
RECURSIVE = YES
|
|
||||||
SOURCE_BROWSER = YES
|
|
||||||
STRIP_CODE_COMMENTS = NO
|
|
||||||
REFERENCED_BY_RELATION = YES
|
|
||||||
REFERENCES_RELATION = YES
|
|
||||||
ALPHABETICAL_INDEX = NO
|
|
||||||
HTML_DYNAMIC_SECTIONS = YES
|
|
||||||
DISABLE_INDEX = YES
|
|
||||||
GENERATE_TREEVIEW = NO
|
|
||||||
FORMULA_FONTSIZE = 12
|
|
||||||
GENERATE_LATEX = NO
|
|
||||||
MACRO_EXPANSION = YES
|
|
||||||
EXPAND_ONLY_PREDEF = YES
|
|
||||||
INCLUDE_PATH = "Source/Carla" "Source/Common" "Source/CarlaServer/source"
|
|
||||||
INCLUDE_FILE_PATTERNS = *.h *.hpp
|
|
||||||
HIDE_UNDOC_RELATIONS = NO
|
|
||||||
HAVE_DOT = YES
|
|
||||||
TEMPLATE_RELATIONS = YES
|
|
||||||
CALL_GRAPH = YES
|
|
||||||
CALLER_GRAPH = YES
|
|
||||||
DOT_IMAGE_FORMAT = svg
|
|
||||||
INTERACTIVE_SVG = YES
|
|
||||||
DOT_MULTI_TARGETS = YES
|
|
|
@ -1,78 +0,0 @@
|
||||||
PROTOBUF_SRC_DIR=source/carla
|
|
||||||
PROTOBUF_CPP_OUT_DIR=source/carla/server
|
|
||||||
PROTOBUF_PY_OUT_DIR=source/carla/client
|
|
||||||
|
|
||||||
PROTOBUF_FILES= \
|
|
||||||
$(PROTOBUF_CPP_OUT_DIR)/carla_protocol.pb.h \
|
|
||||||
$(PROTOBUF_CPP_OUT_DIR)/carla_protocol.pb.cc \
|
|
||||||
$(PROTOBUF_PY_OUT_DIR)/carla_protocol.pb2.py
|
|
||||||
|
|
||||||
MY_CMAKE_FLAGS=-H. -B$(BUILD_FOLDER)
|
|
||||||
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
DEFAULT_RULE=release
|
|
||||||
BUILD_RULE=build_windows
|
|
||||||
else
|
|
||||||
DEFAULT_RULE=debug
|
|
||||||
BUILD_RULE=build_linux
|
|
||||||
endif
|
|
||||||
|
|
||||||
default: $(DEFAULT_RULE)
|
|
||||||
|
|
||||||
### Build ######################################################################
|
|
||||||
|
|
||||||
debug: BUILD_FOLDER=build/debug
|
|
||||||
debug: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Debug
|
|
||||||
debug: $(BUILD_RULE)
|
|
||||||
|
|
||||||
release: BUILD_FOLDER=build/release
|
|
||||||
release: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Release
|
|
||||||
release: $(BUILD_RULE)
|
|
||||||
|
|
||||||
build_linux: protobuf
|
|
||||||
cmake $(MY_CMAKE_FLAGS) -G "Ninja"
|
|
||||||
cd $(BUILD_FOLDER) && ninja
|
|
||||||
|
|
||||||
build_windows: protobuf
|
|
||||||
cmake $(MY_CMAKE_FLAGS) -G "NMake Makefiles"
|
|
||||||
cd $(BUILD_FOLDER) && nmake
|
|
||||||
|
|
||||||
vsproject: BUILD_FOLDER=build/visualstudio
|
|
||||||
vsproject: MY_CMAKE_FLAGS+=-DCMAKE_BUILD_TYPE=Debug
|
|
||||||
vsproject: protobuf
|
|
||||||
cmake $(MY_CMAKE_FLAGS) -G "Visual Studio 14 2015 Win64"
|
|
||||||
|
|
||||||
protobuf: $(PROTOBUF_FILES)
|
|
||||||
|
|
||||||
$(PROTOBUF_FILES): $(PROTOBUF_SRC_DIR)/carla_protocol.proto
|
|
||||||
protoc -I=$(PROTOBUF_SRC_DIR) --cpp_out=$(PROTOBUF_CPP_OUT_DIR) --python_out=$(PROTOBUF_PY_OUT_DIR) $<
|
|
||||||
|
|
||||||
### Clean ######################################################################
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(PROTOBUF_FILES)
|
|
||||||
rm -Rf build CMakeFiles bin bin_debug lib
|
|
||||||
|
|
||||||
### Test #######################################################################
|
|
||||||
|
|
||||||
check: debug launch_test_clients run_test_debug kill_test_clients
|
|
||||||
|
|
||||||
check_release: release launch_test_clients run_test_release kill_test_clients
|
|
||||||
|
|
||||||
run_test_debug:
|
|
||||||
@-./bin_debug/test_carla_server --gtest_shuffle
|
|
||||||
|
|
||||||
run_test_release:
|
|
||||||
@-./bin/test_carla_server --gtest_shuffle
|
|
||||||
|
|
||||||
launch_test_clients:
|
|
||||||
@echo "Launch echo_client.py"
|
|
||||||
@python source/carla/client/echo_client.py -p 4000 & echo $$! > echo_client.pid
|
|
||||||
@echo "Launch carla_client.py"
|
|
||||||
@python source/carla/client/carla_client.py -p 2000 & echo $$! > carla_client.pid
|
|
||||||
|
|
||||||
kill_test_clients:
|
|
||||||
@echo "Kill echo_client.py"
|
|
||||||
@kill `cat echo_client.pid` && rm echo_client.pid
|
|
||||||
@echo "Kill carla_client.py"
|
|
||||||
@kill `cat carla_client.pid` && rm carla_client.pid
|
|
|
@ -1,15 +0,0 @@
|
||||||
file(GLOB carlaserver_SRC
|
|
||||||
"*.h"
|
|
||||||
"*.cpp"
|
|
||||||
"*.pb.h"
|
|
||||||
"*.pb.cc"
|
|
||||||
)
|
|
||||||
set(carlaserver_SRC ${carlaserver_SRC})
|
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
add_library(carlaserverd SHARED ${carlaserver_SRC})
|
|
||||||
# target_link_libraries(carlaserverd ${CarlaServer_LIBRARIES})
|
|
||||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
add_library(carlaserver SHARED ${carlaserver_SRC})
|
|
||||||
# target_link_libraries(carlaserver ${CarlaServer_LIBRARIES})
|
|
||||||
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
@ -7,13 +7,15 @@
|
||||||
#include "carla/Debug.h"
|
#include "carla/Debug.h"
|
||||||
#include "carla/Logging.h"
|
#include "carla/Logging.h"
|
||||||
|
|
||||||
#include "carla/server/carla_protocol.pb.h"
|
#include "carla/server/carla_server.pb.h"
|
||||||
|
|
||||||
|
namespace cs = carla_server;
|
||||||
|
|
||||||
namespace carla {
|
namespace carla {
|
||||||
namespace server {
|
namespace server {
|
||||||
|
|
||||||
std::string CarlaEncoder::Encode(const carla_scene_description &values) {
|
std::string CarlaEncoder::Encode(const carla_scene_description &values) {
|
||||||
auto *message = _protobuf.CreateMessage<carla_protocol::SceneDescription>();
|
auto *message = _protobuf.CreateMessage<cs::SceneDescription>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->set_player_start_locations(
|
message->set_player_start_locations(
|
||||||
values.player_start_locations,
|
values.player_start_locations,
|
||||||
|
@ -22,13 +24,13 @@ namespace server {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CarlaEncoder::Encode(const carla_episode_ready &values) {
|
std::string CarlaEncoder::Encode(const carla_episode_ready &values) {
|
||||||
auto *message = _protobuf.CreateMessage<carla_protocol::EpisodeReady>();
|
auto *message = _protobuf.CreateMessage<cs::EpisodeReady>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->set_ready(values.ready);
|
message->set_ready(values.ready);
|
||||||
return Protobuf::Encode(*message);
|
return Protobuf::Encode(*message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetVector3D(carla_protocol::Vector3D *lhs, const carla_vector3d &rhs) {
|
static void SetVector3D(cs::Vector3D *lhs, const carla_vector3d &rhs) {
|
||||||
DEBUG_ASSERT(lhs != nullptr);
|
DEBUG_ASSERT(lhs != nullptr);
|
||||||
lhs->set_x(rhs.x);
|
lhs->set_x(rhs.x);
|
||||||
lhs->set_y(rhs.y);
|
lhs->set_y(rhs.y);
|
||||||
|
@ -36,7 +38,7 @@ namespace server {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CarlaEncoder::Encode(const carla_measurements &values) {
|
std::string CarlaEncoder::Encode(const carla_measurements &values) {
|
||||||
static thread_local auto *message = _protobuf.CreateMessage<carla_protocol::Measurements>();
|
static thread_local auto *message = _protobuf.CreateMessage<cs::Measurements>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->set_platform_timestamp(values.platform_timestamp);
|
message->set_platform_timestamp(values.platform_timestamp);
|
||||||
message->set_game_timestamp(values.game_timestamp);
|
message->set_game_timestamp(values.game_timestamp);
|
||||||
|
@ -55,7 +57,7 @@ namespace server {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CarlaEncoder::Decode(const std::string &str, RequestNewEpisode &values) {
|
bool CarlaEncoder::Decode(const std::string &str, RequestNewEpisode &values) {
|
||||||
auto *message = _protobuf.CreateMessage<carla_protocol::RequestNewEpisode>();
|
auto *message = _protobuf.CreateMessage<cs::RequestNewEpisode>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->ParseFromString(str);
|
message->ParseFromString(str);
|
||||||
if (message->IsInitialized()) {
|
if (message->IsInitialized()) {
|
||||||
|
@ -73,7 +75,7 @@ namespace server {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CarlaEncoder::Decode(const std::string &str, carla_episode_start &values) {
|
bool CarlaEncoder::Decode(const std::string &str, carla_episode_start &values) {
|
||||||
auto *message = _protobuf.CreateMessage<carla_protocol::EpisodeStart>();
|
auto *message = _protobuf.CreateMessage<cs::EpisodeStart>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->ParseFromString(str);
|
message->ParseFromString(str);
|
||||||
if (message->IsInitialized()) {
|
if (message->IsInitialized()) {
|
||||||
|
@ -86,7 +88,7 @@ namespace server {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CarlaEncoder::Decode(const std::string &str, carla_control &values) {
|
bool CarlaEncoder::Decode(const std::string &str, carla_control &values) {
|
||||||
static thread_local auto *message = _protobuf.CreateMessage<carla_protocol::Control>();
|
static thread_local auto *message = _protobuf.CreateMessage<cs::Control>();
|
||||||
DEBUG_ASSERT(message != nullptr);
|
DEBUG_ASSERT(message != nullptr);
|
||||||
message->ParseFromString(str);
|
message->ParseFromString(str);
|
||||||
if (message->IsInitialized()) {
|
if (message->IsInitialized()) {
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
file(GLOB test_carla_server_SRC
|
|
||||||
"*.h"
|
|
||||||
"*.cpp"
|
|
||||||
)
|
|
||||||
set(test_carla_server_SRC ${test_carla_server_SRC})
|
|
||||||
|
|
||||||
add_executable(test_carla_server ${test_carla_server_SRC})
|
|
||||||
target_link_libraries(test_carla_server ${CarlaServer_LIBRARIES})
|
|
||||||
|
|
||||||
add_test(carla_server test_carla_server)
|
|
|
@ -1,6 +1,6 @@
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package carla_protocol;
|
package carla_server;
|
||||||
|
|
||||||
option cc_enable_arenas = true;
|
option cc_enable_arenas = true;
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
pushd "$SCRIPT_DIR" >/dev/null
|
||||||
|
|
||||||
|
PROTOBUF_SRC_DIR=Proto
|
||||||
|
PROTOBUF_CPP_OUT_DIR=CarlaServer/source/carla/server
|
||||||
|
PROTOBUF_PY_OUT_DIR=PythonClient
|
||||||
|
PROTO_BASENAME=carla_server
|
||||||
|
|
||||||
|
if [ "$1" == "--clean" ]; then
|
||||||
|
# Delete existing ones.
|
||||||
|
rm -f ${PROTOBUF_CPP_OUT_DIR}/*.pb.h ${PROTOBUF_CPP_OUT_DIR}/*.pb.cc
|
||||||
|
rm -f ${PROTOBUF_PY_OUT_DIR}/*_pb2.py
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./Build/llvm-install/lib
|
||||||
|
PROTOC=./Build/protobuf-install/bin/protoc
|
||||||
|
|
||||||
|
if [[ ! -f $PROTOC ]]; then
|
||||||
|
echo >&2 "ERROR: Missing protobuf compiler."
|
||||||
|
echo >&2 "Did you forget to run Setup.sh?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Compiling ${PROTO_BASENAME}.proto..."
|
||||||
|
|
||||||
|
${PROTOC} \
|
||||||
|
-I=${PROTOBUF_SRC_DIR} \
|
||||||
|
--cpp_out=${PROTOBUF_CPP_OUT_DIR} \
|
||||||
|
--python_out=${PROTOBUF_PY_OUT_DIR} \
|
||||||
|
${PROTOBUF_SRC_DIR}/${PROTO_BASENAME}.proto
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
echo "done."
|
|
@ -176,9 +176,9 @@ def test_carla_client():
|
||||||
data = client.read_images()
|
data = client.read_images()
|
||||||
logging.info('received %d bytes of images', len(data) if data is not None else 0)
|
logging.info('received %d bytes of images', len(data) if data is not None else 0)
|
||||||
|
|
||||||
if (x+1) % 10 == 0:
|
# if (x+1) % 10 == 0:
|
||||||
logging.info('Taking a nap...')
|
# logging.info('Taking a nap...')
|
||||||
time.sleep(2)
|
# time.sleep(2)
|
||||||
|
|
||||||
logging.info('sending control')
|
logging.info('sending control')
|
||||||
client.write_control(steer=-2.3, throttle=1.0, reverse=True)
|
client.write_control(steer=-2.3, throttle=1.0, reverse=True)
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
cmake_minimum_required(VERSION 3.5.0)
|
||||||
|
project(CARLA)
|
||||||
|
|
||||||
|
set(CARLA_UTIL_PATH "${PROJECT_SOURCE_DIR}/..")
|
||||||
|
|
||||||
|
set(CARLA_LIBCXX_INSTALL_PATH "${CARLA_UTIL_PATH}/Build/llvm-install")
|
||||||
|
set(CARLA_BOOST_INSTALL_PATH "${CARLA_UTIL_PATH}/Build/boost-install")
|
||||||
|
set(CARLA_PROTOBUF_INSTALL_PATH "${CARLA_UTIL_PATH}/Build/protobuf-install")
|
||||||
|
set(CARLA_GOOGLETEST_INSTALL_PATH "${CARLA_UTIL_PATH}/Build/googletest-install")
|
||||||
|
|
||||||
|
add_subdirectory("CarlaServer")
|
|
@ -0,0 +1,101 @@
|
||||||
|
cmake_minimum_required (VERSION 3.5.0)
|
||||||
|
project (CarlaServer)
|
||||||
|
|
||||||
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(CarlaServer_Lib_Target carlaserverd)
|
||||||
|
set(CarlaServer_Test_Target test_carlaserverd)
|
||||||
|
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
|
set(CarlaServer_Lib_Target carlaserver)
|
||||||
|
set(CarlaServer_Test_Target test_carlaserver)
|
||||||
|
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Compiler and dependencies -------------------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
if (UNIX)
|
||||||
|
|
||||||
|
find_package(Threads)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER /usr/bin/clang++-3.9)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Wno-unused-parameter")
|
||||||
|
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -D_DEBUG -O0")
|
||||||
|
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG -O3")
|
||||||
|
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
|
||||||
|
# Setup libc++.
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
|
include_directories("${CARLA_LIBCXX_INSTALL_PATH}/include/c++/v1")
|
||||||
|
link_directories("${CARLA_LIBCXX_INSTALL_PATH}/lib")
|
||||||
|
file(GLOB LibCXX_Shared_Libraries "${CARLA_LIBCXX_INSTALL_PATH}/lib/libc++*.so*")
|
||||||
|
|
||||||
|
# Setup boost.
|
||||||
|
include_directories("${CARLA_BOOST_INSTALL_PATH}/include")
|
||||||
|
set(Boost_Static_Libraries "${CARLA_BOOST_INSTALL_PATH}/lib/libboost_system.a")
|
||||||
|
file(GLOB Boost_Shared_Libraries "${CARLA_BOOST_INSTALL_PATH}/lib/libboost_system.so*")
|
||||||
|
|
||||||
|
# Setup protobuf.
|
||||||
|
include_directories("${CARLA_PROTOBUF_INSTALL_PATH}/include")
|
||||||
|
set(Protobuf_Static_Libraries "${CARLA_PROTOBUF_INSTALL_PATH}/lib/libprotobuf.a")
|
||||||
|
file(GLOB Protobuf_Shared_Libraries "${CARLA_PROTOBUF_INSTALL_PATH}/lib/libprotobuf.so*")
|
||||||
|
|
||||||
|
# Setup googletest.
|
||||||
|
include_directories("${CARLA_GOOGLETEST_INSTALL_PATH}/include")
|
||||||
|
set(GTest_Static_Libraries "${CARLA_GOOGLETEST_INSTALL_PATH}/lib/libgtest.a")
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${LibCXX_Shared_Libraries}
|
||||||
|
${Boost_Shared_Libraries}
|
||||||
|
${Protobuf_Shared_Libraries}
|
||||||
|
DESTINATION lib)
|
||||||
|
|
||||||
|
else (UNIX)
|
||||||
|
message(FATAL_ERROR "Build configuration not yet available for this platform")
|
||||||
|
endif (UNIX)
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# -- Project config ------------------------------------------------------------
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
set(CarlaServer_Path "${CARLA_UTIL_PATH}/CarlaServer")
|
||||||
|
|
||||||
|
include_directories("${CarlaServer_Path}/source")
|
||||||
|
include_directories("${CarlaServer_Path}/include")
|
||||||
|
|
||||||
|
# libcarlaserver
|
||||||
|
|
||||||
|
file(GLOB carlaserver_SRC
|
||||||
|
"${CarlaServer_Path}/include/carla/carla_server.h"
|
||||||
|
"${CarlaServer_Path}/source/carla/*.h"
|
||||||
|
"${CarlaServer_Path}/source/carla/*.cpp"
|
||||||
|
"${CarlaServer_Path}/source/carla/server/*.h"
|
||||||
|
"${CarlaServer_Path}/source/carla/server/*.cpp"
|
||||||
|
"${CarlaServer_Path}/source/carla/server/*.pb.h"
|
||||||
|
"${CarlaServer_Path}/source/carla/server/*.pb.cc")
|
||||||
|
|
||||||
|
add_library(${CarlaServer_Lib_Target} SHARED ${carlaserver_SRC})
|
||||||
|
install(DIRECTORY "${CarlaServer_Path}/include/carla" DESTINATION include)
|
||||||
|
install(TARGETS ${CarlaServer_Lib_Target} DESTINATION lib)
|
||||||
|
|
||||||
|
# unit tests
|
||||||
|
|
||||||
|
file(GLOB test_carlaserver_SRC
|
||||||
|
"${CarlaServer_Path}/source/test/*.h"
|
||||||
|
"${CarlaServer_Path}/source/test/*.cpp")
|
||||||
|
|
||||||
|
set(CarlaServer_Static_LIBRARIES
|
||||||
|
${CarlaServer_Lib_Target}
|
||||||
|
${GTest_Static_Libraries}
|
||||||
|
${Protobuf_Static_Libraries}
|
||||||
|
${Boost_Static_Libraries}
|
||||||
|
${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
|
||||||
|
add_executable(${CarlaServer_Test_Target} ${test_carlaserver_SRC})
|
||||||
|
target_link_libraries(${CarlaServer_Test_Target} ${CarlaServer_Static_LIBRARIES})
|
||||||
|
install(TARGETS ${CarlaServer_Test_Target} DESTINATION bin)
|
Loading…
Reference in New Issue