discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ubuntu CMake instructions


From: Patryk Laurent
Subject: Re: Ubuntu CMake instructions
Date: Thu, 27 Dec 2012 15:57:05 -0500

Fantastic, thanks for this feedback -- I will integrate it and post a revision!

Patryk


On Dec 27, 2012, at 2:55 PM, David Chisnall <theraven@sucs.org> wrote:

> Hi Patrky,
> 
> Thanks for doing this, I have a few comments:
> 
> On 27 Dec 2012, at 18:26, Patryk Laurent wrote:
> 
>> Greetings,
>> 
>> Here are some step-by-step instructions for installing the latest Objective 
>> C (including libobjc2) on a fresh Ubuntu server 12.10.  I have posted it to 
>> the Wiki in case anyone has edits.
>> 
>> http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux
>> 
>> Best,
>> Patryk
>> 
>> 
>> # Objective C 2.0 installation 
>> # On fresh install of Ubuntu 12.10 Server
>> # Patryk Laurent (http://pakl.net/)
>> # Dec 27, 2012
>> 
>> sudo aptitude install build-essential git subversion ninja cmake
>> 
>> svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
>> cd llvm/tools
>> svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
>> cd .. # Back to llvm directory
>> ./configure --enable-optimized
> 
> Please use the CMake build system for LLVM, not the autoconf one.  The 
> autoconf one does not install the CMake modules, which are needed for 
> building out of tree modules, such as the LLVM optimisation passes included 
> with libobjc2.  It's also significantly faster to configure, and better at 
> handling incremental builds.
> 
> I'd also recommend using ninja instead of make (-G Ninja to the cmake command 
> line), although it doesn't make much difference if you are not doing 
> incremental builds.  If you are going to update LLVM / Clang regularly, using 
> ninja will save a lot of build time.
> 
> Oh, and in-tree builds are not supported for LLVM with either build system, 
> and do periodically break.
> 
>> make -j4  # Go off to prepare cup of coffee here.
> 
> -j4 depends a lot on the amount of RAM you have.  For LLVM, -j {number of GBs 
> of RAM you have} generally gives best performance.  A number of the phases 
> (especially linking, but compiling some of the template-heavy classes is the 
> same)  use about 1GB of RAM and if you hit swap then that can easily turn a 
> five-second compile into a one minute compile.
> 
>> 
>> export PATH=$PATH:~/llvm/Release+Asserts/bin  # Add to .bashrc
>> export CC=clang  # Add to .bashrc
> 
> Also export CXX=clang++.
> 
>> clang -v
>> 
>> svn co http://svn.gna.org/svn/gnustep/modules/core
>> svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2
> 
> You should build and install libobj2 at this point:
> 
> $ cd libobjc2
> $ mkdir Build
> $ cd Build
> $ cmake ..
> $ make -j8 && sudo make install
> 
> or:
> 
> $ cmake .. -G Ninja
> $ ninja && sudo -E ninja install
> 
> (ninja is marginally faster with libobjc2, but it's a small project so the 
> difference is typically a fraction of a second)
> 
> If you don't have an existing GNUstep install, libobjc2 should now be 
> installed in /usr/lib on GNU/Linux systems.  If you do have one, then it will 
> be installed by default in wherever gnustep-config recommends.  If you want 
> to change this, add a -DGNUSTEP_INSTALL_TYPE={NONE,LOCAL,SYSTEM,NETWORK} to 
> your cmake command line.  
> 
> For Debian / Ubuntu, I would probably recommend setting CPACK_GENERATOR to 
> DEB and setting CMAKE_INSTALL_PREFIX to a staging directory.  Then, instead 
> of make install, run make package.  This will give you a .deb of libobjc2, 
> which should make life a bit easier.  For RPM-based Linux systems, s/DEB/RPM/ 
> in the above instructions.
> 
>> cd core/make
>> ./configure --enable-debug-by-default --with-layout=gnustep
>> make && sudo -E make install
>> . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh # Add to .bashrc
>> 
>> sudo aptitude install gobjc   # Otherwise we get "cc1obj not found
> 
> This will only happen if you are building things with gcc.  You shouldn't be, 
> since you've just gone to the trouble of building clang.  I suspect that it's 
> because you didn't set CXX=clang++.
> 
>> cd ../../libobjc2
>> mkdir build
>> cd build
>> cmake ..
>> make
>> sudo -E make install
> 
> If you do this after GNUstep Make, then GNUstep Make won't be correctly 
> configured.  You should do it first.
> 
>> cat > blocktest.m << EOF
>> #include <stdio.h>
>> 
>> int main() {
>>    void (^hello)(void) = ^(void) {
>>        printf("Hello, block!\n");
>>    };
>>    hello();
>>    return 0;
>> }
>> EOF
>> 
>> clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc 
>> -fobjc-nonfragile-abi -fblocks  -lobjc  blocktest.m
> 
> -fobjc-nonfragile-abi is deprecated.  You should use -fobjc-runtime=gnustep 
> instead.  For testing experimental features in the current svn version of the 
> runtime, use -fobjc-runtime=gnustep-1.7 (this will be the default for gnustep 
> in clang 3.3.  In clang 3.2, it defaults to 1.6).
> 
> -fblocks should be implied by the non-fragile ABI, please let me know if it 
> isn't.
> 
> David
> 
> -- Send from my Jacquard Loom
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]