Upgrade to Unreal Engine 4.22 and clang 7

This commit is contained in:
nsubiron 2019-04-30 13:41:13 +02:00
parent e52f6c7853
commit 32d9715ef8
24 changed files with 111 additions and 113 deletions

View File

@ -13,9 +13,10 @@ matrix:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-xenial-7
packages:
- g++-7 # we need this one for the libstdc++.
- clang-6.0
- clang-7
- ninja-build
- python
- python-pip

View File

@ -1,5 +1,6 @@
## Latest
* Upgraded to Unreal Engine 4.22
* Recorder fixes:
- Actors at start of playback could interpolate positions from its current position instead than the recorded position, making some fast sliding effect during 1 frame.
- Camera following in playback was not working if a new map was needed to load.

View File

@ -11,7 +11,7 @@ process.
![modules](img/modules.png)
In Linux, we compile CARLA and all the dependencies with clang-6.0 and C++14
In Linux, we compile CARLA and all the dependencies with clang-7.0 and C++14
standard. We however link against different runtime C++ libraries depending on
where the code going to be used, since all the code that is going to be linked
with Unreal Engine needs to be compiled using `libc++`.
@ -26,7 +26,7 @@ make setup
Get and compile dependencies
* llvm-6.0 (libc++ and libc++abi)
* llvm-7.1 (libc++ and libc++abi)
* rpclib-2.2.1 (twice, with libstdc++ and libc++)
* boost-1.69 (headers only)
* googletest-1.8.0 (with libc++)
@ -53,8 +53,8 @@ Two configurations:
#### CarlaUE4 and Carla plugin
Both compiled at the same step with Unreal Engine 4.21 build tool. They require
the `UE4_ROOT` environment variable set.
Both compiled at the same step with Unreal Engine build tool. They require the
`UE4_ROOT` environment variable set.
Command

View File

