GNUstep under Ubuntu Linux

From GNUstepWiki

(Difference between revisions)
Revision as of 18:12, 27 December 2012
Pakl (Talk | contribs)
Updated for CMake
← Previous diff
Revision as of 16:55, 30 December 2012
Pakl (Talk | contribs)
Comments
Next diff →
Line 1: Line 1:
 +Objective C 2.0 on a fresh install of Ubuntu 12.10 Server
 +
<pre> <pre>
-# Objective C 2.0 installation +# Objective C 2.0 on a fresh install of Ubuntu 12.10 Server
-# On fresh install of Ubuntu 12.10 Server+
-# Patryk Laurent (http://pakl.net/)+
-# Dec 27, 2012+
 +# Dependencies
sudo aptitude install build-essential git subversion ninja cmake sudo aptitude install build-essential git subversion ninja cmake
- +# Dependencies for GNUStep Base
 +sudo aptitude install libffi-dev libxml2-dev libgnutls-dev libicu-dev
 +# Dependencies for libdispatch
 +sudo aptitude install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool
 +cd ~
 +git clone git://github.com/nickhutchinson/libdispatch.git
 +svn co http://svn.gna.org/svn/gnustep/modules/core
 +svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
-cd .. # Back to llvm directory 
-./configure --enable-optimized 
-make -j4 # Go off to prepare cup of coffee here. 
-export PATH=$PATH:~/llvm/Release+Asserts/bin # Add to .bashrc+cd ~/llvm
-export CC=clang # Add to .bashrc+mkdir build
 +cd build
 +cmake ..
 +make -j8 # 8=your number of build CPUs
 + 
 +echo "export PATH=\$PATH:~/llvm/build/bin" >> ~/.bashrc
 +echo "export CC=clang" >> ~/.bashrc
 +echo "export CXX=clang++" >> ~/.bashrc
 +source ~/.bashrc
clang -v clang -v
 +clang++ -v
-svn co http://svn.gna.org/svn/gnustep/modules/core+cd ~/libobjc2
-svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2+
-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+
-cd ../../libobjc2+
mkdir build mkdir build
cd build cd build
cmake .. cmake ..
-make+make -j8
sudo -E make install sudo -E make install
 +
 +cd ~/core/make
 +./configure --enable-debug-by-default --with-layout=gnustep
 +make && sudo -E make install
 +echo ". /usr/GNUstep/System/Library/Makefiles/GNUstep.sh" >> ~/.bashrc
 +source ~/.bashrc
 +
 +cd ~/core/base/
 +./configure
 +make -j8
 +sudo -E make install
 +
 +cd ~/libdispatch
 +sh autogen.sh
 +./configure CFLAGS="-I/usr/include/kqueue" LDFLAGS="-lkqueue -lpthread_workqueue -pthread -lm"
 +make -j8
 +sudo -E make install
 +sudo ldconfig
 +
 +# ----------------------------------------------------------------------------------------
 +# TEST COMPILING SOME CODE FROM THE INTERNET
 +# ----------------------------------------------------------------------------------------
 +
 +You can compile the following code with:
 +
 +clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc -fobjc-runtime=gnustep -fblocks -lobjc blocktest.m
 +
 +clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base Fraction.m helloGCD_objc.m
 +
 +
 +
cat > blocktest.m << EOF cat > blocktest.m << EOF
Line 45: Line 81:
EOF EOF
-clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc -fobjc-nonfragile-abi -fblocks -lobjc blocktest.m +cat > helloGCD_objc.m << EOF
 + 
 +#include <dispatch/dispatch.h>
 +#import <stdio.h>
 +#import "Fraction.h"
 + 
 +int main( int argc, const char *argv[] ) {
 + dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);
 + Fraction *frac = [[Fraction alloc] init];
 + 
 + [frac setNumerator: 1];
 + [frac setDenominator: 3];
 + 
 + // print it
 + dispatch_sync(queue, ^{
 + printf( "The fraction is: " );
 + [frac print];
 + printf( "\n" );
 + });
 + dispatch_release(queue);
 + 
 + return 0;
 +}
 + 
 +EOF
 + 
 +cat > Fraction.h << EOF
 + 
 +#import <Foundation/NSObject.h>
 + 
 +@interface Fraction: NSObject {
 + int numerator;
 + int denominator;
 +}
 + 
 +-(void) print;
 +-(void) setNumerator: (int) n;
 +-(void) setDenominator: (int) d;
 +-(int) numerator;
 +-(int) denominator;
 +@end
 + 
 +EOF
 + 
 + 
 +cat > Fraction.m << EOF
 +#import "Fraction.h"
 +#import <stdio.h>
 + 
 +@implementation Fraction
 +-(void) print {
 + printf( "%i/%i", numerator, denominator );
 +}
 + 
 +-(void) setNumerator: (int) n {
 + numerator = n;
 +}
 + 
 +-(void) setDenominator: (int) d {
 + denominator = d;
 +}
 + 
 +-(int) denominator {
 + return denominator;
 +}
 + 
 +-(int) numerator {
 + return numerator;
 +}
 +@end
 + 
 +EOF
