Fixed order of TARGET_LFLAGS in the command lines of rules for kernel-mode targets
[reactos.git] / reactos / tools / helper.mk
index 9070b80..453f49e 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: helper.mk,v 1.6 2001/09/01 10:38:49 chorns Exp $
+# $Id: helper.mk,v 1.12 2002/04/29 23:02:12 hyperion Exp $
 #
 # Helper makefile for ReactOS modules
 # Variables this makefile accepts:
@@ -6,7 +6,7 @@
 #                        program = User mode program
 #                        proglib = Executable program that have exported functions
 #                        dynlink = Dynamic Link Library (DLL)
-#                        library = Import library that will be linked with other code
+#                        library = Library that will be linked with other code
 #                        driver_library = Import library for a driver
 #                        driver = Kernel mode driver
 #                        export_driver = Kernel mode driver that have exported functions
@@ -30,6 +30,7 @@
 #   $TARGET_CPPFLAGS   = G++ flags (optional)
 #   $TARGET_ASFLAGS    = GCC assembler flags (optional)
 #   $TARGET_NFLAGS     = NASM flags (optional)
+#   $TARGET_RCFLAGS    = Windres flags (optional)
 #   $TARGET_CLEAN      = Files that are part of the clean rule (optional)
 #   $TARGET_PATH       = Relative path for *.def, *.edf, and *.rc (optional)
 #   $TARGET_BASE       = Default base address (optional)
 #   $TARGET_NORC       = Do not include standard resource file (no,yes) (optional)
 #   $TARGET_LIBPATH    = Destination path for import libraries (optional)
 #   $TARGET_INSTALLDIR = Destination path when installed (optional)
+#   $WINE_MODE         = Compile using WINE headers (no,yes) (optional)
+#   $WINE_RC           = Name of .rc file for WINE modules (optional)
 
 ifeq ($(TARGET_PATH),)
 TARGET_PATH := .
 endif
 
 
-# FIXME: MK_DEFENTRY may not be correct
 ifeq ($(TARGET_TYPE),program)
   MK_MODE := user
   MK_EXETYPE := exe
@@ -52,14 +54,26 @@ ifeq ($(TARGET_TYPE),program)
   MK_DEFENTRY := _DEFINE_TARGET_APPTYPE
   MK_DDKLIBS :=
   MK_SDKLIBS :=
+ifneq ($(WINE_MODE),yes)
   MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
   MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
+else
+  MK_CFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
+  MK_CPPFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
+  MK_RCFLAGS := --include-dir $(PATH_TO_TOP)/include/wine --include-dir $(WINE_INCLUDE)
+endif
   MK_IMPLIB := no
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := bin
   MK_DISTDIR := apps
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+ifeq ($(WINE_RC),)
+  MK_RES_BASE := $(TARGET_NAME)
+else
+  MK_RES_BASE := $(WINE_RC)
+endif
 endif
 
 ifeq ($(TARGET_TYPE),proglib)
@@ -71,12 +85,14 @@ ifeq ($(TARGET_TYPE),proglib)
   MK_SDKLIBS :=
   MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
   MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := yes
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := bin
   MK_DISTDIR := apps
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),dynlink)
@@ -86,31 +102,45 @@ ifeq ($(TARGET_TYPE),dynlink)
   MK_DEFENTRY := _DllMain@12
   MK_DDKLIBS :=
   MK_SDKLIBS :=
+ifneq ($(WINE_MODE),yes)
   MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
   MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
+else
+  MK_CFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
+  MK_CPPFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
+  MK_RCFLAGS := --include-dir $(PATH_TO_TOP)/include/wine --include-dir $(WINE_INCLUDE)
+endif
   MK_IMPLIB := yes
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32
   MK_DISTDIR := dlls
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+ifeq ($(WINE_RC),)
+  MK_RES_BASE := $(TARGET_NAME)
+else
+  MK_RES_BASE := $(WINE_RC)
+endif
 endif
 
 ifeq ($(TARGET_TYPE),library)
-  MK_MODE := user
-  MK_EXETYPE := dll
+  MK_MODE := static
+  MK_EXETYPE :=
   MK_DEFEXT := .a
   MK_DEFENTRY :=
   MK_DDKLIBS :=
   MK_SDKLIBS :=
   MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
   MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := no
-  MK_IMPLIBONLY := yes
-  MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
+  MK_IMPLIBONLY := no
+  MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT :=
   MK_INSTALLDIR := $(SDK_PATH_INC)
   MK_DISTDIR := # FIXME
-  MK_RESOURCE := 
+  MK_RES_BASE :=
 endif
 
 ifeq ($(TARGET_TYPE),driver_library)
