Difference between revisions of "GNUstep under Ubuntu Linux"
Jump to navigation
Jump to search
(Fixed missing quote) |
(Updated for cmake) |
||
Line 1: | Line 1: | ||
<pre> | <pre> | ||
− | # Objective C 2.0 | + | # Objective C 2.0 on a fresh install of Ubuntu 12.10 Server |
− | |||
# Patryk Laurent (http://pakl.net/) | # Patryk Laurent (http://pakl.net/) | ||
− | # Dec | + | # Dec 28, 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 | ||
− | |||
− | |||
− | |||
− | export PATH=$PATH:~/llvm/ | + | cd ~/llvm |
− | export CC=clang | + | 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 | ||
− | + | cd ~/libobjc2 | |
− | + | mkdir build | |
− | cd core/make | + | cd build |
+ | cmake .. | ||
+ | make -j8 | ||
+ | sudo -E make install | ||
+ | |||
+ | cd ~/core/make | ||
./configure --enable-debug-by-default --with-layout=gnustep | ./configure --enable-debug-by-default --with-layout=gnustep | ||
make && sudo -E make install | make && sudo -E make install | ||
− | . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh | + | 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 | |
− | |||
− | make | ||
sudo -E make install | 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 | ||
− | + | 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 19:37, 28 December 2012
# Objective C 2.0 on a fresh install of Ubuntu 12.10 Server # Patryk Laurent (http://pakl.net/) # Dec 28, 2012 # 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