201 Commits
Author SHA1 Message Date
Clifford Yapp 5a37441843 Make ASan schema generation build-safe
Disable leak detection only while the instrumented exp2cxx build tool
generates schema sources.  LeakSanitizer cannot run under common tracers
and sandboxes, which otherwise makes an ASan build fail before its tests
can start.
2026-08-03 07:02:40 -04:00
Clifford Yapp 5b0085612f Add structural metadata profile for API v2
Keep full descriptor metadata as the default and add an opt-in
structural profile for conversion-oriented late-bound API v2 users.
Strip descriptive and constraint text while retaining the complete
runtime descriptor graph.  Pass the profile through CMake and correct
the scanner's compact late-bound file lists.

AP242e4 full-to-structural measurements:

Generated output falls from 54,839 lines and 3,304,007 bytes to
29,993 lines and 1,525,897 bytes.  The packed schema source shrinks
68.1%.  The schema DSO falls from 2,178,296 to 720,120 bytes, and peak
compile RSS drops 6.8%.  File count and 49 ELF relocations are
unchanged.

The NIST AP242e4 sample still creates and validates all 10,609
instances with no errors or warnings and writes the same 949,685-byte
semantic result.  Twenty read/write runs improve from 4.76 to 4.71
seconds and peak RSS falls from 82,276 to 78,900 KiB.
2026-08-02 07:27:08 -04:00
Clifford Yapp 05c6adb716 Complete compact schema modules for API v2
Add stable entity, type, and attribute IDs through SchemaModule.  Make
late-bound compatibility names opt-in, table-drive rules and complex
metadata, and emit entity metadata directly into bounded chunks.

AP242e4 late-bound output changed as follows:

* generated files: 5,719 to 905 (-84.2%)
* generated lines: 254,220 to 123,552 (-51.4%)
* generated bytes: 13,942,523 to 9,804,680 (-29.7%)
* generation wall time: 2.74s to 0.56s (-79.6%)
* compile/link wall time: 157.68s to 37.02s (-76.5%)
* compile/link peak RSS: 593,320 KiB to 199,156 KiB (-66.4%)
* shared library size: 9,956,640 to 7,716,096 bytes (-22.5%)
* read/write wall time: 0.26s to 0.25s

ELF relocations increased from 28,843 to 39,719 due to descriptor-slot
tables.  The packed schema image stage is intended to remove this cost.

The real AP242 sample created and validated 10,609 instances with zero
errors and warnings.  Rewritten output matched except for its timestamp.
2026-08-02 06:15:25 -04:00
Clifford Yapp 6705c0f62b Implemented API v2 table-driven initialization and opt-in late-bound mode
- API v2 table-driven schema, entity, type, attribute, and inheritance
  initialization via include/clstepcore/ schemaInit.h.

- --late-bound/-T, producing descriptor-backed entities without
  generated early-bound entity classes.

- CMake controls:
    - SC_EXP2CXX_API_VERSION=2
    - SC_EXP2CXX_LATE_BOUND=ON

- Runtime late-bound construction and owned attribute storage in
  src/clstepcore/entityDescriptor.cc and src/clstepcore/STEPattribute.cc.

- Documentation and regression coverage, including incompatible option
  handling.

AP242e4 generated-output results:

 Mode                      Lines       Bytes
━━━━━━━━━━━━━━━━━━━━  ━━━━━━━━━━━  ━━━━━━━━━━
 Default v1            1,210,640    57.57 MB
────────────────────  ───────────  ──────────
 API v2 early-bound      509,001    25.20 MB
────────────────────  ───────────  ──────────
 API v2 late-bound       254,123    13.94 MB

The late-bound AP242 library compiled under C++11 and successfully
processed the BRL-CAD NIST sample: 10,609 instances
created and validated, with zero errors and warnings.
2026-08-02 06:15:25 -04:00
Clifford Yapp 6e18e57380 Implemented the first major API v2 scalability feature
Opt in with either:

exp2cxx --api-version 2 schema.exp

or:

cmake -DSC_EXP2CXX_API_VERSION=2 ...

Version 1 remains the default, and the regression test verifies default
output is byte-identical to explicit v1
output.

API v2 now provides:

- Compact SELECT classes backed by shared descriptor-driven runtime code
  instead of repeated generated parsing, assignment, and serialization
  bodies.

- Generic Set* and typed getter APIs in
  include/clstepcore/sdaiSelect.h:109.
- Dependency-bounded entity headers and source-owned dependencies in
  src/exp2cxx/classes_entity.c:968.
- Out-of-line entity creators.
- Unity chunks that no longer include the all-entity header.
- C++11 output; C++17 did not offer enough additional benefit for this
  tranche.

The command-line handling is in src/exp2cxx/fedex_main.c:85, while
compact SELECT generation begins in src/exp2cxx/selects.c:702.

