Adding Custom Command Line to EmCDT

1.如果我们有两个功能一样的库文件,暂且命名为libabclibabc_00,一个放在固化在芯片内部,一个在编译的时候添加进去,用户可以根据需要自己选择使用哪个。

riscv32-haawking-elf-g++ -march=rv32imc -mabi=ilp32 -mcmodel=medany -mno-save-restore -labc_00

Adding Custom Command Line

2.定义命令,abclib

在文件eclipse-plugins.git\plugins\ilg.gnumcueclipse.managedbuild.cross.riscv\plugin.xml中RISC-V Targets common options下面增加该命令的定义。

并设置好按钮选择与否的命令行。

            <option
				command="-labc"
				commandFalse="-labc_00"
				defaultValue="false"
				id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.base.target.abclib"
				isAbstract="true"
				name="Use BootRom abclib"
				tip="Use BootRom Library or Your Own Library (-labc)."
				valueType="boolean">
			</option>

同时,在同一个文件中,在%toolchain.name下,增加类的声明。

            <option
				category="ilg.gnumcueclipse.managedbuild.cross.riscv.optionCategory.target"
				id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.saverestore"
				superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.base.target.saverestore">
			</option>

3.修改plugin.properties文件

eclipse-plugins.git\plugins\ilg.gnumcueclipse.managedbuild.cross.riscv\plugin.properties中,添加如下说明

option.target.abclib=BootRom Lib (-labc)

4.修改option类

Option增加

public static final String OPTION_TARGET_ABCLIB = OPTION_TARGET + "abclib";

getToolChainFlags中添加

        sValue = getOptionBooleanCommand(config, OPTION_TARGET_ABCLIB);
		if (sValue != null && sValue.length() > 0) {
			sReturn += " " + sValue;
		}

到这一步的时候,EmCDT的Makefile中应该就可以看到-labc选项了,但是呢,我们并没有在模板工程中添加相应的lib文件,这样编译的时候是会报错,提示找不到相应的lib文件的。

5.在模板工程中添加lib文件

eclipse-plugins.git\plugins\ilg.gnumcueclipse.templates.haawking\templates\haawking_exe_c_project\template.xml中创建lib文件夹并添加lib文件。

<process type="org.eclipse.cdt.core.CreateSourceFolder">
			<simple
				name="projectName"
				value="$(projectName)" />
			<simple
				name="path"
				value="xpacks/haawking-devices/lib" />
		</process>
		<process type="ilg.gnumcueclipse.templates.core.ConditionalCopyFolders">
			<simple
				name="projectName"
				value="$(projectName)" />
			<simple
				name="condition"
				value="" />
			<complex-array name="folders">
				<element>
					<simple
						name="source"
						value="xpacks/haawking-devices/lib" />
					<simple
						name="target"
						value="xpacks/haawking-devices/lib" />
					<simple
						name="pattern"
						value=".*[.](a)" />
					<simple
						name="replaceable"
						value="true" />
				</element>
			</complex-array>
		</process>
<process type="ilg.gnumcueclipse.templates.core.ConditionalAddFiles">
			<simple
				name="projectName"
				value="$(projectName)" />
			<simple
				name="condition"
				value="" />
			<complex-array name="files">
				<element>
					<simple
						name="source"
						value="xpacks/haawking-devices/lib/miz702n/libabc.a" />
					<simple
						name="target"
						value="xpacks/haawking-devices/lib/miz702n/libabc.a" />
					<simple
						name="replaceable"
						value="true" />
				</element>
				<element>
					<simple
						name="source"
						value="xpacks/haawking-devices/lib/miz702n/libabc_00.a" />
					<simple
						name="target"
						value="xpacks/haawking-devices/lib/miz702n/libabc_00.a" />
					<simple
						name="replaceable"
						value="true" />
				</element>
			</complex-array>
		</process>

6.创建了lib文件夹并拷贝了lib文件,还需要添加lib文件的路径

添加路径的时候,一定选择AppendToMBSStringListOptionValues,否则,将会替代掉之前的变量。

<process
			type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues">
			<simple
				name="projectName"
				value="$(projectName)" />
			<complex-array name="resourcePaths">
				<element>
					<simple
						name="id"
						value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.*.linker.paths" />
					<simple-array name="values">
						<element value="&quot;../xpacks/haawking-devices/lib/miz702n&quot;" />
					</simple-array>
					<simple
						name="path"
						value="" />
				</element>
			</complex-array>
		</process>

Adding Custom Command Line

这个时候,如果lib文件没有问题,那么就可以完成调用自定义库的编译和链接了。

(2020-10-19,希格玛公寓,北京)

Junning Wu wechat
Welcome To Contact Me with My Personal WeChat ID(Weixin)