This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Machine specs to improve CCS build time?



Hi,

I'm trying to figure out what I can do to improve build time on my machine, and if necessary, spec out a new machine.  A clean/build cycle takes approximately 5 minutes which I understand is not huge, but over hundreds (or even thousands) of iterations, this obviously adds up.  In my project build settings, I have "Enable parallel build / Use optimal jobs" checked.

My current machine specs:

- Xeon E5-1620 v2 (3.7 GHz, 10M Cache, 4 cores)

- 20 GB DDR3

- 1 TB SSD

I've been unable to find any TI provided information for improving CCS build times.  Does such a page exist?

Thanks in advance for your help!

  • Also, I'm running CCS v6.1.3
  • Hi Derek,
    Your specs look good: you have an SSD, tons of RAM, and a decent processor. Your bottleneck is likely somewhere else. Besides PC specs, the compiler options being used can have a great impact on build time - especially optimization settings. And of course the size of your project itself would have an impact. What optimization do you have enabled? How big is your project?

    Thanks
    ki
  • These are Debug configuration builds, so no optimizations and full symbolic debug. The resultant binary (.out) file is approximately 14 MB (about 2.6 MB source code). I'm not sure how to specify the project size. It's a SYS/BIOS project, so I'm sure a significant portion of the binary are the various modules. I'm compiling for a C6748 using CGT 7.4.16, and we use all the IPC modules required for communication with the OMAPL ARM core.
  • Is there a particular spot in during the build where it takes the most time? Like when xdc is called? Or is it during the linking stage?
  • I have 4 lib projects which take up a decent amount of time, but those change so rarely that I'm not worried about them. The SYS/BIOS cfg project + source project take approximately 80 seconds. The build of the SYS/BIOS cfg project takes approximately 45 seconds, but 30 seconds of that is the call:

    cle674 package/cfg/project_configuration_pe674.c

    and I'm not sure what that utility is responsible for (nor can I seem to find it anywhere in my toolchain). The source project takes approximately 35 seconds where an equal amount of time seems to be spent on each source file as well as the linking step. I suppose in the long run, this is not entirely long, but shaving any time anywhere in the clean/build/load process is always helpful. Maybe I'm just trying to squeeze water out of rocks here...
  • Derek Wilson said:
    The build of the SYS/BIOS cfg project takes approximately 45 seconds, but 30 seconds of that is the call:

    cle674 package/cfg/project_configuration_pe674.c

    and I'm not sure what that utility is responsible for (nor can I seem to find it anywhere in my toolchain).

    From looking at a SYS/BIOS project for a Tiva C device believe that "cle674" is not an actual utility but an output from a SYS/BIOS generated makefile that a collection of one or more source files are about to be built.

    E.g. for a SYS/BIOS makefile I found the following in which the following is reported to the CCS build console:

    clem4f C:/ti_ccs6_1/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages/ti/sysbios/BIOS.c ...

    i.e. the CCS build console suggests a single source file is about to be compiled, but the actual makefile is compiling 19 source files:

    BIOS.obj: BIOS.c knl/Clock.c knl/Idle.c knl/Intrinsics.c knl/Queue.c knl/Semaphore.c knl/Swi.c knl/Swi_andn.c knl/Task.c hal/Hwi.c hal/Hwi_stack.c hal/Hwi_startup.c hal/Timer.c family/arm/m3/Hwi.c family/arm/m3/TaskSupport.c family/arm/lm4/Timer.c gates/GateHwi.c gates/GateMutex.c heaps/HeapMem.c makefile
    	@-$(call RM, $@)
    	@echo clem4f $< ...
    	@$(CC) $(BIOS_DEFS) $(XOPTS) $(INCS) \
    	$(BIOS_ROOT)BIOS.c \
    	$(BIOS_ROOT)knl/Clock.c \
    	$(BIOS_ROOT)knl/Idle.c \
    	$(BIOS_ROOT)knl/Intrinsics.c \
    	$(BIOS_ROOT)knl/Queue.c \
    	$(BIOS_ROOT)knl/Semaphore.c \
    	$(BIOS_ROOT)knl/Swi.c \
    	$(BIOS_ROOT)knl/Swi_andn.c \
    	$(BIOS_ROOT)knl/Task.c \
    	$(BIOS_ROOT)hal/Hwi.c \
    	$(BIOS_ROOT)hal/Hwi_stack.c \
    	$(BIOS_ROOT)hal/Hwi_startup.c \
    	$(BIOS_ROOT)hal/Timer.c \
    	$(BIOS_ROOT)family/arm/m3/Hwi.c \
    	$(BIOS_ROOT)family/arm/m3/TaskSupport.c \
    	$(BIOS_ROOT)family/arm/lm4/Timer.c \
    	$(BIOS_ROOT)gates/GateHwi.c \
    	$(BIOS_ROOT)gates/GateMutex.c \
    	$(BIOS_ROOT)heaps/HeapMem.c \
    

    Therefore, suggest you look in the SYS/BIOS generated makefile in the project to locate the cle674 package/cfg/project_configuration_pe674.c output and determine exactly how many source files are being compiled.

  • Okay, there are a TON of modules being pulled into the project. I'm pretty sure I use most of them, but I will go through and determine if they're all necessary. It makes sense that building all these would take significant time. I'm going to mark this as verified for the time being. Thanks!
  • Hi Derek,

    Have you tried to enable "parallel build". Since you have 4 cores, you can build multiple source files at the same time. You can enable it in project options/Build/Behaviour/Enable parallel build. Check the option "Use optimal jobs".

    In my MacBook Pro, it will use all 8 cores including hyper-threading. That is almost 8 times faster.
  • Hi Robert,

    Yes, I have "Enable parallel build / Use optimal jobs" checked.  I've come to the conclusion that I'm just not going to do any better because of the size of my project.  Most of the time seems to be spent pulling in the SYS/BIOS modules.

  • Talking about SYS/BIOS and XDC. SYS/BIOS is based on XDC. TI invented XDC to optimise memory usage for different project requirements. But it will usually make the project source code complicated and slow to compile.

    I have recommended TI to fully abandon XDC, but on one listen to me :-)

    So, I guess you are out of luck. There is no way to make it faster.