Initial build startup works with one-shot conda script

This commit is contained in:
Jeffrey Zampieron
2020-08-31 14:35:37 -04:00
committed by wwmayer
parent 88b0277bea
commit 97a73971e0
8 changed files with 348 additions and 95 deletions

View File

@@ -1,105 +1,50 @@
##!/usr/bin/env bash
#
# MacOS Build Script for FreeCAD using Conda.
# This is intended for developer use.
#
# Copyright (c) 2020 by Jeffrey Zampieron. All rights reserved.
#
# License: LGPLv2.1
#
# References:
# - Conda: https://conda.io/projects/conda/en/latest/user-guide/install/index.html
# - Conda Build: https://docs.conda.io/projects/conda-build/en/latest/install-conda-build.html
BUILDDIR=freecad_build
###########################################################################
# Script wide setup.
###########################################################################
# The Conda environment name
FCENV=freecad_build
# The cmake build directory
HOST=$(uname)
mkdir -p ${BUILDDIR}
pushd ${BUILDDIR}
if [[ ${FEATURE_DEBUG} = 1 ]]; then
BUILD_TYPE="Debug"
else
BUILD_TYPE="Release"
fi
declare -a CMAKE_PLATFORM_FLAGS
if [[ ${HOST} =~ "Linux" ]]; then
PREFIX=/usr/local
echo "adding hacks for linux"
# temporary workaround for vtk-cmake setup
# should be applied @vtk-feedstock
sed -i 's#/home/conda/feedstock_root/build_artifacts/vtk_.*_build_env/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib.*;##g' ${PREFIX}/lib/cmake/vtk-8.2/Modules/vtkhdf5.cmake
# temporary workaround for qt-cmake:
sed -i 's|_qt5gui_find_extra_libs(EGL.*)|_qt5gui_find_extra_libs(EGL "EGL" "" "")|g' $PREFIX/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake
sed -i 's|_qt5gui_find_extra_libs(OPENGL.*)|_qt5gui_find_extra_libs(OPENGL "GL" "" "")|g' $PREFIX/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake
CMAKE_PLATFORM_FLAGS+=(-DCMAKE_TOOLCHAIN_FILE="${RECIPE_DIR}/cross-linux.cmake")
CMAKE_PLATFORM_FLAGS+=(-DPYTHON_EXECUTABLE:FILEPATH=$PREFIX/bin/python)
fi
if [[ ${HOST} =~ "Darwin" ]]; then
# add hacks for osx here!
echo "adding hacks for osx"
PREFIX=/usr/local
#ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
# install space-mouse
#curl -o /tmp/3dFW.dmg -L 'https://download.3dconnexion.com/drivers/mac/10-6-6_360DF97D-ED08-4ccf-A55E-0BF905E58476/3DxWareMac_v10-6-6_r3234.dmg'
#hdiutil attach -readonly /tmp/3dFW.dmg
#sudo installer -package /Volumes/3Dconnexion\ Software/Install\ 3Dconnexion\ software.pkg -target /
#diskutil eject /Volumes/3Dconnexion\ Software
#CMAKE_PLATFORM_FLAGS+=(-D3DCONNEXIONCLIENT_FRAMEWORK:FILEPATH="/Library/Frameworks/3DconnexionClient.framework")
CMAKE_PLATFORM_FLAGS+=(-DFREECAD_USE_3DCONNEXION:BOOL=OFF)
CMAKE_PLATFORM_FLAGS+=(-DFREECAD_CREATE_MAC_APP:BOOL=ON)
CMAKE_PLATFORM_FLAGS+=(-DPYTHON_EXECUTABLE=/usr/local/bin/python3)
CMAKE_PLATFORM_FLAGS+=(-DHOMEBREW_PREFIX=${PREFIX})
CMAKE_PLATFORM_FLAGS+=(-DHDF5_DIR:PATH=/usr/local/opt/hdf5@1.10)
CMAKE_PLATFORM_FLAGS+=(-DQt5Core_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Core)
CMAKE_PLATFORM_FLAGS+=(-DQt5Network_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Network)
CMAKE_PLATFORM_FLAGS+=(-DQt5Xml_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Xml)
CMAKE_PLATFORM_FLAGS+=(-DQt5XmlPatterns_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5XmlPatterns)
CMAKE_PLATFORM_FLAGS+=(-DQt5Widgets_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Widgets)
CMAKE_PLATFORM_FLAGS+=(-DQt5PrintSupport_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5PrintSupport)
CMAKE_PLATFORM_FLAGS+=(-DQt5OpenGL_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5OpenGL)
CMAKE_PLATFORM_FLAGS+=(-DQt5Svg_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Svg)
CMAKE_PLATFORM_FLAGS+=(-DQt5UiTools_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5UiTools)
CMAKE_PLATFORM_FLAGS+=(-DQt5Concurrent_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5Concurrent)
CMAKE_PLATFORM_FLAGS+=(-DQt5WebEngineWidgets_DIR=/usr/local/Cellar/qt5/5.15.0/lib/cmake/Qt5WebEngineWidgets)
fi
cmake -G "Ninja" \
-D BUILD_WITH_CONDA:BOOL=ON \
-D CMAKE_BUILD_TYPE=${BUILD_TYPE} \
-D CMAKE_INSTALL_PREFIX:FILEPATH=$PREFIX \
-D CMAKE_PREFIX_PATH:FILEPATH=$PREFIX \
-D CMAKE_LIBRARY_PATH:FILEPATH=$PREFIX/lib \
-D CMAKE_INSTALL_LIBDIR:FILEPATH=$PREFIX/lib \
-D CMAKE_INCLUDE_PATH:FILEPATH=$PREFIX/include \
-D BUILD_QT5:BOOL=ON \
-D FREECAD_USE_OCC_VARIANT="Official Version" \
-D OCC_INCLUDE_DIR:FILEPATH=$PREFIX/include \
-D USE_BOOST_PYTHON:BOOL=OFF \
-D FREECAD_USE_PYBIND11:BOOL=ON \
-D BUILD_ENABLE_CXX11:BOOL=ON \
-D SMESH_INCLUDE_DIR:FILEPATH=$PREFIX/include/smesh \
-D FREECAD_USE_EXTERNAL_SMESH=ON \
-D BUILD_FLAT_MESH:BOOL=ON \
-D BUILD_FEM_NETGEN:BOOL=ON \
-D BUILD_PLOT:BOOL=OFF \
-D BUILD_SHIP:BOOL=OFF \
-D OCCT_CMAKE_FALLBACK:BOOL=OFF \
-D FREECAD_USE_QT_DIALOG:BOOL=ON \
-D BUILD_DYNAMIC_LINK_PYTHON:BOOL=OFF \
-D Boost_NO_BOOST_CMAKE:BOOL=ON \
-D FREECAD_USE_PCL:BOOL=ON \
-D INSTALL_TO_SITEPACKAGES:BOOL=ON \
${CMAKE_PLATFORM_FLAGS[@]} \
..
###########################################################################
# Conda Setup
###########################################################################
which conda
if [ $? != 0 ]; then
echo "Failed to configure with cmake."
echo "Failed to find conda executable. Please install."
exit 1
fi
echo "FREECAD_USE_3DCONNEXION=${FREECAD_USE_3DCONNEXION}"
ninja install
conda activate ${FCENV}
if [ $? != 0 ]; then
echo "Failed to compile with ninja"
exit 1
echo "Failed to activate conda env: ${FCENV} ... creating"
conda create \
--name ${FCENV} \
--channel conda-forge \
--channel defaults \
conda-build \
conda-forge-ci-setup=3 \
pip
conda activate ${FCENV}
if [ $? != 0 ]; then
echo "Failed to create conda environment and activate it."
exit 1
fi
fi
rm -r ${PREFIX}/share/doc/FreeCAD # smaller size of package!
mv ${PREFIX}/bin/FreeCAD ${PREFIX}/bin/freecad
mv ${PREFIX}/bin/FreeCADCmd ${PREFIX}/bin/freecadcmd
conda build ./conda --channel conda-forge

