Introduce and use the OUTPUTEXE and OUTPUTOBJ build variables

master
Sébastien Hinderer 2017-03-19 10:50:25 +01:00
parent f2d5d60376
commit 3564aade19
14 changed files with 30 additions and 50 deletions

View File

@ -1075,7 +1075,7 @@ partialclean::
ifeq "$(UNIX_OR_WIN32)" "unix" ifeq "$(UNIX_OR_WIN32)" "unix"
.PHONY: checkstack .PHONY: checkstack
checkstack: checkstack:
if $(MKEXE) -o tools/checkstack$(EXE) tools/checkstack.c; \ if $(MKEXE) $(OUTPUTEXE)tools/checkstack$(EXE) tools/checkstack.c; \
then tools/checkstack$(EXE); \ then tools/checkstack$(EXE); \
else :; \ else :; \
fi fi

View File

@ -48,12 +48,10 @@ CPPFLAGS += -DSYS_$(SYSTEM) $(IFLEXDIR) $(LIBUNWIND_INCLUDE_FLAGS)
ifeq "$(TOOLCHAIN)" "msvc" ifeq "$(TOOLCHAIN)" "msvc"
DFLAGS = $(CFLAGS) -DDEBUG DFLAGS = $(CFLAGS) -DDEBUG
PFLAGS=$(CFLAGS) -DPROFILING $(NATIVECCPROFOPTS) PFLAGS=$(CFLAGS) -DPROFILING $(NATIVECCPROFOPTS)
OUTPUTOBJ = -Fo
ASMOBJS=$(ARCH)nt.$(O) ASMOBJS=$(ARCH)nt.$(O)
else else
DFLAGS = $(CFLAGS) -g -DDEBUG DFLAGS = $(CFLAGS) -g -DDEBUG
PFLAGS=$(CFLAGS) -pg -DPROFILING $(NATIVECCPROFOPTS) PFLAGS=$(CFLAGS) -pg -DPROFILING $(NATIVECCPROFOPTS)
OUTPUTOBJ = -o
ASMOBJS=$(ARCH).$(O) ASMOBJS=$(ARCH).$(O)
endif endif

View File

@ -61,11 +61,6 @@ ifneq "$(CCOMPTYPE)" "msvc"
DFLAGS += -g DFLAGS += -g
endif endif
ifeq "$(CCOMPTYPE)" "msvc"
OUTPUTOBJ=-Fo
else
OUTPUTOBJ=-o
endif
DBGO=d.$(O) DBGO=d.$(O)
ifeq "$(UNIX_OR_WIN32)" "win32" ifeq "$(UNIX_OR_WIN32)" "win32"

View File

@ -59,8 +59,10 @@ A=a
S=s S=s
SO=s.o SO=s.o
EXE=.exe EXE=.exe
OUTPUTEXE=-o
EXT_DLL=.dll EXT_DLL=.dll
EXT_OBJ=.$(O) EXT_OBJ=.$(O)
OUTPUTOBJ=-o
EXT_LIB=.$(A) EXT_LIB=.$(A)
EXT_ASM=.$(S) EXT_ASM=.$(S)
MANEXT=1 MANEXT=1
@ -109,9 +111,6 @@ CPPFLAGS = -DCAML_NAME_SPACE
OCAMLC_CFLAGS = -O -mms-bitfields OCAMLC_CFLAGS = -O -mms-bitfields
BYTECCDBGCOMPOPTS=-g BYTECCDBGCOMPOPTS=-g
### Flag to use to rename object files. (for debug version.)
NAME_OBJ_FLAG=-o
LDFLAGS= LDFLAGS=
### Libraries needed ### Libraries needed
@ -143,7 +142,7 @@ MKEXEDEBUGFLAG=-g
MKMAINDLL=$(FLEXLINK) -maindll MKMAINDLL=$(FLEXLINK) -maindll
### Native command to build ocamlrun.exe without flexlink ### Native command to build ocamlrun.exe without flexlink
MKEXE_BOOT=$(CC) $(CFLAGS) -o $(1) $(2) MKEXE_BOOT=$(CC) $(CFLAGS) $(OUTPUTEXE)$(1) $(2)
### How to build a static library ### How to build a static library
MKLIB=rm -f $(1); $(TOOLPREF)ar rc $(1) $(2); $(RANLIB) $(1) MKLIB=rm -f $(1); $(TOOLPREF)ar rc $(1) $(2); $(RANLIB) $(1)

View File

