widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #14222
[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