55
conda/bld.bat Normal file
View File

@@ -0,0 +1,55 @@
mkdir build
cd build
if "%FEATURE_DEBUG%"=="1" (
set BUILD_TYPE="Debug"
echo "#! building debug package !#") else (
set BUILD_TYPE="Release")
set "CFLAGS= "
set "CXXFLAGS= "
set "LDFLAGS_SHARED= ucrt.lib"
cmake -G "Ninja" ^
-D BUID_WITH_CONDA:BOOL=ON ^
-D CMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-D FREECAD_LIBPACK_USE:BOOL=OFF ^
-D CMAKE_INSTALL_PREFIX:FILEPATH=%LIBRARY_PREFIX% ^
-D CMAKE_PREFIX_PATH:FILEPATH=%LIBRARY_PREFIX% ^
-D CMAKE_INCLUDE_PATH:FILEPATH=%LIBRARY_PREFIX%/include ^
-D CMAKE_LIBRARY_PATH:FILEPATH=%LIBRARY_PREFIX%/lib ^
-D CMAKE_INSTALL_LIBDIR:FILEPATH=%LIBRARY_PREFIX%/lib ^
-D BUILD_QT5:BOOL=ON ^
-D NETGENDATA:FILEPATH=%LIBRARY_PREFIX%/include/netgen ^
-D NGLIB_INCLUDE_DIR:FILEPATH=%LIBRARY_PREFIX%/include/netgen ^
-D BUILD_FEM_NETGEN:BOOL=ON ^
-D OCC_INCLUDE_DIR:FILEPATH=%LIBRARY_PREFIX%/include/opencascade ^
-D OCC_LIBRARY_DIR:FILEPATH=%LIBRARY_PREFIX%/lib ^
-D OCC_LIBRARIES:FILEPATH=%LIBRARY_PREFIX%/lib ^
-D FREECAD_USE_OCC_VARIANT="Official Version" ^
-D OCC_OCAF_LIBRARIES:FILEPATH=%LIBRARY_PREFIX%/lib ^
-D BUILD_REVERSEENGINEERING:BOOL=ON ^
-D USE_BOOST_PYTHON:BOOL=OFF ^
-D FREECAD_USE_PYBIND11:BOOL=ON ^
-D SMESH_INCLUDE_DIR:FILEPATH=%LIBRARY_PREFIX%/include/smesh ^
-D FREECAD_USE_EXTERNAL_SMESH:BOOL=ON ^
-D BUILD_FLAT_MESH:BOOL=ON ^
-D BUILD_PLOT:BOOL=OFF ^
-D BUILD_SHIP:BOOL=OFF ^
-D OCCT_CMAKE_FALLBACK:BOOL=ON ^
-D PYTHON_EXECUTABLE:FILEPATH=%PREFIX%/python ^
-D BUILD_DYNAMIC_LINK_PYTHON:BOOL=ON ^
-D Boost_NO_BOOST_CMAKE:BOOL=ON ^
-D FREECAD_USE_PCH:BOOL=OFF ^
-D FREECAD_USE_PCL:BOOL=ON ^
-D INSTALL_TO_SITEPACKAGES:BOOL=ON ^
..
if errorlevel 1 exit 1
ninja install
if errorlevel 1 exit 1
rmdir /s /q "%LIBRARY_PREFIX%\doc"
ren %LIBRARY_PREFIX%\bin\FreeCAD.exe freecad.exe
ren %LIBRARY_PREFIX%\bin\FreeCADCmd.exe freecadcmd.exe

