我目前正在尝试使用Maven(Tycho扩展)构建和导出Eclipe插件,但它会引发一大堆API限制错误
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:09 min
[INFO] Finished at: 2015-03-02T13:57:35+03:00
[INFO] Final Memory: 78M/187M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:0.22.0:compile (default-compile) on project GDBFifoBlocks: Compilation failure: Compilation failure:
[ERROR] /home/siarshai/Programming/Workspaces/eclipse-rcp-workspace/GDBFifoBlocksBackbone/src/neuromatrixplugin/fifoblocks/backbone/viewmodel/fifo/FIFOBlockBitFieldVMNode.java:[240]
[ERROR] update.setLabel(getMessageFormat().format(
[ERROR] messageAttrs, new StringBuffer(), null).toString(), columnIndex);
[ERROR] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ERROR] Access restriction: The method 'MessageFormat.format(Object[], StringBuffer, FieldPosition)' is not API (restriction on classpath entry '/home/siarshai/.m2/repository/p2/osgi/bundle/com.ibm.icu/52.1.1.v201501240615/com.ibm.icu-52.1.1.v201501240615.jar')
[ERROR] /home/siarshai/Programming/Workspaces/eclipse-rcp-workspace/GDBFifoBlocksBackbone/src/neuromatrixplugin/fifoblocks/backbone/viewmodel/fifo/FIFOBlockBitFieldVMNode.java:[345]
[ERROR] update.setLabel(getMessageFormat().format(combinedAttrs, new StringBuffer(), null).toString(), columnIndex);
[ERROR] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ERROR] Access restriction: The method 'MessageFormat.format(Object[], StringBuffer, …Run Code Online (Sandbox Code Playgroud) 假设我在目标机器中有两个寄存器计算块:I和X.一个可以只对I寄存器应用整数运算,对X寄存器应用整数和浮点运算.还有两种类型的指令:
def ADDIi32 : MyInstruction< ..., (outs I:$Rs), (ins I:$Rm, I:$Rn), [(set i32:$Rs, (add i32:$Rm, i32:$Rn)]>;
...
def ADDXi32 : MyInstruction< ..., (outs X:$Rs), (ins X:$Rm, X:$Rn), [(set i32:$Rs, (add i32:$Rm, i32:$Rn)]>;
def ADDXf32 : MyInstruction< ..., (outs X:$Rs), (ins X:$Rm, X:$Rn), [(set f32:$Rs, (fadd f32:$Rm, f32:$Rn)]>;
...
Run Code Online (Sandbox Code Playgroud)
它们的编码方式不同,并且具有不同的asmstrings.所以llvm可以映射
int a, b;
a = a + b;
Run Code Online (Sandbox Code Playgroud)
到ADDIi32或ADDXi32但是
float a, b;
a = a + b;
Run Code Online (Sandbox Code Playgroud)
仅映射到ADDXf32.
我希望LLVM在可能的情况下使用ADDIi32,但不幸的是我发现没有办法告诉它一个指令(或寄存器)"成本"比另一个更高.Register类中的CostPerUse似乎是候选者,但它定义了组中其他寄存器的成本,而不是所有寄存器中的成本.我看到一些线程声称AddedComplexity(带有歧义描述的Instruction类中的字段)控制选择模式但不做任何事情.
LLVM似乎选择了第一条匹配指令.当我在ADDIi32之前定义ADDXf32和ADDXi32时,它只对任何类型的数据使用X函数.当我在ADDXf32和ADDXi32之前定义ADDIi32时,它使用I指令来表示整数数据但是没有任何内容可以浮动数据(很奇怪).我想我可以在ADDXf32和ADDXi32之间插入ADDIi32,但它们目前处于不同的.td文件中,看起来不像是长期解决方案.
有任何想法吗?
例如,我想制作一个调试宏,在尝试执行代码字符串之前打印代码字符串.我想它看起来应该是那样的
#define TRACE(string) printf("Trying to execute: %s\n",\"string\"); \
string
...
void foo() {
printf("1\n");
}
void bar() {
printf("2\n");
}
int main() {
...
foo();
TRACE(bar(););
...
}
Run Code Online (Sandbox Code Playgroud)
预期产量
...
1
Trying to execute: bar();
2
...
Run Code Online (Sandbox Code Playgroud)
好吧,这不是人们如何做到的:编译器抱怨非法语法.有没有办法做到这一点?
我的工作区中有一个插件和一个功能项目.当我通过文件>导出为>功能手动导出功能时,一切正常.我正在尝试编写一个自动插件构建和导出脚本来摆脱这些苦差事.我将功能项目转换为Maven项目并填充pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyProject</groupId>
<artifactId>NMGDBPluginFeature</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
<properties>
<tycho-version>0.22.0</tycho-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>eclipse-luna</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/luna</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
但脚本抛出:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: NMGDBPluginFeature.feature.group 1.0.0.qualifier
[ERROR] Missing requirement: NMGDBPluginFeature.feature.group 1.0.0.qualifier requires 'GDBFifoBlocks [1.0.0.gdbfifoblocks]' but it could not be found
Run Code Online (Sandbox Code Playgroud)
怎么会发生这种情况?我以为pom.xml使用了项目的feature.xml,不是吗?什么是正确的配置?
它必须非常明显,但我发现无法做到这一点.每个手册都将变基描述为现有分支或简单交互式变基的顶部,这就是全部.假设,我有一个类似钻石形状的git历史:
* 949430f Merge commit (D) (HEAD, mybranch)
|\
| * e6a2e8b (C)
* | 3e653ff (B)
|/
* 9c3641f Base commit (A)
Run Code Online (Sandbox Code Playgroud)
我希望像以下一样保持历史:
* 949430f Combined commit (BCD)
|
* 9c3641f Base commit (A)
Run Code Online (Sandbox Code Playgroud)
提交B和C可能会被融化或丢弃,无所谓,我只想保留结果.此外,我不想因为令人讨厌的恐慌解决而还原提交.
这里我试过的事情:
1)我不能通过简单压扁B和C来避免这种情况
git rebase -i HEAD~2
...
p 3e653ff (B)
f e6a2e8b (C)
...
Could not apply a91f3a4
Run Code Online (Sandbox Code Playgroud)
嗯,这有点可以理解,有一些冲突.
2)我无法通过压扁来解决这个问题.
git rebase -i -p HEAD~3
...
pick 9c3641f Base commit (A)
f 3e653ff (B)
f e6a2e8b (C)
pick 949430f Merge commit (D)
...
error: …Run Code Online (Sandbox Code Playgroud) 导出PATH我不小心用新行复制/粘贴了路径,因此
export PATH=/usr/local/something:$PATH
Run Code Online (Sandbox Code Playgroud)
我刚
export PATH=/usr/local/something{\n}
Run Code Online (Sandbox Code Playgroud)
所以我想我所有有用的PATH条目都被删除了。如何撤消更改?