Make the COMPILE and LINK build steps more generic

By using names like COMPILE.c and LINK.lib, this will make it easier to
generate build rules more easily based on extensions

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
This commit is contained in:
Christophe de Dinechin 2020-09-02 00:44:09 +02:00
parent 445cae64ae
commit 42a0bb0ac2
4 changed files with 33 additions and 29 deletions

View File

@ -79,8 +79,8 @@ The kind of output your makefile produces depends on the extension in
* `.dll` for a dynamic library
The build commands for each case are defined in build environment
configurations, e.g. `config.gnu.mk`, by variables called `MAKE_EXE`,
`MAKE_LIB` and `MAKE_DLL`. The actual extension being used are also
configurations, e.g. `config.gnu.mk`, by variables called `LINK.exe`,
`LINK.lib` and `LINK.dll`. The actual extension being used are also
defined in the same file, as `EXT.exe`, `EXT.lib` and `EXT.dll`. For
example, on Linux, `EXT.lib` is set to `.a`.

View File

@ -150,32 +150,35 @@ LDFLAGS_RPATH= -Wl,-rpath,$(PREFIX_DLL)
ifdef LIBTOOL
MIQ_COMPILE= $(LIBTOOL) --silent --mode=compile
MIQ_LINK= $(LIBTOOL) --silent --mode=link
MAKE_CC= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@
MAKE_CXX= $(MIQ_COMPILE) $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@
MAKE_AS= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@
MAKE_LIB= $(MIQ_LINK) $(LD) $(MIQ_LDFLAGS) $(MIQ_LINKARGS) \
COMPILE.c= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@
COMPILE.cpp= $(MIQ_COMPILE) $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@
COMPILE.s= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@
LINK.lib= $(MIQ_LINK) $(LD) $(MIQ_LDFLAGS) $(MIQ_LINKARGS) \
-o $@ \
$(MIQ_LT_VERS_OPT)
MAKE_DLL= $(MAKE_LIB)
INSTALL_DLL= $(LIBTOOL) --silent --mode=install \
LINK.dll= $(LINK.lib)
INSTALL.dll= $(LIBTOOL) --silent --mode=install \
$(INSTALL) $(MIQ_DLLNAME) $(PACKAGE_INSTALL_DLL)
MAKE_EXE= $(MIQ_LINK) $(LD) $(MIQ_LINKARGS) $(MIQ_LDFLAGS) -o $@
LINK.exe= $(MIQ_LINK) $(LD) $(MIQ_LINKARGS) $(MIQ_LDFLAGS) -o $@
else
# Non-libtool case: manage manually
CFLAGS_PIC= -fPIC
MAKE_CC= $(CC) $(MIQ_CFLAGS) -c $< -o $@
MAKE_CXX= $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@
MAKE_AS= $(CC) $(MIQ_CFLAGS) -c $< -o $@
MAKE_LIB= $(AR) $@ $(MIQ_TOLINK) && $(RANLIB) $@
MAKE_DLL= $(LD) -shared $(MIQ_LINKARGS) $(MIQ_LDFLAGS) \
COMPILE.c= $(CC) $(MIQ_CFLAGS) -c $< -o $@
COMPILE.cpp= $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@
COMPILE.s= $(CC) $(MIQ_CFLAGS) -c $< -o $@
LINK.lib= $(AR) $@ $(MIQ_TOLINK) && $(RANLIB) $@
LINK.dll= $(LD) -shared $(MIQ_LINKARGS) $(MIQ_LDFLAGS) \
-o $(MIQ_DLLNAME) \
$(MIQ_SONAME_OPT) \
&& (cd $(OUTPUT) $(MIQ_SYMLINKS))
INSTALL_DLL= $(INSTALL) $(MIQ_DLLNAME) $(PACKAGE_INSTALL_DLL) \
INSTALL.dll= $(INSTALL) $(MIQ_DLLNAME) $(PACKAGE_INSTALL_DLL) \
&& (cd $(PACKAGE_INSTALL_DLL) $(MIQ_SYMLINKS))
MAKE_EXE= $(LD) $(MIQ_LINKARGS) $(MIQ_LDFLAGS) -o $@
LINK.exe= $(LD) $(MIQ_LINKARGS) $(MIQ_LDFLAGS) -o $@
endif
COMPILE.cc= $(COMPILE.cpp)
COMPILE.asm= $(COMPILE.s)
LINK_DIR_OPT= -L
LINK_LIB_OPT= -l
LINK_DLL_OPT= -l

