https://github.com/kenzo-tree/android_build/commit/27a05cf88628d371362e15b89058eba8d1649963So I disabled the flags in the archidroid.mk like so
But, even after make clobber and ccache -C I got the same error... Help?
https://github.com/kenzo-tree/android_build/commit/27a05cf88628d371362e15b89058eba8d1649963So I disabled the flags in the archidroid.mk like so
But, even after make clobber and ccache -C I got the same error... Help?
Hey, I'm sorry, I know everyone is being very helpful but even with this cherry-picked and after make clobber and ccache -C
strange,some of the graphite flags give ice with uber tc,i disabled those sets and got it fixed.i would recommend you to disablee some other graphite flags and check with uber or use some other toolchain.(linaro tc builds by DespairFactor are also good)Hey, I'm sorry, I know everyone is being very helpful but even with this cherry-picked and after make clobber and ccache -C
Its the same isn error, in art
Could you please point me towards those?strange,some of the graphite flags give ice with uber tc,i disabled those sets and got it fixed.i would recommend you to disablee some other graphite flags and check with uber or use some other toolchain.(linaro tc builds by DespairFactor are also good)
Device TableGen (gen-disassembler): libLLVMARMCodeGen <= external/llvm/lib/Target/ARM/ARM.td
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [build/core/host_shared_library_internal.mk:44: /run/media/haozeke/Storage/AndBuild/cm-12.1/out/host/linux-x86/obj32/lib/libart-compiler.so] Error 1
make: *** Waiting for unfinished jobs....
warning: no entries written for dimen/password_keyboard_height (0x010500ac)
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
make: Leaving directory '/run/media/haozeke/Storage/AndBuild/cm-12.1'
Hey any idea about this? Using Uber 4.9 for both toolchain and kernel. No other funny business. honami, cm-12.1
Code:art/compiler/dex/quick/dex_file_method_inliner.cc: In member function 'bool art:exFileMethodInliner::GenIntrinsic(art::Mir2L ir*, art::CallInfo*)': art/compiler/dex/quick/dex_file_method_inliner.cc:508:1: error: insn does not satisfy its constraints: } ^ (insn 2244 1443 1444 107 (parallel [ (set (regI 3 r3 [539]) (lshiftrtI (regI 2 r2 [orig:186 D.340824 ] [186]) (const_int 1 [0x1]))) (clobber (reg:CC 100 cc)) ]) art/compiler/dex/quick/dex_file_method_inliner.cc:496 132 {arm_lshrdi3_1bit} (expr_list:REG_UNUSED (reg:CC 100 cc) (expr_list:REG_UNUSED (reg:SI 4 r4) (nil)))) [B][COLOR="Blue"]art/compiler/dex/quick/dex_file_method_inliner.cc:508:1: internal compiler error: in build_def_use, at regrename.c:1573 0x8119ea _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ../.././../gcc/gcc-UBER/gcc/rtl-error.c:109 0x811a11 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) ../.././../gcc/gcc-UBER/gcc/rtl-error.c:120 0x7f0102 build_def_use ../.././../gcc/gcc-UBER/gcc/regrename.c:1573 0x7f0102 regrename_analyze(bitmap_head*) ../.././../gcc/gcc-UBER/gcc/regrename.c:715 0x7f0409 regrename_optimize ../.././../gcc/gcc-UBER/gcc/regrename.c:1830 0x7f0409 execute ../.././../gcc/gcc-UBER/gcc/regrename.c:1871[/COLOR][/B] Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. make: *** [build/core/binary.mk:619: /run/media/haozeke/Storage/AndBuild/cm-12.1/out/target/product/honami/obj/SHARED_LIBRARIES/libart-compiler_intermediates/dex/quick/dex_file_method_inliner.o] Error 1 make: *** Waiting for unfinished jobs....
Hey any idea about this? Using Uber 4.9 for both toolchain and kernel. No other funny business. honami, cm-12.1
Hi there!
I have got the same problem. I tried UBERTC 4.9 (even 4.8), HyperToolchain 4.9 (SaberxLinaro) and keep getting this error. With AOSP 4.8 I don't have this problem.
May I know if you've fixed this problem and if yes, how you did it?
Thank you!
Have a nice day!
Robert.
Here , just ignore the changes in armv7-a-neon.mkanyone have kit kat achi optimization patches,seems like the link in OP shows not found..anyone?
This commit has one disadvantage. Either it works or it doesn't. For use with Ubertoolchains I recommend this commit: https://github.com/UBERMALLOW/build/commit/704918b282c3fad0e17d6a8c6547d970f4b1120b it's from the guys who develop the Uber toolchains and you can disable them on a module basis
You can find the recent (nougats) Optimizations here: https://github.com/UBERROMS/build/commits/masterIs there anything like this for nougat? Im also using ubertc
If not then can I enable -o3 and graphite without the whole optimization commit?
<remote name="aosp"
fetch="https://android.googlesource.com"
review="android-review.googlesource.com" />
<project path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" clone-depth="1" remote="aosp" revision="refs/tags/android-7.1.1_r6" />
<project path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" clone-depth="1" remote="aosp" revision="refs/tags/android-7.1.1_r6" />
project build/
diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk
index 3497662..8e2c0a4 100644
--- a/core/combo/TARGET_linux-arm.mk
+++ b/core/combo/TARGET_linux-arm.mk
@@ -108,11 +108,14 @@ TARGET_GLOBAL_CFLAGS += \
-ffunction-sections \
-fdata-sections \
-funwind-tables \
- -fstack-protector \
+ -fstack-protector-strong \
-Wa,--noexecstack \
-Werror=format-security \
+ -Wno-error=unused-parameter \
-D_FORTIFY_SOURCE=2 \
-fno-short-enums \
+ -no-canonical-prefixes \
+ -fno-canonical-system-headers \
$(arch_variant_cflags) \
-include $(android_config_h) \
-I $(dir $(android_config_h))
@@ -121,7 +124,7 @@ TARGET_GLOBAL_CFLAGS += \
# We cannot turn it off blindly since the option is not available
# in gcc-4.4.x. We also want to disable sincos optimization globally
# by turning off the builtin sin function.
-ifneq ($(filter 4.6 4.6.% 4.7 4.7.%, $(TARGET_GCC_VERSION)),)
+ifneq ($(filter 4.6 4.6.% 4.7 4.7.% 4.8 4.8.% 4.9 4.9.%, $(TARGET_GCC_VERSION)),)
TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \
-fno-strict-volatile-bitfields
endif
@@ -140,9 +143,12 @@ TARGET_GLOBAL_LDFLAGS += \
-Wl,-z,noexecstack \
-Wl,-z,relro \
-Wl,-z,now \
+ -Wl,--build-id=md5 \
-Wl,--warn-shared-textrel \
-Wl,--fatal-warnings \
-Wl,--icf=safe \
+ -Wl,--hash-style=gnu \
+ -Wl,--no-undefined-version \
$(arch_variant_ldflags)
TARGET_GLOBAL_CFLAGS += -mthumb-interwork
diff --git a/core/llvm_config.mk b/core/llvm_config.mk
index 18e689e..7df30c3 100644
--- a/core/llvm_config.mk
+++ b/core/llvm_config.mk
@@ -15,6 +15,7 @@ endef
CLANG_CONFIG_EXTRA_CFLAGS := \
-D__compiler_offsetof=__builtin_offsetof \
+ -Qunused-arguments
CLANG_CONFIG_UNKNOWN_CFLAGS := \
-funswitch-loops
Does anybody still have this patch?Errors caused by GCC 4.8+?
* ART Fix (bootloop) -> https://github.com/JustArchi/android_art/commit/71a0ca3057cc3865bd8e41dcb94443998d028407
Not sure if this approach is similar but I've tried this and it worked for me. Basically what it does is it forces ART to be compiled with GCC 4.8, so you need to have gcc 4.8 as well. Link: https://github.com/haoyangw/android_art/commits/gcc4.8 You need the last 3 commits
-Wl,--build-id=md5 \
-Wl,--hash-style=gnu \
- Optimized for speed yet more all instructions - ARM and THUMB (-O3)
- Optimized for speed also parts which are compiled with Clang (-O3)
- Turned off all debugging code (lack of -g)
- Eliminated redundant loads that come after stores to the same memory location, both partial and full redundancies (-fgcse-las)
- Ran a store motion pass after global common subexpression elimination. This pass attempts to move stores out of loops (-fgcse-sm)
- Enabled the identity transformation for graphite. For every SCoP we generate the polyhedral representation and transform it back to gimple. We can then check the costs or benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some minimal optimizations are also performed by the code generator ISL, like index splitting and dead code elimination in loops (-fgraphite -fgraphite-identity)
- Performed interprocedural pointer analysis and interprocedural modification and reference analysis (-fipa-pta)
- Performed induction variable optimizations (strength reduction, induction variable merging and induction variable elimination) on trees (-fivopts)
- Didn't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions (-fomit-frame-pointer)
- Attempted to avoid false dependencies in scheduled code by making use of registers left over after register allocation. This optimization most benefits processors with lots of registers (-frename-registers)
- Tried to reduce the number of symbolic address calculations by using shared “anchor” symbols to address nearby objects. This transformation can help to reduce the number of GOT entries and GOT accesses on some targets (-fsection-anchors)
- Performed tail duplication to enlarge superblock size. This transformation simplifies the control flow of the function allowing other optimizations to do a better job (-ftracer)
- Performed loop invariant motion on trees. It also moved operands of conditions that are invariant out of the loop, so that we can use just trivial invariantness analysis in loop unswitching. The pass also includes store motion (-ftree-loop-im)
- Created a canonical counter for number of iterations in loops for which determining number of iterations requires complicated analysis. Later optimizations then may determine the number easily (-ftree-loop-ivcanon)
- Assumed that loop indices do not overflow, and that loops with nontrivial exit condition are not infinite. This enables a wider range of loop optimizations even if the loop optimizer itself cannot prove that these assumptions are valid (-funsafe-loop-optimizations)
- Moved branches with loop invariant conditions out of the loop (-funswitch-loops)
- Constructed webs as commonly used for register allocation purposes and assigned each web individual pseudo register. This allows the register allocation pass to operate on pseudos directly, but also strengthens several other optimization passes, such as CSE, loop optimizer and trivial dead code remover (-fweb)
- Sorted the common symbols by alignment in descending order. This is to prevent gaps between symbols due to alignment constraints (-Wl,--sort-common)
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" />
<project name="ArchiDroid/Toolchain" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" remote="github" revision="architoolchain-5.2-arm-linux-gnueabihf" />
<remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" />
<project name="ArchiDroid/Toolchain" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" remote="github" revision="uber-4.9-arm-linux-androideabi" />
</manifest>
(...)/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/../libexec/gcc/arm-linux-androideabi/4.8.x-sabermod/cc1: error while loading shared libraries: libcloog-isl.so.4: cannot open shared object file: No such file or directory
apt-get install libcloog-isl4
(...)/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/../libexec/gcc/arm-linux-androideabi/4.8.x-sabermod/cc1: error while loading shared libraries: libisl.so.13: cannot open shared object file: No such file or directory
deb http://ftp.debian.org/debian testing main contrib non-free
deb-src http://ftp.debian.org/debian testing main contrib non-free
Hello dear developers.
I'd like to share with you effect of nearly 200 hours spent on trying to optimize Android and push it to the limits.
In general. You should be already experienced in setting up your buildbox, using git, building AOSP/CyanogenMod/OmniROM from source and cherry-picking things from review/gerrit. If you don't know how to build your own ROM from source, this is not a something you can apply to your ROM. Also, as you probably noticed, this is not a something you can apply to every ROM, as these optimizations are applied during compilation, so only AOSP roms, self-compiled from source may use this masterpiece.
So, what is it about? As we know, Android contains a bunch of low-level C/C++ code, which is compiled and acts as a backend for our java's frontend and android apps. Unfortunately, Google didn't put their best at focusing on optimization, so as a result we're using the same old flags set back in 2006 for Android Donut or anything which existed back then. As you guess, in 2006 we didn't have as powerful devices as now, we had to sacrifice performance for smaller code size, to fit to our little devices and run well on very low amount of memory. However, this is no longer a case, and by using newest compilers such as GCC 4.8 and properly setting flags, we can achieve something, which I call "Android in 2014".
You probably may heard of some developers claiming using of "O3 Flags" in their ROMs. Well, while this may be true, they've applied only to low-level ARM code, mostly used during kernel compilation. Additionally it overwrites O2 flag, which is already fast, so as you may guess, this is more likely a placebo effect and disappears right after you change the kernel. Take a look at the most cherry-picked "O3 Flags commit". You see big "-Os" in "TARGET_thumb_CFLAGS"? This is what I'm talking about.
However, the commit I'm about to present you is not a placebo effect, as it applies flags to everything what is compiled, and mostly important - target THUMB, about 90% of an Android.
Now I'll tell you some facts. We have three interesting optimization levels. Os, O2, O3. O2 enables all optimizations that do not involve a space-speed tradeoff. Os is similar to O2, but it disables all flags that increase code size. It also performs further optimizations to reduce code size to the minimum. O3 enables all O2 optimizations and some extra optimizations that like to increase code size and may, or may not, increase performance. If you want to ask if there's something more like O4, there is - Ofast, however it breaks IEEE standard and doesn't work with Android, as i.e. sqlite3 is not compatible with Ofast's -ffast-math flag. So no go for us.
Now here comes the fun part. Android by default is compiled with O2 flag for target ARM (about 10% of Android, mostly kernel) and Os flag for target THUMB (about 90% of Android, nearly everything apart from kernel). Some guys think that Os is better than O2 or O3 because smaller code size is faster due to bettering fitting in cpu cache. Unfortunately, I proven that it is a myth. Os was good back in 2006, as only with this flag Google was able to compile Dalvik and it's virtual machine while keeping good amount of free memory and space on eMMC cards. As or now, we have plenty of space, plenty of ram, plenty of CPU power and still good old Os flag for 90% of Android.
Now you should ask - where is your proof?, here I have it for you:
As you may noticed, I compiled whetstone.c benchmark using three different optimization flags - Os, O2 and O3. I repeated each test additional two times, just to make sure that Android doesn't lie to me. Source code of this test is available here and you may download it, compile for our beloved Android and try yourself. As you can see O3 > O2 >> Os, Os performs about 2.5x times worse than O2, and about 3.0x times worse than O3.
But, of course. Android is not a freaking benchmark, it's operating system. We can't tell if things are getting better or worse according to a simple benchmark. I kept that in mind and provided community with JustArchi's Mysterious Builds for test. I gave both mysterious builds and didn't tell them what is the mysterious change. Both builds have been compiled with the same toolchain, same version, same commits. The one and only mysterious change was the fact that every component compiled as target thumb (major portion of an android) has been optimized for speed (O3) in build #1 (experimental), and optimized for size (Os) in build #2 (normal behaviour). Check poll yourself, 9 votes on build 1 in terms of performance, and 1 vote on build 2. I decided that this and benchmark is enough to tell that O2/O3 for target thumb is something that we want.
Now the battle is, O2 or O3? This is tough choice, here are some facts:
1. Kernel compiled with O2 has 4902 KB, with O3 4944 KB, so O3 is 42 KB bigger.
2. ROM compiled with O3 is 3 MB larger than O2 after zip compression. Fast overview: 97 binaries in /system/bin and 2 binaries in /system/xbin + 283 libraries in /system/lib and other files, about 400 files in total. 3 MB / 400 = 7,5 KB per file size increase.
3. No issues
In general, I doubt that this extra chunk of code may cause any significant memory usage or slower performance. I suggest to use O3 if it doesn't cause any issues to you compared to O2, but older devices may use O2 purely for saving on code size, similar way Google did it back in 2006 using Os flag.
[SIZE="+1"]Now let's get down to bussiness[/SIZE].
Here is a link to the commit -> https://github.com/JustArchi/android_build/commit/8e1b82c082a8de9160e6c0fc3ded37b591c3e517
And here is a list of important improvements:
Looks badass? It is badass. Head over to my ArchiDroid 2.X project and see yourself how people react after switching to my ROM. Take a look at just one small example, or another one . No bullsh*t guys, this is future.
However, please read my commit carefully before you decide to cherry-pick it. You must understand that Google's flags weren't touched since 7 years and nobody can assure you that they will work properly for your ROM and your device. You may experiment with them a bit to find out if they're not causing conflicts or other issues.
I can assure you that my OmniROM build compiles fine with some fixes mentioned in the commit itself. Just don't forget to clean ccache (rm -rf /home/youruser/.ccache or rm -rf /root/.ccache) and make clean/clobber.
You can use, modify and share my commit anyway you want, just please keep proper credits in changelogs and in the repo itself. If you feel generous, you may also buy me a coke for massive amount of hours put into those experiments.
Now go ahead and show your users how things should be done .