Recompiling llvm+clang how-to?

Hello list

I have questions about compiling Clang+llvm.

I compile as the link below instructs.

http://clang.llvm.org/get_started.html

I do on Ubuntu 12.04.

`time make -j5` prints for about 13 minutes to compile a brand new
version of Clang+llvm.
And after this I edit some C++ code(clang/tools/driver/driver.cpp) and
compiles using the very same makefile which was used above sentence.
But this time the make command event NOT return for about more than 13 hours.

If I want to recompile already compiled source code, how am I supposed to do?
- Do I need to make another build directory and build there?
- Do I only need to wait that long time?

Thank you in advance.

Sincerely
Journeyer J. Joh

Hi Journeyer J. Joh,

I have questions about compiling Clang+llvm.

I compile as the link below instructs.

http://clang.llvm.org/get_started.html

I do on Ubuntu 12.04.

`time make -j5` prints for about 13 minutes to compile a brand new
version of Clang+llvm.
And after this I edit some C++ code(clang/tools/driver/driver.cpp) and
compiles using the very same makefile which was used above sentence.

this is the correct procedure.

But this time the make command event NOT return for about more than 13 hours.

This is not normal, you should investigate what process is stuck.

Ciao, Duncan.

Hello Mr. Ciao and people on our list

I tried this last night and now in the morning I captured the problem status.
Could you please advise me on this problem?

- I downloaded brand new clang+llvm and compiled it as instructed from
the url below.

http://clang.llvm.org/get_started.html

- I added some code to tools/clang/tools/driver/driver.cpp