Measured using the BRL-CAD ap242e4.exp, Release builds, eight parallel
jobs, and 64:8 unity chunks:

 Metric                           API v1    Final API v2    Reduction
━━━━━━━━━━━━━━━━━━━━━━━━  ━━━━━━━━━━━━━━━  ━━━━━━━━━━━━━━  ━━━━━━━━━━━
 Generated C++ lines           1,210,640         522,445        56.8%
────────────────────────  ───────────────  ──────────────  ───────────
 Generated bytes              57,566,051      27,202,644        52.7%
────────────────────────  ───────────────  ──────────────  ───────────
 Schema build wall time         183.22 s         88.31 s        51.8%
────────────────────────  ───────────────  ──────────────  ───────────
 Compiler CPU time              641.53 s        378.49 s        41.0%
────────────────────────  ───────────────  ──────────────  ───────────
 Peak RSS                  1,035,112 KiB     916,412 KiB        11.5%
────────────────────────  ───────────────  ──────────────  ───────────
 Object-file bytes            70,472,952      40,031,088        43.2%
────────────────────────  ───────────────  ──────────────  ───────────
 Shared-library text          34,361,400      19,420,467        43.5%
────────────────────────  ───────────────  ──────────────  ───────────
 Generation wall time             1.52 s          0.69 s        54.6%
2026-08-02 06:15:25 -04:00
Clifford Yapp 6040858231 exp2cxx: tune entity and type chunk limits independently
Schemas commonly contain many more entity implementations than type
implementations. Accept N:N chunk limits and use smaller defaults so
both kinds of generated unity files stay manageable.
2026-08-01 22:27:46 -04:00
Clifford Yapp 3113afd2a4 exp2cxx: generate bounded schema unity chunks
Generate schema source manifests and bounded unity translation
units, then make schema targets depend on the generated absolute
paths. This avoids oversized compiler inputs while retaining
unity-build performance.
2026-08-01 22:27:46 -04:00
Clifford Yapp 0b950dd18e cmake: declare target link interfaces explicitly
Use modern target_link_libraries scopes so libraries publish their
transitive requirements and executables keep theirs private. This
preserves schema test linkage with current CMake versions.
2026-08-01 22:26:29 -04:00
Clifford Yapp 7836a9ec77 Merge pull request #474 from mumbricht/fix_static_libs
Fix static libs
2026-07-25 22:29:09 -04:00
Marc Umbricht 0e548f7f1b added SC_STATIC flag for windows static builds 2026-05-02 21:28:00 +02:00
Marc Umbricht ebf495a74a fixed SHARED vs STATIC lib logic in multiple locations 2026-05-01 16:53:48 +02:00
Marc Umbricht e81cd61d65 propagated syntax fix to SC_ADDLIB 2026-05-01 13:31:57 +02:00
Marc Umbricht 19b8148e73 fixed parsing error in SC_ADDEXEC and SC_ADDLIB macros 2026-05-01 12:51:23 +02:00
Clifford Yapp 57a929cd71 Add adjustment per suggestion from TRThurman to make SCHEMA_CMLIST idempotent 2026-03-29 22:05:23 -04:00
Copilot aa595c9c91 Complete CMake variable migration, fix schema library installation
Clean up stray SC_BUILD_STATIC_LIBS and SC_BUILD_TYPE variables.
Install schema libs
Fix linking when doing static builds
2026-02-06 18:08:10 -05:00
Clifford Yapp 592823b64b List the generated .h file explicitly as an output
Occasional compile problems with libexpress appear to be an attempt to
compile with an incompletely generated header.  Make the dependency
explicit to assist CMake in generating proper build ordering rules.
2023-08-23 14:54:33 -04:00
bitbybit3d 28783de62b fix target_compile_definitions misspelling 2022-09-26 23:05:39 +01:00
Clifford Yapp 7dbda20be0 Remove base library from stepcode
Move specific pieces of logic still in use next to the individual parts
of the code that use them, and eliminate base from the code.
2022-09-26 20:52:17 +01:00
Clifford Yapp 97c3d193a1 sc_cf.h -> config.h
Remove unused sc_cf_cmake.h.in, rename sc_cf.h to the more standard name
"config.h", don't call the generator twice
2022-06-11 17:41:58 +01:00
Clifford Yapp 0fd354cb39 Make sure BUFSIZ buffers have room for NULL
In case we do end up with buffers with contents at the BUFSIZ limit,
make sure we leave room to set a null termination char.  Not always
clear where these buffers might get used or re-used, so just bump their
size across the board.
2022-06-11 17:33:24 +01:00
Clifford Yapp e4277656ef Add a sentinel target for perplex generated output
Getting an intermittent failure on Windows where the expscan.h header
apparently isn't present on the file system soon enough for the build to
succeed (a subsequent reinvocation of the build command does succeed.)

