Can the build process be made more efficient?

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JoBr_1593366
Level 5
Level 5
100 sign-ins 50 questions asked 100 replies posted

Even if I make zero changes to code or schematic, when I press Build, it goes through the entire process all over again.

--------------- Build Started: 04/15/2022 17:11:23 Project: Application, Configuration: DP8051 Keil Generic Release ---------------

Elaborating Design...

HDL Generation...
Synthesis...
Tech Mapping...
Analog Placement...

Analog Routing...
Analog Code Generation...
Digital Placement...
Digital Routing...
Bitstream Generation...
Bitstream Verification...
Static timing analysis...
API Generation...
Dependency Generation...
Cleanup...
The compile step is up to date, no work needs to be done.
LIBX51.exe TRANSFER …
LX51.exe …
OHx51.exe …

--------------- Build Succeeded: 04/15/2022 17:12:07 ---------------

It takes 44 seconds every time I change one line of code, but there's no reason to re-build any of the programmable logic or the code when they haven't changed.  Can't one or the other or both be skipped?

When I build a code-only project in µVision, it takes less than 1 second.

0 Likes
1 Solution

JoBr,

I don't use the Keil 8051 compiler very often but I brushed it off to test.

  1. When no files on my PSoC3 have changed pressing "Build" only errors that no source files have changed and no outputs were updates.  Time: ~1sec.
  2. If I change a .c file, the C compiler runs only for the file that changed.  The linker also runs.  Time:  ~4secs.
  3. If I change a .h file shared across multiple .c files, all those .c files get recompiled and the linker is run.   Time:  ~ 10-15 secs (depending on the number of C files referencing the .h file)
  4. If I change the TopDesign, the Application Build phase runs first to regenerate all the API files in "Generated_Source".   Once this is done, ALL the C files are recompiled and the linker run. Time:  20 - 60 secs.  

In general, PSoC Creator tries to perform an "incremental build'.  This is where the sources for the project are detected for change.  If changed, only those files and the dependent sources are rebuilt.  This is so that the build process can be significantly slower.

If you perform a "Clean and Build", everything will be rebuilt.  This is because the cleaning process deletes all the dependent source headers and API calls for the components in the TopDesign.

 

Len
"Engineering is an Art. The Art of Compromise."

View solution in original post

8 Replies
Len_CONSULTRON
Level 9
Level 9
Beta tester 500 solutions authored 1000 replies posted

JoBr,

It shouldn't require an entire "Rebuild" when you change your code.

If you're willing to share your project I can take a look at your settings.

Len
"Engineering is an Art. The Art of Compromise."
0 Likes

Really?  If you press the "Build" button, it doesn't go through all the steps above? 

JoBr_1593366_0-1650295387106.png

It always has for me, and I've been using PSoC Creator for years.  I would love to find a setting that makes this faster.

I can't share the project, is there any info that would help identify the problem?

Environment:
PSoC Creator 4.4 (4.4.0.80)
Culture: English (United States)
OS Version: Microsoft Windows NT 10.0.19044.0
CLR Version: 4.0.30319.42000

DP8051 Keil Generic

Device CY8C3446LTI-073

0 Likes

JoBr,

I don't use the Keil 8051 compiler very often but I brushed it off to test.

  1. When no files on my PSoC3 have changed pressing "Build" only errors that no source files have changed and no outputs were updates.  Time: ~1sec.
  2. If I change a .c file, the C compiler runs only for the file that changed.  The linker also runs.  Time:  ~4secs.
  3. If I change a .h file shared across multiple .c files, all those .c files get recompiled and the linker is run.   Time:  ~ 10-15 secs (depending on the number of C files referencing the .h file)
  4. If I change the TopDesign, the Application Build phase runs first to regenerate all the API files in "Generated_Source".   Once this is done, ALL the C files are recompiled and the linker run. Time:  20 - 60 secs.  

In general, PSoC Creator tries to perform an "incremental build'.  This is where the sources for the project are detected for change.  If changed, only those files and the dependent sources are rebuilt.  This is so that the build process can be significantly slower.

If you perform a "Clean and Build", everything will be rebuilt.  This is because the cleaning process deletes all the dependent source headers and API calls for the components in the TopDesign.

 

Len
"Engineering is an Art. The Art of Compromise."

Strange.  If I Clean and then Build, it takes 2 minutes to build.

If I then immediately push Build again, without changing anything, it takes 40 seconds to go through all of the above steps.

If I create a new workspace and project, with the BasicDesign example project, also Keil Generic and CY8C3446LTI-073, I get the behavior you describe: If I push Build a second time, it only says:

 

--------------- Build Started: 04/18/2022 16:29:09 Project: BasicDesignPrj, Configuration: DP8051 Keil Generic Release ---------------
The code generation step is up to date.
The compile step is up to date, no work needs to be done.
The link step is up to date, no work needs to be done.
CyHexTool -o "D:\PSoC test\BasicDesignWS\BasicDesignPrj.cydsn\DP8051\DP8051_Keil_Generic\Release\BasicDesignPrj.hex" -f "D:\PSoC test\BasicDesignWS\BasicDesignPrj.cydsn\DP8051\DP8051_Keil_Generic\Release\BasicDesignPrj.ihx" -prot Generated_Source\PSoC3\protect.hex -id 1E049069 -a EEPROM=90200000:800,PROGRAM=00000000:10000,CONFIG=80000000:2000,PROTECT=90400000:40 -meta 0301 -cunv 00004005 -wonv BC90ACAF -ecc OFF
Flash used: 6951 of 65536 bytes (10.6%).
SRAM used: 177 of 8192 bytes (2.2%).
--------------- Build Succeeded: 04/18/2022 16:29:10 ---------------

 

and finishes in 3 seconds.  So it's an issue with the workspace or project, I guess.

0 Likes

Hmm. My projects all use USB Bootloaders, so I tried the USB Bootloader example project, too.

If I don't change anything, and then:

  • If I Build Bootloadable, it goes quickly ("code/compile/link is up to date").
  • If I Build All, it does not:
    • The Bootloader builds quickly, but then
    • The Bootloadable builds slowly, as above (Elaborating Design, HDL Generation, Synthesis...) even though nothing has changed in either project.

In my real project, however:

  • If I Build the Bootloadable alone, it builds slowly, as above (Elaborating Design, …).
0 Likes

I've never built a USB bootable.   I don't know if there are special considerations.

Len
"Engineering is an Art. The Art of Compromise."

If I disable the Bootloadable component, and build only the Bootloadable Application, it still builds every other project (quickly) and builds the Bootloadable pretty quickly (10 seconds, but still runs LX51.exe).

Maybe this is because of the Dependencies?

0 Likes

JoBr,

You appear to have significant evidence to suggest this is true.

Len
"Engineering is an Art. The Art of Compromise."
0 Likes