343 int main(int argc_, const char **argv_) {
344
345 {
346 int aaa = 0, bbb = 0;
347
348 for (int i = 0; i != 1 ; ) {
349 if (aaa < 10000) aaa += 1;
350 if (bbb < 10000) bbb += aaa;
351 if (aaa > 100) aaa -= 1;
352 if (bbb > 100) bbb -= aaa;
353 }
354 }

- And after this I just tried to recompile using the very same
Makefile under build directory where I compiled the brand new
clang+llvm as show beow.

time make -j3

- I captured messages below when the compiler stucks in somewhere.

[$ make -j3]
…...............................................
make[3]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/driver'
llvm[4]: Compiling driver.cpp for Debug+Asserts build
llvm[4]: Linking Debug+Asserts executable clang
llvm[4]: ======= Finished Linking Debug+Asserts Executable clang
llvm[4]: Creating Debug+Asserts Alias clang++
llvm[4]: ======= Finished Creating Debug+Asserts Alias clang++
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/driver'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/libclang'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/libclang'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/c-index-test'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/c-index-test'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/arcmt-test'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/arcmt-test'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/c-arcmt-test'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/c-arcmt-test'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/diagtool'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/diagtool'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/clang-check'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools/clang-check'
make[3]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/tools'
make[3]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/runtime'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/runtime/libcxx'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory
`/home/hum/Projects/clang_llvm/build/tools/clang/runtime/libcxx'
make[4]: Entering directory
`/home/hum/Projects/clang_llvm/build/tools/clang/runtime/compiler-rt'

The compiler was compiling runtime library?? Anyway this is the last output message.

[$ ps aux | grep clang]
hum 2471 0.0 0.0 4388 8 pts/2 S+ 00:24 0:00
/bin/sh -c for dir in lib/Support lib/TableGen utils lib/VMCore lib
tools/llvm-config tools runtime docs unittests; do \? if ([ ! -f
$dir/Makefile ] || \? command test $dir/Makefile -ot
/home/hum/Projects/clang_llvm/llvm/$dir/Makefile ); then \?
/home/hum/Projects/clang_llvm/llvm/autoconf/mkinstalldirs $dir; \?
/bin/cp /home/hum/Projects/clang_llvm/llvm/$dir/Makefile
$dir/Makefile; \? fi; \? (make -C $dir all ) || exit 1; \?done

hum 2911 0.0 0.0 4388 4 pts/2 S+ 00:25 0:00
/bin/sh -c \? SD=/home/hum/Projects/clang_llvm/llvm/tools/clang; \?
DD=clang; \? if [ ! -f $SD/Makefile ]; then \? SD=clang; \?
DD=clang; \? fi; \? if ([ ! -f $DD/Makefile ] || \?
command test $DD/Makefile -ot \? $SD/Makefile );
then \? /home/hum/Projects/clang_llvm/llvm/autoconf/mkinstalldirs
$DD; \? /bin/cp $SD/Makefile $DD/Makefile; \?fi; \?make -C $DD all

hum 2916 0.0 0.0 15900 0 pts/2 S+ 00:25 0:00 make
-C clang all

hum 2918 0.0 0.0 4388 160 pts/2 S+ 00:25 0:00
/bin/sh -c for dir in utils/TableGen include lib tools runtime docs
unittests; do \? if ([ ! -f $dir/Makefile ] || \? command test
$dir/Makefile -ot
/home/hum/Projects/clang_llvm/llvm/tools/clang/$dir/Makefile ); then
\? /home/hum/Projects/clang_llvm/llvm/autoconf/mkinstalldirs $dir;
\? /bin/cp /home/hum/Projects/clang_llvm/llvm/tools/clang/$dir/Makefile
$dir/Makefile; \? fi; \? (make -C $dir all ) || exit 1; \?done

hum 3237 0.0 0.0 4388 608 pts/2 S+ 00:45 0:00
/bin/sh -c \? SD=/home/hum/Projects/clang_llvm/llvm/tools/clang/runtime/compiler-rt;
\? DD=compiler-rt; \? if [ ! -f $SD/Makefile ]; then \?
SD=compiler-rt; \? DD=compiler-rt; \? fi; \? if ([ ! -f
$DD/Makefile ] || \? command test $DD/Makefile -ot \?
               $SD/Makefile ); then \?
/home/hum/Projects/clang_llvm/llvm/autoconf/mkinstalldirs $DD; \?
/bin/cp $SD/Makefile $DD/Makefile; \?fi; \?make -C $DD all

hum 3247 0.0 0.0 4388 608 pts/2 S+ 00:45 0:00
/bin/sh -c make -C
/home/hum/Projects/clang_llvm/llvm/projects/compiler-rt \?
ProjSrcRoot=/home/hum/Projects/clang_llvm/llvm/projects/compiler-rt \?
ProjObjRoot=/home/hum/Projects/clang_llvm/build/tools/clang/runtime/compiler-rt
\? CC="/home/hum/Projects/clang_llvm/build/Debug+Asserts/bin/clang"
\? clang_linux

hum 3248 0.0 0.0 15908 1356 pts/2 S+ 00:45 0:00 make
-C /home/hum/Projects/clang_llvm/llvm/projects/compiler-rt
ProjSrcRoot=/home/hum/Projects/clang_llvm/llvm/projects/compiler-rt
ProjObjRoot=/home/hum/Projects/clang_llvm/build/tools/clang/runtime/compiler-rt
CC=/home/hum/Projects/clang_llvm/build/Debug+Asserts/bin/clang
clang_linux

hum 3251 0.0 0.0 4388 604 pts/2 S+ 00:45 0:00
/bin/sh -c result=""; for arch in i386; do if
/home/hum/Projects/clang_llvm/build/Debug+Asserts/bin/clang -arch
$arch -c -integrated-as
/home/hum/Projects/clang_llvm/llvm/projects/compiler-rt/make/platform/clang_darwin_test_input.c
-isysroot /home/hum/Projects/clang_llvm/llvm/projects/compiler-rt/SDKs/darwin
-o /dev/null > /dev/null 2> /dev/null; then result="$result$arch ";
else printf 1>&2 "warning: clang_darwin.mk: dropping arch '$arch' from
lib 'eprintf'\n"; fi; done; echo $result

hum 3252 99.9 0.4 79412 9560 pts/2 R+ 00:45 497:09
/home/hum/Projects/clang_llvm/build/Debug+Asserts/bin/clang -arch i386
-c -integrated-as
/home/hum/Projects/clang_llvm/llvm/projects/compiler-rt/make/platform/clang_darwin_test_input.c
-isysroot /home/hum/Projects/clang_llvm/llvm/projects/compiler-rt/SDKs/darwin
-o /dev/null

I grepped 'clang' from ps aux when the compiler stucks in somewhere.

[$ top]
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3252 hum 20 0 79412 9560 9272 R 100 0.5 510:06.43 clang
1169 root 20 0 222m 47m 6588 S 3 2.4 0:50.93 Xorg
1943 hum 20 0 1033m 79m 16m R 2 4.0 0:36.01
unity-2d-shell

Process clang, PID 3252 spends 100% of cpu more than 7 hours

I want to debug and learn llvm+clang source code. To do this I need to
compile and modify the code frequently.

Please help me on this.

Thank you in advance.

Journeyer J. Joh

"Journeyer J. Joh" <oosaprogrammer@gmail.com> writes:

Hello Mr. Ciao and people on our list

I tried this last night and now in the morning I captured the problem status.
Could you please advise me on this problem?

- I downloaded brand new clang+llvm and compiled it as instructed from
the url below.

http://clang.llvm.org/get_started.html

- I added some code to tools/clang/tools/driver/driver.cpp

343 int main(int argc_, const char **argv_) {
344
345 {
346 int aaa = 0, bbb = 0;
347
348 for (int i = 0; i != 1 ; ) {
349 if (aaa < 10000) aaa += 1;
350 if (bbb < 10000) bbb += aaa;
351 if (aaa > 100) aaa -= 1;
352 if (bbb > 100) bbb -= aaa;
353 }
354 }

- And after this I just tried to recompile using the very same
Makefile under build directory where I compiled the brand new
clang+llvm as show beow.

time make -j3

[snip]

I grepped 'clang' from ps aux when the compiler stucks in somewhere.

[$ top]
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3252 hum 20 0 79412 9560 9272 R 100 0.5 510:06.43 clang
1169 root 20 0 222m 47m 6588 S 3 2.4 0:50.93 Xorg
1943 hum 20 0 1033m 79m 16m R 2 4.0 0:36.01
unity-2d-shell

Process clang, PID 3252 spends 100% of cpu more than 7 hours

I want to debug and learn llvm+clang source code. To do this I need to
compile and modify the code frequently.

I cannot replicate the problem with a Clang checkout from June 29.

What happens if you replace line 348 with

for (int i = 0; i != 1 ; ++i) {

?

Journeyer J. Joh wrote:

Hello Mr. Ciao and people on our list

I tried this last night and now in the morning I captured the problem status.
Could you please advise me on this problem?

- I downloaded brand new clang+llvm and compiled it as instructed from
the url below.

http://clang.llvm.org/get_started.html

- I added some code to tools/clang/tools/driver/driver.cpp

343 int main(int argc_, const char **argv_) {
344
345 {
346 int aaa = 0, bbb = 0;
347
348 for (int i = 0; i != 1 ; ) {
349 if (aaa< 10000) aaa += 1;
350 if (bbb< 10000) bbb += aaa;
351 if (aaa> 100) aaa -= 1;
352 if (bbb> 100) bbb -= aaa;
353 }
354 }

You modified the "clang" program to have an infinite loop ...

- And after this I just tried to recompile using the very same
Makefile under build directory where I compiled the brand new
clang+llvm as show beow.

time make -j3

- I captured messages below when the compiler stucks in somewhere.

... it gets stuck in compiler-rt which uses the newly built clang to build compiler-rt.

You have invented a convoluted form of self-inflicted wound. :slight_smile:

Nick