Makedll.rules.in 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Global rules for building dlls -*-Makefile-*-
  2. #
  3. # Each individual makefile should define the following variables:
  4. # MODULE : name of the main module being built
  5. # EXTRALIBS : extra libraries to link in (optional)
  6. # SPEC_SRCS16 : interface definition files for 16-bit dlls (optional)
  7. # SUBSYSTEM : (optional) subsystem (for native dlls)
  8. #
  9. # plus all variables required by the global Make.rules.in
  10. #
  11. DLLDEFS = @DLLDEFS@
  12. DLLFLAGS = @DLLFLAGS@
  13. DLLEXT = @DLLEXT@
  14. DEFS = -D__WINESRC__ $(DLLDEFS) $(EXTRADEFS)
  15. MAINSPEC = $(MODULE:%.dll=%).spec
  16. SPEC_DEF = $(MAINSPEC).def
  17. WIN16_FILES = $(SPEC_SRCS16:.spec=.spec.o) $(C_SRCS16:.c=.o) $(EXTRA_OBJS16)
  18. ALL_OBJS = @WIN16_FILES@ $(OBJS) $(MODULE).dbg.o
  19. ALL_LIBS = $(LIBWINE) $(EXTRALIBS) $(LIBPORT) $(LDFLAGS) $(LIBS)
  20. IMPORTLIBS = $(DELAYIMPORTS:%=$(DLLDIR)/lib%.$(IMPLIBEXT)) $(IMPORTS:%=$(DLLDIR)/lib%.$(IMPLIBEXT))
  21. all: $(MODULE)$(DLLEXT) $(SUBDIRS)
  22. @MAKE_RULES@
  23. # Rules for .so files
  24. $(MODULE).so: $(MAINSPEC) $(RC_SRCS:.rc=.res) $(ALL_OBJS) $(IMPORTLIBS) Makefile.in
  25. $(WINEGCC) -B$(TOOLSDIR)/tools/winebuild -shared $(SRCDIR)/$(MAINSPEC) $(ALL_OBJS) $(RC_SRCS:.rc=.res) $(SUBSYSTEM:%=-Wb,--subsystem,%) -o $@ -L$(DLLDIR) $(DELAYIMPORTS:%=-Wb,-d%) $(IMPORTS:%=-l%) $(ALL_LIBS)
  26. # Rules for .dll files
  27. $(MODULE): $(RCOBJS) $(OBJS) $(MODULE).dbg.o $(SPEC_DEF) $(IMPORTLIBS) Makefile.in
  28. $(DLLWRAP) -k --def $(SPEC_DEF) -o $@ $(RCOBJS) $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(DELAYIMPORTS:%=-l%) $(IMPORTS:%=-l%) $(ALL_LIBS)
  29. $(SPEC_DEF): $(WINEBUILD)
  30. # Rules for checking that no imports are missing
  31. .PHONY: checklink16 $(WIN16_FILES:%=__checklink16__%)
  32. $(WIN16_FILES:%=__checklink16__%): checklink16
  33. checklink16:: $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o dummy
  34. $(CC) -o checklink -Wl,-rpath,$(TOPOBJDIR)/libs $(TOPSRCDIR)/dlls/checklink.c $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(ALL_LIBS) -lm && $(RM) checklink $(MAINSPEC).c $(MAINSPEC).o
  35. checklink:: $(WIN16_FILES:%=__checklink16__%)
  36. # Rules for testing
  37. check test:: $(SUBDIRS:%=%/__test__)
  38. crosstest:: $(SUBDIRS:%=%/__crosstest__)
  39. # Rule to explicitly generate the .spec.c for debugging
  40. $(MAINSPEC).c: $(MAINSPEC) $(RC_SRCS:.rc=.res) $(ALL_OBJS) $(IMPORTLIBS) $(WINEBUILD)
  41. $(WINEBUILD) $(DEFS) $(DLLFLAGS) -o $@ --dll $(SRCDIR)/$(MAINSPEC) $(SUBSYSTEM:%=--subsystem %) $(RC_SRCS:.rc=.res) $(ALL_OBJS) -L$(DLLDIR) $(DELAYIMPORTS:%=-d%) $(IMPORTS:%=-l%)
  42. # Rules for auto documentation
  43. man: $(C_SRCS)
  44. $(C2MAN) -o $(TOPOBJDIR)/documentation/man$(api_manext) -R$(TOPOBJDIR) -S$(api_manext) $(INCLUDES) $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)
  45. doc-html: $(C_SRCS)
  46. $(C2MAN) -o $(TOPOBJDIR)/documentation/html -R$(TOPSRCDIR) $(INCLUDES) -Th $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)
  47. doc-sgml: $(C_SRCS)
  48. $(C2MAN) -o $(TOPOBJDIR)/documentation/api-guide -R$(TOPSRCDIR) $(INCLUDES) -Ts $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)
  49. .PHONY: man doc-html doc-sgml
  50. # Rules for installation
  51. EXE_SPECS16 = $(SPEC_SRCS16:.exe.spec=.exe)
  52. DRV_SPECS16 = $(EXE_SPECS16:.drv.spec=.drv)
  53. ALL_SPECS16 = $(DRV_SPECS16:.spec=.dll)
  54. WIN16_INSTALL = $(ALL_SPECS16:%=_install_/%)
  55. .PHONY: install_lib $(ALL_SPECS16:%=_install_/%) $(ALL_SPECS16:%=_uninstall_/%)
  56. $(ALL_SPECS16:%=_install_/%): install_lib
  57. cd $(dlldir) && $(RM) `basename $@`$(DLLEXT) && $(LN_S) $(MODULE)$(DLLEXT) `basename $@`$(DLLEXT)
  58. $(ALL_SPECS16:%=_uninstall_/%): dummy
  59. $(RM) $(dlldir)/`basename $@`$(DLLEXT)
  60. install_lib: $(MODULE)$(DLLEXT)
  61. $(MKINSTALLDIRS) $(dlldir)
  62. $(INSTALL_PROGRAM) $(MODULE)$(DLLEXT) $(dlldir)/$(MODULE)$(DLLEXT)
  63. install:: install_lib @WIN16_INSTALL@
  64. uninstall:: $(ALL_SPECS16:%=_uninstall_/%)
  65. $(RM) $(dlldir)/$(MODULE)$(DLLEXT)
  66. # Misc. rules
  67. $(SPEC_SRCS16:.spec=.spec.c): $(WINEBUILD)
  68. # End of global dll rules