@@ -26,6 +26,25 @@ public GCC()
2626 }
2727 #endregion
2828
29+ /// <summary>初始化</summary>
30+ /// <param name="addlib"></param>
31+ /// <returns></returns>
32+ public override Boolean Init ( Boolean addlib )
33+ {
34+ var basePath = ToolPath . CombinePath ( "bin" ) . GetFullPath ( ) ;
35+
36+ Complier = basePath . CombinePath ( "arm-none-eabi-gcc.exe" ) . GetFullPath ( ) ;
37+ Asm = basePath . CombinePath ( "arm-none-eabi-gcc.exe" ) ;
38+ Link = basePath . CombinePath ( "armlink.exe" ) ;
39+ Ar = basePath . CombinePath ( "arm-none-eabi-ar.exe" ) ;
40+ ObjCopy = basePath . CombinePath ( "arm-none-eabi-objcopy.exe" ) ;
41+
42+ IncPath = basePath . CombinePath ( @"..\arm-none-eabi\include" ) . GetFullPath ( ) ;
43+ LibPath = basePath . CombinePath ( @"..\arm-none-eabi\lib" ) . GetFullPath ( ) ;
44+
45+ return base . Init ( ) ;
46+ }
47+
2948 #region 主要编译方法
3049 /// <summary>获取编译用的命令行</summary>
3150 /// <param name="cpp">是否C++</param>
@@ -48,20 +67,119 @@ public override String GetCompileCommand(Boolean cpp)
4867 //sb.AppendFormat(" -D__NO_SYSTEM_INIT -D{0}", Flash);
4968 //sb.AppendFormat(" -D{0}", Flash);
5069 //if (GD32) sb.Append(" -DGD32");
70+ if ( Debug ) sb . Append ( " -DDEBUG -DUSE_FULL_ASSERT" ) ;
71+ if ( Tiny ) sb . Append ( " -DTINY" ) ;
72+ foreach ( var item in Defines )
73+ {
74+ sb . AppendFormat ( " -D{0}" , item ) ;
75+ }
76+
77+ foreach ( var item in ExtCompiles )
78+ {
79+ sb . AppendFormat ( " {0}" , item . Trim ( ) ) ;
80+ }
81+
82+ return sb . ToString ( ) ;
83+ }
84+
85+ /// <summary>汇编程序</summary>
86+ /// <param name="file"></param>
87+ /// <returns></returns>
88+ protected override String OnAssemble ( String file )
89+ {
90+ var sb = new StringBuilder ( ) ;
91+ sb . Append ( "-ggdb" ) ;
92+ if ( file . EndsWithIgnoreCase ( ".cpp" ) )
93+ sb . Append ( " -std=c++17" ) ;
94+ sb . AppendFormat ( " -mlittle-endian -mthumb -mcpu={0} -mthumb-interwork -O{1}" , CPU , Debug ? 0 : 3 ) ;
95+ sb . AppendFormat ( " -ffunction-sections -fdata-sections" ) ;
96+ sb . AppendFormat ( " -fno-exceptions -MD" ) ;
97+ //sb.AppendFormat(" -D{0}", Flash);
98+ //if (GD32) sb.Append(" -DGD32");
5199 foreach ( var item in Defines )
52100 {
53101 sb . AppendFormat ( " -D{0}" , item ) ;
54102 }
55103 if ( Debug ) sb . Append ( " -DDEBUG -DUSE_FULL_ASSERT" ) ;
56104 if ( Tiny ) sb . Append ( " -DTINY" ) ;
105+ sb . AppendFormat ( " -I." ) ;
106+ foreach ( var item in Includes )
107+ {
108+ sb . AppendFormat ( " -I{0}" , item ) ;
109+ }
57110
58- foreach ( var item in ExtCompiles )
111+ return sb . ToString ( ) ;
112+ }
113+
114+ /// <summary>链接静态库</summary>
115+ /// <returns></returns>
116+ protected override String OnBuildLib ( String lib )
117+ {
118+ var sb = new StringBuilder ( ) ;
119+ sb . AppendFormat ( " -r \" {0}\" " , lib ) ;
120+
121+ return sb . ToString ( ) ;
122+ }
123+
124+ /// <summary>链接静态库</summary>
125+ /// <returns></returns>
126+ protected override String OnBuild ( String name )
127+ {
128+ /*
129+ * --cpu Cortex-M3 *.o --library_type=microlib --strict --scatter ".\Obj\SmartOSF1_Debug.sct"
130+ * --summary_stderr --info summarysizes --map --xref --callgraph --symbols
131+ * --info sizes --info totals --info unused --info veneers
132+ * --list ".\Lis\SmartOSF1_Debug.map"
133+ * -o .\Obj\SmartOSF1_Debug.axf
134+ *
135+ * --cpu Cortex-M0 *.o --library_type=microlib --diag_suppress 6803 --strict --scatter ".\Obj\Smart130.sct"
136+ * --summary_stderr --info summarysizes --map --xref --callgraph --symbols
137+ * --info sizes --info totals --info unused --info veneers
138+ * --list ".\Lis\Smart130.map"
139+ * -o .\Obj\Smart130.axf
140+ */
141+
142+ var lstName = GetListPath ( name ) ;
143+ var objName = GetObjPath ( name ) ;
144+
145+ var sb = new StringBuilder ( ) ;
146+ sb . AppendFormat ( "--cpu {0} --library_type=microlib --strict" , CPU ) ;
147+ if ( ! Scatter . IsNullOrEmpty ( ) && File . Exists ( Scatter . GetFullPath ( ) ) )
148+ sb . AppendFormat ( " --scatter \" {0}\" " , Scatter ) ;
149+ else
150+ sb . AppendFormat ( " --ro-base 0x08000000 --rw-base 0x20000000 --first __Vectors" ) ;
151+ //sb.Append(" --summary_stderr --info summarysizes --map --xref --callgraph --symbols");
152+ //sb.Append(" --info sizes --info totals --info unused --info veneers");
153+ sb . Append ( " --summary_stderr --info summarysizes --map --xref --callgraph --symbols" ) ;
154+ sb . Append ( " --info sizes --info totals --info veneers --diag_suppress L6803 --diag_suppress L6314" ) ;
155+
156+ foreach ( var item in ExtBuilds )
59157 {
60158 sb . AppendFormat ( " {0}" , item . Trim ( ) ) ;
61159 }
62160
161+ var axf = objName . EnsureEnd ( ".axf" ) ;
162+ sb . AppendFormat ( " --list \" {0}.map\" -o \" {1}\" " , lstName , axf ) ;
163+
63164 return sb . ToString ( ) ;
64165 }
166+
167+ /// <summary>导出目标文件</summary>
168+ /// <param name="axf"></param>
169+ /// <param name="target"></param>
170+ /// <returns></returns>
171+ protected override Boolean Dump ( String axf , String target )
172+ {
173+ var cmd = "" ;
174+ if ( target . EndsWithIgnoreCase ( ".bin" ) )
175+ cmd = "--bin -o \" {0}\" \" {1}\" " . F ( axf , target ) ;
176+ else
177+ cmd = "--i32 -o \" {0}\" \" {1}\" " . F ( axf , target ) ;
178+
179+ var rs = ObjCopy . Run ( cmd , 3000 , WriteLog ) ;
180+
181+ return rs != 0 ;
182+ }
65183 #endregion
66184 }
67185
0 commit comments