bullet3/mk/jam/unix.jam

160 lines
4.4 KiB
Plaintext
Raw Normal View History

#============================================================================
# Jam configuration and actions for Unix (GNU/Linux, BSD, Darwin, etc.)
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
SHELL ?= "/bin/sh" ;
# Only use nasm on x86 for now...
NASM.FLAGS += -f elf ;
PLUGIN.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
LIBRARY.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
# The BFD tag name under which to embed meta-information into a plugin module.
# This much match the name expected by csGetPluginMetadata() (bfdplugins.cpp).
SECTION_TAG_NAME ?= .crystalspace ;
#----------------------------------------------------------------------------
# platform specific rules
## ConstructApplicationTarget target : options
## Constructs the application target name (ie. foo.exe for foo)
rule ConstructApplicationTarget
{
return $(<) ;
}
rule ConstructStaticLibraryTarget
{
return lib$(<)$(SUFLIB) ;
}
rule ConstructSharedLibraryTarget
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructSharedLibraryLinkLib
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructPluginTarget
{
return $(<).so ;
}
# SystemLinkApplication target : objects : options
# do system specific actions needed for linking the application and construct
# correct clean targets.
rule SystemLinkApplication
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkApplication $(target) : $(>) ;
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemInstallApplication
{
Depends install_bin :
[ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
rule SystemInstallPlugin
{
Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) :
$(INSTALL_PROGRAM) ] ;
}
# Put the meta data into the object file headers
rule ObjTagMetaData
{
Depends $(<) : $(>) ;
}
actions ObjTagMetaData
{
$(CMD.OBJCOPY) --add-section $(SECTION_TAG_NAME)=$(>) $(<)
}
# SystemLinkPlugin target : objects : options
# do system specific actions needed for linking the plugin and construct
# correct clean targets.
rule SystemLinkPlugin
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkPlugin $(target) : $(>) ;
if $(EMBED_META) = "yes" && $(OBJCOPY.AVAILABLE) = "yes"
{
ObjTagMetaData $(target) : $($(<)_METAFILE) ;
}
else
{
PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ;
}
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemLinkSharedLibrary
{
LFlags $(<) : $(LINKLIBS) ;
Depends $(<) : $(>) ;
local response = $(<).resp ;
MakeLocate $(response) : $(LOCATE.OBJECTS)/libs ;
ResponseFile $(response) : $(>) ;
# @@@ FIXME: response files are only supported on newer binutils
# But quite useful to avoid blowing jam's 10240 max action length.
#Depends $(response) : $(>) ;
#Depends $(<) : $(response) ;
#LinkSharedLibrary $(<) : $(response) ;
LinkSharedLibrary $(<) : $(>) ;
Clean clean : $(<) ;
Clean $(<)clean : $(<) ;
}
actions LinkApplication bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
if $(PLUGIN.LFLAGS.USE_SONAME) = "yes"
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}
}
else
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
}
actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -shared -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}