78
conda/build.sh Normal file
View File

@@ -0,0 +1,78 @@
HOST=$(uname)
mkdir -p build
cd build
if [[ ${FEATURE_DEBUG} = 1 ]]; then
BUILD_TYPE="Debug"
else
BUILD_TYPE="Release"
fi
declare -a CMAKE_PLATFORM_FLAGS
if [[ ${HOST} =~ "Linux" ]]; then
echo "adding hacks for linux"
# temporary workaround for vtk-cmake setup
# should be applied @vtk-feedstock
sed -i 's#/home/conda/feedstock_root/build_artifacts/vtk_.*_build_env/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib.*;##g' ${PREFIX}/lib/cmake/vtk-8.2/Modules/vtkhdf5.cmake
# temporary workaround for qt-cmake:
sed -i 's|_qt5gui_find_extra_libs(EGL.*)|_qt5gui_find_extra_libs(EGL "EGL" "" "")|g' $PREFIX/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake
sed -i 's|_qt5gui_find_extra_libs(OPENGL.*)|_qt5gui_find_extra_libs(OPENGL "GL" "" "")|g' $PREFIX/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake
CMAKE_PLATFORM_FLAGS+=(-DCMAKE_TOOLCHAIN_FILE="${RECIPE_DIR}/cross-linux.cmake")
fi
if [[ ${HOST} =~ "Darwin" ]]; then
# add hacks for osx here!
echo "adding hacks for osx"
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
# install space-mouse
curl -o /tmp/3dFW.dmg -L 'https://download.3dconnexion.com/drivers/mac/10-6-6_360DF97D-ED08-4ccf-A55E-0BF905E58476/3DxWareMac_v10-6-6_r3234.dmg'
hdiutil attach -readonly /tmp/3dFW.dmg
sudo installer -package /Volumes/3Dconnexion\ Software/Install\ 3Dconnexion\ software.pkg -target /
diskutil eject /Volumes/3Dconnexion\ Software
CMAKE_PLATFORM_FLAGS+=(-DFREECAD_USE_3DCONNEXION:BOOL=ON)
CMAKE_PLATFORM_FLAGS+=(-D3DCONNEXIONCLIENT_FRAMEWORK:FILEPATH="/Library/Frameworks/3DconnexionClient.framework")
fi
cmake \
-G "Ninja" \
-D BUID_WITH_CONDA:BOOL=ON \
-D CMAKE_BUILD_TYPE=${BUILD_TYPE} \
-D CMAKE_INSTALL_PREFIX:FILEPATH=$PREFIX \
-D CMAKE_PREFIX_PATH:FILEPATH=$PREFIX \
-D CMAKE_LIBRARY_PATH:FILEPATH=$PREFIX/lib \
-D CMAKE_INSTALL_LIBDIR:FILEPATH=$PREFIX/lib \
-D CMAKE_INCLUDE_PATH:FILEPATH=$PREFIX/include \
-D BUILD_QT5:BOOL=ON \
-D FREECAD_USE_OCC_VARIANT="Official Version" \
-D OCC_INCLUDE_DIR:FILEPATH=$PREFIX/include \
-D USE_BOOST_PYTHON:BOOL=OFF \
-D FREECAD_USE_PYBIND11:BOOL=ON \
-D BUILD_ENABLE_CXX11:BOOL=ON \
-D SMESH_INCLUDE_DIR:FILEPATH=$PREFIX/include/smesh \
-D FREECAD_USE_EXTERNAL_SMESH=ON \
-D BUILD_FLAT_MESH:BOOL=ON \
-D BUILD_WITH_CONDA:BOOL=ON \
-D PYTHON_EXECUTABLE:FILEPATH=$PREFIX/bin/python \
-D BUILD_FEM_NETGEN:BOOL=ON \
-D BUILD_PLOT:BOOL=OFF \
-D BUILD_SHIP:BOOL=OFF \
-D OCCT_CMAKE_FALLBACK:BOOL=OFF \
-D FREECAD_USE_QT_DIALOG:BOOL=ON \
-D BUILD_DYNAMIC_LINK_PYTHON:BOOL=OFF \
-D Boost_NO_BOOST_CMAKE:BOOL=ON \
-D FREECAD_USE_PCL:BOOL=ON \
-D INSTALL_TO_SITEPACKAGES:BOOL=ON \
${CMAKE_PLATFORM_FLAGS[@]} \
..
echo "FREECAD_USE_3DCONNEXION=${FREECAD_USE_3DCONNEXION}"
ninja install
rm -r ${PREFIX}/share/doc/FreeCAD # smaller size of package!
mv ${PREFIX}/bin/FreeCAD ${PREFIX}/bin/freecad
mv ${PREFIX}/bin/FreeCADCmd ${PREFIX}/bin/freecadcmd