@@ -122,12 +152,14 @@ ifeq ($(TARGET_TYPE),driver_library)
   MK_SDKLIBS :=
   MK_CFLAGS := -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := no
   MK_IMPLIBONLY := yes
   MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := $(DDK_PATH_INC)
   MK_DISTDIR := # FIXME
-  MK_RESOURCE :=
+  MK_RES_BASE :=
 endif
 
 ifeq ($(TARGET_TYPE),driver)
@@ -139,12 +171,14 @@ ifeq ($(TARGET_TYPE),driver)
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := no
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32/drivers
   MK_DISTDIR := drivers
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),export_driver)
@@ -156,12 +190,14 @@ ifeq ($(TARGET_TYPE),export_driver)
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := yes
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32/drivers
   MK_DISTDIR := drivers
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),hal)
@@ -173,12 +209,14 @@ ifeq ($(TARGET_TYPE),hal)
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTHAL__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTHAL__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := yes
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32
   MK_DISTDIR := dlls
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),bootpgm)
@@ -190,12 +228,14 @@ ifeq ($(TARGET_TYPE),bootpgm)
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := no
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32
   MK_DISTDIR := # FIXME
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),miniport)
@@ -207,12 +247,14 @@ ifeq ($(TARGET_TYPE),miniport)
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := no
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH :=
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32/drivers
   MK_DISTDIR := drivers
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 ifeq ($(TARGET_TYPE),gdi_driver)
@@ -220,24 +262,25 @@ ifeq ($(TARGET_TYPE),gdi_driver)
   MK_EXETYPE := dll
   MK_DEFEXT := .dll
   MK_DEFENTRY := _DrvEnableDriver@12
-#  MK_DEFENTRY := _DriverEntry@8
   MK_DDKLIBS := ntoskrnl.a hal.a win32k.a
   MK_SDKLIBS :=
   MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
   MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+  MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
   MK_IMPLIB := yes
   MK_IMPLIBONLY := no
   MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
+  MK_IMPLIB_EXT := .a
   MK_INSTALLDIR := system32/drivers
   MK_DISTDIR := drivers
-  MK_RESOURCE := $(TARGET_PATH)/$(TARGET_NAME).coff
+  MK_RES_BASE := $(TARGET_NAME)
 endif
 
 
 ifeq ($(TARGET_TYPE),program)
   ifeq ($(TARGET_APPTYPE),windows)
     MK_DEFENTRY := _WinMainCRTStartup
-    MK_SDKLIBS :=
+    MK_SDKLIBS := ntdll.a kernel32.a gdi32.a user32.a
     TARGET_LFLAGS += -Wl,--subsystem,windows
   endif
 
@@ -255,6 +298,9 @@ ifeq ($(TARGET_TYPE),program)
 endif
 
 
+MK_RESOURCE := $(MK_RES_BASE).coff
+
+
 ifneq ($(TARGET_INSTALLDIR),)
   MK_INSTALLDIR := $(TARGET_INSTALLDIR)
 endif
@@ -282,7 +328,9 @@ endif
 
 
 ifeq ($(TARGET_NORC),yes)
-  MK_RESOURCE :=
+  MK_FULLRES :=
+else
+  MK_FULLRES := $(TARGET_PATH)/$(MK_RESOURCE)
 endif
 
 
@@ -333,6 +381,8 @@ TARGET_CFLAGS += -pipe -march=$(ARCH)
 TARGET_CPPFLAGS += $(MK_CPPFLAGS)
 TARGET_CPPFLAGS += -pipe -march=$(ARCH)
 
+TARGET_RCFLAGS += $(MK_RCFLAGS)
+
 TARGET_ASFLAGS += $(MK_ASFLAGS)
 TARGET_ASFLAGS += -pipe -march=$(ARCH)
 
@@ -342,19 +392,21 @@ TARGET_NFLAGS += $(MK_NFLAGS)
 MK_GCCLIBS := $(addprefix -l, $(TARGET_GCCLIBS))
 
 MK_FULLNAME := $(MK_BASENAME)$(MK_EXT)
+MK_IMPLIB_FULLNAME := $(MK_BASENAME)$(MK_IMPLIB_EXT)
 
 MK_NOSTRIPNAME := $(MK_BASENAME).nostrip$(MK_EXT)
 
 # We don't want to link header files
 MK_OBJECTS := $(filter-out %.h,$(TARGET_OBJECTS)) 
+MK_STRIPPED_OBJECT := $(MK_BASENAME).stripped.o
 
 ifeq ($(MK_IMPLIBONLY),yes)
 
