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