← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/macos_build_app_compiler into lp:widelands

 

Toni Förster has proposed merging lp:~widelands-dev/widelands/macos_build_app_compiler into lp:widelands with lp:~widelands-dev/widelands/macos_build_app as a prerequisite.

Commit message:
choose between compiler clang or gcc, specify build type: debug or release

Requested reviews:
  Klaus Halfmann (klaus-halfmann): dowload,short testrun
  GunChleoc (gunchleoc)

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/macos_build_app_compiler/+merge/353035

One can choose between Clang and GCC now. The Wiki has been changed accordingly:

https://wl.widelands.org/wiki/Building_Widelands_on_macOS/
-- 
Your team Widelands Developers is subscribed to branch lp:~widelands-dev/widelands/macos_build_app.
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2018-05-16 19:37:59 +0000
+++ CMakeLists.txt	2018-08-15 18:37:08 +0000
@@ -79,6 +79,14 @@
   endif()
 endif()
 
+# Disable no symbols warning on macOS
+if (APPLE)
+    SET(CMAKE_C_ARCHIVE_CREATE   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
+    SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
+    SET(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
+    SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
+endif()
+
 # TODO(sirver): One day, this should be enabled. Then we have no more cycles in our dependencies....
 # set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_NO_CYCLES ON)
 

=== modified file 'utils/macos/build_app.sh'
--- utils/macos/build_app.sh	2018-08-12 19:02:16 +0000
+++ utils/macos/build_app.sh	2018-08-15 18:37:08 +0000
@@ -2,9 +2,54 @@
 
 set -e
 
-if [ "$#" == "0" ]; then
-	echo "Usage: $0 <bzr_repo_directory>"
-	exit 1
+USAGE="Usage: $0 <clang|gcc> <debug|release> <bzr_repo_directory>"
+USE_ASAN="OFF"
+
+if [ ! -z "$3" ]; then
+   case "$2" in
+   debug|Debug)
+      TYPE="Debug"
+      if [ "$1" == "clang" ]; then
+         USE_ASAN="ON"
+         # Necessary to avoid linking errors later on
+         ASANLIB=$(echo "int main(void){return 0;}" | xcrun clang -fsanitize=address \
+         -xc -o/dev/null -v - 2>&1 |   tr ' ' '\n' | grep libclang_rt.asan_osx_dynamic.dylib)
+         mkdir -p "@rpath"
+         ln -fs "$ASANLIB" "@rpath/"
+      fi
+      ;;
+   release|Release)
+      TYPE="Release"
+      ;;
+   *)
+      echo $USAGE
+      exit 1
+      ;;
+   esac
+   case "$1" in
+   clang)
+      C_COMPILER="clang"
+      CXX_COMPILER="clang++"
+      COMPILER=$(clang --version | grep "clang")
+      ;;
+   gcc)
+      C_COMPILER="gcc-7"
+      CXX_COMPILER="g++-7"
+      COMPILER=$(gcc-7 --version | grep "GCC")
+      ;;
+   *)
+      echo $USAGE
+      exit 1
+      ;;
+   esac
+   if [ ! -z $(type -p ccache) ]; then
+      C_COMPILER="$(brew --prefix ccache)/libexec/$C_COMPILER"
+      CXX_COMPILER="$(brew --prefix ccache)/libexec/$CXX_COMPILER"
+   fi
+   SOURCE_DIR=$3
+else
+   echo $USAGE
+   exit 1
 fi
 
 # Check if the SDK for the minimum build target is available.
@@ -17,10 +62,9 @@
    SDK_DIRECTORY="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$OSX_VERSION.sdk"
 fi
 
-SOURCE_DIR=$1
 REVISION=`bzr revno $SOURCE_DIR`
 DESTINATION="WidelandsRelease"
-TYPE="Release"
+
 if [[ -f $SOURCE_DIR/WL_RELEASE ]]; then
    WLVERSION="$(cat $SOURCE_DIR/WL_RELEASE)"
 else