-TARGET_CLEAN += $(MK_IMPLIBPATH)/$(MK_FULLNAME)
+TARGET_CLEAN += $(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME)
 
-all: $(MK_IMPLIBPATH)/$(MK_FULLNAME)
+all: $(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME)
 
-$(MK_IMPLIBPATH)/$(MK_FULLNAME): $(TARGET_OBJECTS)
+$(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME): $(TARGET_OBJECTS)
        $(DLLTOOL) \
                --dllname $(MK_FULLNAME) \
                --def $(MK_DEFNAME) \
@@ -364,7 +416,7 @@ $(MK_IMPLIBPATH)/$(MK_FULLNAME): $(TARGET_OBJECTS)
 else # MK_IMPLIBONLY
 
 
-all: $(MK_FULLNAME)
+all: $(MK_FULLNAME) $(MK_NOSTRIPNAME)
        
 
 ifeq ($(MK_IMPLIB),yes)
@@ -383,19 +435,13 @@ else
   MK_EXTRACMD2 :=
 endif
 
-$(MK_NOSTRIPNAME): $(MK_RESOURCE) $(TARGET_OBJECTS) $(MK_LIBS)
-ifeq ($(MK_IMPLIB),yes)
-       $(DLLTOOL) --dllname $(MK_FULLNAME) \
-               --def $(MK_DEFNAME) \
-               --output-lib $(MK_IMPLIBPATH)/$(MK_BASENAME).a \
-               --kill-at
-endif
+$(MK_NOSTRIPNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS)
 ifeq ($(MK_EXETYPE),dll)
        $(CC) -Wl,--base-file,base.tmp \
                -Wl,--entry,$(TARGET_ENTRY) \
                $(TARGET_LFLAGS) \
-               -o junk.tmp $(MK_GCCLIBS) \
-               $(MK_RESOURCE) $(MK_OBJECTS) $(MK_LIBS)
+               -o junk.tmp \
+               $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
        - $(RM) junk.tmp
        $(DLLTOOL) --dllname $(MK_FULLNAME) \
                --base-file base.tmp \
@@ -404,10 +450,15 @@ ifeq ($(MK_EXETYPE),dll)
 endif
        $(CC) $(TARGET_LFLAGS) \
                -Wl,--entry,$(TARGET_ENTRY) $(MK_EXTRACMD2) \
-         -o $(MK_NOSTRIPNAME) $(MK_GCCLIBS) \
-         $(MK_RESOURCE) $(MK_OBJECTS) $(MK_LIBS)
+         -o $(MK_NOSTRIPNAME) \
+         $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
        - $(RM) temp.exp
        - $(NM) --numeric-sort $(MK_NOSTRIPNAME) > $(MK_BASENAME).sym
+
+$(MK_FULLNAME): $(MK_NOSTRIPNAME)
+        $(CP) $(MK_NOSTRIPNAME) $(MK_FULLNAME)
+#       $(STRIP) --strip-debug $(MK_FULLNAME)
+
 endif # KM_MODE
 
 # Kernel mode targets 
@@ -419,53 +470,91 @@ else
   MK_EXTRACMD :=
 endif
 
-$(MK_NOSTRIPNAME): $(MK_RESOURCE) $(TARGET_OBJECTS) $(MK_LIBS)
-ifeq ($(MK_IMPLIB),yes)
-       $(DLLTOOL) --dllname $(MK_FULLNAME) \
-               --def $(MK_DEFNAME) \
-               --output-lib $(MK_IMPLIBPATH)/$(MK_BASENAME).a \
-               --kill-at
-endif
+$(MK_NOSTRIPNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS)
        $(CC) -Wl,--base-file,base.tmp \
                -Wl,--entry,$(TARGET_ENTRY) \
                $(TARGET_LFLAGS) \
                -nostartfiles -nostdlib \
-               -o junk.tmp $(MK_GCCLIBS) \
-               $(MK_RESOURCE) $(MK_OBJECTS) $(MK_LIBS)
+               -o junk.tmp \
+               $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
        - $(RM) junk.tmp
        $(DLLTOOL) --dllname $(MK_FULLNAME) \
                --base-file base.tmp \
                --output-exp temp.exp $(MK_EXTRACMD)
        - $(RM) base.tmp
-       $(CC) $(TARGET_LFLAGS) \
+       $(CC) \
                -Wl,--subsystem,native \
                -Wl,--image-base,$(TARGET_BASE) \
                -Wl,--file-alignment,0x1000 \
                -Wl,--section-alignment,0x1000 \
                -Wl,--entry,$(TARGET_ENTRY) \
                -Wl,temp.exp \