@ -59,8 +59,10 @@ A=a
S=s S=s
SO=s.o SO=s.o
EXE=.exe EXE=.exe
OUTPUTEXE=-o
EXT_DLL=.dll EXT_DLL=.dll
EXT_OBJ=.$(O) EXT_OBJ=.$(O)
OUTPUTOBJ=-o
EXT_LIB=.$(A) EXT_LIB=.$(A)
EXT_ASM=.$(S) EXT_ASM=.$(S)
MANEXT=1 MANEXT=1
@ -110,9 +112,6 @@ OCAMLC_CFLAGS = -O -mms-bitfields
BYTECCDBGCOMPOPTS=-g BYTECCDBGCOMPOPTS=-g
### Flag to use to rename object files. (for debug version.)
NAME_OBJ_FLAG=-o
LDFLAGS= LDFLAGS=
### Libraries needed ### Libraries needed
@ -144,7 +143,7 @@ MKEXEDEBUGFLAG=-g
MKMAINDLL=$(FLEXLINK) -maindll MKMAINDLL=$(FLEXLINK) -maindll
### Native command to build ocamlrun.exe without flexlink ### Native command to build ocamlrun.exe without flexlink
MKEXE_BOOT=$(CC) $(CFLAGS) -o $(1) $(2) MKEXE_BOOT=$(CC) $(CFLAGS) $(OUTPUTEXE)$(1) $(2)
### How to build a static library ### How to build a static library
MKLIB=rm -f $(1); $(TOOLPREF)ar rc $(1) $(2); $(RANLIB) $(1) MKLIB=rm -f $(1); $(TOOLPREF)ar rc $(1) $(2); $(RANLIB) $(1)

View File

@ -54,8 +54,10 @@ A=lib
S=asm S=asm
SO=s.obj SO=s.obj
EXE=.exe EXE=.exe
OUTPUTEXE=-Fe
EXT_DLL=.dll EXT_DLL=.dll
EXT_OBJ=.$(O) EXT_OBJ=.$(O)
OUTPUTOBJ=-Fo
EXT_LIB=.$(A) EXT_LIB=.$(A)
EXT_ASM=.$(S) EXT_ASM=.$(S)
MANEXT=1 MANEXT=1
@ -104,9 +106,6 @@ OCAMLC_CFLAGS = -nologo -O2 -Gy- -MD
OCAMLC_CPPFLAGS = -D_CRT_SECURE_NO_DEPRECATE OCAMLC_CPPFLAGS = -D_CRT_SECURE_NO_DEPRECATE
BYTECCDBGCOMPOPTS=-Zi BYTECCDBGCOMPOPTS=-Zi
### Flag to use to rename object files. (for debug version.)
NAME_OBJ_FLAG=-Fo
LDFLAGS= LDFLAGS=
### Libraries needed ### Libraries needed
@ -141,7 +140,7 @@ MKMAINDLL=$(FLEXLINK) -maindll
MERGEMANIFESTEXE=test ! -f $(1).manifest \ MERGEMANIFESTEXE=test ! -f $(1).manifest \
|| mt -nologo -outputresource:$(1) -manifest $(1).manifest \ || mt -nologo -outputresource:$(1) -manifest $(1).manifest \
&& rm -f $(1).manifest && rm -f $(1).manifest
MKEXE_BOOT=$(CC) $(CFLAGS) /Fe$(1) $(2) /link /subsystem:console \ MKEXE_BOOT=$(CC) $(CFLAGS) $(OUTPUTEXE)$(1) $(2) /link /subsystem:console \
&& ($(MERGEMANIFESTEXE)) && ($(MERGEMANIFESTEXE))
### How to build a static library ### How to build a static library

View File

@ -54,8 +54,10 @@ A=lib
S=asm S=asm
SO=s.obj SO=s.obj
EXE=.exe EXE=.exe
OUTPUTEXE=-Fe
EXT_DLL=.dll EXT_DLL=.dll
EXT_OBJ=.$(O) EXT_OBJ=.$(O)
OUTPUTOBJ=-Fo
EXT_LIB=.$(A) EXT_LIB=.$(A)
EXT_ASM=.$(S) EXT_ASM=.$(S)
MANEXT=1 MANEXT=1
@ -104,9 +106,6 @@ OCAMLC_CPPFLAGS = -D_CRT_SECURE_NO_DEPRECATE
BYTECCDBGCOMPOPTS=-Zi BYTECCDBGCOMPOPTS=-Zi
### Flag to use to rename object files. (for debug version.)
NAME_OBJ_FLAG=-Fo
LDFLAGS= LDFLAGS=
### Libraries needed ### Libraries needed
@ -143,7 +142,7 @@ MKMAINDLL=$(FLEXLINK) -maindll
MERGEMANIFESTEXE=test ! -f $(1).manifest \ MERGEMANIFESTEXE=test ! -f $(1).manifest \
|| mt -nologo -outputresource:$(1) -manifest $(1).manifest \ || mt -nologo -outputresource:$(1) -manifest $(1).manifest \
&& rm -f $(1).manifest && rm -f $(1).manifest
MKEXE_BOOT=$(CC) $(CFLAGS) /Fe$(1) $(2) /link /subsystem:console \ MKEXE_BOOT=$(CC) $(CFLAGS) $(OUTPUTEXE)$(1) $(2) /link /subsystem:console \
&& ($(MERGEMANIFESTEXE)) && ($(MERGEMANIFESTEXE))
### How to build a static library ### How to build a static library