</pre> </pre>

Revision as of 16:55, 30 December 2012

Objective C 2.0 on a fresh install of Ubuntu 12.10 Server

# Objective C 2.0 on a fresh install of Ubuntu 12.10 Server

# Dependencies
sudo aptitude install build-essential git subversion ninja cmake
# Dependencies for GNUStep Base
sudo aptitude install libffi-dev libxml2-dev libgnutls-dev libicu-dev 
# Dependencies for libdispatch
sudo aptitude install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool
cd ~
git clone git://github.com/nickhutchinson/libdispatch.git
svn co http://svn.gna.org/svn/gnustep/modules/core
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2
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 ~/llvm
mkdir build
cd build
cmake ..
make -j8   # 8=your number of build CPUs

echo "export PATH=\$PATH:~/llvm/build/bin" >> ~/.bashrc
echo "export CC=clang"  >> ~/.bashrc
echo "export CXX=clang++" >> ~/.bashrc
source ~/.bashrc
clang -v
clang++ -v

cd ~/libobjc2
mkdir build
cd build
cmake ..
make -j8
sudo -E make install

cd ~/core/make
./configure --enable-debug-by-default --with-layout=gnustep
make && sudo -E make install
echo ". /usr/GNUstep/System/Library/Makefiles/GNUstep.sh" >> ~/.bashrc
source ~/.bashrc

cd ~/core/base/
./configure
make -j8
sudo -E make install

cd ~/libdispatch
sh autogen.sh
./configure CFLAGS="-I/usr/include/kqueue" LDFLAGS="-lkqueue -lpthread_workqueue -pthread -lm"
make -j8
sudo -E make install
sudo ldconfig

# ----------------------------------------------------------------------------------------
# TEST COMPILING SOME CODE FROM THE INTERNET
# ----------------------------------------------------------------------------------------

You can compile the following code with:

clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc -fobjc-runtime=gnustep -fblocks  -lobjc  blocktest.m 

clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobj-arc -fobjc-runtime=gnustep -fblocks  -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m




cat > blocktest.m << EOF
#include <stdio.h>

int main() {
    void (^hello)(void) = ^(void) {
        printf("Hello, block!\n");
    };
    hello();
    return 0;
}
EOF

cat > helloGCD_objc.m << EOF

#include <dispatch/dispatch.h>
#import <stdio.h>
#import "Fraction.h"

int main( int argc, const char *argv[] ) {
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); 
   Fraction *frac = [[Fraction alloc] init];

   [frac setNumerator: 1];
   [frac setDenominator: 3];

   // print it
   dispatch_sync(queue, ^{
     printf( "The fraction is: " );
     [frac print];
     printf( "\n" );
   });
   dispatch_release(queue);

   return 0;
}

EOF

cat > Fraction.h << EOF

#import <Foundation/NSObject.h>

@interface Fraction: NSObject {
   int numerator;
   int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end

EOF


cat > Fraction.m << EOF
#import "Fraction.h"
#import <stdio.h>

@implementation Fraction
-(void) print {
   printf( "%i/%i", numerator, denominator );
}

-(void) setNumerator: (int) n {
   numerator = n;
}

-(void) setDenominator: (int) d {
   denominator = d;
}

-(int) denominator {
   return denominator;
}

-(int) numerator {
   return numerator;
}
@end

EOF