@ -27,7 +27,7 @@ C++
* Comments should not exceed 80 columns, code may exceed this limit a bit in
rare occasions if it results in clearer code.
* Compilation should not give any error or warning
(`clang++-6.0 -Wall -Wextra -std=C++14 -Wno-missing-braces`).
(`clang++-7 -Wall -Wextra -std=C++14 -Wno-missing-braces`).
* The use of `throw` is forbidden, use `carla::throw_exception` instead.
* Unreal C++ code (CarlaUE4 and Carla plugin) follow the
[Unreal Engine's Coding Standard][ue4link] with the exception of using

View File

@ -7,8 +7,10 @@ Install the build tools and dependencies
```
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main"
sudo apt-get update
sudo apt-get install build-essential clang-6.0 lld-6.0 g++-7 cmake ninja-build python python-pip python-dev python3-dev python3-pip libpng16-dev libtiff5-dev libjpeg-dev tzdata sed curl wget unzip autoconf libtool
sudo apt-get install build-essential clang-7 lld-7 g++-7 cmake ninja-build python python-pip python-dev python3-dev python3-pip libpng16-dev libtiff5-dev libjpeg-dev tzdata sed curl wget unzip autoconf libtool
pip2 install --user setuptools
pip3 install --user setuptools
```
@ -20,8 +22,8 @@ change your default clang version to compile Unreal Engine and the CARLA
dependencies
```sh
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-6.0/bin/clang++ 102
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-6.0/bin/clang 102
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-7/bin/clang++ 170
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-7/bin/clang 170
```
Build Unreal Engine
@ -32,13 +34,13 @@ Build Unreal Engine
need to add your GitHub username when you sign up at
[www.unrealengine.com](https://www.unrealengine.com).
Download and compile Unreal Engine 4.21. Here we will assume you install it at
`~/UnrealEngine_4.21", but you can install it anywhere, just replace the path
Download and compile Unreal Engine 4.22. Here we will assume you install it at
`~/UnrealEngine_4.22", but you can install it anywhere, just replace the path
where necessary.
```sh
git clone --depth=1 -b 4.21 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.21
cd ~/UnrealEngine_4.21
git clone --depth=1 -b 4.22 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.22
cd ~/UnrealEngine_4.22
./Setup.sh && ./GenerateProjectFiles.sh && make
```
@ -71,7 +73,7 @@ For CARLA to find your Unreal Engine's installation folder you need to set the
following environment variable
```sh
export UE4_ROOT=~/UnrealEngine_4.21
export UE4_ROOT=~/UnrealEngine_4.22
```
You can also add this variable to your `~/.bashrc` or `~/.profile`.

View File

@ -15,7 +15,7 @@
Also:
- [Unreal Engine](https://www.unrealengine.com/download) (v4.21.x)
- [Unreal Engine](https://www.unrealengine.com/download) (v4.22.x)
- [Visual Studio](https://www.visualstudio.com/downloads/) (2017)
<h3>Environment Setup</h3>

View File

@ -4,8 +4,8 @@ BINDIR=$(CURDIR)/bin
INSTALLDIR=$(CURDIR)/libcarla-install
TOOLCHAIN=$(CURDIR)/ToolChain.cmake
CC=/usr/bin/clang-6.0
CXX=/usr/bin/clang++-6.0
CC=/usr/bin/clang-7
CXX=/usr/bin/clang++-7
CXXFLAGS=-std=c++14 -pthread -fPIC -O3 -DNDEBUG -Werror -Wall -Wextra
define log

View File

@ -24,8 +24,8 @@ want
```cmake
# Example ToolChain.cmake
set(CMAKE_C_COMPILER /usr/bin/clang-6.0)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-6.0)
set(CMAKE_C_COMPILER /usr/bin/clang-7)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE)
```

2
Jenkinsfile vendored
View File

@ -2,7 +2,7 @@ pipeline {
agent any
environment {
UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.21'
UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.22'
}
options {

View File

@ -257,23 +257,23 @@ namespace road {
RELEASE_ASSERT(waypoint.lane_id >= lanes.begin()->first);
RELEASE_ASSERT(waypoint.lane_id <= lanes.rbegin()->first);
double lane_width = 0;
double lane_tangent = 0;
float lane_width = 0.0f;
float lane_tangent = 0.0f;
if (waypoint.lane_id < 0) {
// right lane
const auto side_lanes = MakeListView(
std::make_reverse_iterator(lanes.lower_bound(0)), lanes.rend());
const auto computed_width =
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
lane_width = computed_width.first;
lane_tangent = computed_width.second;
lane_width = static_cast<float>(computed_width.first);
lane_tangent = static_cast<float>(computed_width.second);
} else {
// left lane
const auto side_lanes = MakeListView(lanes.lower_bound(1), lanes.end());
const auto computed_width =
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
lane_width = computed_width.first;
lane_tangent = computed_width.second;
lane_width = static_cast<float>(computed_width.first);
lane_tangent = static_cast<float>(computed_width.second);
}
// get a directed point in s and apply the computed lateral offet
@ -281,7 +281,7 @@ namespace road {
// compute the tangent of the laneOffset
const auto lane_offset_info = road.GetInfo<RoadInfoLaneOffset>(waypoint.s);
const auto lane_offset_tangent = lane_offset_info->GetPolynomial().Tangent(waypoint.s);
const auto lane_offset_tangent = static_cast<float>(lane_offset_info->GetPolynomial().Tangent(waypoint.s));
lane_tangent -= lane_offset_tangent;

View File

@ -184,7 +184,7 @@ namespace road {
const auto geometry = _info.GetInfo<element::RoadInfoGeometry>(clamped_s);
const auto lane_offset = _info.GetInfo<element::RoadInfoLaneOffset>(clamped_s);
const auto offset = lane_offset->GetPolynomial().Evaluate(clamped_s);
const auto offset = static_cast<float>(lane_offset->GetPolynomial().Evaluate(clamped_s));
// Apply road's lane offset record
element::DirectedPoint p = geometry->GetGeometry().PosFromDist(clamped_s - geometry->GetDistance());
@ -244,7 +244,7 @@ namespace road {
DirectedPoint current_dp = dp_lane_zero;
for (const auto &lane : right_lanes) {
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
const auto half_width = lane_width_info->GetPolynomial().Evaluate(s) * 0.5;
const auto half_width = static_cast<float>(lane_width_info->GetPolynomial().Evaluate(s)) * 0.5f;
current_dp.ApplyLateralOffset(half_width);
const auto current_dist = geom::Math::Distance(current_dp.location, loc);
@ -267,7 +267,7 @@ namespace road {
current_dp = dp_lane_zero;
for (const auto &lane : left_lanes) {
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
const auto half_width = -lane_width_info->GetPolynomial().Evaluate(s) * 0.5;
const auto half_width = -static_cast<float>(lane_width_info->GetPolynomial().Evaluate(s)) * 0.5f;
current_dp.ApplyLateralOffset(half_width);
const auto current_dist = geom::Math::Distance(current_dp.location, loc);

View File

@ -41,10 +41,10 @@ namespace element {
double tangent = 0.0; // [radians]
double pitch = 0.0; // [radians]
void ApplyLateralOffset(double lateral_offset) {
void ApplyLateralOffset(float lateral_offset) {
/// @todo Z axis??
auto normal_x = std::sin(tangent);
auto normal_y = -std::cos(tangent);
auto normal_x = std::sin(static_cast<float>(tangent));
auto normal_y = -std::cos(static_cast<float>(tangent));
location.x += lateral_offset * normal_x;
location.y += lateral_offset * normal_y;
}
@ -117,11 +117,11 @@ namespace element {
: Geometry(GeometryType::LINE, start_offset, length, heading, start_pos) {}
DirectedPoint PosFromDist(double dist) const override {
dist = geom::Math::Clamp(dist, 0.0, _length);
DEBUG_ASSERT(_length > 0.0);
dist = geom::Math::Clamp(dist, 0.0, _length);
DirectedPoint p(_start_position, _heading);
p.location.x += dist * std::cos(p.tangent);
p.location.y += dist * std::sin(p.tangent);
p.location.x += static_cast<float>(dist * std::cos(p.tangent));
p.location.y += static_cast<float>(dist * std::sin(p.tangent));
return p;
}
@ -159,11 +159,11 @@ namespace element {
const double radius = 1.0 / _curvature;
constexpr double pi_half = geom::Math::Pi<double>() / 2.0;
DirectedPoint p(_start_position, _heading);
p.location.x += radius * std::cos(p.tangent + pi_half);
p.location.y += radius * std::sin(p.tangent + pi_half);
p.location.x += static_cast<float>(radius * std::cos(p.tangent + pi_half));
p.location.y += static_cast<float>(radius * std::sin(p.tangent + pi_half));
p.tangent += dist * _curvature;
p.location.x -= radius * std::cos(p.tangent + pi_half);
p.location.y -= radius * std::sin(p.tangent + pi_half);
p.location.x -= static_cast<float>(radius * std::cos(p.tangent + pi_half));
p.location.y -= static_cast<float>(radius * std::sin(p.tangent + pi_half));
return p;
}
@ -228,8 +228,8 @@ namespace element {
DirectedPoint p(_start_position, _heading);
const double cos_a = std::cos(p.tangent);
const double sin_a = std::sin(p.tangent);
p.location.x += C * cos_a - S * sin_a;
p.location.y += S * cos_a + C * sin_a;
p.location.x += static_cast<float>(C * cos_a - S * sin_a);
p.location.y += static_cast<float>(S * cos_a + C * sin_a);
p.tangent += length * length;
return p;

View File

@ -40,7 +40,7 @@ def get_libcarla_extensions():
os.path.join(pwd, 'dependencies/lib', pylib)]
extra_compile_args = [
'-isystem', 'dependencies/include/system', '-fPIC', '-std=c++14',
'-Werror', '-Wall', '-Wextra', '-Wpedantic',
'-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wno-self-assign-overloaded',
'-Wdeprecated', '-Wno-shadow', '-Wuninitialized', '-Wunreachable-code',
'-Wpessimizing-move', '-Wold-style-cast', '-Wnull-dereference',
'-Wduplicate-enum', '-Wnon-virtual-dtor', '-Wheader-hygiene',

View File

@ -1,6 +1,6 @@
{
"FileVersion": 3,
"EngineAssociation": "4.21",
"EngineAssociation": "4.22",
"Category": "",
"Description": "",
"Modules": [

View File

@ -85,35 +85,24 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor)
{
check(Sensor.CaptureRenderTarget != nullptr);
// First we create the message header (needs to be created in the
// game-thread).
auto AsyncStream = Sensor.GetDataStream(Sensor);
// We need a shared ptr here because UE4 macros do not move the arguments -_-
auto StreamPtr = std::make_shared<decltype(AsyncStream)>(std::move(AsyncStream));
// Then we enqueue commands in the render-thread that will write the image
// buffer to the data stream.
auto WriteAndSend = [&Sensor, Stream=std::move(StreamPtr)](auto &InRHICmdList) mutable
{
/// @todo Can we make sure the sensor is not going to be destroyed?
if (!Sensor.IsPendingKill())
// Enqueue a command in the render-thread that will write the image buffer to
// the data stream. The stream is created in the capture thus executed in the
// game-thread.
ENQUEUE_RENDER_COMMAND(FWritePixels_SendPixelsInRenderThread)
(
[&Sensor, Stream=Sensor.GetDataStream(Sensor)](auto &InRHICmdList) mutable
{
auto Buffer = Stream->PopBufferFromPool();
WritePixelsToBuffer(
*Sensor.CaptureRenderTarget,
Buffer,
carla::sensor::SensorRegistry::get<TSensor *>::type::header_offset,
InRHICmdList);
Stream->Send(Sensor, std::move(Buffer));
/// @todo Can we make sure the sensor is not going to be destroyed?
if (!Sensor.IsPendingKill())
{
auto Buffer = Stream.PopBufferFromPool();
WritePixelsToBuffer(
*Sensor.CaptureRenderTarget,
Buffer,
carla::sensor::SensorRegistry::get<TSensor *>::type::header_offset,
InRHICmdList);
Stream.Send(Sensor, std::move(Buffer));
}
}
};
ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER(
FWritePixels_SendPixelsInRenderThread,
std::function<void(FRHICommandListImmediate &)>, WriteAndSendFunction, std::move(WriteAndSend),
{
WriteAndSendFunction(RHICmdList);
});
);
}

View File

@ -25,6 +25,6 @@ enum class EVehicleInputPriority : uint8
inline static bool operator<=(EVehicleInputPriority Lhs, EVehicleInputPriority Rhs)
{
constexpr auto Cast = [](auto e) { return static_cast<typename std::underlying_type<decltype(e)>::type>(e); };
auto Cast = [](auto e) { return static_cast<typename std::underlying_type<decltype(e)>::type>(e); };
return Cast(Lhs) <= Cast(Rhs);
}

View File

@ -97,9 +97,9 @@ AWheeledVehicleAIController::~AWheeledVehicleAIController() {}
// -- APlayerController --------------------------------------------------------
// =============================================================================
void AWheeledVehicleAIController::Possess(APawn *aPawn)
void AWheeledVehicleAIController::OnPossess(APawn *aPawn)
{
Super::Possess(aPawn);
Super::OnPossess(aPawn);
if (IsPossessingAVehicle())
{
@ -119,9 +119,9 @@ void AWheeledVehicleAIController::Possess(APawn *aPawn)
}
}
void AWheeledVehicleAIController::UnPossess()
void AWheeledVehicleAIController::OnUnPossess()
{
Super::UnPossess();
Super::OnUnPossess();
Vehicle = nullptr;
}

View File

@ -44,9 +44,9 @@ public:
public:
void Possess(APawn *aPawn) override;
void OnPossess(APawn *aPawn) override;
void UnPossess() override;
void OnUnPossess() override;
void Tick(float DeltaTime) override;

View File

@ -16,9 +16,9 @@ AWalkerController::AWalkerController(const FObjectInitializer& ObjectInitializer
PrimaryActorTick.bCanEverTick = true;
}
void AWalkerController::Possess(APawn *InPawn)
void AWalkerController::OnPossess(APawn *InPawn)
{
Super::Possess(InPawn);
Super::OnPossess(InPawn);
auto *Character = Cast<ACharacter>(InPawn);
if (Character == nullptr)

View File

@ -22,7 +22,7 @@ public:
AWalkerController(const FObjectInitializer& ObjectInitializer);
void Possess(APawn *InPawn) override;
void OnPossess(APawn *InPawn) override;
void Tick(float DeltaSeconds) override;

View File

@ -2,8 +2,8 @@
source $(dirname "$0")/Environment.sh
export CC=clang-6.0
export CXX=clang++-6.0
export CC=clang-7
export CXX=clang++-7
# ==============================================================================
# -- Parse arguments -----------------------------------------------------------

View File

@ -24,7 +24,7 @@ set DO_COPY_FILES=true
set DO_TARBALL=true
set DO_CLEAN=false
set UE_VERSION=4.21
set UE_VERSION=4.22
:arg-parse
if not "%1"=="" (

View File

@ -4,14 +4,14 @@
# -- Set up environment --------------------------------------------------------
# ==============================================================================
command -v /usr/bin/clang++-6.0 >/dev/null 2>&1 || {
echo >&2 "clang 6.0 is required, but it's not installed.";
echo >&2 "make sure you build Unreal Engine with clang 6.0 too.";
command -v /usr/bin/clang++-7 >/dev/null 2>&1 || {
echo >&2 "clang 7 is required, but it's not installed.";
exit 1;
}
export CC=/usr/bin/clang-6.0
export CXX=/usr/bin/clang++-6.0
CXX_TAG=c7
export CC=/usr/bin/clang-7
export CXX=/usr/bin/clang++-7
source $(dirname "$0")/Environment.sh
@ -22,7 +22,7 @@ pushd ${CARLA_BUILD_FOLDER} >/dev/null
# -- Get and compile libc++ ----------------------------------------------------
# ==============================================================================
LLVM_BASENAME=llvm-6.0-ex
LLVM_BASENAME=llvm-7.0
LLVM_INCLUDE=${PWD}/${LLVM_BASENAME}-install/include/c++/v1
LLVM_LIBPATH=${PWD}/${LLVM_BASENAME}-install/lib
@ -34,9 +34,9 @@ else
log "Retrieving libc++."
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/llvm.git ${LLVM_BASENAME}-source
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/libcxx.git ${LLVM_BASENAME}-source/projects/libcxx
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/libcxxabi.git ${LLVM_BASENAME}-source/projects/libcxxabi
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/llvm.git ${LLVM_BASENAME}-source
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/libcxx.git ${LLVM_BASENAME}-source/projects/libcxx
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/libcxxabi.git ${LLVM_BASENAME}-source/projects/libcxxabi
log "Compiling libc++."
@ -70,7 +70,7 @@ unset LLVM_BASENAME
# ==============================================================================
BOOST_VERSION=1.69.0
BOOST_BASENAME="boost-${BOOST_VERSION}"
BOOST_BASENAME="boost-${BOOST_VERSION}-${CXX_TAG}"
BOOST_INCLUDE=${PWD}/${BOOST_BASENAME}-install/include
BOOST_LIBPATH=${PWD}/${BOOST_BASENAME}-install/lib
@ -81,16 +81,19 @@ else
rm -Rf ${BOOST_BASENAME}-source
BOOST_PACKAGE_BASENAME=boost_${BOOST_VERSION//./_}
log "Retrieving boost."
wget "https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz"
log "Extracting boost."
tar -xzf ${BOOST_BASENAME//[-.]/_}.tar.gz
wget "https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/${BOOST_PACKAGE_BASENAME}.tar.gz"
log "Extracting boost for Python 2."
tar -xzf ${BOOST_PACKAGE_BASENAME}.tar.gz
mkdir -p ${BOOST_BASENAME}-install/include
mv ${BOOST_BASENAME//[-.]/_} ${BOOST_BASENAME}-source
mv ${BOOST_PACKAGE_BASENAME} ${BOOST_BASENAME}-source
pushd ${BOOST_BASENAME}-source >/dev/null
BOOST_TOOLSET="clang-6.0"
BOOST_TOOLSET="clang-7.1"
BOOST_CFLAGS="-fPIC -std=c++14 -DBOOST_ERROR_CODE_HEADER_ONLY"
py2="/usr/bin/env python2"
@ -102,8 +105,7 @@ else
--with-libraries=python,filesystem \
--with-python=${py2} --with-python-root=${py2_root}
if ${TRAVIS}
then
if ${TRAVIS} ; then
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > ${HOME}/user-config.jam
else
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > project-config.jam
@ -116,9 +118,12 @@ else
# Get rid of python2 build artifacts completely & do a clean build for python3
popd >/dev/null
rm -Rf ${BOOST_BASENAME}-source
tar -xzf ${BOOST_BASENAME//[-.]/_}.tar.gz
log "Extracting boost for Python 3."
tar -xzf ${BOOST_PACKAGE_BASENAME}.tar.gz
mkdir -p ${BOOST_BASENAME}-install/include
mv ${BOOST_BASENAME//[-.]/_} ${BOOST_BASENAME}-source
mv ${BOOST_PACKAGE_BASENAME} ${BOOST_BASENAME}-source
pushd ${BOOST_BASENAME}-source >/dev/null
py3="/usr/bin/env python3"
@ -130,8 +135,7 @@ else
--with-libraries=python \
--with-python=${py3} --with-python-root=${py3_root}
if ${TRAVIS}
then
if ${TRAVIS} ; then
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > ${HOME}/user-config.jam
else
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > project-config.jam
@ -143,7 +147,7 @@ else
popd >/dev/null
rm -Rf ${BOOST_BASENAME}-source
rm ${BOOST_BASENAME//[-.]/_}.tar.gz
rm ${BOOST_PACKAGE_BASENAME}.tar.gz
fi
@ -154,7 +158,7 @@ unset BOOST_BASENAME
# ==============================================================================
RPCLIB_PATCH=v2.2.1_c1
RPCLIB_BASENAME=rpclib-${RPCLIB_PATCH}
RPCLIB_BASENAME=rpclib-${RPCLIB_PATCH}-${CXX_TAG}
RPCLIB_LIBCXX_INCLUDE=${PWD}/${RPCLIB_BASENAME}-libcxx-install/include
RPCLIB_LIBCXX_LIBPATH=${PWD}/${RPCLIB_BASENAME}-libcxx-install/lib
@ -221,7 +225,8 @@ unset RPCLIB_BASENAME
# -- Get GTest and compile it with libc++ --------------------------------------
# ==============================================================================
GTEST_BASENAME=googletest-1.8.0-ex
GTEST_VERSION=1.8.0
GTEST_BASENAME=gtest-${GTEST_VERSION}-${CXX_TAG}
GTEST_LIBCXX_INCLUDE=${PWD}/${GTEST_BASENAME}-libcxx-install/include
GTEST_LIBCXX_LIBPATH=${PWD}/${GTEST_BASENAME}-libcxx-install/lib
@ -238,7 +243,7 @@ else
log "Retrieving Google Test."
git clone --depth=1 -b release-1.8.0 https://github.com/google/googletest.git ${GTEST_BASENAME}-source
git clone --depth=1 -b release-${GTEST_VERSION} https://github.com/google/googletest.git ${GTEST_BASENAME}-source
log "Building Google Test with libc++."

View File

@ -15,14 +15,14 @@ launch: LibCarla
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --launch
package: PythonAPI
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --ue-version 4.21
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --ue-version 4.22
docs:
@doxygen
@echo "Documentation index at ./Doxygen/html/index.html"
clean:
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --clean --ue-version 4.21
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --clean --ue-version 4.22
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --clean
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildPythonAPI.bat" --clean