General progress and fixes, Houdini does not work however.
This commit is contained in:
parent
7b68258a3f
commit
fb2d231c75
|
@ -267,7 +267,6 @@ if (BUILD_LIBCARLA_CLIENT)
|
|||
${LIBCARLA_SOURCE_PATH}/carla/road/object/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/road/signal/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rpc/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rss/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/data/*.h
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/s11n/*.h
|
||||
|
@ -279,6 +278,19 @@ if (BUILD_LIBCARLA_CLIENT)
|
|||
${LIBCARLA_SOURCE_PATH}/carla/trafficmanager/*.h
|
||||
)
|
||||
|
||||
if (ENABLE_LIBCARLA_CLIENT_RSS)
|
||||
file (
|
||||
GLOB
|
||||
LIBCARLA_CLIENT_HEADERS_RSS
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rss/*.h
|
||||
)
|
||||
list (
|
||||
APPEND
|
||||
LIBCARLA_CLIENT_HEADERS
|
||||
${LIBCARLA_CLIENT_HEADERS_RSS}
|
||||
)
|
||||
endif ()
|
||||
|
||||
file (
|
||||
GLOB
|
||||
LIBCARLA_CLIENT_HEADERS_THIRD_PARTY
|
||||
|
@ -306,7 +318,6 @@ if (BUILD_LIBCARLA_CLIENT)
|
|||
${LIBCARLA_SOURCE_PATH}/carla/road/object/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/road/signal/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rpc/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rss/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/data/*.cpp
|
||||
${LIBCARLA_SOURCE_PATH}/carla/sensor/s11n/*.cpp
|
||||
|
@ -318,6 +329,19 @@ if (BUILD_LIBCARLA_CLIENT)
|
|||
${LIBCARLA_SOURCE_PATH}/carla/trafficmanager/*.cpp
|
||||
)
|
||||
|
||||
if (ENABLE_LIBCARLA_CLIENT_RSS)
|
||||
file (
|
||||
GLOB
|
||||
LIBCARLA_CLIENT_SOURCES_RSS
|
||||
${LIBCARLA_SOURCE_PATH}/carla/rss/*.cpp
|
||||
)
|
||||
list (
|
||||
APPEND
|
||||
LIBCARLA_CLIENT_SOURCES
|
||||
${LIBCARLA_CLIENT_SOURCES_RSS}
|
||||
)
|
||||
endif ()
|
||||
|
||||
file (
|
||||
GLOB
|
||||
LIBCARLA_CLIENT_SOURCES_THIRD_PARTY
|
||||
|
|
397
Configure.py
397
Configure.py
|
@ -244,10 +244,12 @@ ARGV = SyncArgs()
|
|||
SEQUENTIAL = ARGV.configure_sequential
|
||||
ENABLE_OSM2ODR = ARGV.osm2odr or ARGV.python_api
|
||||
ENABLE_OSM_WORLD_RENDERER = ARGV.osm_world_renderer
|
||||
ENABLE_CARLA_UE = ARGV.carla_ue
|
||||
ENABLE_PYTHON_API = ARGV.python_api
|
||||
ENABLE_LIBCARLA_CLIENT = ARGV.libcarla_client
|
||||
ENABLE_LIBCARLA_SERVER = ARGV.libcarla_server
|
||||
ENABLE_LIBCARLA = any([
|
||||
ENABLE_CARLA_UE,
|
||||
ENABLE_PYTHON_API,
|
||||
ENABLE_LIBCARLA_CLIENT,
|
||||
ENABLE_LIBCARLA_SERVER,
|
||||
|
@ -445,25 +447,17 @@ def LaunchSubprocessImmediate(
|
|||
|
||||
# Convenience classes for listing dependencies:
|
||||
|
||||
|
||||
|
||||
class Download:
|
||||
|
||||
def __init__(self, url : str):
|
||||
self.url = url
|
||||
|
||||
|
||||
|
||||
class GitRepository:
|
||||
|
||||
def __init__(self, url : str, tag : str = None):
|
||||
def __init__(self, url : str, tag : str = None, commit : str = None):
|
||||
self.url = url
|
||||
self.tag = tag
|
||||
|
||||
|
||||
self.commit = commit
|
||||
|
||||
class Dependency:
|
||||
|
||||
def __init__(self, name : str, *sources):
|
||||
self.name = name
|
||||
self.sources = [ *sources ]
|
||||
|
@ -472,6 +466,77 @@ class Dependency:
|
|||
type(e) is GitRepository
|
||||
for e in self.sources)
|
||||
|
||||
class DependencyUEPlugin(Dependency):
|
||||
def __init__(self, name: str, *sources):
|
||||
super().__init__(name, *sources)
|
||||
|
||||
DEFAULT_DEPENDENCIES = [
|
||||
Dependency(
|
||||
'boost',
|
||||
Download(f'https://boostorg.jfrog.io/artifactory/main/release/{BOOST_VERSION_STRING}/source/boost_{BOOST_VERSION_MAJOR}_{BOOST_VERSION_MINOR}_{BOOST_VERSION_PATCH}.zip'),
|
||||
Download(f'https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/boost_{BOOST_VERSION_MAJOR}_{BOOST_VERSION_MINOR}_{BOOST_VERSION_PATCH}.zip')),
|
||||
Dependency(
|
||||
'eigen',
|
||||
GitRepository('https://gitlab.com/libeigen/eigen.git', tag = '3.4.0')),
|
||||
Dependency(
|
||||
'libpng',
|
||||
GitRepository('https://github.com/glennrp/libpng.git', tag = 'v1.6.40')),
|
||||
Dependency(
|
||||
'proj',
|
||||
GitRepository('https://github.com/OSGeo/PROJ.git', tag = '9.3.0'),
|
||||
Download('https://download.osgeo.org/proj/proj-9.3.0.tar.gz')),
|
||||
Dependency(
|
||||
'gtest',
|
||||
GitRepository('https://github.com/google/googletest.git', tag = 'v1.14.0')),
|
||||
Dependency(
|
||||
'zlib',
|
||||
GitRepository('https://github.com/madler/zlib.git'),
|
||||
Download('https://zlib.net/current/zlib.tar.gz')),
|
||||
Dependency(
|
||||
'xercesc',
|
||||
GitRepository('https://github.com/apache/xerces-c.git', tag = 'v3.2.4'),
|
||||
Download('https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.3.zip'),
|
||||
Download('https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/xerces-c-3.2.3.zip')),
|
||||
Dependency(
|
||||
'sqlite',
|
||||
Download('https://www.sqlite.org/2021/sqlite-amalgamation-3340100.zip')),
|
||||
Dependency(
|
||||
'rpclib',
|
||||
GitRepository('https://github.com/rpclib/rpclib.git', tag = 'v2.3.0')),
|
||||
Dependency(
|
||||
'recast',
|
||||
GitRepository('https://github.com/carla-simulator/recastnavigation.git', tag = 'carla')),
|
||||
]
|
||||
|
||||
CHRONO_DEPENDENCIES = [
|
||||
Dependency(
|
||||
'chrono',
|
||||
GitRepository('https://github.com/projectchrono/chrono.git', tag = '8.0.0')),
|
||||
]
|
||||
|
||||
OSM_WORLD_RENDERER_DEPENDENCIES = [
|
||||
Dependency(
|
||||
'libosmscout',
|
||||
GitRepository('https://github.com/Framstag/libosmscout.git')),
|
||||
Dependency(
|
||||
'lunasvg',
|
||||
GitRepository('https://github.com/sammycage/lunasvg.git')),
|
||||
]
|
||||
|
||||
OSM2ODR_DEPENDENCIES = [
|
||||
Dependency(
|
||||
'sumo',
|
||||
GitRepository('https://github.com/carla-simulator/sumo.git', tag = 'carla_osm2odr')),
|
||||
]
|
||||
|
||||
CARLA_UE_DEPENDENCIES = [
|
||||
DependencyUEPlugin(
|
||||
'StreetMap',
|
||||
GitRepository(
|
||||
'https://github.com/carla-simulator/StreetMap.git',
|
||||
tag = 'ue5.3')),
|
||||
]
|
||||
|
||||
|
||||
|
||||
class Task:
|
||||
|
@ -508,8 +573,7 @@ class Task:
|
|||
cmd = Task.CreateCMakeConfigureDefaultCommandLine(source_path, build_path)
|
||||
if install_path != None:
|
||||
cmd.append('-DCMAKE_INSTALL_PREFIX=' + str(install_path))
|
||||
cmd.extend([ *args ])
|
||||
cmd.append(source_path)
|
||||
cmd.extend([ *args, source_path ])
|
||||
return Task.CreateSubprocessTask(name, in_edges, cmd)
|
||||
|
||||
def CreateCMakeBuildDefault(name : str, in_edges : list, build_path : Path, *args):
|
||||
|
@ -638,102 +702,18 @@ class TaskGraph:
|
|||
self.sequential = prior_sequential
|
||||
self.Reset()
|
||||
|
||||
DEFAULT_DEPENDENCIES = [
|
||||
|
||||
Dependency(
|
||||
'boost',
|
||||
Download(f'https://boostorg.jfrog.io/artifactory/main/release/{BOOST_VERSION_STRING}/source/boost_{BOOST_VERSION_MAJOR}_{BOOST_VERSION_MINOR}_{BOOST_VERSION_PATCH}.zip'),
|
||||
Download(f'https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/boost_{BOOST_VERSION_MAJOR}_{BOOST_VERSION_MINOR}_{BOOST_VERSION_PATCH}.zip')),
|
||||
|
||||
Dependency(
|
||||
'eigen',
|
||||
GitRepository('https://gitlab.com/libeigen/eigen.git', tag = '3.4.0')),
|
||||
|
||||
Dependency(
|
||||
'libpng',
|
||||
GitRepository('https://github.com/glennrp/libpng.git', tag = 'v1.6.40')),
|
||||
|
||||
Dependency(
|
||||
'proj',
|
||||
GitRepository('https://github.com/OSGeo/PROJ.git', tag = '9.3.0'),
|
||||
Download('https://download.osgeo.org/proj/proj-9.3.0.tar.gz')),
|
||||
|
||||
Dependency(
|
||||
'gtest',
|
||||
GitRepository('https://github.com/google/googletest.git', tag = 'v1.14.0')),
|
||||
|
||||
Dependency(
|
||||
'zlib',
|
||||
GitRepository('https://github.com/madler/zlib.git'),
|
||||
Download('https://zlib.net/current/zlib.tar.gz')),
|
||||
|
||||
Dependency(
|
||||
'xercesc',
|
||||
GitRepository('https://github.com/apache/xerces-c.git', tag = 'v3.2.4'),
|
||||
Download('https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.3.zip'),
|
||||
Download('https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/xerces-c-3.2.3.zip')),
|
||||
|
||||
Dependency(
|
||||
'sqlite',
|
||||
Download('https://www.sqlite.org/2021/sqlite-amalgamation-3340100.zip')),
|
||||
|
||||
Dependency(
|
||||
'rpclib',
|
||||
GitRepository('https://github.com/rpclib/rpclib.git', tag = 'v2.3.0')),
|
||||
|
||||
Dependency(
|
||||
'recast',
|
||||
GitRepository('https://github.com/recastnavigation/recastnavigation.git', tag = 'v1.6.0')),
|
||||
]
|
||||
|
||||
CHRONO_DEPENDENCIES = [
|
||||
|
||||
Dependency(
|
||||
'chrono',
|
||||
GitRepository('https://github.com/projectchrono/chrono.git', tag = '8.0.0')),
|
||||
|
||||
]
|
||||
|
||||
OSM_WORLD_RENDERER_DEPENDENCIES = [
|
||||
|
||||
Dependency(
|
||||
'libosmscout',
|
||||
GitRepository('https://github.com/Framstag/libosmscout.git')),
|
||||
|
||||
Dependency(
|
||||
'lunasvg',
|
||||
GitRepository('https://github.com/sammycage/lunasvg.git')),
|
||||
|
||||
]
|
||||
|
||||
OSM2ODR_DEPENDENCIES = [
|
||||
|
||||
Dependency(
|
||||
'sumo',
|
||||
GitRepository('https://github.com/carla-simulator/sumo.git', tag = 'carla_osm2odr')),
|
||||
|
||||
]
|
||||
|
||||
def UpdateGitRepository(path : Path, url : str, branch : str = None):
|
||||
def UpdateGitRepository(path : Path, url : str, branch : str = None, commit : str = None):
|
||||
if path.exists():
|
||||
LaunchSubprocessImmediate([
|
||||
'git',
|
||||
'-C', str(path),
|
||||
'pull'
|
||||
])
|
||||
LaunchSubprocessImmediate([ 'git', '-C', str(path), 'pull' ])
|
||||
else:
|
||||
cmd = [
|
||||
'git',
|
||||
'-C', str(path.parent),
|
||||
'clone',
|
||||
'--depth', '1', '--single-branch'
|
||||
]
|
||||
cmd = [ 'git', '-C', str(path.parent), 'clone', '--depth', '1', '--single-branch' ]
|
||||
if branch != None:
|
||||
cmd.append('-b')
|
||||
cmd.append(branch)
|
||||
cmd.append(url)
|
||||
cmd.append(path.stem)
|
||||
cmd.extend([ '-b', branch ])
|
||||
cmd.extend([ url, path.stem ])
|
||||
LaunchSubprocessImmediate(cmd)
|
||||
if commit != None:
|
||||
LaunchSubprocessImmediate([ 'git', '-C', str(path), 'fetch' ])
|
||||
LaunchSubprocessImmediate([ 'git', '-C', str(path), 'checkout', commit ])
|
||||
|
||||
def DownloadDependency(name : str, path : Path, url : str):
|
||||
# Download:
|
||||
|
@ -771,12 +751,14 @@ def DownloadDependency(name : str, path : Path, url : str):
|
|||
|
||||
def UpdateDependency(dep : Dependency):
|
||||
name = dep.name
|
||||
|
||||
download_path = DEPENDENCIES_PATH / f'{name}-source'
|
||||
if type(dep) is DependencyUEPlugin: # Override download path if we're dealing with an Unreal Engine Plugin.
|
||||
download_path = CARLA_UE_PLUGIN_ROOT_PATH / name
|
||||
for source in dep.sources:
|
||||
try:
|
||||
if type(source) is GitRepository:
|
||||
branch = source.tag
|
||||
UpdateGitRepository(download_path, source.url, branch)
|
||||
UpdateGitRepository(download_path, source.url, source.tag, source.commit)
|
||||
elif type(source) is Download:
|
||||
if download_path.exists():
|
||||
Log(f'Dependency "{name}" already present. Delete "{download_path}" if you wish for it to be downloaded again.')
|
||||
|
@ -788,101 +770,11 @@ def UpdateDependency(dep : Dependency):
|
|||
Log(f'Failed to update dependency "{name}".')
|
||||
assert False
|
||||
|
||||
def BuildLibCarlaMain(task_graph : TaskGraph):
|
||||
task_graph.Add(Task.CreateCMakeConfigureDefault(
|
||||
'configure-libcarla',
|
||||
[],
|
||||
WORKSPACE_PATH,
|
||||
LIBCARLA_BUILD_PATH,
|
||||
f'-DCARLA_DEPENDENCIES_PATH={DEPENDENCIES_PATH}',
|
||||
f'-DBUILD_LIBCARLA_SERVER={"ON" if ARGV.libcarla_server else "OFF"}',
|
||||
f'-DBUILD_LIBCARLA_CLIENT={"ON" if ARGV.libcarla_client else "OFF"}',
|
||||
f'-DBUILD_OSM_WORLD_RENDERER={"ON" if ENABLE_OSM_WORLD_RENDERER else "OFF"}',
|
||||
f'-DLIBCARLA_PYTORCH={"ON" if ARGV.pytorch else "OFF"}'))
|
||||
task_graph.Add(Task.CreateCMakeBuildDefault(
|
||||
'build-libcarla',
|
||||
[ 'configure-libcarla' ],
|
||||
LIBCARLA_BUILD_PATH))
|
||||
task_graph.Add(Task.CreateCMakeInstallDefault(
|
||||
'install-libcarla',
|
||||
[ 'build-libcarla' ],
|
||||
LIBCARLA_BUILD_PATH,
|
||||
LIBCARLA_INSTALL_PATH))
|
||||
|
||||
def BuildPythonAPIMain():
|
||||
content = ''
|
||||
with open(PYTHON_API_PATH / 'setup.py.in', 'r') as file:
|
||||
content = file.read()
|
||||
content = content.format_map(globals())
|
||||
if os.name == 'nt':
|
||||
content = content.replace(os.sep, '\\\\')
|
||||
with open(PYTHON_API_PATH / 'setup.py', 'w') as file:
|
||||
file.write(content)
|
||||
LaunchSubprocessImmediate([
|
||||
sys.executable, 'setup.py', 'bdist_wheel', 'bdist_egg'
|
||||
], working_directory = PYTHON_API_PATH)
|
||||
|
||||
def BuildPythonAPI(task_graph : TaskGraph):
|
||||
task_graph.Add(Task('build-python-api', [ 'install-libcarla' ], BuildPythonAPIMain))
|
||||
|
||||
def SetupUnrealEngine(task_graph : TaskGraph):
|
||||
pass
|
||||
|
||||
def BuildCarlaUEMain():
|
||||
assert UNREAL_ENGINE_PATH.exists()
|
||||
unreal_build_tool_args = []
|
||||
if ENABLE_CARSIM:
|
||||
unreal_build_tool_args.append('-carsim')
|
||||
if ENABLE_CHRONO:
|
||||
unreal_build_tool_args.append('-chrono')
|
||||
if ENABLE_ROS2:
|
||||
unreal_build_tool_args.append('-ros2')
|
||||
if ENABLE_UNITY_BUILD:
|
||||
unreal_build_tool_args.append('-unity-build')
|
||||
if ENABLE_NVIDIA_OMNIVERSE:
|
||||
unreal_build_tool_args.append('-nv-omniverse')
|
||||
if os.name == 'nt':
|
||||
LaunchSubprocessImmediate([
|
||||
UNREAL_ENGINE_PATH / 'Engine' / 'Build' / 'BatchFiles' / 'Build.bat',
|
||||
'CarlaUE4Editor',
|
||||
'Win64',
|
||||
'Development',
|
||||
'-WaitMutex',
|
||||
'-FromMsBuild',
|
||||
CARLA_UE_PATH / 'CarlaUE4.uproject',
|
||||
], log_name = 'build-carla-ue-editor')
|
||||
LaunchSubprocessImmediate([
|
||||
UNREAL_ENGINE_PATH / 'Engine' / 'Build' / 'BatchFiles' / 'Build.bat',
|
||||
'CarlaUE4',
|
||||
'Win64',
|
||||
'Development',
|
||||
'-WaitMutex',
|
||||
'-FromMsBuild',
|
||||
CARLA_UE_PATH / 'CarlaUE4.uproject',
|
||||
], log_name = 'build-carla-ue')
|
||||
else:
|
||||
pass
|
||||
|
||||
def BuildCarlaUE(task_graph : TaskGraph):
|
||||
if ENABLE_NVIDIA_OMNIVERSE:
|
||||
task_graph.Add(Task('install-nv-omniverse', [], InstallNVIDIAOmniverse))
|
||||
task_graph.Add(Task('build-carla-ue', [ 'build-python-api' ], BuildCarlaUEMain))
|
||||
|
||||
def InstallNVIDIAOmniverse():
|
||||
filename = 'USDCarlaInterface'
|
||||
header = f'{filename}.h'
|
||||
source = f'{filename}.cpp'
|
||||
omniverse_usd_path = NV_OMNIVERSE_PLUGIN_PATH / 'Source' / 'OmniverseUSD'
|
||||
files = [
|
||||
[ omniverse_usd_path / 'Public' / header, NV_OMNIVERSE_PATCH_PATH / header ],
|
||||
[ omniverse_usd_path / 'Private' / source, NV_OMNIVERSE_PATCH_PATH / source ],
|
||||
]
|
||||
for src, dst in files:
|
||||
shutil.copyfile(src, dst)
|
||||
|
||||
def UpdateDependencies(task_graph : TaskGraph):
|
||||
DEPENDENCIES_PATH.mkdir(exist_ok = True)
|
||||
unique_deps = set(DEFAULT_DEPENDENCIES)
|
||||
if ENABLE_CARLA_UE:
|
||||
unique_deps.update(CARLA_UE_DEPENDENCIES)
|
||||
if ENABLE_OSM_WORLD_RENDERER:
|
||||
unique_deps.update(OSM_WORLD_RENDERER_DEPENDENCIES)
|
||||
if ENABLE_OSM2ODR:
|
||||
|
@ -955,8 +847,7 @@ def BuildSQLite():
|
|||
if C_COMPILER_CLI_TYPE == 'msvc':
|
||||
cmd.append(f'/Fe{SQLITE_EXE_PATH}')
|
||||
else:
|
||||
cmd.append('-o')
|
||||
cmd.append(SQLITE_EXE_PATH)
|
||||
cmd.extend([ '-o', SQLITE_EXE_PATH ])
|
||||
LaunchSubprocessImmediate(cmd, log_name = 'build-sqlite-exe')
|
||||
if not SQLITE_LIB_PATH.exists():
|
||||
if C_COMPILER_IS_CLANG:
|
||||
|
@ -978,8 +869,7 @@ def BuildSQLite():
|
|||
if C_ENABLE_MARCH_NATIVE:
|
||||
cmd.append('-march=native')
|
||||
cmd.extend(sqlite_sources)
|
||||
cmd.append('/Fo:' if C_COMPILER_CLI_TYPE == 'msvc' else '-o')
|
||||
cmd.append(SQLITE_LIB_PATH)
|
||||
cmd.extend([ '/Fo:' if C_COMPILER_CLI_TYPE == 'msvc' else '-o', SQLITE_LIB_PATH ])
|
||||
LaunchSubprocessImmediate(
|
||||
cmd,
|
||||
log_name = 'build-sqlite-lib')
|
||||
|
@ -1001,10 +891,8 @@ def BuildSQLite():
|
|||
'/MD',
|
||||
'/EHsc',
|
||||
])
|
||||
cmd.append(e)
|
||||
obj_path = SQLITE_BUILD_PATH / f'{e.name}{OBJ_EXT}'
|
||||
cmd.append('/Fo:' if C_COMPILER_CLI_TYPE == 'msvc' else '-o')
|
||||
cmd.append(obj_path)
|
||||
cmd.extend([ e, '/Fo:' if C_COMPILER_CLI_TYPE == 'msvc' else '-o', obj_path ])
|
||||
LaunchSubprocessImmediate(cmd, log_name = f'build-sqlite-{e.stem}')
|
||||
objs.append(obj_path)
|
||||
cmd = [
|
||||
|
@ -1014,10 +902,8 @@ def BuildSQLite():
|
|||
cmd.extend(objs)
|
||||
LaunchSubprocessImmediate(cmd, log_name = 'build-sqlite-lib')
|
||||
|
||||
def FindXercesC():
|
||||
return glob.glob(f'{XERCESC_INSTALL_PATH}/**/{LIB_PREFIX}xerces-c*{LIB_EXT}', recursive=True)[0]
|
||||
|
||||
def ConfigureSUMO():
|
||||
xercesc_path = glob.glob(f'{XERCESC_INSTALL_PATH}/**/{LIB_PREFIX}xerces-c*{LIB_EXT}', recursive=True)[0]
|
||||
cmd = Task.CreateCMakeConfigureDefaultCommandLine(
|
||||
SUMO_SOURCE_PATH,
|
||||
SUMO_BUILD_PATH)
|
||||
|
@ -1029,7 +915,7 @@ def ConfigureSUMO():
|
|||
f'-DPROJ_INCLUDE_DIR={PROJ_INSTALL_PATH}/include',
|
||||
f'-DPROJ_LIBRARY={PROJ_INSTALL_PATH}/lib/{LIB_PREFIX}proj{LIB_EXT}',
|
||||
f'-DXercesC_INCLUDE_DIR={XERCESC_INSTALL_PATH}/include',
|
||||
f'-DXercesC_LIBRARY={FindXercesC()}',
|
||||
f'-DXercesC_LIBRARY={xercesc_path}',
|
||||
'-DSUMO_LIBRARIES=OFF',
|
||||
# '-DPROFILING=OFF',
|
||||
# '-DPPROF=OFF',
|
||||
|
@ -1179,6 +1065,99 @@ def BuildDependencies(task_graph : TaskGraph):
|
|||
task_graph.Add(Task.CreateCMakeInstallDefault('install-sumo', [], SUMO_BUILD_PATH, SUMO_INSTALL_PATH))
|
||||
if ENABLE_CHRONO:
|
||||
task_graph.Add(Task.CreateCMakeInstallDefault('install-chrono', [], CHRONO_BUILD_PATH, CHRONO_INSTALL_PATH))
|
||||
task_graph.Execute()
|
||||
|
||||
def BuildLibCarlaMain(task_graph : TaskGraph):
|
||||
task_graph.Add(Task.CreateCMakeConfigureDefault(
|
||||
'configure-libcarla',
|
||||
[],
|
||||
WORKSPACE_PATH,
|
||||
LIBCARLA_BUILD_PATH,
|
||||
f'-DCARLA_DEPENDENCIES_PATH={DEPENDENCIES_PATH}',
|
||||
f'-DBUILD_LIBCARLA_SERVER={"ON" if ARGV.libcarla_server else "OFF"}',
|
||||
f'-DBUILD_LIBCARLA_CLIENT={"ON" if ARGV.libcarla_client else "OFF"}',
|
||||
f'-DBUILD_OSM_WORLD_RENDERER={"ON" if ENABLE_OSM_WORLD_RENDERER else "OFF"}',
|
||||
f'-DLIBCARLA_PYTORCH={"ON" if ARGV.pytorch else "OFF"}'))
|
||||
task_graph.Add(Task.CreateCMakeBuildDefault(
|
||||
'build-libcarla',
|
||||
[ 'configure-libcarla' ],
|
||||
LIBCARLA_BUILD_PATH))
|
||||
task_graph.Add(Task.CreateCMakeInstallDefault(
|
||||
'install-libcarla',
|
||||
[ 'build-libcarla' ],
|
||||
LIBCARLA_BUILD_PATH,
|
||||
LIBCARLA_INSTALL_PATH))
|
||||
|
||||
def BuildPythonAPIMain():
|
||||
content = ''
|
||||
with open(PYTHON_API_PATH / 'setup.py.in', 'r') as file:
|
||||
content = file.read()
|
||||
content = content.format_map(globals())
|
||||
if os.name == 'nt':
|
||||
content = content.replace(os.sep, '\\\\')
|
||||
with open(PYTHON_API_PATH / 'setup.py', 'w') as file:
|
||||
file.write(content)
|
||||
LaunchSubprocessImmediate([
|
||||
sys.executable, 'setup.py', 'bdist_wheel', 'bdist_egg'
|
||||
], working_directory = PYTHON_API_PATH)
|
||||
|
||||
def BuildPythonAPI(task_graph : TaskGraph):
|
||||
task_graph.Add(Task('build-python-api', [ 'install-libcarla' ], BuildPythonAPIMain))
|
||||
|
||||
def SetupUnrealEngine(task_graph : TaskGraph):
|
||||
pass
|
||||
|
||||
def BuildCarlaUEMain():
|
||||
assert UNREAL_ENGINE_PATH.exists()
|
||||
unreal_build_tool_args = []
|
||||
if ENABLE_CARSIM:
|
||||
unreal_build_tool_args.append('-carsim')
|
||||
if ENABLE_CHRONO:
|
||||
unreal_build_tool_args.append('-chrono')
|
||||
if ENABLE_ROS2:
|
||||
unreal_build_tool_args.append('-ros2')
|
||||
if ENABLE_UNITY_BUILD:
|
||||
unreal_build_tool_args.append('-unity-build')
|
||||
if ENABLE_NVIDIA_OMNIVERSE:
|
||||
unreal_build_tool_args.append('-nv-omniverse')
|
||||
if os.name == 'nt':
|
||||
LaunchSubprocessImmediate([
|
||||
UNREAL_ENGINE_PATH / 'Engine' / 'Build' / 'BatchFiles' / 'Build.bat',
|
||||
'CarlaUE4Editor',
|
||||
'Win64',
|
||||
'Development',
|
||||
'-WaitMutex',
|
||||
'-FromMsBuild',
|
||||
CARLA_UE_PATH / 'CarlaUE4.uproject',
|
||||
], log_name = 'build-carla-ue-editor')
|
||||
LaunchSubprocessImmediate([
|
||||
UNREAL_ENGINE_PATH / 'Engine' / 'Build' / 'BatchFiles' / 'Build.bat',
|
||||
'CarlaUE4',
|
||||
'Win64',
|
||||
'Development',
|
||||
'-WaitMutex',
|
||||
'-FromMsBuild',
|
||||
CARLA_UE_PATH / 'CarlaUE4.uproject',
|
||||
], log_name = 'build-carla-ue')
|
||||
else:
|
||||
pass
|
||||
|
||||
def BuildCarlaUE(task_graph : TaskGraph):
|
||||
if ENABLE_NVIDIA_OMNIVERSE:
|
||||
task_graph.Add(Task('install-nv-omniverse', [], InstallNVIDIAOmniverse))
|
||||
task_graph.Add(Task('build-carla-ue', [ 'build-python-api' ], BuildCarlaUEMain))
|
||||
|
||||
def InstallNVIDIAOmniverse():
|
||||
filename = 'USDCarlaInterface'
|
||||
header = f'{filename}.h'
|
||||
source = f'{filename}.cpp'
|
||||
omniverse_usd_path = NV_OMNIVERSE_PLUGIN_PATH / 'Source' / 'OmniverseUSD'
|
||||
files = [
|
||||
[ omniverse_usd_path / 'Public' / header, NV_OMNIVERSE_PATCH_PATH / header ],
|
||||
[ omniverse_usd_path / 'Private' / source, NV_OMNIVERSE_PATCH_PATH / source ],
|
||||
]
|
||||
for src, dst in files:
|
||||
shutil.copyfile(src, dst)
|
||||
|
||||
def Clean():
|
||||
if not BUILD_PATH.exists():
|
||||
|
|
|
@ -13,12 +13,12 @@
|
|||
#include "carla/geom/Transform.h"
|
||||
#include "carla/nav/WalkerManager.h"
|
||||
#include "carla/rpc/ActorId.h"
|
||||
#include <recastnavigation/Recast.h>
|
||||
#include <recastnavigation/DetourCrowd.h>
|
||||
#include <recastnavigation/DetourNavMesh.h>
|
||||
#include <recastnavigation/DetourNavMeshBuilder.h>
|
||||
#include <recastnavigation/DetourNavMeshQuery.h>
|
||||
#include <recastnavigation/DetourCommon.h>
|
||||
#include <recast/Recast.h>
|
||||
#include <recast/DetourCrowd.h>
|
||||
#include <recast/DetourNavMesh.h>
|
||||
#include <recast/DetourNavMeshBuilder.h>
|
||||
#include <recast/DetourNavMeshQuery.h>
|
||||
#include <recast/DetourCommon.h>
|
||||
|
||||
namespace carla {
|
||||
namespace nav {
|
||||
|
|
|
@ -95,7 +95,7 @@ link_flags = [
|
|||
sorted(glob.glob(str(Path('{BOOST_INSTALL_PATH}') / 'lib' / 'libboost_python*{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{BOOST_INSTALL_PATH}') / 'lib' / 'libboost_filesystem*{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{RPCLIB_INSTALL_PATH}') / 'lib' / 'rpc{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{LIBCARLA_BUILD_PATH}') / 'libcarla-client{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{LIBCARLA_BUILD_PATH}') / '*carla-client{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{LIBPNG_INSTALL_PATH}') / 'lib' / 'libpng*{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{ZLIB_INSTALL_PATH}') / 'lib' / 'zlib{LIB_EXT}'), recursive = True))[0],
|
||||
sorted(glob.glob(str(Path('{RECAST_INSTALL_PATH}') / 'lib' / 'Recast{LIB_EXT}'), recursive = True))[0],
|
||||
|
|
|
@ -1,39 +1,35 @@
|
|||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "0.9.15",
|
||||
"FriendlyName": "CARLA",
|
||||
"Description": "Open-source simulator for autonomous driving research.",
|
||||
"Category": "Science",
|
||||
"CreatedBy": "Computer Vision Center (CVC) at the Universitat Autonoma de Barcelona (UAB)",
|
||||
"CreatedByURL": "http://carla.org",
|
||||
"DocsURL": "http://carla.readthedocs.io",
|
||||
"MarketplaceURL": "",
|
||||
"SupportURL": "https://github.com/carla-simulator/carla/issues",
|
||||
"CanContainContent": true,
|
||||
"IsBetaVersion": true,
|
||||
"Installed": true,
|
||||
"Modules":
|
||||
[
|
||||
{
|
||||
"Name": "Carla",
|
||||
"Type": "Runtime",
|
||||
"LoadingPhase": "PreDefault",
|
||||
"AdditionalDependencies":
|
||||
[
|
||||
"Engine"
|
||||
]
|
||||
}
|
||||
],
|
||||
"Plugins":
|
||||
[
|
||||
{
|
||||
"Name": "ChaosVehicles",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "ProceduralMeshComponent",
|
||||
"Enabled": true
|
||||
}
|
||||
]
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "0.9.15",
|
||||
"FriendlyName": "CARLA",
|
||||
"Description": "Open-source simulator for autonomous driving research.",
|
||||
"Category": "Science",
|
||||
"CreatedBy": "Computer Vision Center (CVC) at the Universitat Autonoma de Barcelona (UAB)",
|
||||
"CreatedByURL": "http://carla.org",
|
||||
"DocsURL": "http://carla.readthedocs.io",
|
||||
"MarketplaceURL": "",
|
||||
"SupportURL": "https://github.com/carla-simulator/carla/issues",
|
||||
"CanContainContent": true,
|
||||
"IsBetaVersion": true,
|
||||
"Installed": true,
|
||||
"Modules":
|
||||
[
|
||||
{
|
||||
"Name": "Carla",
|
||||
"Type": "Runtime",
|
||||
"LoadingPhase": "PreDefault",
|
||||
"AdditionalDependencies":
|
||||
[
|
||||
"Engine"
|
||||
]
|
||||
}
|
||||
],
|
||||
"Plugins":
|
||||
[
|
||||
{
|
||||
"Name": "ProceduralMeshComponent",
|
||||
"Enabled": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -30,45 +30,35 @@ public class Carla :
|
|||
|
||||
|
||||
|
||||
public static string FindLibrary(string SearchPath, params string[] Patterns)
|
||||
{
|
||||
foreach (var Pattern in Patterns)
|
||||
{
|
||||
var Candidates = Directory.GetFiles(SearchPath, Pattern);
|
||||
if (Candidates.Length == 0)
|
||||
continue;
|
||||
Array.Sort(Candidates);
|
||||
return Candidates[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Carla(ReadOnlyTargetRules Target) :
|
||||
base(Target)
|
||||
{
|
||||
var DirectoryInfo = new DirectoryInfo(ModuleDirectory);
|
||||
for (int i = 0; i != 6; ++i)
|
||||
DirectoryInfo = DirectoryInfo.Parent;
|
||||
var WorkspacePath = DirectoryInfo.ToString();
|
||||
Debug.Assert(Directory.Exists(WorkspacePath));
|
||||
bool IsWindows = Target.Platform == UnrealTargetPlatform.Win64;
|
||||
var DirectoryInfo = new DirectoryInfo(ModuleDirectory);
|
||||
for (int i = 0; i != 6; ++i)
|
||||
DirectoryInfo = DirectoryInfo.Parent;
|
||||
var WorkspacePath = DirectoryInfo.ToString();
|
||||
Debug.Assert(WorkspacePath != null && !Directory.Exists(WorkspacePath));
|
||||
|
||||
if (CarlaInstallPath == null)
|
||||
{
|
||||
Console.WriteLine("-carla-install-path was not specified, inferring...");
|
||||
CarlaInstallPath = Path.Combine(WorkspacePath, "Install", "libcarla");
|
||||
Debug.Assert(Directory.Exists(CarlaInstallPath), "Could not infer CARLA install directory.");
|
||||
}
|
||||
|
||||
if (CarlaDependenciesPath == null)
|
||||
{
|
||||
Console.WriteLine("-carla-dependencies-path was not specified, inferring...");
|
||||
CarlaDependenciesPath = Path.Combine(WorkspacePath, "Build", "Dependencies");
|
||||
Debug.Assert(Directory.Exists(CarlaDependenciesPath), "Could not infer CARLA dependencies directory.");
|
||||
Console.WriteLine("\"-carla-install-path\" was not specified, inferring...");
|
||||
CarlaInstallPath = Path.Combine(WorkspacePath, "Install", "libcarla");
|
||||
if (!Directory.Exists(CarlaInstallPath))
|
||||
throw new DirectoryNotFoundException("Could not infer CARLA install directory.");
|
||||
Console.WriteLine("Using \"" + CarlaInstallPath + "\" as the CARLA install path.");
|
||||
}
|
||||
|
||||
bool IsWindows = Target.Platform == UnrealTargetPlatform.Win64;
|
||||
if (CarlaDependenciesPath == null)
|
||||
{
|
||||
Console.WriteLine("\"-carla-dependencies-path\" was not specified, inferring...");
|
||||
CarlaDependenciesPath = Path.Combine(WorkspacePath, "Build", "Dependencies");
|
||||
if (!Directory.Exists(CarlaDependenciesPath))
|
||||
throw new DirectoryNotFoundException("Could not infer CARLA dependencies directory.");
|
||||
Console.WriteLine("Using \"" + CarlaDependenciesPath + "\" as the CARLA depenencies install path.");
|
||||
}
|
||||
|
||||
bEnableExceptions = bEnableExceptions || IsWindows;
|
||||
bEnableExceptions = bEnableExceptions || IsWindows;
|
||||
PrivatePCHHeaderFile = "Carla.h";
|
||||
|
||||
if (EnableCarSim)
|
||||
|
@ -133,7 +123,6 @@ public class Carla :
|
|||
"Landscape",
|
||||
"Chaos",
|
||||
"ChaosVehicles",
|
||||
"ChaosVehicleLib",
|
||||
"Slate",
|
||||
"SlateCore",
|
||||
"PhysicsCore"
|
||||
|
@ -150,77 +139,70 @@ public class Carla :
|
|||
var LibraryPrefix = IsWindows ? "" : "lib";
|
||||
var LibrarySuffix = IsWindows ? ".lib" : ".a";
|
||||
|
||||
Func<string, string> GetLibraryName = name =>
|
||||
var LibCarlaInstallPath = CarlaInstallPath;
|
||||
var DependenciesInstallPath = CarlaDependenciesPath;
|
||||
|
||||
Func<string, string> GetLibraryName = name =>
|
||||
{
|
||||
return LibraryPrefix + name + LibrarySuffix;
|
||||
};
|
||||
|
||||
var LibCarlaInstallPath = CarlaInstallPath;
|
||||
var DependenciesInstallPath = CarlaDependenciesPath;
|
||||
Func<string, string, string[]> FindLibraries = (name, pattern) =>
|
||||
{
|
||||
var InstallPath = Path.Combine(DependenciesInstallPath, name + "-install");
|
||||
var LibPath = Path.Combine(InstallPath, "lib");
|
||||
var Candidates = Directory.GetFiles(LibPath, GetLibraryName(pattern));
|
||||
Array.Sort(Candidates);
|
||||
return Candidates;
|
||||
};
|
||||
|
||||
// LibCarla
|
||||
var LibCarlaIncludePath = Path.Combine(LibCarlaInstallPath, "include");
|
||||
var LibCarlaLibPath = Path.Combine(LibCarlaInstallPath, "lib");
|
||||
var LibCarlaServerPath = Path.Combine(LibCarlaLibPath, GetLibraryName("carla-server"));
|
||||
var LibCarlaClientPath = Path.Combine(LibCarlaLibPath, GetLibraryName("carla-client"));
|
||||
// Boost
|
||||
var BoostInstallPath = Path.Combine(DependenciesInstallPath, "boost-install");
|
||||
var BoostLibPath = Path.Combine(BoostInstallPath, "lib");
|
||||
var BoostLibraryPatterns = new string[]
|
||||
{
|
||||
GetLibraryName("*boost_asio*"),
|
||||
GetLibraryName("*boost_python*"),
|
||||
};
|
||||
var BoostLibraries =
|
||||
var BoostLibraries =
|
||||
from Pattern in BoostLibraryPatterns
|
||||
select FindLibrary(BoostLibPath, Pattern);
|
||||
// Chrono
|
||||
var ChronoInstallPath = Path.Combine(DependenciesInstallPath, "chrono-install");
|
||||
var ChronoLibPath = Path.Combine(ChronoInstallPath, "lib");
|
||||
var ChronoLibraryNames = new string[]
|
||||
{
|
||||
"ChronoEngine",
|
||||
"ChronoEngine_vehicle",
|
||||
"ChronoModels_vehicle",
|
||||
"ChronoModels_robot",
|
||||
};
|
||||
var ChronoLibraries =
|
||||
from Name in ChronoLibraryNames
|
||||
select FindLibrary(Name);
|
||||
// SQLite
|
||||
var SQLiteBuildPath = Path.Combine(DependenciesInstallPath, "sqlite-build");
|
||||
var SQLiteLibrary = FindLibrary(SQLiteBuildPath, GetLibraryName("sqlite*"));
|
||||
// RPCLib
|
||||
var RPCLibInstallPath = Path.Combine(DependenciesInstallPath, "rpclib-install");
|
||||
var RPCLibPath = Path.Combine(RPCLibInstallPath, "lib");
|
||||
var RPCLibraryPath = FindLibrary(RPCLibPath, "rpc");
|
||||
// Xerces-C
|
||||
var XercesCInstallPath = Path.Combine(DependenciesInstallPath, "xercesc-install");
|
||||
var XercesCLibPath = Path.Combine(XercesCInstallPath, "lib");
|
||||
var XercesCLibrary = FindLibrary(XercesCLibPath, "xercesc*");
|
||||
// Proj
|
||||
var ProjInstallPath = Path.Combine(DependenciesInstallPath, "proj-install");
|
||||
var ProjLibPath = Path.Combine(ProjInstallPath, "lib");
|
||||
var ProjLibrary = FindLibrary(ProjLibPath, "proj*");
|
||||
// SUMO (OSM2ODR)
|
||||
var SUMOInstallPath = Path.Combine(DependenciesInstallPath, "sumo-install");
|
||||
var SUMOLibPath = Path.Combine(SUMOInstallPath, "lib");
|
||||
var SUMOLibrary = FindLibrary(SUMOLibPath, "sumo*");
|
||||
// ZLib
|
||||
var ZLibInstallPath = Path.Combine(DependenciesInstallPath, "zlib-install");
|
||||
var ZLibLibPath = Path.Combine(ZLibInstallPath, "lib");
|
||||
var ZLibLibrary = FindLibrary(ZLibLibPath, "zlib*");
|
||||
from Candidate in FindLibraries("boost", Pattern)
|
||||
select Candidate;
|
||||
|
||||
PublicAdditionalLibraries.AddRange(BoostLibraries);
|
||||
PublicAdditionalLibraries.AddRange(ChronoLibraries);
|
||||
var SQLiteBuildPath = Path.Combine(DependenciesInstallPath, "sqlite-build");
|
||||
var SQLiteLibrary = Directory.GetFiles(SQLiteBuildPath, GetLibraryName("sqlite*"))[0];
|
||||
|
||||
PublicAdditionalLibraries.AddRange(BoostLibraries);
|
||||
PublicAdditionalLibraries.AddRange(new string[]
|
||||
{
|
||||
SQLiteLibrary,
|
||||
RPCLibraryPath,
|
||||
XercesCLibrary,
|
||||
ProjLibrary,
|
||||
SUMOLibrary,
|
||||
ZLibLibrary,
|
||||
});
|
||||
{
|
||||
SQLiteLibrary,
|
||||
FindLibraries("rpclib", "rpc")[0],
|
||||
FindLibraries("xercesc", "xerces-c*")[0],
|
||||
FindLibraries("proj", "proj")[0],
|
||||
FindLibraries("sumo", "*osm2odr")[0],
|
||||
FindLibraries("zlib", "zlib*")[0],
|
||||
});
|
||||
|
||||
if (EnableChrono)
|
||||
{
|
||||
// Chrono
|
||||
var ChronoInstallPath = Path.Combine(DependenciesInstallPath, "chrono-install");
|
||||
var ChronoLibPath = Path.Combine(ChronoInstallPath, "lib");
|
||||
var ChronoLibraryNames = new string[]
|
||||
{
|
||||
"ChronoEngine",
|
||||
"ChronoEngine_vehicle",
|
||||
"ChronoModels_vehicle",
|
||||
"ChronoModels_robot",
|
||||
};
|
||||
var ChronoLibraries =
|
||||
from Name in ChronoLibraryNames
|
||||
select FindLibraries(ChronoLibPath, GetLibraryName(Name))[0];
|
||||
PublicAdditionalLibraries.AddRange(ChronoLibraries);
|
||||
}
|
||||
|
||||
PublicIncludePaths.Add(LibCarlaIncludePath);
|
||||
|
||||
|
@ -228,6 +210,7 @@ public class Carla :
|
|||
|
||||
PublicDefinitions.Add("BOOST_DISABLE_ABI_HEADERS");
|
||||
PublicDefinitions.Add("BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY");
|
||||
|
||||
if (!bEnableExceptions)
|
||||
{
|
||||
PublicDefinitions.Add("ASIO_NO_EXCEPTIONS");
|
||||
|
|
|
@ -36,8 +36,12 @@
|
|||
#include <utility>
|
||||
|
||||
#include "carla/rpc/VehicleFailureState.h"
|
||||
#include "WheeledVehiclePawn.h"
|
||||
|
||||
#include "CarlaWheeledVehicle.generated.h"
|
||||
|
||||
|
||||
|
||||
class UBoxComponent;
|
||||
|
||||
UENUM()
|
||||
|
@ -69,7 +73,7 @@ enum class EVehicleDoor : uint8 {
|
|||
|
||||
/// Base class for CARLA wheeled vehicles.
|
||||
UCLASS()
|
||||
class CARLA_API ACarlaWheeledVehicle : public AWheeledVehicle
|
||||
class CARLA_API ACarlaWheeledVehicle : public AWheeledVehiclePawn
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ struct FVehicleNWTransmissionData
|
|||
};
|
||||
|
||||
UCLASS(ClassGroup = (Physics), meta = (BlueprintSpawnableComponent), hidecategories = (PlanarMovement, "Components|Movement|Planar", Activation, "Components|Activation"))
|
||||
class CARLA_API UWheeledVehicleMovementComponentNW : public UWheeledVehicleMovementComponent
|
||||
class CARLA_API UWheeledVehicleMovementComponentNW : public UChaosWheeledVehicleMovementComponent
|
||||
{
|
||||
GENERATED_UCLASS_BODY()
|
||||
|
||||
|
|
|
@ -1,46 +1,44 @@
|
|||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "1.0",
|
||||
"FriendlyName": "CarlaTools",
|
||||
"Description": "This plugin provides engine tools for Carla",
|
||||
"Category": "Other",
|
||||
"CreatedBy": "Carla Team",
|
||||
"CreatedByURL": "http://carla.org",
|
||||
"DocsURL": "http://carla.readthedocs.io",
|
||||
"MarketplaceURL": "",
|
||||
"SupportURL": "https://github.com/carla-simulator/carla/issues",
|
||||
"CanContainContent": true,
|
||||
"IsBetaVersion": false,
|
||||
"IsExperimentalVersion": true,
|
||||
"Installed": true,
|
||||
"Modules": [
|
||||
{
|
||||
"Name": "CarlaTools",
|
||||
"Type": "Editor",
|
||||
"LoadingPhase": "Default"
|
||||
}
|
||||
],
|
||||
"Plugins": [
|
||||
{
|
||||
"Name": "Carla",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "EditorScriptingUtilities",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "ChaosVehicles",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "ProceduralMeshComponent",
|
||||
"Enabled": true
|
||||
},
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "1.0",
|
||||
"FriendlyName": "CarlaTools",
|
||||
"Description": "This plugin provides engine tools for Carla",
|
||||
"Category": "Other",
|
||||
"CreatedBy": "Carla Team",
|
||||
"CreatedByURL": "http://carla.org",
|
||||
"DocsURL": "http://carla.readthedocs.io",
|
||||
"MarketplaceURL": "",
|
||||
"SupportURL": "https://github.com/carla-simulator/carla/issues",
|
||||
"CanContainContent": true,
|
||||
"IsBetaVersion": false,
|
||||
"IsExperimentalVersion": true,
|
||||
"Installed": true,
|
||||
"Modules":
|
||||
[
|
||||
{
|
||||
"Name": "StreetMap",
|
||||
"Enabled": true
|
||||
}
|
||||
]
|
||||
"Name": "CarlaTools",
|
||||
"Type": "Editor",
|
||||
"LoadingPhase": "Default"
|
||||
}
|
||||
],
|
||||
"Plugins":
|
||||
[
|
||||
{
|
||||
"Name": "Carla",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "EditorScriptingUtilities",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "ProceduralMeshComponent",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "StreetMap",
|
||||
"Enabled": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -34,7 +34,22 @@ public class CarlaTools :
|
|||
Array.Sort(Candidates);
|
||||
return Candidates[0];
|
||||
}
|
||||
return null;
|
||||
|
||||
string message = "Warning: Could not find any matches in \"";
|
||||
message += SearchPath;
|
||||
message += "\" for";
|
||||
foreach (var Pattern in Patterns)
|
||||
{
|
||||
message += " \"";
|
||||
message += Pattern;
|
||||
message += "\",";
|
||||
}
|
||||
if (Patterns.Length != 0)
|
||||
message.Remove(message.Length - 1, 1);
|
||||
message += '.';
|
||||
Console.WriteLine(message);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public CarlaTools(ReadOnlyTargetRules Target) :
|
||||
|
@ -45,20 +60,24 @@ public class CarlaTools :
|
|||
for (int i = 0; i != 6; ++i)
|
||||
DirectoryInfo = DirectoryInfo.Parent;
|
||||
var WorkspacePath = DirectoryInfo.ToString();
|
||||
Debug.Assert(Directory.Exists(WorkspacePath));
|
||||
Debug.Assert(WorkspacePath != null && !Directory.Exists(WorkspacePath));
|
||||
|
||||
if (CarlaInstallPath == null)
|
||||
{
|
||||
Console.WriteLine("-carla-install-path was not specified, inferring...");
|
||||
Console.WriteLine("\"-carla-install-path\" was not specified, inferring...");
|
||||
CarlaInstallPath = Path.Combine(WorkspacePath, "Install", "libcarla");
|
||||
Debug.Assert(Directory.Exists(CarlaInstallPath), "Could not infer CARLA install directory.");
|
||||
if (!Directory.Exists(CarlaInstallPath))
|
||||
throw new DirectoryNotFoundException("Could not infer CARLA install directory.");
|
||||
Console.WriteLine("Using \"" + CarlaInstallPath + "\" as the CARLA install path.");
|
||||
}
|
||||
|
||||
if (CarlaDependenciesPath == null)
|
||||
{
|
||||
Console.WriteLine("-carla-dependencies-path was not specified, inferring...");
|
||||
Console.WriteLine("\"-carla-dependencies-path\" was not specified, inferring...");
|
||||
CarlaDependenciesPath = Path.Combine(WorkspacePath, "Build", "Dependencies");
|
||||
Debug.Assert(Directory.Exists(CarlaDependenciesPath), "Could not infer CARLA dependencies directory.");
|
||||
if (!Directory.Exists(CarlaDependenciesPath))
|
||||
throw new DirectoryNotFoundException("Could not infer CARLA dependencies directory.");
|
||||
Console.WriteLine("Using \"" + CarlaDependenciesPath + "\" as the CARLA depenencies install path.");
|
||||
}
|
||||
|
||||
bEnableExceptions = bEnableExceptions || IsWindows;
|
||||
|
@ -130,21 +149,29 @@ public class CarlaTools :
|
|||
var LibraryPrefix = IsWindows ? "" : "lib";
|
||||
var LibrarySuffix = IsWindows ? ".lib" : ".a";
|
||||
|
||||
var LibCarlaInstallPath = CarlaInstallPath;
|
||||
var DependenciesInstallPath = CarlaDependenciesPath;
|
||||
|
||||
Func<string, string> GetLibraryName = name =>
|
||||
{
|
||||
return LibraryPrefix + name + LibrarySuffix;
|
||||
};
|
||||
|
||||
var LibCarlaInstallPath = CarlaInstallPath;
|
||||
var DependenciesInstallPath = CarlaDependenciesPath;
|
||||
Func<string, string, string[]> FindLibraries = (name, pattern) =>
|
||||
{
|
||||
var InstallPath = Path.Combine(DependenciesInstallPath, name + "-install");
|
||||
var LibPath = Path.Combine(InstallPath, "lib");
|
||||
var Candidates = Directory.GetFiles(LibPath, GetLibraryName(pattern));
|
||||
Array.Sort(Candidates);
|
||||
return Candidates;
|
||||
};
|
||||
|
||||
// LibCarla
|
||||
var LibCarlaIncludePath = Path.Combine(LibCarlaInstallPath, "include");
|
||||
var LibCarlaLibPath = Path.Combine(LibCarlaInstallPath, "lib");
|
||||
var LibCarlaServerPath = Path.Combine(LibCarlaLibPath, GetLibraryName("carla-server"));
|
||||
var LibCarlaClientPath = Path.Combine(LibCarlaLibPath, GetLibraryName("carla-client"));
|
||||
// Boost
|
||||
var BoostInstallPath = Path.Combine(DependenciesInstallPath, "boost-install");
|
||||
var BoostLibPath = Path.Combine(BoostInstallPath, "lib");
|
||||
var BoostLibraryPatterns = new string[]
|
||||
{
|
||||
GetLibraryName("*boost_asio*"),
|
||||
|
@ -152,59 +179,39 @@ public class CarlaTools :
|
|||
};
|
||||
var BoostLibraries =
|
||||
from Pattern in BoostLibraryPatterns
|
||||
select FindLibrary(BoostLibPath, Pattern);
|
||||
// Chrono
|
||||
var ChronoInstallPath = Path.Combine(DependenciesInstallPath, "chrono-install");
|
||||
var ChronoLibPath = Path.Combine(ChronoInstallPath, "lib");
|
||||
var ChronoLibraryNames = new string[]
|
||||
{
|
||||
"ChronoEngine",
|
||||
"ChronoEngine_vehicle",
|
||||
"ChronoModels_vehicle",
|
||||
"ChronoModels_robot",
|
||||
};
|
||||
var ChronoLibraries =
|
||||
from Name in ChronoLibraryNames
|
||||
select FindLibrary(Name);
|
||||
// SQLite
|
||||
from Candidate in FindLibraries("boost", Pattern)
|
||||
select Candidate;
|
||||
|
||||
var SQLiteBuildPath = Path.Combine(DependenciesInstallPath, "sqlite-build");
|
||||
var SQLiteLibrary = FindLibrary(SQLiteBuildPath, GetLibraryName("sqlite*"));
|
||||
// RPCLib
|
||||
var RPCLibInstallPath = Path.Combine(DependenciesInstallPath, "rpclib-install");
|
||||
var RPCLibPath = Path.Combine(RPCLibInstallPath, "lib");
|
||||
var RPCLibraryPath = FindLibrary(RPCLibPath, "rpc");
|
||||
// Xerces-C
|
||||
var XercesCInstallPath = Path.Combine(DependenciesInstallPath, "xercesc-install");
|
||||
var XercesCLibPath = Path.Combine(XercesCInstallPath, "lib");
|
||||
var XercesCLibrary = FindLibrary(XercesCLibPath, "xercesc*");
|
||||
// Proj
|
||||
var ProjInstallPath = Path.Combine(DependenciesInstallPath, "proj-install");
|
||||
var ProjLibPath = Path.Combine(ProjInstallPath, "lib");
|
||||
var ProjLibrary = FindLibrary(ProjLibPath, "proj*");
|
||||
// SUMO (OSM2ODR)
|
||||
var SUMOInstallPath = Path.Combine(DependenciesInstallPath, "sumo-install");
|
||||
var SUMOLibPath = Path.Combine(SUMOInstallPath, "lib");
|
||||
var SUMOLibrary = FindLibrary(SUMOLibPath, "sumo*");
|
||||
// ZLib
|
||||
var ZLibInstallPath = Path.Combine(DependenciesInstallPath, "zlib-install");
|
||||
var ZLibLibPath = Path.Combine(ZLibInstallPath, "lib");
|
||||
var ZLibLibrary = FindLibrary(ZLibLibPath, "zlib*");
|
||||
var SQLiteLibrary = Directory.GetFiles(SQLiteBuildPath, GetLibraryName("sqlite*"))[0];
|
||||
|
||||
PublicAdditionalLibraries.Add(LibCarlaServerPath);
|
||||
PublicAdditionalLibraries.Add(LibCarlaClientPath);
|
||||
PublicAdditionalLibraries.Add(RPCLibraryPath);
|
||||
PublicAdditionalLibraries.AddRange(BoostLibraries);
|
||||
|
||||
PublicIncludePaths.Add(LibCarlaIncludePath);
|
||||
PublicAdditionalLibraries.AddRange(BoostLibraries);
|
||||
PublicAdditionalLibraries.AddRange(new string[]
|
||||
{
|
||||
SQLiteLibrary,
|
||||
FindLibraries("rpclib", "rpc")[0],
|
||||
FindLibraries("xercesc", "xerces-c*")[0],
|
||||
FindLibraries("proj", "proj")[0],
|
||||
FindLibraries("sumo", "*osm2odr")[0],
|
||||
FindLibraries("zlib", "zlib*")[0],
|
||||
});
|
||||
|
||||
PublicDefinitions.Add("BOOST_DISABLE_ABI_HEADERS");
|
||||
PublicIncludePaths.Add(LibCarlaIncludePath);
|
||||
|
||||
PrivateIncludePaths.Add(LibCarlaIncludePath);
|
||||
|
||||
PublicDefinitions.Add("BOOST_DISABLE_ABI_HEADERS");
|
||||
PublicDefinitions.Add("BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY");
|
||||
|
||||
if (!bEnableExceptions)
|
||||
{
|
||||
PublicDefinitions.Add("ASIO_NO_EXCEPTIONS");
|
||||
PublicDefinitions.Add("BOOST_NO_EXCEPTIONS");
|
||||
PublicDefinitions.Add("PUGIXML_NO_EXCEPTIONS");
|
||||
PublicDefinitions.Add("LIBCARLA_NO_EXCEPTIONS");
|
||||
PublicDefinitions.Add("PUGIXML_NO_EXCEPTIONS");
|
||||
}
|
||||
|
||||
if (EnableHoudini)
|
||||
PublicDefinitions.Add("CARLA_HOUDINI_ENABLED");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
// This work is licensed under the terms of the MIT license.
|
||||
// For a copy, see <https://opensource.org/licenses/MIT>.
|
||||
|
||||
#ifdef CARLA_HOUDINI_ENABLED
|
||||
#include "HoudiniImportNodeWrapper.h"
|
||||
#include "HoudiniAsset.h"
|
||||
|
||||
|
@ -83,3 +84,4 @@ void UHoudiniImportNodeWrapper::HandleFailed(
|
|||
}
|
||||
RemoveFromRoot();
|
||||
}
|
||||
#endif
|
|
@ -5,12 +5,10 @@
|
|||
// For a copy, see <https://opensource.org/licenses/MIT>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef CARLA_HOUDINI_ENABLED
|
||||
#include "CoreMinimal.h"
|
||||
#include "Kismet/BlueprintAsyncActionBase.h"
|
||||
|
||||
#include "HoudiniPublicAPIProcessHDANode.h"
|
||||
|
||||
#include "HoudiniImportNodeWrapper.generated.h"
|
||||
|
||||
// Delegate type for output pins on the node.
|
||||
|
@ -63,3 +61,4 @@ private:
|
|||
UHoudiniPublicAPIProcessHDANode* HDANode;
|
||||
|
||||
};
|
||||
#endif
|
|
@ -16,13 +16,13 @@ struct FWheelTemplates
|
|||
{
|
||||
GENERATED_BODY()
|
||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Wheel")
|
||||
TSubclassOf<UVehicleWheel> WheelFR;
|
||||
TSubclassOf<UChaosVehicleWheel> WheelFR;
|
||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Wheel")
|
||||
TSubclassOf<UVehicleWheel> WheelFL;
|
||||
TSubclassOf<UChaosVehicleWheel> WheelFL;
|
||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Wheel")
|
||||
TSubclassOf<UVehicleWheel> WheelRR;
|
||||
TSubclassOf<UChaosVehicleWheel> WheelRR;
|
||||
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Wheel")
|
||||
TSubclassOf<UVehicleWheel> WheelRL;
|
||||
TSubclassOf<UChaosVehicleWheel> WheelRL;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.IO;
|
||||
using EpicGames.Core;
|
||||
|
||||
public class CarlaUE4Target :
|
||||
TargetRules
|
||||
public class CarlaUE4Target : TargetRules
|
||||
{
|
||||
[CommandLine("-unity-build")]
|
||||
bool EnableUnityBuild = false;
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.IO;
|
||||
using EpicGames.Core;
|
||||
|
||||
public class CarlaUE4EditorTarget :
|
||||
TargetRules
|
||||
public class CarlaUE4EditorTarget : TargetRules
|
||||
{
|
||||
[CommandLine("-unity-build")]
|
||||
bool EnableUnityBuild = false;
|
||||
|
|
Loading…
Reference in New Issue