[darwinbuild-dev] Building AppleFan.kext

Jonas Maebe jonas.maebe at elis.ugent.be
Wed Feb 18 10:35:58 PST 2009

Jonas Maebe wrote on ma, 16 feb 2009:

> On 16 Feb 2009, at 17:07, William Siegrist wrote:
>> xnu comes with the 2 files (*.defs) you need in   
>> /usr/include/device. So make sure you load xnu and the files are   
>> there:
>> $ darwinbuild -load xnu
>> $ ls -1 BuildRoot/usr/include/device/
>> device.defs
>> device_port.h
>> device_types.defs
>> device_types.h
>> The source files get generated during the DeviceMIG target of   
>> IOKitUser.  If you are building with -nochroot, you need to copy   
>> the .defs files from BuildRoot to /usr/include/device/.
> Thanks, I missed the "-load". I've also created /usr/include/device and
> copied the .defs files there. However, still no dice (same error as
> before). I did  notice the following in the build log though:
> (NOTE: project IOKitUser was written by a newer Xcode version (45) --
> temporarily downgrading it (without modifying project file))
> I'll try downloading and installing Xcode 3.1.2 and see whether that
> solves it.

I discovered that the def files are not getting translated in case you  
build with -nochroot (the shell script of the target that should build  
that is simply empty in that case for some reason). Since -nochroot  
was required for my hfs+ disk image, I've restarted from scratch  
(thanks for the updated instructions in the README). I've also  
installed Xcode 3.1.2 (first, I ran  

I'm still not getting anywhere, though.

First of all, I got many errors about missing "as" binaries (this also  
happened previously). E.g., when asking to build AppleFan without  

BUILDING AppleFan-110.3.1~2 on Sat Feb 14 08:43:25 PST 2009
Build configuration:
     Build host:           bigmac.elis.UGent.be
     Build tool:           xcodebuild
     Build action:         install
     Build number:         9G55
     Host kernel version:  Darwin Kernel Version 9.6.0: Mon Nov 24  
17:39:01 PST 2008; root:xnu-1228.9.59~1/RELEASE_PPC
     cc version:           gcc version 4.0.1 (Apple Inc. build 5465)
     cctools version:      Fan/build-AppleFan-110.3.1~2.sh: line 13:  
as: command not found

(see the last line -- this also resulted in compilation failures while  
building AppleFan itself). So I copied /usr/bin/as and  
/usr/libexec/gcc/darwin/ppc/as to the buildroot.

Next, I got the errors about the missing headers, so I tried to build  
IOKitUser. As explained at the start of this reply, the translation of  
the def files by mig does not work with -nochroot for some reason, so  
I left it out. That however results in another problem:

     /bin/sh -c  
/usr/bin/mig -DIOKIT -D__MigTypeCheck=1 -fconstant-cfstrings -server  
/dev/null -header  
/private/var/tmp/IOKitUser/IOKitUser-388.50.obj/IOKitUser.build/DerivedSources/iokitmig32.h -user /private/var/tmp/IOKitUser/IOKitUser-388.50.obj/IOKitUser.build/DerivedSources/iokitmig32.c  
dyld: Library not loaded:  
   Referenced from: /usr/bin/arch
   Reason: image not found

I initially started by first copying Foundation.framework into the  
BuildRoot, then CoreFoundation, then /usr/lib/libicucore.A.dylib, and  
then I gave up. I renamed BuildRoot/usr/bin/arch and put in its place  
a bash script simply containing "echo ppc" (I know arch does more than  
that, but I guess that's not needed here).

Next, I got consecutive errors about missing assemblers for ppc64 and  
x86_64, which I also copied to  
BuildRoot/ibexec/gcc/darwin/$respective_arch, along with the i386 one  
since I guessed that one would error next.

The next error was that /usr/bin/strip was not found, so I copied it as well.

Then everything finally built successfully, but:

The following build commands failed:
(3 failures)

I googled one of those and discovered it was part of the AppleDisplays  

bash-3.2# darwinbuild AppleDisplays
*** Fetching Sources ...
Found AppleDisplays-170.0.1.tar.gz in /Volumes/Builds/9G55/Sources
Build log begins here:

Makefile:5: /Developer/Makefiles/pb_makefiles/platform.make: No such  
file or directory
make: *** No rule to make target  
`/Developer/Makefiles/pb_makefiles/platform.make'.  Stop.
  BUILD TIME: 0h 0m 0s

So I copied /Developer/Makefiles/pb_makefiles into the BuildRoot, then:

     /XCD/loper/usr/bin/g++-4.0  -o  
/private/var/tmp/AppleDisplays/AppleDisplays-170.0.1.root//System/Library/Extensions/AppleOnboardDisplay.kext/Contents/MacOS/AppleOnboardDisplay   "-L/private/var/tmp/AppleDisplays/AppleDisplays-170.0.1.sym/BuiltProducts"  "-F/private/var/tmp/AppleDisplays/AppleDisplays-170.0.1.sym/BuiltProducts"  -filelist /private/var/tmp/AppleDisplays/AppleDisplays-170.0.1.obj/AppleOnboardDisplay.build/AppleOnboardDisplay.build/Objects-normal/LinkFileList   "-arch" "i386" "-arch" "ppc" "-static" "-nostdlib" "-r" "-lkmodc++" "-lkmod" "-lcc_kext"  

collect2: cannot find 'ld'
collect2: cannot find 'ld'
g++-4.0: installation problem, cannot exec 'lipo': No such file or directory
...failed DynamicLibrary.LinkUsingFileList  

So I copied /usr/bin/ld and /usr/bin/lipo into the BuildRoot. During  
next try ld_classic was missing, so I also copied it.

And then I almost fell out of my chair, as the first project finally  
built successfully :)

Two IOKitUSer header problems remained, which I solved with the help  
(third and fourth problem mentioned there, adjusting the version  
numbers in the solution for the 9G55 build).

Next, I got an error about a missing CoreFoundation/CoreFoundation.h  
error, so I did a darwinbuild CF.

This one actually downloaded cctools and ld64 tarballs, so I guess I  
could/should have installed those instead of manually copying the  
assemblers/linkers/strip into my buildroot.

Anyway, the CF build failed because of a missing AvailabilityMacros.h,  
and I did not manage to install CarbonHeaders to fix that:

# darwinbuild CarbonHeaders
*** Fetching Sources ...
Downloading http://src.macosforge.org/Projects//CarbonHeaders-9G55.tar.gz ...
*** Copying Sources ...
tar (child): /Volumes/Builds/9G55/Sources/CarbonHeaders-9G55.tar.gz:  
Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error exit delayed from previous errors
*** Installing Roots ...
*** Installing Headers ...
*** Mounting special filesystems ...
Mounting devfs ...
BUILDING CarbonHeaders-9G55~3 on Wed Feb 18 10:33:53 PST 2009
make install  "SRCROOT=/SourceCache/CarbonHeaders/CarbonHeaders-9G55"  
"RC_ProjectName=CarbonHeaders" "RC_ProjectSourceVersion=9G55"  
"RC_CFLAGS=-pipe -no-cpp-precomp -arch ppc -arch i386" "RC_JASPER=YES"  
"RC_NONARCH_CFLAGS=-pipe -no-cpp-precomp" "RC_OS=macos"  
"RC_PRIVATE=/private" "RC_RELEASE=Leopard" "RC_XBS=YES" "RC_i386=YES"  
"UNAME_SYSNAME=Darwin" < /dev/null

Build log begins here:

make: *** No rule to make target `install'.  Stop.
  BUILD TIME: 0h 0m 0s


This message was sent using IMP, the Internet Messaging Program.

More information about the darwinbuild-dev mailing list