Other Parts Discussed in Thread: C2000WARE
I am trying to use the Flash API on a TMS320F28388D with the TI Clang v.2.1.2.LTS compiler. 
On the C28 core everything worked out well, I was quickly able to erase and write flash sectors.
The CM/M4 core is where the problems start. Using include and lib from C2000Ware_4_03_00_00 looked good, substituting the M4 variant for C28. But - when building, the linker complains: 
error: file
 "C:/[...]/driverlib_cm4/Debug/driverlib_cm4.lib<ethernet.o>" has a Tag_ABI_VFP_args attribute value of "0" that is different than one previously seen ("1"); combining incompatible files
There are two more errors, quite similar to that.
I found out that this tag corresponds to CCS project setting CCS Build/Arm Compiler/Processor Options/-mfloat-abi (hard or soft).
The armofd tool does not reveal where a 1 may come from, all our modules explicitly set 0 (" soft" in CCS project settings). The tool does however show that the Flash API has the tag set to 3, meaning it should match everything. (armofd output can be confusing, since usually 0 isn't explicitly written, since it's the default)
We use a couple of 3rd party libraries (driverlib_cm4.lib, FreeRTOS.lib, lwip.lib) and some of our own libs. But even on those, armofd shows no 1 setting, including all *.o.
Sadly, even setting linker to verbose diagnostics doesn’t tell where it has seen a 1 tag.
We found out that omitting the extern "C" declaration around the #include "F021_F2838x_CM.h" gets rid of the linker Tag_ABI_VFP_args error. 
But as soon as I actually *use* a function from Flash API, nothing from the Flash API is found ("unresolved symbols remain"), not even the simplest Fapi_getFsmStatus(). And, since we are using C++, I’d expect the C linkage to be required (and C++ name mangling surely can interfere with symbol resolution).
Modifying the flash lib or path string to an invalid setting makes the linker cry about lib not found - so both appear to be correct, and it opens the right file. (And yes, I'm not linking with the C28 lib ;-)
It's quite bizarre – linking without using a flash API function is enough for the linker to see something it doesn’t like. But when it is told to use a flash API function it can’t find any functions.
Someone had the same problem with both flash API and lwip:
TMS320F28388D: LWIP Issues - C2000 microcontrollers forum - C2000︎ microcontrollers - TI E2E support forums
But there hasn’t been a resolution in the end.
Can anyone shed some light on this?
 
				 
		 
					 
                           
				