From 224a9a0b18714ffac55c9dfde6e10aead4b9939b Mon Sep 17 00:00:00 2001 From: James Turner Date: Sun, 11 Dec 2016 00:18:45 +0000 Subject: [PATCH] Add my Mac and Linux build helpers. This is to save new contributors some time getting a build env, since download-and-compile produces a slightly Baroque setup for day-to-day development. --- compile-scripts/README.md | 9 +- compile-scripts/commands-linux.rb | 130 +++++++++++++++++++++++++++++ compile-scripts/commands-mac.rb | 134 ++++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+), 1 deletion(-) create mode 100755 compile-scripts/commands-linux.rb create mode 100755 compile-scripts/commands-mac.rb diff --git a/compile-scripts/README.md b/compile-scripts/README.md index 8ecc46b..a7a25d5 100644 --- a/compile-scripts/README.md +++ b/compile-scripts/README.md @@ -6,9 +6,16 @@ and Linux ones require Ruby (which is usually pre-installed). There are no instructions - if you can't figure out what these do from reading the scripts, you almost certainly should not be using them! -They all assume a top-level folder (called 'FGFS' in my case) which contains +They all assume a top-level folder which contains checkouts of simgear, flightgear, fgdata, OpenSceneGraph (into a dir named 'osg') and the windows-3rd-party dir in the case of Windows. It's assumed you copy the script to that same dir, edit paths and run from there. +The Mac and Linux scripts will do the checkout for you - the Windows is not +so smart because Window batch scripts are not my friend. + +On Mac you will need to grab the 3rdparty-dependency-build from Jenkins, or +build PLIB manually yourself, either should be straightforward. For all other +dependencies on Mac / Linux use your package manager / Homebrew. + Files will be installed into a subdir called 'dist' diff --git a/compile-scripts/commands-linux.rb b/compile-scripts/commands-linux.rb new file mode 100755 index 0000000..6816115 --- /dev/null +++ b/compile-scripts/commands-linux.rb @@ -0,0 +1,130 @@ +#!/usr/bin/ruby + +require 'fileutils' +require 'optparse' +include FileUtils + +baseDir = Dir.pwd +gitArgs = "" +qtPath = "" + +doPull = false +doCMake = false +doInit = false +doClean = false +doPackage = false + +cmakeCommonArgs = "-DCMAKE_INSTALL_PREFIX=#{baseDir}/dist -DSIMGEAR_SHARED=1" +cmakeFGArgs = "" +sfUser = "jmturner" + +OptionParser.new do |opts| + opts.banner = "Usage: commands.rb [options]" + opts.on("", "--init", "Setup empty") do |v| + doInit = v + end + + opts.on("-p", "--[no-]pull", "Pull from Git") do |v| + doPull = v + end + opts.on("-c", "--cmake", "Run Cmake") do |v| + doCMake = v + end + opts.on("", "--clean", "Clean build dirs") do |v| + doClean = v + end + opts.on("-r", "--rebase", "Rebase when pulling") do |v| + gitArgs += "--rebase" + end + + opts.on("", "--qt=QTPATH", "Set Qt path when running cmake") do |v| + qtPath = v + end +end.parse!(ARGV) + +def cloneEverything() + puts "Initialising" + if File.exist?("#{Dir.pwd}/simgear") or File.exist?("#{Dir.pwd}/flightgear") + puts "Checkout already exists" + return + end + + `git clone ssh://#{sfUser}@git.code.sf.net/p/flightgear/simgear simgear` + `git clone ssh://#{sfUser}@git.code.sf.net/p/flightgear/flightgear flightgear` + `git clone ssh://#{sfUser}@git.code.sf.net/p/flightgear/fgdata fgdata` + `git clone https://github.com/openscenegraph/osg.git osg` +end + +def createDirs() + `mkdir -p sgbuild` + `mkdir -p fgbuild` + `mkdir -p osg_release_build` +end + +# path is needed for Cmake & running macdeployqt +if qtPath != "" + ENV['PATH'] = "#{ENV['PATH']}:#{qtPath}/bin" +end + +if doClean + puts "Cleaning build dirs" + `rm -r sgbuild` + `rm -r fgbuild` + `rm -r osg_release_build` + createDirs() +end + +if doInit + puts "Doing init" + cloneEverything() + createDirs(); +end + +if doPull + puts "Pulling from Git" + dataPull = Thread.new do + puts "Syncing FGData" + Dir.chdir "#{baseDir}/fgdata" + `git pull #{gitArgs}` + end + + Dir.chdir "#{baseDir}/simgear" + `git pull #{gitArgs}` + + Dir.chdir "#{baseDir}/flightgear" + `git pull #{gitArgs}` +end + +Dir.chdir "#{baseDir}/osg_release_build" +if doCMake or !File.exist?("#{Dir.pwd}/Makefile") + `cmake ../osg -DCMAKE_INSTALL_PREFIX=#{baseDir}/dist` +end + +puts "Building OpenSceneGraph" +`make` +`make install` + +Dir.chdir "#{baseDir}/sgbuild" + +if doCMake or !File.exist?("#{Dir.pwd}/Makefile") + `cmake ../simgear #{cmakeCommonArgs}` +end + +puts "Building SimGear" +`make` +`make install` + +Dir.chdir "#{baseDir}/fgbuild" + +if doCMake or !File.exist?("#{Dir.pwd}/Makefile") + if qtPath != "" + cmakeFGArgs = '-DENABLE_QT=1' + end + `cmake ../flightgear #{cmakeCommonArgs} #{cmakeFGArgs}` +end + +puts "Building FlightGear" +`make` +`make install` + +puts "All done." diff --git a/compile-scripts/commands-mac.rb b/compile-scripts/commands-mac.rb new file mode 100755 index 0000000..ed01055 --- /dev/null +++ b/compile-scripts/commands-mac.rb @@ -0,0 +1,134 @@ +#!/usr/bin/ruby + +require 'fileutils' +require 'optparse' +include FileUtils + +baseDir = Dir.pwd +gitArgs = "" +qtPath = "" + +doPull = false +doCMake = false +doInit = false +doClean = false +doPackage = false + +cmakeCommonArgs = "-G Xcode -DCMAKE_INSTALL_PREFIX=#{baseDir}/dist" +cmakeSGArgs = "-DSIMGEAR_SHARED=1 -DENABLE_CURL=0" +cmakeFGArgs = "-DSIMGEAR_SHARED=1" +sfUser = "jmturner" + +OptionParser.new do |opts| + opts.banner = "Usage: commands.rb [options]" + opts.on("", "--init", "Setup empty") do |v| + doInit = v + end + + opts.on("-p", "--[no-]pull", "Pull from Git") do |v| + doPull = v + end + opts.on("-c", "--cmake", "Run Cmake") do |v| + doCMake = v + end + opts.on("", "--clean", "Clean build dirs") do |v| + doClean = v + end + opts.on("-r", "--rebase", "Rebase when pulling") do |v| + gitArgs += "--rebase" + end + + opts.on("", "--qt=QTPATH", "Set Qt path when running cmake") do |v| + qtPath = v + end +end.parse!(ARGV) + +def cloneEverything() + puts "Initialising" + if File.exist?("#{Dir.pwd}/simgear") or File.exist?("#{Dir.pwd}/flightgear") + puts "Checkout already exists" + return + end + + `git clone ssh://#{sfUser}@git.code.sf.net/p/flightgear/simgear simgear` + `git clone ssh://#{sfUser}@git.code.sf.net/p/flightgear/flightgear flightgear` + `git clone git@github.com:zakalawe/osg.git osg` +end + +def createDirs() + `mkdir -p sgbuild` + `mkdir -p fgbuild` + `mkdir -p osg_mac_release_build` +end + +# path is needed for Cmake & running macdeployqt +if qtPath != "" + ENV['PATH'] = "#{ENV['PATH']}:#{qtPath}/bin" +end + +if doClean + puts "Cleaning build dirs" + `rm -r sgbuild` + `rm -r fgbuild` + `rm -r osg_mac_release_build` + createDirs() +end + +if doInit + puts "Doing init" + cloneEverything() + createDirs(); +end + +if doPull + puts "Pulling from Git" + dataPull = Thread.new do + puts "Syncing FGData" + Dir.chdir "#{baseDir}/fgdata" + `git pull #{gitArgs}` + end + + Dir.chdir "#{baseDir}/simgear" + `git pull #{gitArgs}` + + Dir.chdir "#{baseDir}/flightgear" + `git pull #{gitArgs}` +end + +Dir.chdir "#{baseDir}/osg_mac_release_build" +if doCMake or !File.exist?("#{Dir.pwd}/Makefile") + `cmake ../osg -DCMAKE_INSTALL_PREFIX=#{baseDir}/dist` +end + +puts "Building OpenSceneGraph" +`make -j4` +`make install` + +Dir.chdir "#{baseDir}/sgbuild" + +if doCMake or !File.exist?("#{Dir.pwd}/SimGear.xcodeproj") + `cmake ../simgear #{cmakeCommonArgs} #{cmakeSGArgs}` +end + +puts "Building SimGear Debug" +`xcodebuild -target install -configuration Debug` + +puts "Building SimGear Release" +`xcodebuild -target install -configuration Release` + +Dir.chdir "#{baseDir}/fgbuild" + +if doCMake or !File.exist?("#{Dir.pwd}/FlightGear.xcodeproj") + if qtPath != "" + cmakeFGArgs = '-DENABLE_QT=1' + end + `cmake ../flightgear #{cmakeCommonArgs} #{cmakeFGArgs}` +end + +puts "Building FlightGear Debug" +`xcodebuild -target fgfs -configuration Debug` + +puts "Building FlightGear Release" +`xcodebuild -target fgfs -configuration Release` + +puts "All done."