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: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-xenial-7
packages: packages:
- g++-7 # we need this one for the libstdc++. - g++-7 # we need this one for the libstdc++.
- clang-6.0 - clang-7
- ninja-build - ninja-build
- python - python
- python-pip - python-pip

View File

@ -1,5 +1,6 @@
## Latest ## Latest
* Upgraded to Unreal Engine 4.22
* Recorder fixes: * 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. - 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. - 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) ![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 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 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++`. with Unreal Engine needs to be compiled using `libc++`.
@ -26,7 +26,7 @@ make setup
Get and compile dependencies 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++) * rpclib-2.2.1 (twice, with libstdc++ and libc++)
* boost-1.69 (headers only) * boost-1.69 (headers only)
* googletest-1.8.0 (with libc++) * googletest-1.8.0 (with libc++)
@ -53,8 +53,8 @@ Two configurations:
#### CarlaUE4 and Carla plugin #### CarlaUE4 and Carla plugin
Both compiled at the same step with Unreal Engine 4.21 build tool. They require Both compiled at the same step with Unreal Engine build tool. They require the
the `UE4_ROOT` environment variable set. `UE4_ROOT` environment variable set.
Command Command

View File

@ -27,7 +27,7 @@ C++
* Comments should not exceed 80 columns, code may exceed this limit a bit in * Comments should not exceed 80 columns, code may exceed this limit a bit in
rare occasions if it results in clearer code. rare occasions if it results in clearer code.
* Compilation should not give any error or warning * 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. * The use of `throw` is forbidden, use `carla::throw_exception` instead.
* Unreal C++ code (CarlaUE4 and Carla plugin) follow the * Unreal C++ code (CarlaUE4 and Carla plugin) follow the
[Unreal Engine's Coding Standard][ue4link] with the exception of using [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 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 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 pip2 install --user setuptools
pip3 install --user setuptools pip3 install --user setuptools
``` ```
@ -20,8 +22,8 @@ change your default clang version to compile Unreal Engine and the CARLA
dependencies dependencies
```sh ```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-7/bin/clang++ 170
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
``` ```
Build Unreal Engine Build Unreal Engine
@ -32,13 +34,13 @@ Build Unreal Engine
need to add your GitHub username when you sign up at need to add your GitHub username when you sign up at
[www.unrealengine.com](https://www.unrealengine.com). [www.unrealengine.com](https://www.unrealengine.com).
Download and compile Unreal Engine 4.21. Here we will assume you install it at Download and compile Unreal Engine 4.22. Here we will assume you install it at
`~/UnrealEngine_4.21", but you can install it anywhere, just replace the path `~/UnrealEngine_4.22", but you can install it anywhere, just replace the path
where necessary. where necessary.
```sh ```sh
git clone --depth=1 -b 4.21 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.21 git clone --depth=1 -b 4.22 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.22
cd ~/UnrealEngine_4.21 cd ~/UnrealEngine_4.22
./Setup.sh && ./GenerateProjectFiles.sh && make ./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 following environment variable
```sh ```sh
export UE4_ROOT=~/UnrealEngine_4.21 export UE4_ROOT=~/UnrealEngine_4.22
``` ```
You can also add this variable to your `~/.bashrc` or `~/.profile`. You can also add this variable to your `~/.bashrc` or `~/.profile`.

View File

@ -15,7 +15,7 @@
Also: 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) - [Visual Studio](https://www.visualstudio.com/downloads/) (2017)
<h3>Environment Setup</h3> <h3>Environment Setup</h3>

View File

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

View File

@ -24,8 +24,8 @@ want
```cmake ```cmake
# Example ToolChain.cmake # Example ToolChain.cmake
set(CMAKE_C_COMPILER /usr/bin/clang-6.0) set(CMAKE_C_COMPILER /usr/bin/clang-7)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-6.0) set(CMAKE_CXX_COMPILER /usr/bin/clang++-7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE) 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 agent any
environment { environment {
UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.21' UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.22'
} }
options { options {

View File

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

View File

@ -184,7 +184,7 @@ namespace road {
const auto geometry = _info.GetInfo<element::RoadInfoGeometry>(clamped_s); const auto geometry = _info.GetInfo<element::RoadInfoGeometry>(clamped_s);
const auto lane_offset = _info.GetInfo<element::RoadInfoLaneOffset>(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 // Apply road's lane offset record
element::DirectedPoint p = geometry->GetGeometry().PosFromDist(clamped_s - geometry->GetDistance()); element::DirectedPoint p = geometry->GetGeometry().PosFromDist(clamped_s - geometry->GetDistance());
@ -244,7 +244,7 @@ namespace road {
DirectedPoint current_dp = dp_lane_zero; DirectedPoint current_dp = dp_lane_zero;
for (const auto &lane : right_lanes) { for (const auto &lane : right_lanes) {
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s); 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); current_dp.ApplyLateralOffset(half_width);
const auto current_dist = geom::Math::Distance(current_dp.location, loc); const auto current_dist = geom::Math::Distance(current_dp.location, loc);
@ -267,7 +267,7 @@ namespace road {
current_dp = dp_lane_zero; current_dp = dp_lane_zero;
for (const auto &lane : left_lanes) { for (const auto &lane : left_lanes) {
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s); 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); current_dp.ApplyLateralOffset(half_width);
const auto current_dist = geom::Math::Distance(current_dp.location, loc); 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 tangent = 0.0; // [radians]
double pitch = 0.0; // [radians] double pitch = 0.0; // [radians]
void ApplyLateralOffset(double lateral_offset) { void ApplyLateralOffset(float lateral_offset) {
/// @todo Z axis?? /// @todo Z axis??
auto normal_x = std::sin(tangent); auto normal_x = std::sin(static_cast<float>(tangent));
auto normal_y = -std::cos(tangent); auto normal_y = -std::cos(static_cast<float>(tangent));
location.x += lateral_offset * normal_x; location.x += lateral_offset * normal_x;
location.y += lateral_offset * normal_y; location.y += lateral_offset * normal_y;
} }
@ -117,11 +117,11 @@ namespace element {
: Geometry(GeometryType::LINE, start_offset, length, heading, start_pos) {} : Geometry(GeometryType::LINE, start_offset, length, heading, start_pos) {}
DirectedPoint PosFromDist(double dist) const override { DirectedPoint PosFromDist(double dist) const override {
dist = geom::Math::Clamp(dist, 0.0, _length);
DEBUG_ASSERT(_length > 0.0); DEBUG_ASSERT(_length > 0.0);
dist = geom::Math::Clamp(dist, 0.0, _length);
DirectedPoint p(_start_position, _heading); DirectedPoint p(_start_position, _heading);
p.location.x += dist * std::cos(p.tangent); p.location.x += static_cast<float>(dist * std::cos(p.tangent));
p.location.y += dist * std::sin(p.tangent); p.location.y += static_cast<float>(dist * std::sin(p.tangent));
return p; return p;
} }
@ -159,11 +159,11 @@ namespace element {
const double radius = 1.0 / _curvature; const double radius = 1.0 / _curvature;
constexpr double pi_half = geom::Math::Pi<double>() / 2.0; constexpr double pi_half = geom::Math::Pi<double>() / 2.0;
DirectedPoint p(_start_position, _heading); DirectedPoint p(_start_position, _heading);
p.location.x += radius * std::cos(p.tangent + pi_half); p.location.x += static_cast<float>(radius * std::cos(p.tangent + pi_half));
p.location.y += radius * std::sin(p.tangent + pi_half); p.location.y += static_cast<float>(radius * std::sin(p.tangent + pi_half));
p.tangent += dist * _curvature; p.tangent += dist * _curvature;
p.location.x -= radius * std::cos(p.tangent + pi_half); p.location.x -= static_cast<float>(radius * std::cos(p.tangent + pi_half));
p.location.y -= radius * std::sin(p.tangent + pi_half); p.location.y -= static_cast<float>(radius * std::sin(p.tangent + pi_half));
return p; return p;
} }
@ -228,8 +228,8 @@ namespace element {
DirectedPoint p(_start_position, _heading); DirectedPoint p(_start_position, _heading);
const double cos_a = std::cos(p.tangent); const double cos_a = std::cos(p.tangent);
const double sin_a = std::sin(p.tangent); const double sin_a = std::sin(p.tangent);
p.location.x += C * cos_a - S * sin_a; p.location.x += static_cast<float>(C * cos_a - S * sin_a);
p.location.y += S * cos_a + C * sin_a; p.location.y += static_cast<float>(S * cos_a + C * sin_a);
p.tangent += length * length; p.tangent += length * length;
return p; return p;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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