@@ -33,6 +77,7 @@
 echo "   Destination: $DESTINATION"
 echo "   Type:        $TYPE"
 echo "   macOS:       $OSX_MIN_VERSION"
+echo "   Compiler:    $COMPILER"
 echo ""
 
 function MakeDMG {
@@ -46,7 +91,11 @@
    cp $SOURCE_DIR/COPYING  $DESTINATION/COPYING.txt
 
    echo "Creating DMG ..."
-   hdiutil create -fs HFS+ -volname "Widelands $WLVERSION" -srcfolder "$DESTINATION" "$UP/widelands_64bit_$WLVERSION.dmg"
+   if [ "$TYPE" == "Release" ]; then
+      hdiutil create -fs HFS+ -volname "Widelands $WLVERSION" -srcfolder "$DESTINATION" "$UP/widelands_64bit_$WLVERSION.dmg"
+   elif [ "$TYPE" == "Debug" ]; then
+      hdiutil create -fs HFS+ -volname "Widelands $WLVERSION" -srcfolder "$DESTINATION" "$UP/widelands_64bit_${WLVERSION}_${TYPE}.dmg"
+   fi
 }
 
 function CopyLibrary {
@@ -109,24 +158,28 @@
 }
 
 function BuildWidelands() {
-   PREFIX_PATH="$(brew --prefix libpng)"
+   PREFIX_PATH=";$(brew --prefix gettext)"
    PREFIX_PATH+=";$(brew --prefix jpeg)"
    PREFIX_PATH+=";$(brew --prefix libpng)"
    PREFIX_PATH+=";$(brew --prefix python)"
    PREFIX_PATH+=";$(brew --prefix zlib)"
    PREFIX_PATH+=";/usr/local"
    PREFIX_PATH+=";/usr/local/Homebrew"
-
+   
+   export PATH="$(brew --prefix gettext)/bin:$PATH"
    export SDL2DIR="$(brew --prefix sdl2)"
    export SDL2IMAGEDIR="$(brew --prefix sdl2_image)"
    export SDL2MIXERDIR="$(brew --prefix sdl2_mixer)"
    export SDL2TTFDIR="$(brew --prefix sdl2_ttf)"
    export BOOST_ROOT="$(brew --prefix boost)"
-   export ICU_ROOT="$(brew --prefix icu4c)"
+   
+   # Not needed for CMake 3.12 or above
+   # see cmake --help-policy CMP0074
+   #export ICU_ROOT="$(brew --prefix icu4c)"
 
    cmake $SOURCE_DIR -G Ninja \
-      -DCMAKE_C_COMPILER:FILEPATH="$(brew --prefix ccache)/libexec/gcc-7" \
-      -DCMAKE_CXX_COMPILER:FILEPATH="$(brew --prefix ccache)/libexec/g++-7" \
+      -DCMAKE_C_COMPILER:FILEPATH="$C_COMPILER" \
+      -DCMAKE_CXX_COMPILER:FILEPATH="$CXX_COMPILER" \
       -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="$OSX_MIN_VERSION" \
       -DCMAKE_OSX_SYSROOT:PATH="$SDK_DIRECTORY" \
       -DCMAKE_INSTALL_PREFIX:PATH="$DESTINATION/Widelands.app/Contents/MacOS" \
@@ -134,7 +187,8 @@
       -DCMAKE_BUILD_TYPE:STRING="$TYPE" \
       -DGLEW_INCLUDE_DIR:PATH="$(brew --prefix glew)/include" \
       -DGLEW_LIBRARY:PATH="$(brew --prefix glew)/lib/libGLEW.dylib" \
-      -DCMAKE_PREFIX_PATH:PATH="${PREFIX_PATH}"
+      -DCMAKE_PREFIX_PATH:PATH="${PREFIX_PATH}" \
+      -DOPTION_ASAN="$USE_ASAN"
    ninja
 
    echo "Done building."


Follow ups