/// <summary>获取编译用的命令行</summary> /// <param name="cpp">是否C++</param> /// <returns></returns> public String GetCompileCommand(Boolean cpp) { var cmd = OnGetCompileCommand(cpp); var sb = new StringBuilder(cmd); if (Debug) { sb.AppendFormat(DefineFormat, "DEBUG"); } if (Tiny) { sb.AppendFormat(DefineFormat, "TINY"); } foreach (var item in Defines) { if (!item.IsNullOrWhiteSpace()) { sb.AppendFormat(DefineFormat, item); } } if (!ExtCompiles.IsNullOrEmpty()) { sb.AppendFormat(" {0}", ExtCompiles.Trim()); } return(sb.ToString()); }
/// <summary>获取编译用的命令行</summary> /// <param name="cpp">是否C++</param> /// <returns></returns> public override String GetCompileCommand(Boolean cpp) { // --debug --endian=little --cpu=Cortex-M3 --enum_is_int -e --char_is_signed --fpu=None // -Ohz --use_c++_inline // --dlib_config C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\arm\INC\c\DLib_Config_Normal.h var sb = new StringBuilder(); if (cpp) { //sb.Append("--c++ --no_exceptions"); sb.Append("--eec++"); } else { sb.Append("--use_c++_inline"); } // -e打开C++扩展 sb.AppendFormat(" --endian=little --cpu={0} -e --silent", CPU); if (CPU.TrimStart("Cortex-M").ToInt() >= 4) { sb.Append("--fpu=None"); } //sb.Append(" --enable_multibytes"); if (Debug) { sb.Append(" --debug"); } // 默认低级优化,发行版-Ohz为代码大小优化,-Ohs为高速度优化 if (!Debug) { sb.Append(" -Ohz"); } foreach (var item in Defines) { sb.AppendFormat(" -D {0}", item); } if (Tiny) { sb.Append(" -D TINY"); } //var basePath = Complier.CombinePath(@"..\..\..\").GetFullPath(); //sb.AppendFormat(" --dlib_config \"{0}\\arm\\INC\\c\\DLib_Config_Normal.h\"", basePath); if (!ExtCompiles.IsNullOrEmpty()) { sb.AppendFormat(" {0}", ExtCompiles.Trim()); } return(sb.ToString()); }
/// <summary>获取编译用的命令行</summary> /// <param name="cpp">是否C++</param> /// <returns></returns> public override String GetCompileCommand(Boolean cpp) { var sb = new StringBuilder(); /* * -c --cpu Cortex-M0 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I..\Lib\inc -I..\Lib\CMSIS -I..\SmartOS * -DSTM32F030 -DUSE_STDPERIPH_DRIVER -DSTM32F0XX -DGD32 -o ".\Obj\*.o" --omf_browse ".\Obj\*.crf" --depend ".\Obj\*.d" * * -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I..\STM32F1Lib\inc -I..\STM32F1Lib\CMSIS -I..\SmartOS * -DSTM32F10X_HD -DDEBUG -DUSE_FULL_ASSERT -o ".\Obj\*.o" --omf_browse ".\Obj\*.crf" --depend ".\Obj\*.d" */ sb.Append("-c"); if (cpp) { sb.Append(" --cpp11"); } //sb.AppendFormat(" --cpu {0} -D__MICROLIB -g -O{1} --exceptions --apcs=interwork --split_sections", CPU, Debug ? 0 : 3); sb.AppendFormat(" --cpu {0} -D__MICROLIB -g -O{1} --apcs=interwork --split_sections", CPU, Debug ? 0 : 3); sb.Append(" --multibyte_chars --locale \"chinese\""); // arm_linux 需要编译器授权支持 //if(Linux) sb.Append(" --arm_linux"); // --signed_chars if (Linux) { sb.Append(" --enum_is_int --wchar32"); } if (Debug) { sb.Append(" -DDEBUG -DUSE_FULL_ASSERT"); } if (Tiny) { sb.Append(" -DTINY"); } foreach (var item in Defines) { sb.AppendFormat(" -D{0}", item); } if (!ExtCompiles.IsNullOrEmpty()) { sb.AppendFormat(" {0}", ExtCompiles.Trim()); } return(sb.ToString()); }
/// <summary>获取编译用的命令行</summary> /// <param name="cpp">是否C++</param> /// <returns></returns> public override String GetCompileCommand(Boolean cpp) { var sb = new StringBuilder(); /* * -xc --target=arm-arm-none-eabi -mcpu=cortex-m3 -c * -funsigned-char * -D__MICROLIB -gdwarf-3 -O0 -ffunction-sections * -I ..\Lib\inc -I ..\Lib\CMSIS -I ..\SmartOS -I ..\SmartOS\Core -I ..\SmartOS\Device * -I ..\SmartOS\Kernel * -D__UVISION_VERSION="520" -DSTM32F10X_HD -DSTM32F1 -DDEBUG -DUSE_FULL_ASSERT -DR24 * -o .\Obj\*.o -MD */ sb.Append("-xc++"); //if (file.EndsWithIgnoreCase(".cpp")) sb.Append(" -std=gnu++11"); if (cpp) { sb.Append(" -std=c++14"); } sb.Append(" --target=arm-arm-none-eabi -funsigned-char -MD"); sb.AppendFormat(" -mcpu={0} -D__MICROLIB -gdwarf-3 -O{1} -ffunction-sections", CPU.ToLower(), Debug ? 0 : 3); sb.Append(" -Warmcc-pragma-arm"); if (Debug) { sb.Append(" -DDEBUG -DUSE_FULL_ASSERT"); } if (Tiny) { sb.Append(" -DTINY"); } foreach (var item in Defines) { sb.AppendFormat(" -D{0}", item); } if (!ExtCompiles.IsNullOrEmpty()) { sb.AppendFormat(" {0}", ExtCompiles.Trim()); } return(sb.ToString()); }
/// <summary>获取编译用的命令行</summary> /// <param name="cpp">是否C++</param> /// <returns></returns> public override String GetCompileCommand(Boolean cpp) { // -ggdb -ffunction-sections -fno-exceptions -fno-rtti -O0 -mcpu=cortex-m3 -mthumb // -I. -IstLib/inc -IstCM3 -DDEBUG=1 -DARM_MATH_CM3 -DSTM32F103VE -Dstm32_flash_layout -DSTM32F10X_HD // -c LEDBlink.cpp -o Debug/LEDBlink.o -MD -MF Debug/LEDBlink.dep // arm-none-eabi-gcc -DM3 -DCONFIG_PLATFORM_8195A -DGCC_ARMCM3 -DARDUINO_SDK -mcpu=cortex-m3 -mthumb -g2 -w -O2 // -Wno-pointer-sign -fno-common -fmessage-length=0 -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-short-enums // -mcpu=cortex-m3 -DF_CPU=166000000L -std=gnu99 -fsigned-char var sb = new StringBuilder(); // 指定编译语言 if (cpp) { sb.Append("-std=c++17"); } else { sb.Append("-std=gnu99"); } // 指定CPU和指令集 if (!CPU.IsNullOrEmpty()) { sb.AppendFormat(" -mcpu={0}", CPU.ToLower()); } // 指定优化等级 /* * gcc默认提供了5级优 化选项的集合: * -O0:无优化(默认) * -O和-O1:使用能减少目标文 件 大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用. * -O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能. * -Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项. * -O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项. */ sb.AppendFormat(" -O{0}", Debug ? 0 : 3); // 为每个函数和数据项分配独立的段 sb.Append(" -ffunction-sections -fdata-sections"); // omit- frame-pointer:可能的情况下不产生栈帧 sb.Append(" -fomit-frame-pointer"); // 不使用异常 sb.Append(" -fno-exceptions"); // 禁止将未初始化的全局变量放入到common段,而是放入bss段,初始为0 sb.Append(" -fno-common"); // Linux风格,4字节枚举、有符号字符 if (Linux) { sb.Append(" -fno-short-enums -fsigned-char"); } // C语言指针无符号 if (!cpp) { sb.Append(" -Wno-pointer-sign"); } // 调试版打开所有警告 if (Debug) { sb.Append(" -W -Wall -g2"); } else { sb.Append(" -w"); } // 输出依赖文件 sb.Append(" -MD"); if (Debug) { sb.Append(" -DDEBUG -DUSE_FULL_ASSERT"); } if (Tiny) { sb.Append(" -DTINY"); } foreach (var item in Defines) { sb.AppendFormat(" -D{0}", item); } if (!ExtCompiles.IsNullOrEmpty()) { sb.AppendFormat(" {0}", ExtCompiles.Trim()); } return(sb.ToString()); }