]> OCCT Git - occt.git/commitdiff
0032739: Configuration, scripts - handle ABI list within macOS building script adm... IR-2021-12-17
authorkgv <kgv@opencascade.com>
Fri, 17 Dec 2021 06:53:46 +0000 (09:53 +0300)
committersmoskvin <smoskvin@opencascade.com>
Fri, 17 Dec 2021 14:51:40 +0000 (17:51 +0300)
adm/scripts/macos_build.sh
adm/scripts/macos_custom.sh.template

index e5fbe96c7ff4d93b7532d5a15e46a32734654dbf..b44fb1bec549635d00a3aa75d5596856d58505b9 100755 (executable)
@@ -20,11 +20,13 @@ export aRapidJson=
 export aDraco=
 
 # build stages to perform
+export isStatic=0
 export toCMake=1
 export toClean=1
 export toMake=1
 export toInstall=1
 export toPack=0
+export toPackFat=0
 export toDebug=0
 
 export BUILD_ModelingData=ON
@@ -34,72 +36,92 @@ export BUILD_ApplicationFramework=ON
 export BUILD_DataExchange=ON
 export BUILD_Draw=ON
 
+export USE_FREETYPE=ON
 export USE_FREEIMAGE=ON
 export USE_RAPIDJSON=OFF
 export USE_DRACO=OFF
 
 export MACOSX_DEPLOYMENT_TARGET=10.10
-#export anAbi=arm64
-export anAbi=x86_64
+#export anAbiList="arm64 x86_64"
+export anAbiList="x86_64"
+aPlatform="macos"
 
 if [[ -f "${aScriptDir}/macos_custom.sh" ]]; then
   source "${aScriptDir}/macos_custom.sh"
 fi
 
+anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
+anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
+aGitBranch=`git symbolic-ref --short HEAD`
+
+YEAR=$(date +"%Y")
+MONTH=$(date +"%m")
+DAY=$(date +"%d")
+aRevision=-${YEAR}-${MONTH}-${DAY}
+#aRevision=-${aGitBranch}
+
+set -o pipefail
+
 aBuildType="Release"
 aBuildTypePrefix=
 if [[ $toDebug == 1 ]]; then
   aBuildType="Debug"
   aBuildTypePrefix="-debug"
 fi
-aPlatformAndCompiler=mac-${anAbi}${aBuildTypePrefix}-clang
+aLibType="Shared"
+aLibExt="dylib"
+if [[ $isStatic == 1 ]]; then
+  aLibType="Static"
+  aLibExt="a"
+fi
 
-aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
-aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
-aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
+function buildArch {
+  anAbi=$1
 
-if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
-  rm -r -f "$aWorkDir"
-  rm -r -f "$aDestDir"
-fi
-mkdir -p "$aWorkDir"
-mkdir -p "$aDestDir"
-rm -f "$aLogFile"
+  aPlatformAndCompiler=${aPlatform}-${anAbi}${aBuildTypePrefix}-clang
 
-anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
-anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
-aGitBranch=`git symbolic-ref --short HEAD`
+  aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
+  aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
+  aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
 
-# include some information about OCCT into archive
-echo \<pre\>> "${aWorkDir}/VERSION.html"
-git status >> "${aWorkDir}/VERSION.html"
-git log -n 100 >> "${aWorkDir}/VERSION.html"
-echo \</pre\>>> "${aWorkDir}/VERSION.html"
+  if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
+    rm -r -f "$aWorkDir"
+    rm -r -f "$aDestDir"
+  fi
+  mkdir -p "$aWorkDir"
+  mkdir -p "$aDestDir"
+  rm -f "$aLogFile"
 
-pushd "$aWorkDir"
+  # include some information about OCCT into archive
+  echo \<pre\>> "${aWorkDir}/VERSION.html"
+  git status >> "${aWorkDir}/VERSION.html"
+  git log -n 100 >> "${aWorkDir}/VERSION.html"
+  echo \</pre\>>> "${aWorkDir}/VERSION.html"
 
-aTimeZERO=$SECONDS
-set -o pipefail
+  pushd "$aWorkDir"
 
-function logDuration {
-  if [[ $1 == 1 ]]; then
-    aDur=$(($4 - $3))
-    echo $2 time: $aDur sec>> "$aLogFile"
-  fi
-}
+  aTimeZERO=$SECONDS
 
-# (re)generate Make files
-if [[ $toCMake == 1 ]]; then
-  echo Configuring OCCT for macOS...
-  cmake -G "Unix Makefiles" \
-  -D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
-  -D BUILD_LIBRARY_TYPE:STRING="Shared" \
+  function logDuration {
+    if [[ $1 == 1 ]]; then
+      aDur=$(($4 - $3))
+      echo $2 time: $aDur sec>> "$aLogFile"
+    fi
+  }
+
+  # (re)generate Make files
+  if [[ $toCMake == 1 ]]; then
+    echo Configuring OCCT for macOS...
+    cmake -G "Unix Makefiles" \
   -D CMAKE_OSX_ARCHITECTURES:STRING="$anAbi" \
+  -D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
+  -D BUILD_LIBRARY_TYPE:STRING="$aLibType" \
   -D INSTALL_DIR:PATH="$aDestDir" \
   -D INSTALL_DIR_INCLUDE:STRING="inc" \
   -D INSTALL_DIR_LIB:STRING="lib" \
   -D INSTALL_DIR_RESOURCE:STRING="src" \
   -D INSTALL_NAME_DIR:STRING="@executable_path/../Frameworks" \
+  -D USE_FREETYPE:BOOL="$USE_FREETYPE" \
   -D 3RDPARTY_FREETYPE_DIR:PATH="$aFreeType" \
   -D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="$aFreeType/include" \
   -D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="$aFreeType/include" \
@@ -125,57 +147,122 @@ if [[ $toCMake == 1 ]]; then
   -D BUILD_MODULE_DataExchange:BOOL="${BUILD_DataExchange}" \
   -D BUILD_MODULE_Draw:BOOL="${BUILD_Draw}" \
   -D BUILD_DOC_Overview:BOOL="OFF" \
-  "$aCasSrc" 2>&1 | tee -a "$aLogFile"
-  aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
-fi
-aTimeGEN=$SECONDS
-logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
+    "$aCasSrc" 2>&1 | tee -a "$aLogFile"
+    aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
+  fi
+  aTimeGEN=$SECONDS
+  logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
 
-# clean up from previous build
-if [[ $toClean == 1 ]]; then
-  make clean
-fi
+  # clean up from previous build
+  if [[ $toClean == 1 ]]; then
+    make clean
+  fi
+
+  # build the project
+  if [[ $toMake == 1 ]]; then
+    echo Building OCCT...
+    make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
+    aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
+  fi
+  aTimeBUILD=$SECONDS
+  logDuration $toMake "Building"       $aTimeGEN  $aTimeBUILD
+  logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
+
+  # install the project
+  if [[ $toInstall == 1 ]]; then
+    echo Installing OCCT into $aDestDir...
+    make install 2>&1 | tee -a "$aLogFile"
+    cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
+    echo Platform: macOS ABI: ${anAbi} Build: ${aBuildType} MACOSX_DEPLOYMENT_TARGET: ${MACOSX_DEPLOYMENT_TARGET} > "$aDestDir/build_target.txt"
+  fi
+  aTimeINSTALL=$SECONDS
+  logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
+
+  # create an archive
+  if [[ $toPack == 1 ]]; then
+    anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
+    echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
+    rm ${aDestDir}/../${anArchName} &>/dev/null
+    pushd "$aDestDir"
+    tar -jcf ${aDestDir}/../${anArchName} *
+    popd
+  fi
+  aTimePACK=$SECONDS
+  logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
+
+  # finished
+  DURATION=$(($aTimePACK - $aTimeZERO))
+  echo Total time: $DURATION sec
+  logDuration 1 "Total" $aTimeZERO $aTimePACK
 
-# build the project
-if [[ $toMake == 1 ]]; then
-  echo Building OCCT...
-  make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
-  aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
-fi
-aTimeBUILD=$SECONDS
-logDuration $toMake "Building"       $aTimeGEN  $aTimeBUILD
-logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
-
-# install the project
-if [[ $toInstall == 1 ]]; then
-  echo Installing OCCT into $aDestDir...
-  make install 2>&1 | tee -a "$aLogFile"
-  cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
-fi
-aTimeINSTALL=$SECONDS
-logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
-
-# create an archive
-if [[ $toPack == 1 ]]; then
-  YEAR=$(date +"%Y")
-  MONTH=$(date +"%m")
-  DAY=$(date +"%d")
-  aRevision=-${YEAR}-${MONTH}-${DAY}
-  #aRevision=-${aGitBranch}
-
-  anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
-  echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
-  rm ${aDestDir}/../${anArchName} &>/dev/null
-  pushd "$aDestDir"
-  tar -jcf ${aDestDir}/../${anArchName} *
   popd
-fi
-aTimePACK=$SECONDS
-logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
+}
+
+for anArchIter in $anAbiList
+do
+  echo Platform: macOS ABI: ${anArchIter} Build: ${aBuildType}
+  buildArch $anArchIter
+done
+
+# create a FAT archive
+if [[ $toPackFat == 1 ]]; then
+  aSuffixFat=${aPlatform}${aBuildTypePrefix}-clang
+  aFatDir="${aCasSrc}/${aBuildRoot}/${aSuffixFat}"
+
+  # merge per-arch builds into fat builds
+  hasPlatform=0
+  for anArchIter in $anAbiList
+  do
+    aSuffixThin=${aPlatform}-${anArchIter}${aBuildTypePrefix}-clang
+    anArchDir="${aCasSrc}/${aBuildRoot}/${aSuffixThin}"
+    if [[ $hasPlatform == 0 ]]; then
+      hasPlatform=1
+      echo Packing FAT archive
+      rm -r -f "$aFatDir"
+      mkdir -p "$aFatDir"
+      if [[ $isStatic == 1 ]]; then
+        rsync -r -l --exclude '*.a' "$anArchDir/" "$aFatDir"
+      else
+        rsync -r -l --exclude '*.dylib' "$anArchDir/" "$aFatDir"
+      fi
+      rm -f "$aFatDir/build_target.txt"
 
