XCOMM $XFree86: xc/config/cf/nto.rules,v 1.1.2.1 1999/07/29 09:40:13 hohndel Exp $ XCOMM Rules for QNX/Neutrino XCOMM Note that some of these will disappear when we stop cross-compiling #ifndef HasSharedLibraries #define HasSharedLibraries YES #endif #ifndef SharedDataSeparation #define SharedDataSeparation NO #endif #ifndef SharedCodeDef #define SharedCodeDef /**/ #endif #ifndef SharedLibraryDef #define SharedLibraryDef /**/ #endif #ifndef SharedLibraryLoadFlags #define SharedLibraryLoadFlags -shared #endif #ifndef PositionIndependentCFlags #define PositionIndependentCFlags -fPIC #endif #ifndef PositionIndependentCplusplusFlags #define PositionIndependentCplusplusFlags -fPIC #endif #define LinkFile(tofile, fromfile) @@\ tofile:: fromfile @@\ $(CP) fromfile tofile @@\ @@\ includes:: tofile @@\ @@\ depend:: tofile @@\ @@\ clean:: @@\ RemoveFile(tofile) XCOMM This special rule is used to install the install script. XCOMM Else theres a name conflict with the QNX installer. #define QNXCopyInstaller(tofile, fromfile) @@\ tofile:: @@\ $(CP) fromfile tofile @@\ @@\ includes:: tofile #define ObjectFromSpecialSource(dst, src, flags) @@\ NoConfigRec(dst.c) @@\ @@\ dst.c: src.c @@\ RemoveFile($@) @@\ $(CP) $? $@ @@\ @@\ SpecialCObjectRule(dst,NullParameter,flags) @@\ @@\ includes:: dst.c @@\ @@\ depend:: dst.c @@\ @@\ clean:: @@\ RemoveFile(dst.c) #define ObjectFromSpecialAsmSource(dst, src, flags) @@\ dst.s: src.s @@\ RemoveFile($@) @@\ $(CP) $? $@ @@\ @@\ dst.o: dst.s @@\ AssembleObject(flags) @@\ @@\ dst.i: dst.s @@\ CPPOnlyAsm(dst,flags) @@\ @@\ depend:: dst.s @@\ @@\ clean:: @@\ RemoveFile(dst.s) XCOMM Special rule ComplexHostProgramTarget needed to compile XCOMM our utilities locally because we are cross-compiling... XCOMM #define ComplexHostProgramTarget(program) @@\ CC=cc @@\ STD_INCLUDES = @@\ CFLAGS=$(TOP_INCLUDES) $(INCLUDES) $(BOOTSTRAPCFLAGS) @@\ CCOPTIONS = @@\ EXTRA_LOAD_FLAGS = @@\ PROGRAM = program @@\ @@\ AllTarget(program) @@\ @@\ program: $(OBJS) $(DEPLIBS) @@\ RemoveTargetProgram($@) @@\ HostLinkRule($@,$(_NOOP_),$(OBJS),$(DEPLIBS) $(LOCAL_LIBRARIES)) @@\ @@\ DependTarget() @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(program)) XCOMM And this rule is again for a host simple host program when cross-compiling. XCOMM #define SimpleHostProgramTarget(program) @@\ OBJS = program.o @@\ SRCS = program.c @@\ @@\ ComplexHostProgramTarget(program) #define HostLinkRule(target,flags,src,libs) @@\ cc -F -o target src $(ALLINCLUDES) #ifndef FixupLibReferences #define FixupLibReferences() @@\ XMULIBONLY = -lXmu @@\ XMULIB = $(XMULIBONLY) $(XTOOLLIB) $(XLIB) #endif #ifndef SharedLibraryTarget #ifdef UseInstalled #define LinkBuildSonameLibrary(lib) true #else #define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \ cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .) #endif #define SharedLibraryTarget(libname,rev,solist,down,up) @@\ AllTarget(Concat(lib,libname.so.rev)) @@\ @@\ Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\ $(RM) $@~ @@\ @SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\ (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\ $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\ LinkBuildSonameLibrary($$SONAME) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ $(RM) Concat(lib,libname.so) @@\ $(LN) $@ Concat(lib,libname.so) @@\ LinkBuildLibrary($@) @@\ LinkBuildLibrary(Concat(lib,libname.so)) @@\ @@\ clean:: @@\ @MAJREV=`expr rev : '\(.*\)\.'`; \ @@\ set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\ $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so) #endif /* * InstallSharedLibrary - generate rules to install the shared library. * NOTE: file must be executable, hence "INSTBINFLAGS" */ #ifndef InstallSharedLibrary #define InstallSharedLibrary(libname,rev,dest) @@\ install:: Concat(lib,libname.so.rev) @@\ MakeDir($(DESTDIR)dest) @@\ $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\ @T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`;\ set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T @@\ $(RM) Concat($(DESTDIR)dest/lib,libname.so) @@\ $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so) #endif /* InstallSharedLibrary */ /* * SharedLibraryDataTarget - generate rules to create shlib data file; */ #ifndef SharedLibraryDataTarget #define SharedLibraryDataTarget(libname,rev,salist) #endif /* SharedLibraryTarget */ /* * InstallSharedLibraryData - generate rules to install the shared library data */ #ifndef InstallSharedLibraryData #define InstallSharedLibraryData(libname,rev,dest) #endif /* InstallSharedLibraryData */ #define BaseShLibReqs /* * ServerTargetWithFlags - generate rules to compile, link, and relink a server */ #ifndef ServerTargetWithFlags #define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\ AllTarget(ProgramTargetName(server)) @@\ ProgramTargetName(server): subdirs objects libs @@\ MoveToBakFile($@) @@\ LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\ @@\ Concat(load,server): @@\ MoveToBakFile(ProgramTargetName(server)) @@\ LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\ @@\ loadX:: Concat(load,server) @@\ @@\ SentinelProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\ SentinelLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\ PurifyProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\ PurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\ ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\ ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\ @@\ InstallProgramWithFlags(server,$(BINDIR),flags) @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(server)) #endif /* ServerTargetWithFlags */