build/darwin-tools.jam
Rene Rivera 7b47ebce7d Reinstate double-link generation of dynamic libraries.
Simplify slightly.
Use with Python 2.3 frameworks mostly working.


[SVN r16026]
2002-10-31 04:46:54 +00:00

144 lines
4.1 KiB
Plaintext

# (C) Copyright Rene Rivera 2002. Permission to copy, use,
# modify, sell and distribute this software is granted provided this
# copyright notice appears in all copies. This software is provided
# "as is" without express or implied warranty, and with no claim as
# to its suitability for any purpose.
# singleton variables...
#> set-as-singleton _XX_ ;
# For adding framwork libraries; like <framework>Python, <framework>Carbon, etc.
free-feature framework ;
# Specify the loader for bundles.
free-feature bundle-loader ;
flags darwin CFLAGS <cflags> ;
flags darwin C++FLAGS <cxxflags> ;
flags darwin DEFINES <define> ;
flags darwin UNDEFS <undef> ;
flags darwin HDRS <include> ;
flags darwin STDHDRS <sysinclude> ;
flags darwin LINKFLAGS <linkflags> ;
flags darwin LIBPATH <library-path> ;
flags darwin NEEDLIBS <library-file> ;
flags darwin FINDLIBS <find-library> ;
flags darwin ARFLAGS <arflags> ;
flags darwin TARGET_TYPE <target-type> ;
flags darwin FRAMEWORKS <framework> ;
flags darwin DLLVERSION <dllversion> ;
flags darwin BUNDLE_LOADER <bundle-loader> ;
ARFLAGS ?= "" ;
DLLVERSION = $(DLLVERSION[1]) ;
DLLVERSION ?= $(BOOST_VERSION) ;
flags darwin CFLAGS : -Wno-long-double -no-cpp-precomp ;
flags darwin C++FLAGS : -fcoalesce-templates ;
flags darwin LINKFLAGS <runtime-link>static : -static-libgcc ;
flags darwin CFLAGS <debug-symbols>on : -g ;
flags darwin LINKFLAGS <debug-symbols>on : -g ;
flags darwin LINKFLAGS <debug-symbols>off : -Wl,-x ;
flags darwin CFLAGS <optimization>off : -O0 ;
flags darwin CFLAGS <optimization>speed : -O3 ;
flags darwin CFLAGS <optimization>space : -Os ;
flags darwin CFLAGS <inlining>off : -fno-inline ;
flags darwin CFLAGS <inlining>on : -Wno-inline ;
flags darwin CFLAGS <inlining>full : -finline-functions -Wno-inline ;
flags darwin CFLAGS <profiling>on : -pg ;
flags darwin LINKFLAGS <profiling>on : -pg ;
flags darwin C++FLAGS <rtti>off : -fno-rtti ;
flags darwin C++FLAGS <vtable-thunks>on : -fvtable-thunks ;
flags darwin C++FLAGS <vtable-thunks>off : -fvtable-thunks=0 ;
flags darwin CFLAGS <shared-linkable>true : -fPIC ;
if $(BUNDLE_LOADER)
{
flags darwin LINKFLAGS <target-type>$(SHARED_TYPES) :
-bundle ;
}
else
{
flags darwin LINKFLAGS <target-type>$(SHARED_TYPES) :
-Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ;
}
#### Link ####
rule Link-action
{
_ on $(<) = " " ;
DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ;
if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) && ! $(BUNDLE_LOADER)
{
DLLFLAGS on $(<) =
"-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ;
darwin-Link-DyLib-action $(<) : $(>) ;
}
else
{
DLLFLAGS on $(<) = ;
darwin-Link-action $(<) : $(>) ;
}
}
actions darwin-Link-action bind NEEDLIBS NEEDIMPS
{
$(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH)
$(SHELL_EXPORT)$(gSHELL_LIBPATH)
c++ $(LINKFLAGS) -o "$(<[1])" "$(>)" \
-L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \
-framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)"
}
actions darwin-Link-DyLib-action bind NEEDLIBS NEEDIMPS
{
$(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH)
$(SHELL_EXPORT)$(gSHELL_LIBPATH)
ld -dynamic -m -r -d -o "$(<[1]:S=.lo)" "$(>)" \
&& \
c++ $(LINKFLAGS) $(DLLFLAGS) -o "$(<[1])" "$(<[1]:S=.lo)" \
-L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \
-framework$(_)$(FRAMEWORKS) \
&& \
rm -f "$(<[1]:S=.lo)"
}
#### Cc #####
rule Cc-action
{
_ on $(<) = " " ;
darwin-Cc-action $(<) : $(>) ;
}
actions darwin-Cc-action
{
cc -c -Wall -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
}
#### C++ ####
rule C++-action
{
_ on $(<) = " " ;
darwin-C++-action $(<) : $(>) ;
}
actions darwin-C++-action
{
c++ -c -Wall -ftemplate-depth-100 -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
}
#### Archive ####
rule Archive-action
{
darwin-Archive-action $(<) : $(>) ;
}
actions updated together piecemeal darwin-Archive-action
{
ar -r -s $(ARFLAGS) "$(<:T)" "$(>:T)"
}