I'm learning Objective-C and my friend have a real Macintosh IIci, that uses a Mac System 7(specifically 7.5.5 with a 68k processor) and I've installed Metrowerks C/C++ IDE(I think it's the version 1, but I don't know), but i didn't tested it, then i want to know one thing: It's possible to develop in Objective-C using NSObjects/Objects and AppKit or something like this on it? Thanks.
The short answer, as Stephen says, is no. But, just for fun, I started thinking about what you'd have to do to actually make that work.
1) You'd have to make gcc run on the 68k (gcc is the compiler that speaks Objective-C; you could probably substitute llvm for gcc, but let's not get too crazy). This is no mean feat. A quick look at the latest gcc builds does not show anything for that platform (unsurprisingly). I'm not an expert on gcc, but I bet it uses gcc-specific extensions and modern C so getting it to compile with an existing 68k compiler will probably be a non-starter.
So the first step for this will be adding an 68k back-end to gcc. This will allow gcc to spit out code that will run on a 68k. You could then use an x86 build of gcc with 68k support to cross-compile a new gcc binary that will actually run on your ancient Mac.
Having never messed with gcc before, I suspect that this task would take me about two-three years. Maybe more. but still, it's not impossible.
2) Once you've got a modern version of gcc that you can run on your 68k machine, you can use it to cross-compile for x86 or PPC. (Since you're talking about AppKit, you will never be able to actually RUN any of these programs on your old computer. All testing will have to take place on a more modern machine.) You now have to get all of the libraries and headers for Cocoa/Foundation/AppKit/libc/etc from your target machine (a PPC or x86 Mac) and put them somewhere that the gcc on your 68k can find. This will probably take a good 6 months of finagling to get right. But again, it shouldn't be impossible.
It might not be legal, though. As far as I know, the license agreements for OS X (which contains Cocoa) and Xcode will not let you move those binaries around willy-nilly to any machine you want. You would want to speak to a competent attorney before doing this as no one wants to get a visit from Interpol.
3) I think you're done at this point. You can write Objective-C/Cocoa code on your Mac IIci, compile it for a PPC or x86 Mac, ship it off to an OS X box using your favorite method (I've only been a Mac guy since 2005 so I don't even know the connectivity options on the IIci), and test and debug it rather painfully.
At this point, you have access to a Mac running OS X on either a PPC or x86 chip. And you will wonder why you don't just do all your development on THIS machine instead. And since you've spent a few years getting your IIci development environment set up, buying an old PPC Mac for development will be cheap.
Still, it could be a fun idea. It'd probably get you on the reddit front page if you pulled it over. (Though, honestly, it'd be easier to just fake it for YouTube if that's all you're after.)
Short answer: no.
Objective-C became the lingua franca of mac development with OS X, which went into beta 10 years or so after that computer shipped. Most development for pre- OS X systems was done with C or C++.
Without OS X, you won't have any of the system libraries or headers to link against, and the Metrowerks compiler won't know anything about the Objective-C syntax or runtime extensions to C.
To top it off, the Objective-C frameworks are built for PowerPC (or now, Intel) macs, whereas the processor in that machine uses the older 68k architecture.
gcc was still being compiled for 68k Amiga in the early noughties, so there might be some chance to get it working on 68k Mac OS. I believe Objective C extension were available from at least the early 90s for gcc.
Another option is to use 68k Linux. There is an port of Debian 4.0 (etch) for 68k, and a current effort to revive it, so you could likely get a fairly recent version of gcc running.
There is also the possibility to cross compile.
The contemporaneous C environments (no idea if any had supporting Objective C) were Think C (later Symantec C++) and Apple's Macintosh Programmers Workshop. In theory, you might get one of these to compile an objective C supporting version of gcc.
No, it's not possible they are just too old to my knowledge.
Related
Having server x86/x64, how best develop software under AIX6/7 on C++?
Someone personally tried to do it and that advise from personal experience:
Can have any IBM compilers for x64, which ensures portability compilation on PowerPC AIX or can be have a virtual machine under Windwos x64 with emulate PowerPC x64 to install AIX and compile under it, or may be better buy cloud's service with AIX to develop and where can I do it?
As I know QEMU does not support AIX.
What do you say about Simics, OVPSim and Bochs or other?
I'm not clear on the question but if you don't have the AIX include files, you are going to have trouble trying to develop code that will compile on AIX. AIX often throws in some oddity that needs to be worked around in the include files.
As far as which compiler, I use gcc. Start by pulling down the gcc from IBM: http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/ezinstall.html Then pick a GCC and compile it using the GCC you pulled down. Then use the new GCC for your development. An alternative would be to pull down the GCC from perzl: http://www.perzl.org/aix/index.php?n=Main.Gcc -- I've never tried that but I've heard good things about them.
Hope this helps
Update to Alex:
Yes. As mentioned, the gcc supplied by IBM will give you fits but it is good enough to compile your own gcc which will then be very stable. I've written device drivers using C++ for AIX, used g++, and included parts of Boost.
gcc/g++ for AIX is very stable and complete if compiled properly. Aside from that project, I have about 50 open source packages working on AIX. Most are C and not C++ but in general, if you are doing open source, gcc on AIX will give you less obstacles than xlc. Not xlc's fault. Its just what the developers assume. Like perzl, I use to upload my images as installp install images but had no users so I stopped.
Last: the customary warning is to not use GNU's ld. Use AIX's ld and assembler (as) but you can find threads that will contradict this. I have not seriously tried GNUs ld although I took a stab at it once about 6 months ago and then got side tracked.
Two of my projects you might want to look at:
https://github.com/pedz/aix-build-scripts -- this is a (probably hard to follow) set of scripts to start from ground zero and get you rolling compiling open source projects on AIX.
https://github.com/pedz/aixbin -- This is a set of two scripts that I now have ambivalent feelings about. Many open source projects (Ruby in particular) need these scripts but others (GNU Emacs) will fail if they are used.
I am a newbie to embedded developement, as figure shown. I have a small ARM board, AT91SAM7-EX256. I have also a JTAG programmer dongle, too. I am using Linux (Ubuntu x86_32) on my notebook and desktop machine. I'm using CodeSourcery Lite for cross-compiling to ARM-Linux.
Am I right that I can't use this Linux-target cross-compiler to make binary or hex files for the small ARM board (it comes without any operating system)? Should I use the version called ARM EABI instead?
As I see, it's a "generic" ARM compiler. I've read some docs, and there're lot of options to specify the processor type and instruction set (thumb, etc.), there will be no problem with it. But how can I tell the compiler, how should the image (bin/hex) looks like for the specific board (startup, code/data blocks etc.)? (In assemblers, there're the org and load directives for it.)
What software do I need to capture some debug messages from the board on my PC? I don't want to on-board debugging, I just need some detailed run-time signal, more than just blinking leds.
I have an option to use MS-Windows, I can get a dedicated machine for it. Do you recommend it, is it much easier?
Can I use inline assembly somehow in my C code? I dunno anything about that. Can I use C++ or just C?
I have also a question, which don't need to answer: are there really 4096 kind of GNU compilers and cross-compilers (from Linux_x86_32 -> Linux_x86_32, Linux_x86_32 -> Linux_ARM, OSX -> Linux_ARM, PPC_Linux -> OSX) and 16 different GNU compiler sources (as many target platforms/processors exists) around? The signs says "yes", but I can't believe it. Correct me, and show me the GNU compiler which can produce object file for any platform/processor, and the universal linker which can produce executable for any platform.
While Windows is not a "better" platform do this kind of embedded development on, it may be easier to start with since you can get a pre-built environment to work with. For example, Yagarto (which I would recommend).
Setting up an embedded development environment on Linux can require a considerable amount of knowledge, but it's not impossible.
To answer your questions:
Your Linux cross-compiler comes with libraries to build executables for a Linux environment. You have hinted that you want to build a bare-metal executable for this board. While you can do this with your compiler, it will just confuse things. I recommend building a baremetal cross-compiler. Since you're building your own baremetal executable (and thus you are the operating system, the ABI doesn't matter since you're generating all of the code and not interoperating with other previously built code.
There are several versions of the ARM instruction set (and Thumb). You need to generate code for your particular processor. If you generate the code for a newer version of the instruction set, you will likely generate code which generates a reserved instruction exception. Most prebuilt gcc cross-compiler toolchains for ARM are "multilib" and will build for a variety of architectures in both ARM and Thumb.
Not sure exactly what you're looking for here. This is a bare metal platform. You can use the debugger channel to send messages if you're debugging on target, or you'll need to build your own communication channel into the firmware you write (i.e. uart support).
See above.
Yes. See here for details on gcc's extended inline assembly syntax. You can do this in C++ and C. You can also simply link pure assembly files.
There is no universal gcc compiler / linker. You need a uniquely built compiler for each host / target combination you use.
Finally, please take a look at Atmel's documentation. They have a wealth of information on developing for this target as well as a board package with the needed linker directives and example programs. Note of course the package is for Atmel's own eval board, but it will get you started.
http://sam7stuff.blogspot.com/
I use either of the codesourcery lite versions. But I have no use for the gcc library nor a C library, I just need a compiler.
In the gcc 3 days newlib was great, modify two files worth of system support (simple open, close, read, putc type stuff) and you could compile just about anything, but with gcc 4.x you cannot even go back and cross compile gcc 3.x, you have to install an old linux distro in a virtual machine.
To get the gcc library yes you probably want to use the eabi version not the version with linux gnueabi in the file names.
You might also consider llvm (if you dont need a C library, and you will still need binutils), hmm, I wonder if newlib compiles with llvm.
I prefer to avoid getting trapped in sandboxes, learn the tools and how to manipulate the linker, etc to build your binaries.
I have a plan to build a web-site which running CGI made with Cocoa.
My final goal is develop on Mac OS X, and run on FreeBSD.
Is this possible?
As I know, there is a free implementation of some NextStep classes, the GNUStep.
The web-site is almost built with only strings. I read GNUStep documents, classes are enough. DB connection will be made with C interfaces.
Most biggest problem which I'm concerning is linking and binary compatibility. I'm currently configuring FreeBSD on VirtualBox, but I wanna know any possibility informations about this from experts.
This is not a production server. Just a trial. Please feel free to saying anything.
--edit--
I confused Foundation and Cocoa frameworks. What I said was Foundation. Basic classes which just enough to manipulating strings.
It’s entirely possible to cross-develop using Xcode. The Cocotron does this – and provides an implementation of Foundation – but doesn’t currently target FreeBSD. You could probably use it as a template to set up cross-development for BSD targets using GNUstep, but it won’t be easy.
You should be OK with the GNUstep Foundation on FreeBSD 9.0 with Objective-C 2 (clang). See these instructions.
Note: Do not installing under '/' with a FreeBSD default install, because it has little space on the '/' partition. I've used /usr/local/gnustep instead, and made some links as the instructions suggest.
Note II: GNUstep sources from subversion repository didn't compile for me, so I used the latest stable GNUstep sources.
Yes, you can do this, and I am doing it right now successfully using FreeBSD 8.2 and Xcode 4.0, running the Foundation class from The Cocotron. Here is a link: describing exactly what I did to build the cross compiler and set everything up. I also detail in that post, how I attempted to get AppKit (GUI) to work. I failed, it may work in the future, it doesn't fully work yet.
So far it's great. I use a common codebase to write iPhone App (game client) and FreeBSD Game Server; after my server compiles I even have a target rsync the files to my dev box.
One more note, you mention DB, I'm successfully using mysqlclient libraries within my App and my post details how to do that. Since you're building a cross-compiler with The Cocotron you can use any library. Just install the library on FreeBSD first, then create the platform as described.
Sounds like your trying to shoehorn tools onto OS and hardware they were not designed for. There are hacks to get almost anything running on top of anything else but why ask for all the grief?
The entire point of the entire Apple API is that you have integration from hardware to OS to development tools. You supposed to pay more up front in return for greater robustness and lower over all lifecycle cost. (It doesn't always work just like Linux doesn't always save money and Windows doesn't always provide the software choices you need but that is the design goal.) When you break Apple's hardware-OS-Dev trinity you have to start fighting the API and the hardware instead of letting it work for you.
I don't think what you're doing will work and even if it does it will cost a lot of time and in the end time is money. Unless your being forced by external circumstances beyond your control to use this configuration, I would strongly suggest you do whatever it takes to find another way to accomplish what you want.
You won't get binary compatibility. Mac OS X uses the Mach-O object format and FreeBSD uses ELF, like linux. Cocoa won't work on platforms other than Mac OS, but if you stick to POSIX and open-source libraries though, you shouldn't have too much trouble building your CGI (and any dependencies) on your FreeBSD machine.
Also, Cocoa for a website? It's the Mac OS standard library for GUIs, associated datastructures, and various helpers. Apple used to promote something called WebObjects which was similar to Cocoa for the web, but I haven't heard anything about it in ages. I don't think Cocoa will work for a website, unless you just mean write a custom web server that has a graphical front-end in Cocoa.
Why can't Xcode be hacked to be able to run on Windows?
Does Xcode have another programming methods?
Also, I heard that iPhone apps are made with Objective-C, so why is this not available in Windows?
Thanks
Xcode is written in Objective-C and takes advantage of a number of OS X frameworks, so porting it to Windows would require porting all the frameworks on which Xcode relies. Furthermore, Xcode also uses a number of programming tools that would have to be ported to Windows as well (some of them already are, of course).
There are several reasons that Objective-C isn't readily available on Windows:
Most development of Objective-C frameworks takes place on OS X, and a lot of the frameworks aren't open-source and thus can't be ported to Windows (they'd have to be rewritten).
There are some open-source frameworks that could be used on Windows -- for example, OS X's AppKit and Foundation frameworks are (mostly) available as part of the GNUstep project -- but these frameworks aren't widely used or supported on Windows, and sometimes lack capabilities found in their OS X counterparts.
That said, GCC is available on Windows, and since GCC is an Objective-C compiler, you could compile Objective-C code on Windows if you had the right libraries available (or didn't use any third-party libraries). But Objective-C isn't terribly useful without supporting frameworks, and those are rare or nonexistent on Windows.
Same can be said why isn't there Visual Studio 2008 for OSX.
Xcode is a big application written to set of APIs not present on Windows. Porting it would be an enormous job, maintaining it would be a big job, and there are already popular IDEs on the Windows platform.
The same reason you can't install Mac OS X on your PC: Apple chooses to make it available only to people who own their own brand of computers.
I guess that porting XCode would be close to very hard (if not impossible) but even if you were able to have a running XCode version under Windows, I guess that it won’t do what you really want it to do. I assume you want a complete iPhone SDK environment which is reliant on XCode and Interface Builder in a very tight way. That’d require the port of Cocoa Frameworks (among other things) that would be, now for real, impossible to port.
Truth is, as much as you will surely need Windows for Windows Phone development, you need a Macintosh computer for iPhone development.
On the other hand, Xcode as an IDE, is not the best in the world, so even if you managed to get Xcode and make it use, .NET (for example), I’d much rather use visual studio for that.
Actually you can install Mac OS X on any Intel CPU based machine. It is legal as you own the orginal install DVD for the OS X system. After aquiring a copy of Virtualbox or VMWare (either is great, personally I prefer Virtualbox because the display settings are more customizable). Virtualbox allows setup on initial setup while VMWare requires an extra step to ensure compatibility. You can then find the steps online to setup a virtual copy of MacOS X.
After going through the steps to install the OS in the Virtual Machine, you can then go through the process to find XCode in the Apple App Store. From there, have at it. Start programming in XCode and have a good time. Since XCode has its own device emulator you have a built in platform for iOS testing. There may be times where it is a bit buggy but that is to be expected with ANY emulator for ANY system you run.
After you get everything installed and going, sit back and enjoy the programming ride. The only catch is if you want to post anything on the Apple App store and then you will have to deal with getting an Apple Dev License. Objective C can be a bit difficult at times but, at the same time, it can be very satisfying when you solve those programming problems (as with any programming language right ;-) )
Enjoy
PS... this VM install keeps up with all updates from the Apple App Store so keeping the system updated won't be a problem.
PSS... I will not condone anyone for where their source of software is but do keep in mind, setting up a VM with VMWare or Virtualbox and an install DVD is only legal IF you personally OWN the install DVD you created the install image from yourself!
I'm in the process of learning Objective-c but would like to run code snippets via some sort of emulator on Windows — preferably web based.
I want to understand Objective-C syntax and walk through common code examples, probably via some sort of console. I would probably leave any framework type learning for when I get onto my MacBook, at home.
I have done a quick Google with no success.
It depends what you mean. Objective-C can be compiled by GCC, so you can happily create Objective-C test apps on Windows. If you are talking about the frameworks though, which contain most of the power when developing on OSX then it's a no unfortunately. You can get libraries compatible with SOME parts from gnustep.org (and run them on Linux/BSD), but it's still not the full OSX "stack".
You can get OS X running in VMWare, but it's illegal, so you best bet is to pickup a cheap Mac that can run Tiger/Leopard and use that.
Looked at GNUStep?
Another possibility is to use Cappuccino.
http://cappuccino.org
It is a cocoa-like framework for javascript, and looks very similar to objective-c.
The language is called objective-j.
AFAIK you can use the GNU compiler to compile Objective-C, so that should be usable on Windows too. This should be sufficient to get you started with programming the language.
For Mac OS X however the language is only part of the equation, you will want to program against the libraries of Mac OS X, and for that you will really need a machine running it.
I'm not sure which libraries are present and which are not but you can run OS X Server in a VM (providing you have an OS X Server license of course). This would allow you to have a virtual Mac environment on your Windows system.
As has been mentioned above, there's no way to achieve what you want natively within Windows as the underlying system is obviously different.
Good luck.
There also is The Cocotron.