View File

@@ -0,0 +1,6 @@
channel_sources:
- conda-forge,defaults
channel_targets:
- freecad dev
MACOSX_DEPLOYMENT_TARGET: # [osx]
- '10.12' # [osx]

16
conda/cross-linux.cmake Normal file
View File

@@ -0,0 +1,16 @@
# this one is important
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_PLATFORM Linux)
# specify the cross compiler
set(CMAKE_C_COMPILER $ENV{CC})
set(CMAKE_CXX_COMPILER $ENV{CXX})
# where is the target environment
set(CMAKE_FIND_ROOT_PATH $ENV{PREFIX} $ENV{BUILD_PREFIX}/$ENV{HOST}/sysroot)
# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

116
conda/meta.yaml Normal file
View File

@@ -0,0 +1,116 @@
{% set name = "freecad" %}
{% set version = "0.19.pre" %}
{% set build_number = 142 %}
{% set build_number = build_number + 500 %} # [FEATURE_DEBUG]
package:
name: {{ name }}
version: {{ version }}
source:
git_url: https://github.com/FreeCAD/FreeCAD
git_tag: master
patches:
- windows_python_interface.patch
build:
number: {{ build_number }}
skip: true # [py < 38]
requirements:
build:
- {{ compiler("cxx") }}
- {{ cdt('mesa-libgl-devel') }} # [linux]
- {{ cdt('mesa-dri-drivers') }} # [linux]
- {{ cdt('mesa-libegl-devel') }} # [linux]
- {{ cdt('libselinux') }} # [linux]
- {{ cdt('libxdamage') }} # [linux]
- {{ cdt('libxfixes') }} # [linux]
- {{ cdt('libxxf86vm') }} # [linux]
- {{ cdt('libxcb') }} # [linux]
- {{ cdt('libxext') }} # [linux]
- {{ cdt('xorg-x11-server-xvfb') }} # [linux]
- {{ cdt('libxau') }} # [linux]
- {{ cdt('libxi-devel') }} # [linux]
- cmake
- ninja
- git
host:
- boost-cpp
- python
- qt
- occt
- xerces-c
- zlib
- vtk
- swig
- eigen
- pybind11
- coin3d
- pivy
- pyside2
- smesh
- netgen 6.2.1808*
- doxygen
- hdf5
- xorg-libxt # [linux]
- freetype
- libspnav # [linux]
- pcl
- six
- ply
- tbb-devel
run:
- {{ pin_compatible("pyside2") }}
- vtk
- occt
- qt
- xerces-c
- zlib
- boost-cpp
- hdf5
- python
- coin3d
- pivy
- smesh
- netgen 6.2.1808*
- xorg-libxt # [linux]
- freetype
- numpy
- six
- pyyaml
- libspnav # [linux]
- pcl
- ply
run_constrained:
- __osx >={{ MACOSX_DEPLOYMENT_TARGET|default("10.9") }} # [osx]
#test:
# commands:
# - FreeCADCmd -t 0
about:
home: https://www.freecadweb.org/
license: LGPL2.1
license_family: LGPL
license_file: LICENSE
summary: 'FreeCAD is a parametric 3D modeler made primarily to design real-life objects of any size. '
description: |
FreeCAD is a general purpose feature-based, parametric 3D modeler for
CAD, MCAD, CAx, CAE and PLM, aimed directly at mechanical engineering
and product design but also fits a wider range of uses in engineering,
such as architecture or other engineering specialties. It is 100% Open
Source (LGPL2+ license) and extremely modular, allowing for very
advanced extension and customization.
FreeCAD is based on OpenCASCADE, a powerful geometry kernel, features an
Open Inventor-compliant 3D scene representation model provided by the
Coin 3D library, and a broad Python API. The interface is built with Qt.
FreeCAD runs exactly the same way on Windows, Mac OSX, BSD and Linux
platforms.
doc_url: https://www.freecadweb.org/wiki/Main_Page
dev_url: https://github.com/FreeCAD/FreeCAD
extra:
recipe-maintainers:
- looooo