Try the standard technique of making another file write depend on the
outputs of the header and src file, then define a target depending on
that sentinel file and make the obj libraries depend on that target.
2021-08-17 13:00:15 -04:00
Clifford Yapp 62be4c90c6 Use CMake 3.12 everywhere. 2021-08-15 09:22:59 +01:00
Clifford Yapp 8adb5e638d Remove no-longer-used CMake files. 2021-08-15 09:22:59 +01:00
Clifford Yapp fceb57390c Until we need the newer re2c, don't insist on it.
BRL-CAD's supporting system for building this will need some updates
once we require a newer re2c - to make testing easier in the meantime,
don't require the newer version.
2021-08-15 09:22:59 +01:00
Clifford Yapp ae18190f69 Make copy more robust for parallel builds
This is a classic problem - the file copy will begin, the file will be
"present" in some sense on the file system, and build steps that need it
will begin - but they won't find what they actually need because the
copy isn't fully executed.  The standard approach for this is to add a
second file which is only created after the first is done, and then make
the target depend on the second file rather than the first.
2021-08-15 09:22:59 +01:00
Clifford Yapp 8c9b3471fb Build again w/ the generator tools. 2021-08-15 09:22:59 +01:00
Chris HORLER 22c437d45e Simplify the Lemon and RE2C modules
Original work adapted from commits:
b1844be9cc
92cb70de2b
2021-08-15 09:22:59 +01:00
Clifford Yapp 5ea56aac02 update build system
(cherry picked from commit b1844be9cc)
2021-08-15 09:22:59 +01:00
Chris HORLER 6cf5d1e860 CMake update
- variable usage, RPATHs, config header generation
 - remove the CMake core target
2021-08-15 09:22:29 +01:00
Chris HORLER e617808be1 simplify SC_VERSION and library versioning 2021-08-14 10:24:35 +01:00
Clifford Yapp 4f20f391c6 Reverting develop back to commit 548fd82ad7 2021-08-04 16:04:32 -04:00
Cliff Yapp a1462e99b0 Simplify header generation. 2020-12-17 23:57:22 -05:00
Cliff Yapp ec35904342 Wignored-qualifiers errors make looking for any other issues difficult - suppress them until we can figure out how not to trigger them. 2020-12-14 16:27:15 -05:00
Cliff Yapp 9bba7d5157 Simplify build options.
This strips down the build options to more vanilla CMake,
removes the uninstall target, and goes back to respecting
CMAKE_INSTALL_PREFIX.
2020-12-14 16:16:56 -05:00
Cliff Yapp 4bf478b6e3 Remove the express-only option 2020-12-14 16:09:26 -05:00
Cliff Yapp 725ec378c7 Remove unused file, line wrap scanner README 2020-12-14 16:00:58 -05:00
Cliff Yapp 5d8c597d8f Simplify BUILD_SHARED_LIBS and BUILD_STATIC_LIBS options. 2020-12-14 15:58:24 -05:00
Cliff Yapp 44fb19669b Simplify relative directory settings 2020-12-14 15:43:54 -05:00
Cliff Yapp 6368ed08f9 Dispense with the separate version header 2020-12-14 15:26:31 -05:00
Cliff Yapp 142edd5698 Go with the simpler version string.
The relatively complicated logic trying to pull in the git sha1 id for
each build is proving fragile in some scenarios.  Just go with a
simpler encoding of the defined library version.
2020-12-02 20:38:55 -05:00
Cliff Yapp 371d498c0a Don't set RPATH settings if they've already been defined. 2020-12-02 19:37:46 -05:00
Cliff Yapp 90de683f5a Adjust versioning of shared libraries.
Simplify - just use the library versions for the shared library links.
Also, accommodate OpenBSD's particular convention for such libraries.
2020-12-01 12:07:13 -05:00
Cliff Yapp 414b8705a2 Remove md5 verification of generated sources.
This has proven to be more trouble than it is worth - changes
to the lexer and parser inputs are relatively rare at this point,
and different versions of re2c/lemon can break the checks.
2020-11-30 21:36:27 -05:00
Cliff Yapp 3f8bde4319 Update Find* modules to the latest from BRL-CAD 2020-11-30 21:15:25 -05:00
Chris HORLER 88e82d8faf reenable lemon / full build for integration test purposes 2020-07-21 23:22:48 +01:00
Chris HORLER a4d1e03f0d ensure when SC_BUILD_EXPRESS_ONLY is set that we do not build the schema scanner 2020-07-21 15:25:38 +01:00
Chris HORLER 5ab50bb68f begin to modernise / simplify CMake code 2019-08-26 18:42:45 +01:00
Chris HORLER 85b76db65a use _WIN32 for Windows and _MSC_VER for compiler checks 2019-08-26 17:38:09 +01:00
Chris HORLER e934fa246c drop the Generic typedef 2019-08-07 20:30:32 +01:00
luz.paz f93abd2991 Misc. typos
Found via `codespell`
2018-07-13 19:12:09 -04:00