From 17b363f3b4d894257df3f1825692b0c342b521a2 Mon Sep 17 00:00:00 2001 From: Peter_Mitrano Date: Thu, 24 Dec 2015 02:34:29 -0500 Subject: [PATCH] working on install process for FRCSim 2016 To publish the simulation zip, run ./gradlew publish -PmakeSim Targeting Ubuntu 14.04 and 15.10 for now, with 14.04 being the currently best supported. Two scripts have been drafted for installing, for 14.04 and 15.10 It currently publishes to ~/releases/maven/development/simulation There is a known bug that gz_msgs for 15.10 must be built using protobuf 2.6, which is not the default on 14.04. Change-Id: I6cccd601671553d30fd05bbbc79c2b7dc1efbf1d --- CMakeLists.txt | 1 - build.gradle | 4 +- settings.gradle | 6 +- simulation/SimDS/build.gradle | 8 + simulation/build.gradle | 35 +++ simulation/frc_gazebo_plugins/CMakeLists.txt | 7 +- simulation/frcsim_installer.sh | 224 ++++++++++++++++++ simulation/gz_msgs/CMakeLists.txt | 8 +- simulation/install_resources/eclipse.desktop | 7 + simulation/{ => install_resources}/frcsim | 0 simulation/install_resources/frcsim.desktop | 9 + .../install_resources/lib/libjinput-linux.so | Bin 0 -> 13656 bytes .../lib/libjinput-linux64.so | Bin 0 -> 14512 bytes simulation/{ => install_resources}/sim_ds | 0 simulation/install_resources/sim_ds.desktop | 9 + simulation/install_resources/sim_ds_logo.png | Bin 0 -> 6111 bytes wpilibc/build.gradle | 6 +- wpilibc/simulation.gradle | 86 +++++-- wpilibc/simulation/CMakeLists.txt | 5 +- wpilibj/simulation.gradle | 13 +- 20 files changed, 393 insertions(+), 35 deletions(-) create mode 100644 simulation/build.gradle create mode 100755 simulation/frcsim_installer.sh create mode 100644 simulation/install_resources/eclipse.desktop rename simulation/{ => install_resources}/frcsim (100%) create mode 100644 simulation/install_resources/frcsim.desktop create mode 100755 simulation/install_resources/lib/libjinput-linux.so create mode 100755 simulation/install_resources/lib/libjinput-linux64.so rename simulation/{ => install_resources}/sim_ds (100%) create mode 100644 simulation/install_resources/sim_ds.desktop create mode 100644 simulation/install_resources/sim_ds_logo.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 484f86430c..a2d47b2158 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,6 @@ else () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++1y -DFRC_SIMULATOR -Wno-unused-parameter -pthread -fPIC -fpermissive") endif() - include_directories("build") add_subdirectory(simulation/gz_msgs) add_subdirectory(wpilibc/simulation) diff --git a/build.gradle b/build.gradle index d399ffd902..acf7a3a5db 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,8 @@ if (!hasProperty('repo')) { def repoBaseUrl = "http://first.wpi.edu/FRC/roborio/maven/${repo}" def publishUrl = "${System.getProperty('user.home')}/releases/maven/${repo}" +ext.simulationInstallDir = "$rootDir/build/install/simulation" + allprojects { ext.enableSimulation = enableSimulation ext.repo = repo @@ -43,4 +45,4 @@ subprojects { } } -apply from: 'cppSettings.gradle' \ No newline at end of file +apply from: 'cppSettings.gradle' diff --git a/settings.gradle b/settings.gradle index 9a43e3c29b..9c570c463a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,6 +2,10 @@ include 'hal', 'wpilibc', 'wpilibcIntegrationTests', 'wpilibj', - 'wpilibjIntegrationTests', + 'wpilibjIntegrationTests' + +if (hasProperty("makeSim")){ +include 'simulation', 'simulation:JavaGazebo', 'simulation:SimDS' +} diff --git a/simulation/SimDS/build.gradle b/simulation/SimDS/build.gradle index 7d44b8e1b6..58270b7f21 100644 --- a/simulation/SimDS/build.gradle +++ b/simulation/SimDS/build.gradle @@ -53,4 +53,12 @@ task simDsJavadoc(type: Jar, dependsOn: javadoc) { from javadoc.destinationDir } +//we need to move the simulation jars to the install directory +task copyJars(type: Copy) { + description = 'copy SimDS-all.jar to make simulation zip' + group = 'WPILib Simulation' + from shadowJar.archivePath + into "$simulationInstallDir/jar" +} + build.dependsOn shadowJar diff --git a/simulation/build.gradle b/simulation/build.gradle new file mode 100644 index 0000000000..1698f19911 --- /dev/null +++ b/simulation/build.gradle @@ -0,0 +1,35 @@ +apply plugin: 'java' +apply plugin: 'maven-publish' + +publishing { + publications { + simulation(MavenPublication) { + artifact zip + groupId 'simulation' + artifactId 'simulation' + version '1.0.0' + } + } + + setupWpilibRepo(it) +} + +task copy_resources(type: Copy) { + description = 'copy gz_msgs and install_resources to make simulation zip' + group = 'WPILib Simulation' + into ('gz_msgs') { + from 'gz_msgs' + } + into "$simulationInstallDir" + from 'install_resources' +} + +task zip(type: Zip, dependsOn: [copy_resources, + ':wpilibc:wpilibcSimCopy', + ':simulation:SimDS:copyJars', + ':wpilibj:copyJars']) { + description = 'zip of all the resources for simulation' + group = 'WPILib Simulation' + baseName = 'simulation-trusty' + from "$simulationInstallDir" +} diff --git a/simulation/frc_gazebo_plugins/CMakeLists.txt b/simulation/frc_gazebo_plugins/CMakeLists.txt index 6c662c3bff..e3574dddca 100644 --- a/simulation/frc_gazebo_plugins/CMakeLists.txt +++ b/simulation/frc_gazebo_plugins/CMakeLists.txt @@ -12,8 +12,6 @@ set (PLUGINS rangefinder servo) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/plugins) - link_directories(${GAZEBO_LIBRARY_DIRS}) foreach(PLUGIN ${PLUGINS}) @@ -29,8 +27,9 @@ foreach(PLUGIN ${PLUGINS}) endif() target_link_libraries(${PLUGIN} gz_msgs ${GAZEBO_LIBRARIES} ${Boost_LIBRARIES}) - - install(TARGETS ${PLUGIN} DESTINATION $ENV{HOME}/wpilib/simulation/plugins) + set_target_properties(${PLUGIN} + PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${SIMULATION_INSTALL_DIR}/plugins) endforeach() diff --git a/simulation/frcsim_installer.sh b/simulation/frcsim_installer.sh new file mode 100755 index 0000000000..be3d4a5712 --- /dev/null +++ b/simulation/frcsim_installer.sh @@ -0,0 +1,224 @@ +#!/bin/bash + +function check-environment { + # Ensure root access + if [ "$(id -u)" != "0" ]; then + echo "*** This script must be run as root!" 1>&2 + echo "*** Make sure that you followed the instructions properly." 1>&2 + install-fail + fi + + # Make sure that we're on Ubuntu. + if [ "$(lsb_release -is)" != "Ubuntu" ]; then + if [ "$(lsb_release -is)" = "" ]; then + echo "*** Distributions other than Ubuntu (such as yours, probably) are not supported." 1>&2 + else + echo "*** Distributions other than Ubuntu (such as $(lsb_release -is)) are not supported." 1>&2 + fi + echo "*** This means that the install will likely fail." 1>&2 + echo "*** Continue anyway? (y/n)" 1>&2 + read CONT + if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then + install-fail + fi + fi + + # Make sure that we have /etc/apt/sources.list.d available. + if [ ! -e /etc/apt/sources.list.d ]; then + echo "*** Cannot find /etc/apt/sources.list.d - is apt installed?" + install-fail + fi + + # Make sure that apt-key is installed. + if ! which apt-key >/dev/null; then + echo "*** You don't appear to have apt-key installed." 1>&2 + echo "*** Please install apt and run the script again." 1>&2 + install-fail + fi + + # Make sure that apt-get is installed. + if ! which apt-get >/dev/null; then + echo "*** You don't appear to have apt-get installed." 1>&2 + echo "*** Please install apt and run the script again." 1>&2 + install-fail + fi + + # Make sure that we have internet access. + if ! ping 8.8.8.8 -c 1 >/dev/null; then + echo "*** You don't appear to be able to access the internet! (Can't ping 8.8.8.8)" 1>&2 + install-fail + fi + + # Make sure that wget is installed. + if ! which wget >/dev/null; then + echo "*** You don't appear to have wget installed." 1>&2 + echo "*** Install? (y/n)" 1>&2 + read CONT + if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then + install-fail + fi + apt-get install wget -y + fi + + # Make sure that python is installed + if ! which python >/dev/null; then + echo "*** You don't appear to have python installed." 1>&2 + echo "*** Install? (y/n)" 1>&2 + read CONT + if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then + install-fail + fi + apt-get install python -y + fi + + # Make sure that unzip is installed + if ! which unzip >/dev/null; then + echo "*** You don't appear to have unzip installed." 1>&2 + echo "*** Install? (y/n)" 1>&2 + read CONT + if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then + install-fail + fi + apt-get install unzip -y + fi +} + +function remove-frcsim { + check-environment + + echo "*** Remove Gazebo package entry too? (y/n)" 1>&2 + read CONT + if [ "$CONT" == "y" -o "$CONT" == "Y" ]; then + rm -f /etc/apt/sources.list.d/gazebo-latest.list + fi + + apt-get update + apt-get remove --auto-remove gazebo6 g++-4.9 openjdk-8-jdk + rm -rf /opt/eclipse + rm -f /usr/share/applications/frcsim.desktop /usr/share/applications/eclipse.desktop /usr/share/applications/sim_ds.desktop + rm -f /usr/bin/frcism /usr/bin/sim_ds /usr/bin/eclipse + rm -rf ~/wpilib/simulation +} + +function install-eclipse-plugins { + if ! (wget -O /tmp/simulation.zip http://first.wpi.edu/FRC/roborio/maven/development/simulation/simulation/1.0.0/simulation-1.0.0.zip) + then + echo "***could not download wpilib simulation plugins, wrong URL probably***" + install-fail + fi + + mkdir -p ~/wpilib/simulation + unzip /tmp/simulation.zip -d ~/wpilib/simulation + ln -fs ~/wpilib/simulation/frcsim /usr/bin/frcsim + ln -fs ~/wpilib/simulation/sim_ds /usr/bin/sim_ds +} + +function install-eclipse { + if ! (wget -O /tmp/eclipse.tar.gz http://eclipse.mirror.rafal.ca/technology/epp/downloads/release/mars/1/eclipse-cpp-mars-1-linux-gtk-x86_64.tar.gz) + then + echo "***could not download eclipse, wrong URL probably***" + install-fail + fi + + tar -xf /tmp/eclipse.tar.gz -C /opt + ln -s /opt/eclipse/eclipse /usr/bin/eclipse +} + +function install-desktops { + mv ~/wpilib/simulation/eclipse.desktop /usr/share/applications/eclipse.desktop + mv ~/wpilib/simulation/frcsim.desktop /usr/share/applications/frcsim.desktop + mv ~/wpilib/simulation/sim_ds.desktop /usr/share/applications/sim_ds.desktop +} + +function install-gz_msgs { + cd ~/wpilib/simulation/gz_msgs + mkdir build + cd build + cmake .. + make + make install +} + +function install-toolchain { + add-apt-repository ppa:openjdk-r/ppa -y + add-apt-repository ppa:ubuntu-toolchain-r/test -y + apt-get update + apt-get install libprotoc-dev libprotobuf-dev protobuf-compiler g++-4.9 openjdk-8-jdk -y + ln -fs /usr/bin/g++-4.9 /usr/bin/g++ +} + +function install-models { + if ! (wget -O /tmp/models.zip https://usfirst.collab.net/sf/frs/do/downloadFile/projects.wpilib/frs.simulation.frcsim_gazebo_models/frs1160?) + then + echo "*** failed to download models. Check your internet connection! ***" + install-fail + fi + + unzip /tmp/models.zip -d ~/wpilib/simulation +} + +function install-frcsim { + check-environment + + # Add Gazebo Repository and Key + if ! echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-latest.list + then + echo "*** Cannot add Gazebo repository!" 1>&2 + install-fail + fi + if ! (wget http://packages.osrfoundation.org/gazebo.key -O - | apt-key add -) + then + echo "*** Cannot add Gazebo repository key!" 1>&2 + if ! ping packages.osrfoundation.org -c 1 >/dev/null; then + echo "*** The package host for Gazebo appears to be down. Try again later." 1>&2 + fi + install-fail + fi + + # Update and install dependencies + if ! apt-get update + then + echo "*** Could not resynchronize package index files." 1>&2 + echo "*** Are you running another update or install?" 1>&2 + install-fail + fi + if ! apt-get install -y gazebo6 + then + echo "*** Could not install frcsim packages. See above output for details." 1>&2 + echo "*** Are you running another update or install?" 1>&2 + install-fail + fi + + install-eclipse-plugins + install-toolchain + install-gz_msgs + install-eclipse + install-desktops + install-models + + # Done + echo "Installation Finished!!" +} + +if [ "$1" == "ROOT" ] +then + install-frcsim +elif [ "$1" == "INSTALLER" ] +then + SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 ROOT" +elif [ "$1" == "REMOVE-ROOT" ] +then + remove-frcsim +elif [ "$1" == "REMOVE" ] +then + SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 REMOVE-ROOT" +else + if [ -z "$1" ] + then + echo "***This script requires an argument!***" + echo "***Run ./frcsim_installer.sh INSTALLER to install***" + echo "***Other options are REMOVE, or any of the functions in the script" + else + $@ + fi +fi diff --git a/simulation/gz_msgs/CMakeLists.txt b/simulation/gz_msgs/CMakeLists.txt index 31c7dbaa5c..5ca638686e 100644 --- a/simulation/gz_msgs/CMakeLists.txt +++ b/simulation/gz_msgs/CMakeLists.txt @@ -62,4 +62,10 @@ else() endif() target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES}) -set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${ENV_HOME}/wpilib/simulation/lib") +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH "${ENV_HOME}/wpilib/simulation/lib" + LIBRARY_OUTPUT_DIRECTORY ${SIMULATION_INSTALL_DIR}/lib) + +file(COPY "${GZ_MSGS_INCLUDE_DIR}/simulation" + DESTINATION "${CMAKE_BINARY_DIR}/install/simulation/include") diff --git a/simulation/install_resources/eclipse.desktop b/simulation/install_resources/eclipse.desktop new file mode 100644 index 0000000000..c6d8a8633a --- /dev/null +++ b/simulation/install_resources/eclipse.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Eclipse +Exec=/usr/bin/eclipse +Icon=/opt/eclipse/icon.xpm +Type=Application +Categories=Development;Education;Science; +StartupNotify=true diff --git a/simulation/frcsim b/simulation/install_resources/frcsim similarity index 100% rename from simulation/frcsim rename to simulation/install_resources/frcsim diff --git a/simulation/install_resources/frcsim.desktop b/simulation/install_resources/frcsim.desktop new file mode 100644 index 0000000000..6434d9ce81 --- /dev/null +++ b/simulation/install_resources/frcsim.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=FRCSim +Keywords=frcsim,gazebo +Exec=/usr/bin/frcsim +Icon=gazebo +Type=Application +StartupNotify=true +Terminal=false +Categories=Development;IDE;Java;Education;Science diff --git a/simulation/install_resources/lib/libjinput-linux.so b/simulation/install_resources/lib/libjinput-linux.so new file mode 100755 index 0000000000000000000000000000000000000000..dba9e59fad5ef4eb9162a29fb612e9ef668cbf99 GIT binary patch literal 13656 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 literal 0 HcmV?d00001 diff --git a/simulation/install_resources/lib/libjinput-linux64.so b/simulation/install_resources/lib/libjinput-linux64.so new file mode 100755 index 0000000000000000000000000000000000000000..8b5f9d84f413e45a416f0b299dbe60cc4e0c4237 GIT binary patch literal 14512 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 literal 0 HcmV?d00001 diff --git a/simulation/sim_ds b/simulation/install_resources/sim_ds similarity index 100% rename from simulation/sim_ds rename to simulation/install_resources/sim_ds diff --git a/simulation/install_resources/sim_ds.desktop b/simulation/install_resources/sim_ds.desktop new file mode 100644 index 0000000000..34b6a177ac --- /dev/null +++ b/simulation/install_resources/sim_ds.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Sim DS +Keywords=frcsim,driverstation +Exec=/usr/bin/sim_ds +Icon=~/wpilib/simulation/sim_ds_logo.png +Type=Application +StartupNotify=true +Terminal=false +Categories=Development;IDE;Java;Education;Science diff --git a/simulation/install_resources/sim_ds_logo.png b/simulation/install_resources/sim_ds_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..39df91cee39d3250a72bf49f12073b0178bb7726 GIT binary patch literal 6111 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 classpath.files.findAll { it.exists() }.each { if (file(it).directory) { @@ -24,8 +25,6 @@ task wpilibjSimJar(type: Jar, dependsOn: simClasses) { addClasspath sourceSets.shared.runtimeClasspath addClasspath sourceSets.sim.runtimeClasspath - description = 'Creates the WPILibJSimulation Jar' - group = 'WPILib' from sourceSets.sim.output.classesDir from sourceSets.shared.output.classesDir baseName 'wpilibjSimulation' @@ -72,4 +71,12 @@ publishing { } } +//we need to move the simulation jars to the install directory +task copyJars(type: Copy) { + description = 'copy wpilibj simulation jar to make simulation zip' + group = 'WPILib Simulation' + from wpilibjSimJar.archivePath + into "$simulationInstallDir/jar" +} + build.dependsOn wpilibjSimJar