2
configure vendored
View File

@ -1972,6 +1972,7 @@ echo "BYTECCLIBS=$cclibs $dllib $curseslibs $pthread_link \
$instrumented_runtime_libs" >> Makefile $instrumented_runtime_libs" >> Makefile
echo "RPATH=$rpath" >> Makefile echo "RPATH=$rpath" >> Makefile
echo "EXE=$exe" >> Makefile echo "EXE=$exe" >> Makefile
echo "OUTPUTEXE=-o" >> Makefile
echo "SUPPORTS_SHARED_LIBRARIES=$shared_libraries_supported" >> Makefile echo "SUPPORTS_SHARED_LIBRARIES=$shared_libraries_supported" >> Makefile
echo "SHAREDCCCOMPOPTS=$sharedcccompopts" >> Makefile echo "SHAREDCCCOMPOPTS=$sharedcccompopts" >> Makefile
echo "MKSHAREDLIBRPATH=$mksharedlibrpath" >> Makefile echo "MKSHAREDLIBRPATH=$mksharedlibrpath" >> Makefile
@ -2007,6 +2008,7 @@ echo "O=o" >> Makefile
echo "A=a" >> Makefile echo "A=a" >> Makefile
echo "SO=$SO" >> Makefile echo "SO=$SO" >> Makefile
echo "EXT_OBJ=.o" >> Makefile echo "EXT_OBJ=.o" >> Makefile
echo "OUTPUTOBJ=-o" >> Makefile
echo "EXT_ASM=.s" >> Makefile echo "EXT_ASM=.s" >> Makefile
echo "EXT_LIB=.a" >> Makefile echo "EXT_LIB=.a" >> Makefile
echo "EXT_DLL=.$SO" >> Makefile echo "EXT_DLL=.$SO" >> Makefile

View File

