diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7a398f5c552f3b4a7b728a25a062b7c414228e8c..753eb533ad2d6e44841fd9079a8ec05693443d2d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,76 +5,136 @@ stages: variables: GIT_DEPTH: "1" -native_Debian_clang: - tags: &native +.linux_build: &linux_build + stage: build + artifacts: + paths: + - build/installer/BornAgain*.sh + - build/py/wheel/manylinux/*.whl + expire_in: 3 days + +native_Debian: + tags: - Debian - before_script: &debian_clang + <<: *linux_build + before_script: &native_before - pwd - export CC=gcc; export CXX=g++ - - export PYTHONPATH=$CI_PROJECT_DIR/build/lib + - export CHECK_FLAGS="-DZERO_TOLERANCE=ON -DDEVELOPER_CHECKS=ON" - export MPLBACKEND=Agg + # avoid using the default Debian Qt framework - QTCMAKE="/usr/local/Qt6/6.2.3/gcc_64/lib/cmake" - - PYPLAT="/home/build/.pyenv/versions/3.11.6/" - cmake --version - - clang --version - stage: build script: &native_scr - env - mkdir build - cd build - - time cmake .. -GNinja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBA_PY_PACKAGE=ON -DCMAKE_PREFIX_PATH="$PYPLAT;$QTCMAKE" -DZERO_TOLERANCE=ON -DDEVELOPER_CHECKS=ON - - time ninja - - time xvfb-run -a ctest -j16 --output-on-failure - - time ninja package_source + # NOTE: CMake's Ninja generator should not be used with CMake < 3.26 due to internal bugs. + - time cmake .. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_PREFIX_PATH="$QTCMAKE" $CHECK_FLAGS + - time make -j16 + - time ctest -j16 --output-on-failure + - time make package_source - time bash var/mk_pypack_linux.sh - - time cpack -B ./installer . - artifacts: - paths: - - build/installer/BornAgain*.sh - - build/PythonPackage/py*/wheel/manylinux/*.whl - expire_in: 10 days + - time cpack -V -B ./installer + +.compile_dependency: &compile_dependency + - mkdir build + - cd build + - cmake .. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + - make -j4 + - ctest + - make install + +.debian_oldstable_py311: &debian_oldstable + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" + tags: + - LinuxDocker + <<: *linux_build + image: scg-debian-oldstable:latest + script: &docker_build + - export CHECK_FLAGS="" + - ORIGINAL_DIR=$(pwd) + - export CC=gcc; export CXX=g++ + - export MPLBACKEND=Agg + - ldd --version + - cmake --version + - eval "$(pyenv init -)" + - python --version + - cd /libheinz + - *compile_dependency + - cd /libcerf + - *compile_dependency + - cd /libformfactor + - *compile_dependency + - cd $ORIGINAL_DIR + - *native_scr + +debian_oldstable_py311: + <<: *debian_oldstable + before_script: + - pyenv global 3.11 + +debian_oldstable_py310: + <<: *debian_oldstable + before_script: + - pyenv global 3.10 + +debian_oldstable_py39: + <<: *debian_oldstable + before_script: + - pyenv global 3.9 + +debian_oldstable_py38: + <<: *debian_oldstable + before_script: + - pyenv global 3.8 versiondocs: rules: - if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH' tags: - www - before_script: *debian_clang + before_script: *native_before stage: build script: - hugo version - mkdir build - cd build - - time cmake .. -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_PREFIX_PATH=$QTCMAKE -DBATCH_MODE=ON - - time make -j8 - - time make -j8 webdoc + - time cmake .. -GNinja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBA_GUI=OFF + - time ninja -j8 + - time ninja -j8 webdoc - rm -rf ~www/ba/git-main/hugo-public - cp -r ../hugo/public ~www/ba/git-main/hugo-public mac_x64: tags: - - mac_x64 + - mac_x64_cloud stage: build before_script: - # obtain nr of logical CPUs via `sysctl hw.logicalcpu` - - NPROC=6 - - QTDIR=/usr/local/opt/qt - - PYPLAT="/Users/scguser/.pyenv/versions/3.11.5/" + - NPROC=12 # number of logical CPUs obtained from `sysctl hw.logicalcpu` + - BREWDIR="/opt/homebrew-x86" + - QTDIR="$BREWDIR/Cellar/qt/6.6.0" + - PYPLAT="/Users/qtisas/.pyenv/versions/3.11.6/" + - PATH="$BREWDIR:$PATH" script: &mac_script - - OPTDIR="/Users/Shared/Software" - # print environmental variables + - OPTDIR="/Users/Shared/Software/scg" + - CCACHE="$BREWDIR/bin/ccache" - env - mkdir build - cd build - - cmake .. -DCMAKE_PREFIX_PATH="$PYPLAT;$OPTDIR;$QTDIR/lib/cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBA_APPLE_BUNDLE=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=11 -DCMAKE_INSTALL_PREFIX=/tmp/ba -DBA_PY_PACKAGE=ON + - > + cmake .. -DCMAKE_PREFIX_PATH="$OPTDIR;$QTDIR/lib/cmake;$BREWDIR" -DCMAKE_BUILD_TYPE=Release + -DPython3_ROOT_DIR="$PYPLAT" -DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" -DBA_APPLE_BUNDLE=ON + -DCMAKE_OSX_DEPLOYMENT_TARGET=11 -DCMAKE_INSTALL_PREFIX=/tmp/ba -DZERO_TOLERANCE=ON - make -j$NPROC - ctest -j3 --output-on-failure - python3 var/mac_py_package.py - - cpack -B ./installer . + - cpack -V -B ./installer artifacts: &mac_artifacts paths: - build/installer/*.dmg - - build/PythonPackage/py*/wheel/*.whl + - build/py/wheel/*.whl expire_in: 10 days mac_arm: @@ -82,10 +142,10 @@ mac_arm: - mac_arm stage: build before_script: - - QTDIR="/opt/homebrew/opt/qt" - - PYPLAT="/Users/scguser/.pyenv/versions/3.11.5/" - # obtain nr of logical CPUs via `sysctl hw.logicalcpu` - - NPROC=14 + - NPROC=14 # number of logical CPUs obtained from `sysctl hw.logicalcpu` + - BREWDIR="/opt/homebrew" + - QTDIR="$BREWDIR/opt/qt" + - PYPLAT="/Users/qtisas/.pyenv/versions/3.11.6/" script: *mac_script artifacts: *mac_artifacts @@ -102,23 +162,28 @@ windows: # paths: # - build/ script: - # add x64 MSVC variables to the environment - - . ./devtools/deploy/windows/setx64vcvars.ps1 - $OPT_DIR = "C:/opt/x64" - $BOOST_DIR = "$OPT_DIR/boost_current" - - $BOOST_INCLUDE_DIR = "$BOOST_DIR/include" - - $BOOST_LIB_DIR = "$BOOST_DIR/lib" - $QT_MSVC_DIR = "C:/Qt/6.2.4/msvc2019_64" - $QTCMake_DIR = "$QT_MSVC_DIR/lib/cmake" - $PY_PLATFORM_DIR = "C:/Users/admin/.pyenv/pyenv-win/versions/3.11.5/" - $BUILD_DIR = "build" - # change the system PATH temporarily (needed for tests) - - $env:PYTHONPATH += "$CI_PROJECT_DIR/build/lib" - - $env:PATH = "$QT_MSVC_DIR/bin;$env:PATH" # list powershell properties - echo "# Path '<$Env:Path>'" - echo "# PythonPath '<$Env:PYTHONPATH>'" - echo "# Powershell <$PSHOME>`n PS Profile <$PROFILE>`n PS Command-Path <$PSCOMMANDPATH>" + # Visual Studio path <https://github.com/microsoft/vswhere/wiki/Find-VC> + - > + $vsPath = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + -latest -products * + -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationpath + - echo "Microsoft Visual Studio path = '$vsPath'" + - > + Import-Module + (Get-ChildItem $vsPath -Recurse -File -Filter Microsoft.VisualStudio.DevShell.dll).FullName + - Enter-VsDevShell -VsInstallPath $vsPath -SkipAutomaticLocation -DevCmdArguments '-arch=x64' + - Set-Item -Path "env:CC" -Value "cl.exe" + - Set-Item -Path "env:CXX" -Value "cl.exe" # list all environmental variables - 'dir Env:' # make the CMake build directory @@ -129,14 +194,25 @@ windows: - pwd # configure, make, test, pack - cmake --version - - cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$PY_PLATFORM_DIR;$OPT_DIR;$QTCMake_DIR" -DCMAKE_INCLUDE_PATH="$BOOST_INCLUDE_DIR" -DCMAKE_LIBRARY_PATH="$BOOST_LIB_DIR" -DBA_PY_PACKAGE=ON -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" -B. .. + - > + cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release + -DCMAKE_PREFIX_PATH="$OPT_DIR;$QTCMake_DIR;$BOOST_DIR" + -DPython3_ROOT_DIR="$PY_PLATFORM_DIR" + -DCPACK_IFW_ROOT="C:/Qt/Tools/QtInstallerFramework/4.5" + -DCMAKE_C_COMPILER_LAUNCHER="buildcache.exe" + -DCMAKE_CXX_COMPILER_LAUNCHER="buildcache.exe" - pwd - - if($CI_PIPELINE_SOURCE -eq "schedule") { cmake --build . --target clean; echo "redundant target purge done" } + - > + if($CI_PIPELINE_SOURCE -eq "schedule") + { cmake --build . --target clean; echo "redundant target purge done" } - cmake --build . -j20 --config Release - - ctest -C Release --parallel 20 --output-on-failure - - cpack -C Release -B ./installer . + - > + $env:PYTHONPATH += "$CI_PROJECT_DIR/build/lib"; + $env:PATH = "$QT_MSVC_DIR/bin;$env:PATH"; + ctest -C Release --parallel 20 --output-on-failure + - cpack -V -C Release -B ./installer artifacts: paths: - build/installer/BornAgain*.exe - - build/PythonPackage/py*/wheel/*.whl - expire_in: 10 days + - build/py/wheel/*.whl + expire_in: 10 days \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bfa4207ae94b1e62dcd6124d8d41dcdf0bc6a4a..4f4ef5f835a25aabb0a8e7d92cc220717c908fad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ option(BA_DEBUG_OPTIMIZATION "Build with debug optimization (gcc only)" OFF) option(BA_TIDY "Invokes clang-tidy" OFF) option(BATCH_MODE "Suppress some output" OFF) option(ALGORITHM_DIAGNOSTIC "Let some algorithms set diagnostic variables" OFF) -option(BA_PY_PACKAGE "Build a Python wheel with the default Python platform, or a given Python platform (via BA_PY_PLATFORM)" OFF) +option(BA_PY_PACKAGE "Build a Python wheel with the default Python platform, or a given Python platform (via BA_PY_PLATFORM)" ON) option(BUILD_DEBIAN "Build a debian package" OFF) option(BA_APPLE_BUNDLE "Create a MacOS bundle" OFF) option(BA_CPP_API "Install header files" OFF) diff --git a/Fit/3rdparty/RootMinimizers/CMakeLists.txt b/Fit/3rdparty/RootMinimizers/CMakeLists.txt index fe9cc6da422e761c58d1719a1cf1e78756e321c5..dd70e5bdd62abe80130cee536c7d0ba806244939 100644 --- a/Fit/3rdparty/RootMinimizers/CMakeLists.txt +++ b/Fit/3rdparty/RootMinimizers/CMakeLists.txt @@ -25,8 +25,8 @@ if(NOT WIN32) endif() string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-const-variable") elseif(GCC) - string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-but-set-variable") endif() + string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-but-set-variable") else() string(APPEND CMAKE_CXX_FLAGS " /wd4244 /wd4267 /wd5033") endif()