-# finished
-DURATION=$(($aTimePACK - $aTimeZERO))
-echo Total time: $DURATION sec
-logDuration 1 "Total" $aTimeZERO $aTimePACK
+      if [[ -L "$anArchDir/bin/DRAWEXE" ]]; then
+        aDrawExe=$(readlink "$anArchDir/bin/DRAWEXE")
+        rm $aFatDir/bin/$aDrawExe
+        lipo "$anArchDir/bin/$aDrawExe" -output "$aFatDir/bin/$aDrawExe" -create
+      fi
 
-popd
+      for aLibIter in $anArchDir/lib/*.$aLibExt; do
+        aLibName=`basename $aLibIter`
+        if [[ -L "$anArchDir/lib/$aLibName" ]]; then
+          cp -a "$anArchDir/lib/$aLibName" "$aFatDir/lib/"
+        else
+          lipo "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
+        fi
+      done
+    else
+      if [[ -L "$anArchDir/bin/DRAWEXE" ]]; then
+        aDrawExe=$(readlink "$anArchDir/bin/DRAWEXE")
+        lipo "$aFatDir/bin/$aDrawExe" "$anArchDir/bin/$aDrawExe" -output "$aFatDir/bin/$aDrawExe" -create
+      fi
+
+      for aLibIter in $aFatDir/lib/*.$aLibExt; do
+        aLibName=`basename $aLibIter`
+        if [[ ! -L "$anArchDir/lib/$aLibName" ]]; then
+          lipo "$aFatDir/lib/$aLibName" "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
+          #lipo -info "$aFatDir/lib/$aLibName"
+        fi
+      done
+    fi
+    cat "$anArchDir/build_target.txt" >> "$aFatDir/build_target.txt"
+  done
+
+  # create an archive
+  anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aSuffixFat}.tar.bz2
+  echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
+  rm ${aFatDir}/../${anArchName} &>/dev/null
+  pushd "$aFatDir"
+  tar -jcf ${aFatDir}/../${anArchName} *
+  popd
+fi
index c56a72fa0643d19d13569d5661080c8a61da73e2..740c24f640fbefd550e8a115cb4a8e3bcdbee2a5 100644 (file)
@@ -12,6 +12,7 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
 #export toMake=1
 #export toInstall=1
 #export toPack=1
+#export toPackFat=1
 
 #export BUILD_ModelingData=ON
 #export BUILD_ModelingAlgorithms=ON
@@ -25,5 +26,6 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
 #export USE_FREEIMAGE=ON
 
 #export MACOSX_DEPLOYMENT_TARGET=10.10
-#export anAbi=arm64
-#export anAbi=x86_64
+#export anAbiList=arm64
+#export anAbiList=x86_64
+#export anAbiList="arm64 x86_64"