View File

@ -128,13 +128,14 @@ LINK_DLL_OPT=-l:
# In order to merge all .pdb information for an executable, we need to pass the -debug
# option to the linker.
MAKE_CC= $(CC) $(MIQ_CFLAGS) -c -Fo$@ $<
MAKE_CXX= $(CXX) $(MIQ_CXXFLAGS) -c -Fo$@ $<
COMPILE.c= $(CC) $(MIQ_CFLAGS) -c -Fo$@ $<
COMPILE.cpp= $(CXX) $(MIQ_CXXFLAGS) -c -Fo$@ $<
COMPILE.cc= $(COMPILE.cpp)
MAKE_DIR= mkdir -p $*
MAKE_OBJDIR= $(MAKE_DIR) && touch $@
MAKE_LIB= $(MSLIB) $(MIQ_LINKOPTS) -out:$@
MAKE_DLL= $(LD) $(MIQ_LINKOPTS) $(MIQ_LDFLAGS) -dll -out:$@
MAKE_EXE= $(LD) $(MIQ_LINKOPTS) $(MIQ_LDFLAGS) -out:$@
LINK.lib= $(MSLIB) $(MIQ_LINKOPTS) -out:$@
LINK.dll= $(LD) $(MIQ_LINKOPTS) $(MIQ_LDFLAGS) -dll -out:$@
LINK.exe= $(LD) $(MIQ_LINKOPTS) $(MIQ_LDFLAGS) -out:$@
#------------------------------------------------------------------------------

View File

@ -461,15 +461,15 @@ endif
# Compilation
$(MIQ_OBJDIR)%.c$(EXT.obj): %.c $(MIQ_OBJDEPS)
$(PRINT_COMPILE) $(MAKE_CC)
$(PRINT_COMPILE) $(COMPILE.c)
$(MIQ_OBJDIR)%.cpp$(EXT.obj): %.cpp $(MIQ_OBJDEPS)
$(PRINT_COMPILE) $(MAKE_CXX)
$(PRINT_COMPILE) $(COMPILE.cpp)
$(MIQ_OBJDIR)%.cc$(EXT.obj): %.cc $(MIQ_OBJDEPS)
$(PRINT_COMPILE) $(MAKE_CXX)
$(PRINT_COMPILE) $(COMPILE.cc)
$(MIQ_OBJDIR)%.s$(EXT.obj): %.s $(MIQ_OBJDEPS)
$(PRINT_COMPILE) $(MAKE_AS)
$(PRINT_COMPILE) $(COMPILE.s)
$(MIQ_OBJDIR)%.asm$(EXT.obj): %.asm $(MIQ_OBJDEPS)
$(PRINT_COMPILE) $(MAKE_AS)
$(PRINT_COMPILE) $(COMPILE.asm)
# Skip headers
$(MIQ_OBJDIR)%.h$(EXT.obj):
@ -493,11 +493,11 @@ MIQ_NOLIB= $(MIQ_NOEXE:$(PFX.lib)%$(EXT.lib)=%)
MIQ_NODLL= $(MIQ_NOLIB:$(PFX.dll)%$(EXT.dll)=%)
MIQ_OUT_SOURCES=$(SOURCES_$(MIQ_NODLL))
$(MIQ_OUTLIB): $(MIQ_TOLINK) $$(MIQ_TOLINK) $(MIQ_MAKEDEPS)
$(PRINT_BUILD) $(MAKE_LIB)
$(PRINT_BUILD) $(LINK.lib)
$(MIQ_OUTDLL): $(MIQ_TOLINK) $$(MIQ_TOLINK) $(MIQ_MAKEDEPS)
$(PRINT_BUILD) $(MAKE_DLL)
$(PRINT_BUILD) $(LINK.dll)
$(MIQ_OUTEXE): $(MIQ_TOLINK) $$(MIQ_TOLINK) $(MIQ_MAKEDEPS)
$(PRINT_BUILD) $(MAKE_EXE)
$(PRINT_BUILD) $(LINK.exe)
#------------------------------------------------------------------------------
# Package configuration