View File

@@ -0,0 +1,31 @@
diff --git a/src/Ext/freecad/CMakeLists.txt b/src/Ext/freecad/CMakeLists.txt
index e03b5527e..d9004275b 100644
--- a/src/Ext/freecad/CMakeLists.txt
+++ b/src/Ext/freecad/CMakeLists.txt
@@ -5,7 +5,9 @@ SET(PYTHON_MAIN_DIR ${python_libs})
set(NAMESPACE_INIT "${CMAKE_BINARY_DIR}/Ext/freecad/__init__.py")
if (WIN32)
- set(FREECAD_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
+ get_filename_component(FREECAD_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}"
+ REALPATH BASE_DIR "${CMAKE_INSTALL_PREFIX}")
+ set( ${CMAKE_INSTALL_BINDIR})
else()
set(FREECAD_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
endif()
diff --git a/src/Ext/freecad/__init__.py.template b/src/Ext/freecad/__init__.py.template
index 68ca151a5..d5360b252 100644
--- a/src/Ext/freecad/__init__.py.template
+++ b/src/Ext/freecad/__init__.py.template
@@ -12,9 +12,9 @@ except ModuleNotFoundError:
except KeyError:
# 2. we use the default freecad defined for this package
- _path_to_freecad_libdir = "${CMAKE_INSTALL_LIBDIR}"
+ _path_to_freecad_libdir = "${FREECAD_LIBRARY_INSTALL_DIR}"
print("PATH_TO_FREECAD_LIBDIR not specified, using default \
-FreeCAD version in {}".format( "${FREECAD_LIBRARY_INSTALL_DIR}"))
+FreeCAD version in {}".format("${FREECAD_LIBRARY_INSTALL_DIR}"))
_sys.path.append(_path_to_freecad_libdir) # this is the default version
import FreeCAD as app

View File

@@ -0,0 +1,6 @@
mesa-libGL
mesa-dri-drivers
libselinux
libXdamage
libXxf86vm
libXext-devel