Files
Web_FreeCAD_Bitbybit/scripts/configure-freecad-native.mjs

30 lines
1.7 KiB
JavaScript

import { execFileSync } from 'node:child_process'
import { readFile } from 'node:fs/promises'
import { resolve } from 'node:path'
const root = resolve(new URL('..', import.meta.url).pathname)
const toolchain = JSON.parse(await readFile(new URL('../config/freecad-toolchain.json', import.meta.url), 'utf8'))
const source = resolve(root, toolchain.sourceCheckout.defaultDirectory)
const build = resolve(root, '.cache/freecad/build-native')
const install = resolve(root, '.cache/freecad/install-native')
const bootstrap = resolve(root, 'config/freecad-native-bootstrap.cmake')
const revision = execFileSync('git', ['-C', source, 'rev-parse', 'HEAD'], { encoding: 'utf8' }).trim()
if (revision !== toolchain.source.commit) throw new Error(`FreeCAD source must be checked out at ${toolchain.source.commit}; received ${revision}.`)
const disabledModules = ['ADDONMGR', 'ASSEMBLY', 'BIM', 'CAM', 'DRAFT', 'FEM', 'FLAT_MESH', 'HELP', 'IDF', 'IMPORT', 'INSPECTION', 'MATERIAL_EXTERNAL', 'MESH', 'MESH_PART', 'OPENSCAD', 'PART_DESIGN', 'PLOT', 'POINTS', 'REVERSEENGINEERING', 'ROBOT', 'SHOW', 'SKETCHER', 'SPREADSHEET', 'START', 'SURFACE', 'TECHDRAW', 'TEST', 'TUX', 'WEB']
const definitions = [
`-DCMAKE_BUILD_TYPE=Release`,
`-DCMAKE_INSTALL_PREFIX=${install}`,
`-DCMAKE_PROJECT_INCLUDE=${bootstrap}`,
'-DBUILD_GUI=OFF',
'-DBUILD_PART=ON',
'-DENABLE_DEVELOPER_TESTS=OFF',
'-DFREECAD_USE_FREETYPE=OFF',
'-DFREECAD_USE_EXTERNAL_FMT=ON',
'-DFREECAD_USE_PCH=OFF',
'-DINSTALL_TO_SITEPACKAGES=OFF',
...disabledModules.map((module) => `-DBUILD_${module}=OFF`),
]
execFileSync('cmake', ['-S', source, '-B', build, '-G', 'Ninja', '-U', 'CMAKE_PROJECT_TOP_LEVEL_INCLUDES', ...definitions], { cwd: root, stdio: 'inherit' })
console.log(`FreeCAD native build configured: ${build}`)