+               $(TARGET_LFLAGS) \
                -mdll -nostartfiles -nostdlib \
-               -o $(MK_NOSTRIPNAME) $(MK_GCCLIBS) \
-         $(MK_RESOURCE) $(MK_OBJECTS) $(MK_LIBS)
+               -o $(MK_NOSTRIPNAME) \
+         $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
        - $(RM) temp.exp
        - $(NM) --numeric-sort $(MK_NOSTRIPNAME) > $(MK_BASENAME).sym
 
+$(MK_FULLNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS)
+       $(LD) -r -o $(MK_STRIPPED_OBJECT) $(MK_OBJECTS)
+       $(STRIP) --strip-debug $(MK_STRIPPED_OBJECT)
+       $(CC) -Wl,--base-file,base.tmp \
+               -Wl,--entry,$(TARGET_ENTRY) \
+               $(TARGET_LFLAGS) \
+               -nostartfiles -nostdlib \
+               -o junk.tmp \
+               $(MK_FULLRES) $(MK_STRIPPED_OBJECT) $(MK_LIBS) $(MK_GCCLIBS)
+       - $(RM) junk.tmp
+       $(DLLTOOL) --dllname $(MK_FULLNAME) \
+               --base-file base.tmp \
+               --output-exp temp.exp $(MK_EXTRACMD)
+       - $(RM) base.tmp
+       $(CC) \
+               -Wl,--subsystem,native \
+               -Wl,--image-base,$(TARGET_BASE) \
+               -Wl,--file-alignment,0x1000 \
+               -Wl,--section-alignment,0x1000 \
+               -Wl,--entry,$(TARGET_ENTRY) \
+               -Wl,temp.exp \
+               $(TARGET_LFLAGS) \
+               -mdll -nostartfiles -nostdlib \
+               -o $(MK_FULLNAME) \
+         $(MK_FULLRES) $(MK_STRIPPED_OBJECT) $(MK_LIBS) $(MK_GCCLIBS)
+       - $(RM) temp.exp
+
 endif # MK_MODE
 
+# Static library target
+ifeq ($(MK_MODE),static)
+
+$(MK_NOSTRIPNAME): $(TARGET_OBJECTS)
+       $(AR) -r $(MK_NOSTRIPNAME) $(TARGET_OBJECTS)
+
+# FIXME: dummy rule
 $(MK_FULLNAME): $(MK_NOSTRIPNAME)
         $(CP) $(MK_NOSTRIPNAME) $(MK_FULLNAME)
-#       $(STRIP) --strip-debug $(MK_FULLNAME)
+
+endif # MK_MODE
 
 endif # MK_IMPLIBONLY
 
 
-$(MK_RESOURCE): $(PATH_TO_TOP)/include/reactos/buildno.h $(TARGET_PATH)/$(TARGET_NAME).rc
+$(MK_FULLRES): $(PATH_TO_TOP)/include/reactos/buildno.h $(TARGET_PATH)/$(MK_RES_BASE).rc
+
+implib:
+ifeq ($(MK_IMPLIB),yes)
+       $(DLLTOOL) --dllname $(MK_FULLNAME) \
+               --def $(MK_DEFNAME) \
+               --output-lib $(MK_IMPLIBPATH)/$(MK_BASENAME).a \
+               --kill-at
+endif
 
 # Be carefull not to clean non-object files
 MK_CLEANFILES := $(filter %.o,$(MK_OBJECTS)) 
 
 clean:
-       - $(RM) *.o $(MK_BASENAME).sym $(MK_BASENAME).a $(TARGET_PATH)/$(TARGET_NAME).coff \
+       - $(RM) *.o $(MK_BASENAME).sym $(MK_BASENAME).a $(TARGET_PATH)/$(MK_RES_BASE).coff \
          $(MK_FULLNAME) $(MK_NOSTRIPNAME) $(MK_CLEANFILES) \
          junk.tmp base.tmp temp.exp \
          $(TARGET_CLEAN)
@@ -503,7 +592,7 @@ $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME): $(MK_FULLNAME)
 endif # MK_IMPLIBONLY
 
 
-.phony: all clean install dist
+.phony: all implib clean install dist
 
 
 %.o: %.c
@@ -519,7 +608,7 @@ endif # MK_IMPLIBONLY
 %.o: %.asm
        $(NASM_CMD) $(TARGET_NFLAGS) $< -o $@
 %.coff: %.rc
-       $(RC) $(RCINC) $< -o $@
+       $(RC) $(TARGET_RCFLAGS) $(RCINC) $< -o $@
 
 
 # Compatibility