Pour compiler FreeCAD avec une version spécifique d’OpenCASCADE (OCCT), assurez-vous d’abord que vous pouvez compiler FreeCAD en utilisant la version standard d’OCCT sur votre système. Ensuite, procédez comme suit :
Dans la suite, je partirai du principe que vous disposez d'une installation Linux, mais la procédure est très similaire pour une installation sous Windows ou macOS.
Dans la suite de cette page, nous partons du principe que le code source d'OCCT est stocké dans /home/user/occt-main. Dans ces conditions, exécutez la commande suivante.
git clone https://github.com/Open-Cascade-SAS/OCCT.git /home/user/occt-main
Le code source d'OCCT se trouve dans la branche principale. À partir de là, vous pouvez facilement créer plusieurs arborescences de travail.
Pour compiler OCCT, il est utile de définir un répertoire de compilation et un répertoire d'installation, par exemple :
| répertoire source | /home/user/occt-main
|
| répertoire de compilation | /scratch/build-occt-main
|
| répertoire d'installation | /scratch/dist-occt-main
|
Une fois que nous avons déterminé cela, nous pouvons créer un fichier CMakeUserPresets.json à la racine du répertoire source (notez que nous devons préciser explicitement le répertoire d'installation) :
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 19,
"patch": 0
},
"configurePresets": [
{
"name": "debug",
"description": "Preset for a debug build",
"generator": "Ninja",
"cacheVariables": {
"INSTALL_DIR": "/scratch/dist-occt-main",
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"USE_RAPIDJSON": "ON"
}
}
]
}
Maintenant que nous avons configuré OCCT, nous pouvons exécuter les commandes suivantes pour le compiler :
mkdir /scratch/build-occt-main
cd /scratch/build-occt-main
cmake --preset debug /home/user/occt-main
En général, je me contente de compiler avec (en supposant que je sois toujours dans le répertoire de compilation) :
ninja
Pour créer une distribution et l'installer dans le répertoire d'installation, il suffit d'exécuter la commande suivante, en partant du principe que nous sommes toujours dans le répertoire de compilation :
ninja install
Nous n'avons pas réussi à installer OCCT de manière à ce que FreeCAD puisse s'y connecter.
Il peut être utile de créer un répertoire de travail ou un dépôt Git correspondant à la distribution OCCT que vous utilisez ; supposons donc que nous disposions d'un répertoire de travail ou d'un dépôt Git contenant le code source et le répertoire de compilation de FreeCAD, comme suit :
| répertoire source | /home/user/freecad-occt-main
|
| répertoire de compilation | /scratch/build-freecad-occt-main
|
Notez qu'il n'est pas nécessaire d'avoir un répertoire d'installation, car nous pouvons lancer FreeCAD directement depuis le répertoire de compilation.
À partir de ces informations, nous pouvons créer un fichier CMakeUserPresets.json que nous enregistrerons dans le code source de FreeCAD :
{
"version": 4,
"configurePresets": [
{
"name": "occt",
"displayName": "Debug build with custom OCCT",
"description": "User-specific debug build with custom OCCT.",
"inherits": [
"common"
],
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"FREECAD_USE_OCC_VARIANT": "Official Version",
"CMAKE_PREFIX_PATH": "/scratch/dist-occt-main",
"FREECAD_USE_PCL": "OFF",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"FREECAD_QT_VERSION": "6",
"BUILD_FEM": "OFF",
"BUILD_OPENSCAD": "OFF",
"BUILD_REVERSEENGINEERING": "OFF",
"BUILD_ROBOT": "OFF",
"BUILD_POINTS": "OFF",
"BUILD_SMESH": "OFF",
"BUILD_WEB": "OFF",
"BUILD_SURFACE": "ON",
"BUILD_INSPECTION": "OFF"
}
}
]
}
Notez que nous avons indiqué le répertoire d'installation d'OCCT. Certains modules ont également été désactivés afin de réduire le temps de compilation.
La configuration de FreeCAD se résume à :
mkdir /scratch/build-freecad-occt-main
cd /scratch/build-freecad-occt-main
cmake --preset occt /home/user/freecad-occt-main
Faites attention au rapport concernant OCCT. Il aurait dû détecter OCCT dans /scratch/dist-occt-main.
Si tout cela est correct, nous pouvons compiler FreeCAD.
En supposant que nous soyons toujours dans le répertoire de compilation, nous pouvons procéder comme suit :
ninja
Si vous lancez FreeCAD depuis ce répertoire et que vous vérifiez les informations et les bibliothèques, FreeCAD devrait afficher la version d'OCCT correspondant à votre commit spécifique dans le code source d'OCCT.
Si vous souhaitez déboguer FreeCAD et OCCT simultanément, votre environnement de développement devra prendre en charge les commandes de compilation de FreeCAD et d'OCCT.
Comme vous souhaitez sans doute ouvrir les fichiers du répertoire du code source de FreeCAD /home/user/freecad-occt-main, vous pouvez créer un fichier /home/user/freecad-occt-main/compile_commands.json contenant les commandes de compilation des deux versions.
Le script ci-dessous peut être exécuté comme suit :
cd /home/user/freecad-occt-main
merge-compile-commands \
/scratch/build-occt-main/compile_commands.json \
/scratch/build-freecad-occt-main/compile_commands.json
Le script merge-compile-commands doit être accessible et exécutable :
#!/bin/env python
import json
import os
import sys
def load(path):
with open(path, "r") as f:
return json.load(f)
def merge(files):
merged = []
for p in files:
merged += load(p)
return merged
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: merge-compile-commands /build1/compile_commands.json /build2/compile_commands.json")
print(" Do this in the source tree from where you open files.")
sys.exit(1)
in_paths = sys.argv[1:]
OUT_PATH = "compile_commands.json"
if os.path.exists(OUT_PATH):
os.remove(OUT_PATH)
merged = merge(in_paths)
with open(OUT_PATH, "w") as f:
json.dump(merged, f, indent=2)
print(f"Wrote {len(merged)} entries to {OUT_PATH}")