[BACK]Return to Makefile.DLLs CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / gc

Annotation of OpenXM_contrib2/asir2000/gc/Makefile.DLLs, Revision 1.1

1.1     ! noro        1: #-----------------------------------------------------------------------------#
        !             2:
        !             3: # Makefile.DLLs, version 0.4.
        !             4:
        !             5: # Contributed by Fergus Henderson.
        !             6:
        !             7: # This Makefile contains rules for creating DLLs on Windows using gnu-win32.
        !             8:
        !             9: #-----------------------------------------------------------------------------#
        !            10:
        !            11: # This rule creates a `.def' file, which lists the symbols that are exported
        !            12: # from the DLL.  We use `nm' to get a list of all the exported text (`T')
        !            13: # symbols and data symbols -- including uninitialized data (`B'),
        !            14: # initialized data (`D'), read-only data (`R'), and common blocks (`C').
        !            15: %.def: %.a
        !            16:        echo EXPORTS > $@
        !            17:        nm $< | grep '^........ [BCDRT] _' | sed 's/[^_]*_//' >> $@
        !            18:
        !            19: # We need to use macros to access global data:
        !            20: # the user of the DLL must refer to `foo' as `(*__imp_foo)'.
        !            21: # This rule creates a `_globals.h' file, which contains macros
        !            22: # for doing this.
        !            23:
        !            24: SYM_PREFIX = $(firstword $(SYM_PREFIX-$*) $*)
        !            25: DLL_MACRO = $(SYM_PREFIX)_USE_DLL
        !            26: IMP_MACRO = $(SYM_PREFIX)_IMP
        !            27: GLOBAL_MACRO = $(SYM_PREFIX)_GLOBAL
        !            28:
        !            29: %_globals.h: %.a
        !            30:        echo "/* automatically generated by Makefile.DLLs */"   > $@
        !            31:        echo "#if defined(__GNUC__) && defined(_WIN32) \\"      >> $@
        !            32:        echo "  && defined($(DLL_MACRO))"                       >> $@
        !            33:        echo "#  define $(IMP_MACRO)(name)      __imp_##name"   >> $@
        !            34:        echo "#  define $(GLOBAL_MACRO)(name)   (*$(IMP_MACRO)(name))" >> $@
        !            35:        echo "#else"                                            >> $@
        !            36:        echo "#  define $(GLOBAL_MACRO)(name)   name"           >> $@
        !            37:        echo "#endif"                                           >> $@
        !            38:        echo ""                                                 >> $@
        !            39:        for sym in `nm $< | grep '^........ [BCDR] _' | sed 's/[^_]*_//'`; do \
        !            40:                echo "#define $$sym     $(GLOBAL_MACRO)($$sym)" >> $@; \
        !            41:        done
        !            42:
        !            43: # This rule creates the export object file (`foo.exp') which contains the
        !            44: # jump table array; this export object file becomes part of the DLL.
        !            45: # This rule also creates the import library (`foo_dll.a') which contains small
        !            46: # stubs for all the functions exported by the DLL which jump to them via the
        !            47: # jump table.  Executables that will use the DLL must be linked against this
        !            48: # stub library.
        !            49: %.exp %_dll.a : %.def
        !            50:        dlltool $(DLLTOOLFLAGS) $(DLLTOOLFLAGS-$*)              \
        !            51:                --def $<                                        \
        !            52:                --dllname $*.dll                                \
        !            53:                --output-exp $*.exp                             \
        !            54:                --output-lib $*_dll.a
        !            55:
        !            56: # The `sed' commands below are to convert DOS-style `C:\foo\bar'
        !            57: # pathnames into Unix-style `//c/foo/bar' pathnames.
        !            58: CYGWIN32_LIBS = $(shell echo                                   \
        !            59:        -L`dirname \`gcc -print-file-name=libgcc.a |            \
        !            60:        sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \
        !            61:        -L`dirname \`gcc -print-file-name=libcygwin.a | \
        !            62:        sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \
        !            63:        -L`dirname \`gcc -print-file-name=libkernel32.a | \
        !            64:        sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \
        !            65:        -lgcc -lcygwin -lkernel32 -lgcc)
        !            66:
        !            67: RELOCATABLE=yes
        !            68:
        !            69: ifeq "$(strip $(RELOCATABLE))" "yes"
        !            70:
        !            71: # to create relocatable DLLs, we need to do two passes
        !            72: %.dll: %.exp %.a dll_fixup.o dll_init.o
        !            73:        $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll -o $*.base                 \
        !            74:                -e _dll_entry@12 dll_init.o                             \
        !            75:                dll_fixup.o $*.exp $*.a                                 \
        !            76:                $(LDLIBS) $(LDLIBS-$*)                                  \
        !            77:                $(CYGWIN32_LIBS)
        !            78:        $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll --base-file $*.base -o $@  \
        !            79:                -e _dll_entry@12 dll_init.o                             \
        !            80:                dll_fixup.o $*.exp $*.a                                 \
        !            81:                $(LDLIBS) $(LDLIBS-$*)                                  \
        !            82:                $(CYGWIN32_LIBS)
        !            83:        rm -f $*.base
        !            84: else
        !            85:
        !            86: %.dll: %.exp %.a dll_fixup.o dll_init.o
        !            87:        $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll -o $@                      \
        !            88:                -e _dll_entry@12 dll_init.o                             \
        !            89:                dll_fixup.o $*.exp $*.a                                 \
        !            90:                $(LDLIBS) $(LDLIBS-$*)                                  \
        !            91:                $(CYGWIN32_LIBS)
        !            92:
        !            93: endif
        !            94:
        !            95: # This black magic piece of assembler needs to be linked in in order to
        !            96: # properly terminate the list of imported DLLs.
        !            97: dll_fixup.s:
        !            98:        echo '.section .idata$$3'       > dll_fixup.s
        !            99:        echo '.long 0,0,0,0, 0,0,0,0'   >> dll_fixup.s
        !           100:
        !           101: # This bit is necessary to provide an initialization function for the DLL.
        !           102: dll_init.c:
        !           103:        echo '__attribute__((stdcall))' > dll_init.c
        !           104:        echo 'int dll_entry(int handle, int reason, void *ptr)' >> dll_init.c
        !           105:        echo '{return 1; }' >> dll_init.c
        !           106:
        !           107: dont_throw_away: dll_fixup.o dll_init.o

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>