@ -113,4 +113,4 @@ clean:: partialclean
$(CAMLOPT) -c $(COMPFLAGS) $(OPTCOMPFLAGS) $< $(CAMLOPT) -c $(COMPFLAGS) $(OPTCOMPFLAGS) $<
.c.$(O): .c.$(O):
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< $(CC) -c $(CFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $<

View File

@ -22,9 +22,9 @@ CAMLOBJS=bigarray.cmo
include ../Makefile include ../Makefile
mmap.$(O): ../$(UNIXLIB)/mmap.c mmap.$(O): ../$(UNIXLIB)/mmap.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< $(CC) -c $(CFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $<
mmap_ba.$(O): ../unix/mmap_ba.c mmap_ba.$(O): ../unix/mmap_ba.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< $(CC) -c $(CFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $<
.PHONY: depend .PHONY: depend

View File

@ -95,10 +95,6 @@ $(LIBNAME).cmxa: $(THREADS_NCOBJS)
# The following lines produce two object files st_stubs_b.$(O) and # The following lines produce two object files st_stubs_b.$(O) and
# st_stubs_n.$(O) from the same source file st_stubs.c (it is compiled # st_stubs_n.$(O) from the same source file st_stubs.c (it is compiled
# twice, each time with different options). # twice, each time with different options).
# Since the source and object file have a different basename, the name of
# the object file to produce must be given to the C compiler.
# For gcc this is done with the -ofoo.$(O) option.
# For msvc it's the /Fofoo.$(O) option.
ifeq "$(TOOLCHAIN)" "msvc" ifeq "$(TOOLCHAIN)" "msvc"
CCOUTPUT=/Fo CCOUTPUT=/Fo
@ -108,13 +104,13 @@ endif
st_stubs_b.$(O): st_stubs.c $(HEADER) st_stubs_b.$(O): st_stubs.c $(HEADER)
$(CC) -c $(CFLAGS) $(CPPFLAGS) -I$(ROOTDIR)/byterun \ $(CC) -c $(CFLAGS) $(CPPFLAGS) -I$(ROOTDIR)/byterun \
$(SHAREDCCCOMPOPTS) $(CCOUTPUT)$@ $< $(SHAREDCCCOMPOPTS) $(OUTPUTOBJ)$@ $<
st_stubs_n.$(O): st_stubs.c $(HEADER) st_stubs_n.$(O): st_stubs.c $(HEADER)
$(CC) $(CFLAGS) $(CPPFLAGS) -I$(ROOTDIR)/asmrun -I$(ROOTDIR)/byterun \ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(ROOTDIR)/asmrun -I$(ROOTDIR)/byterun \
$(SHAREDCCCOMPOPTS) -DNATIVE_CODE \ $(SHAREDCCCOMPOPTS) -DNATIVE_CODE \
-DTARGET_$(ARCH) -DMODEL_$(MODEL) -DSYS_$(SYSTEM) \ -DTARGET_$(ARCH) -DMODEL_$(MODEL) -DSYS_$(SYSTEM) \
$(CCOUTPUT)$@ -c $< $(OUTPUTOBJ)$@ -c $<
partialclean: partialclean:
rm -f *.cm* rm -f *.cm*

View File

@ -140,12 +140,12 @@ $(CAMLHEADERS):
for suff in '' d i; do \ for suff in '' d i; do \
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) \ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) \
-DRUNTIME_NAME='"$(BINDIR)/ocamlrun'$$suff'"' \ -DRUNTIME_NAME='"$(BINDIR)/ocamlrun'$$suff'"' \
header.c -o tmpheader$(EXE) && \ header.c $(OUTPUTEXE)tmpheader$(EXE) && \
strip tmpheader$(EXE) && \ strip tmpheader$(EXE) && \
mv tmpheader$(EXE) camlheader$$suff && \ mv tmpheader$(EXE) camlheader$$suff && \
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) \ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) \
-DRUNTIME_NAME='"$(TARGET_BINDIR)/ocamlrun'$$suff'"' \ -DRUNTIME_NAME='"$(TARGET_BINDIR)/ocamlrun'$$suff'"' \
header.c -o tmpheader$(EXE) && \ header.c $(OUTPUTEXE)tmpheader$(EXE) && \
strip tmpheader$(EXE) && \ strip tmpheader$(EXE) && \
mv tmpheader$(EXE) target_camlheader$$suff; \ mv tmpheader$(EXE) target_camlheader$$suff; \
done && \ done && \
@ -156,25 +156,25 @@ else # Windows
# TODO: see whether there is a way to further merge the rules below # TODO: see whether there is a way to further merge the rules below
# with those above # with those above
camlheader target_camlheader camlheader_ur: camlheader target_camlheader camlheader_ur: headernt.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \ $(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \
-DRUNTIME_NAME='"ocamlrun"' headernt.c -DRUNTIME_NAME='"ocamlrun"' $(OUTPUTOBJ)headernt.$(O) $<
$(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS) $(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS)
rm -f camlheader.exe rm -f camlheader.exe
mv tmpheader.exe camlheader mv tmpheader.exe camlheader
cp camlheader target_camlheader cp camlheader target_camlheader
cp camlheader camlheader_ur cp camlheader camlheader_ur
camlheaderd target_camlheaderd: camlheaderd target_camlheaderd: headernt.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \ $(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \
-DRUNTIME_NAME='"ocamlrund"' headernt.c -DRUNTIME_NAME='"ocamlrund"' $(OUTPUTOBJ)headernt.$(O) $<
$(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS) $(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS)
mv tmpheader.exe camlheaderd mv tmpheader.exe camlheaderd
cp camlheaderd target_camlheaderd cp camlheaderd target_camlheaderd
camlheaderi: camlheaderi: headernt.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \ $(CC) -c $(CFLAGS) $(CPPFLAGS) -I../byterun \
-DRUNTIME_NAME='"ocamlruni"' headernt.c -DRUNTIME_NAME='"ocamlruni"' $(OUTPUTOBJ)headernt.$(O)
$(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS) $(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS)
mv tmpheader.exe camlheaderi mv tmpheader.exe camlheaderi

View File

@ -306,15 +306,8 @@ else
DEF_SYMBOL_PREFIX = '-Dsymbol_prefix=""' DEF_SYMBOL_PREFIX = '-Dsymbol_prefix=""'
endif endif
ifeq "$(CCOMPTYPE)" "msvc"
CCOUT = -Fe
else
EMPTY =
CCOUT = -o $(EMPTY)
endif
objinfo_helper$(EXE): objinfo_helper.c ../config/s.h objinfo_helper$(EXE): objinfo_helper.c ../config/s.h
$(CC) $(CFLAGS) $(CPPFLAGS) $(CCOUT)objinfo_helper$(EXE) \ $(CC) $(CFLAGS) $(CPPFLAGS) $(OUTPUTEXE)$@ \
$(DEF_SYMBOL_PREFIX) $(LIBBFD_INCLUDE) $< $(LIBBFD_LINK) $(DEF_SYMBOL_PREFIX) $(LIBBFD_INCLUDE) $< $(LIBBFD_LINK)
OBJINFO=../compilerlibs/ocamlcommon.cma \ OBJINFO=../compilerlibs/ocamlcommon.cma \

View File

@ -51,4 +51,4 @@ warshall.$(O): defs.h
# also works for .obj files. # also works for .obj files.
%.$(O): %.c %.$(O): %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< $(CC) -c $(CFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $<