diff options
Diffstat (limited to 'win32/Makefile.sub')
-rw-r--r-- | win32/Makefile.sub | 286 |
1 files changed, 144 insertions, 142 deletions
diff --git a/win32/Makefile.sub b/win32/Makefile.sub index a339061459..7dbb020eee 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -4,18 +4,37 @@ SHELL = $(COMSPEC) ECHO1 = $(V:1=@:) RUNCMD = $(COMSPEC) /c MKFILES = Makefile verconf.mk -NULLCMD = type nul +NULLCMD = exit /b0. # exit ignores the rest NULL = nul CHDIR = cd PATH_SEPARATOR = ; TZ = # skip timezone tests PWD = $(MAKEDIR) empty = +tooldir = $(srcdir)/tool !ifndef MFLAGS MFLAGS=-l !endif +!if "$(BASERUBY)" == "" +! if [ruby $(tooldir)/missing-baseruby.bat 2> nul] +! else if [for %I in (ruby.exe) do @echo BASERUBY = %~s$$PATH:I > baseruby.mk] +! else +! include baseruby.mk +! endif +! if [del baseruby.mk] +! endif +!else if "$(BASERUBY)" == "no" || [($(BASERUBY) -eexit) > nul 2> nul] +BASERUBY = +!endif +!if "$(BASERUBY)" == "" +BASERUBY = $(tooldir:/=\)\missing-baseruby.bat +HAVE_BASERUBY = no +!else +HAVE_BASERUBY = yes +!endif + !ifndef REVISION_FORCE !if "$(HAVE_BASERUBY)" == "yes" REVISION_FORCE = PHONY @@ -24,6 +43,14 @@ REVISION_FORCE = PHONY !ifndef CROSS_COMPILING CROSS_COMPILING = no +!else if "$(CROSS_COMPILING)" == "yes" +! if "$(HAVE_BASERUBY)" != "yes" +! error executable host ruby is required for cross-compiling +! endif +!else +! if "$(CROSS_COMPILING)" != "no" +! error Bad CROSS_COMPILING +! endif !endif !ifndef win_srcdir win_srcdir = $(srcdir)/win32 @@ -76,17 +103,19 @@ CC = cl -nologo CPP = $(CC) -E !endif !if !defined(YACC) -YACC = bison +YACC = $(BASERUBY) $(top_srcdir)/tool/lrama/exe/lrama !endif AR = lib -nologo PURIFY = AUTOCONF = autoconf IFCHANGE = $(COMSPEC) /C $(srcdir:/=\)\win32\ifchange.bat RM = $(COMSPEC) /C $(srcdir:/=\)\win32\rm.bat +RM1 = del RMDIR = $(COMSPEC) /C $(srcdir:/=\)\win32\rmdirs.bat RMDIRS = $(COMSPEC) /C $(srcdir:/=\)\win32\rmdirs.bat RMALL = $(COMSPEC) /C $(srcdir:/=\)\win32\rm.bat -f -r MAKEDIRS = $(COMSPEC) /E:ON /C $(srcdir:/=\)\win32\makedirs.bat +TOUCH = $(BASERUBY) -run -e touch -- CP = copy > nul MV = move > nul RM1 = del /f /q @@ -97,6 +126,8 @@ BASERUBY = ruby TEST_RUNNABLE = yes !endif +CAT_DEPEND = type + !if !defined(MACHINE) MACHINE = x86 !endif @@ -150,13 +181,16 @@ sitearch = $(ARCH)-$(RT) !if !defined(ruby_version) ruby_version = $(MAJOR).$(MINOR).0 !endif +!if defined(ABI_VERSION) +ruby_version = $(ruby_version)+$(ABI_VERSION) +!endif !if !defined(RUBY_VERSION_NAME) RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) !endif RUBY_PROGRAM_VERSION = $(MAJOR).$(MINOR).$(TEENY) !ifndef RUBY_SO_NAME -RUBY_SO_NAME = $(RT)-$(RUBY_BASE_NAME)$(ruby_version:.=) +RUBY_SO_NAME = $(RT)-$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0 !if "$(ARCH)" != "i386" RUBY_SO_NAME = $(ARCH)-$(RUBY_SO_NAME) !endif @@ -277,6 +311,9 @@ LIBS = user32.lib advapi32.lib shell32.lib ws2_32.lib !if $(MSC_VER) >= 1400 LIBS = $(LIBS) iphlpapi.lib !endif +!if defined(USE_GMP) +LIBS = $(LIBS) gmp.lib +!endif LIBS = $(LIBS) imagehlp.lib shlwapi.lib bcrypt.lib $(EXTLIBS) !endif !if !defined(MISSING) @@ -295,8 +332,7 @@ COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm) COROUTINE_OBJ = coroutine/win32/Context.obj COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm) !else -COROUTINE_OBJ = coroutine/copy/Context.obj -COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.c) +!error copy coroutine has been replaced with pthread implementation at 42130a64f02294dc8025af3a51bda518c67ab33d !endif COROUTINE_H = $(COROUTINE_OBJ:.obj=.h) @@ -304,7 +340,9 @@ ARFLAGS = -machine:$(MACHINE) -out: LD = $(CC) LDSHARED = $(LD) -LD XCFLAGS = -DRUBY_EXPORT $(INCFLAGS) $(XCFLAGS) -!if $(MSC_VER) >= 1400 +!if $(MSC_VER) >= 1800 +LDFLAGS = $(LDFLAGS) -manifest:embed,ID=2 +!elseif $(MSC_VER) >= 1400 # Prevents VC++ 2005 (cl ver 14) warnings MANIFESTTOOL = mt -nologo LDSHARED_0 = @if exist $(@).manifest $(MINIRUBY) -run -e wait_writable -- -n 10 $@ @@ -315,34 +353,8 @@ CPPFLAGS = $(DEFS) $(ARCHDEFS) $(CPPFLAGS) !if "$(USE_RUBYGEMS)" == "no" CPPFLAGS = -DDISABLE_RUBYGEMS $(CPPFLAGS) !endif -!ifndef MJIT_SUPPORT -MJIT_SUPPORT = yes -!endif -!if "$(CPPOUTFLAG)" == ">" -MJIT_HEADER_FLAGS = -!else -MJIT_HEADER_FLAGS = -P -!endif -MJIT_HEADER_SUFFIX = -MJIT_HEADER_ARCH = -MJIT_HEADER_INSTALL_DIR = include/$(RUBY_VERSION_NAME)/$(arch) -MJIT_PRECOMPILED_HEADER_NAME = rb_mjit_header-$(RUBY_PROGRAM_VERSION).pch -MJIT_PRECOMPILED_HEADER = $(MJIT_HEADER_INSTALL_DIR)/$(MJIT_PRECOMPILED_HEADER_NAME) -!ifndef MJIT_CC -MJIT_CC = $(CC) -!endif -!ifndef MJIT_OPTFLAGS -# TODO: Use only $(OPTFLAGS) for performance. It requires to modify flags for precompiled header too. -# For now, using flags used for building precompiled header to make JIT succeed. -MJIT_OPTFLAGS = -DMJIT_HEADER $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -!endif -!ifndef MJIT_DEBUGFLAGS -# TODO: Make this work... Another header for debug build needs to be installed first. -MJIT_DEBUGFLAGS = $(empty) $(DEBUGFLAGS) $(empty) -MJIT_DEBUGFLAGS = $(MJIT_DEBUGFLAGS: -Zi = -Z7 ) -!endif -!ifndef MJIT_LDSHARED -MJIT_LDSHARED = $(MJIT_CC) -LD +!ifndef RJIT_SUPPORT +RJIT_SUPPORT = no !endif POSTLINK = @@ -378,14 +390,18 @@ RUNRUBY = .\$(PROGRAM) -I$(srcdir)/lib -I"$(EXTOUT)/$(arch)" -I. !endif MINIRUBY = $(MINIRUBY) $(MINIRUBYOPT) RUNRUBY = $(RUNRUBY) "$(tooldir)/runruby.rb" --extout="$(EXTOUT)" $(RUNRUBYOPT) -- $(RUN_OPTS) +yes_baseruby = $(HAVE_BASERUBY:no=) +no_baseruby = $(HAVE_BASERUBY:yes=) !if "$(CROSS_COMPILING)" == "yes" XRUBY = $(MINIRUBY) BOOTSTRAPRUBY = $(BASERUBY) +BOOTSTRAPRUBY_OPT = -r./$(arch)-fake !else BOOTSTRAPRUBY = $(MINIRUBY) +BOOTSTRAPRUBY_OPT = XRUBY = $(RUNRUBY) !endif -BTESTRUBY = $(MINIRUBY) +BTESTRUBY = $(MINIRUBY) -r./$(arch)-fake !ifndef RUBY RUBY = ruby !endif @@ -420,8 +436,10 @@ THREAD_IMPL_SRC = thread_$(THREAD_MODEL).c !if "$(CROSS_COMPILING)" == "yes" PREP = $(arch)-fake.rb +BUILTIN_BINARY = no !else PREP = miniruby$(EXEEXT) +BUILTIN_BINARY = yes !endif !if !defined(EXTSTATIC) @@ -469,7 +487,6 @@ EXTOBJS = dmyext.$(OBJEXT) arch_hdrdir = $(EXTOUT)/include/$(arch) top_srcdir = $(srcdir) hdrdir = $(srcdir)/include -tooldir = $(srcdir)/tool VPATH = $(arch_hdrdir)/ruby;$(hdrdir)/ruby;$(srcdir);$(srcdir)/missing;$(win_srcdir) !ifndef GIT @@ -532,13 +549,16 @@ GOLF_PRELUDE_C = golf_prelude.c RBCONFIG = ./.rbconfig.time !if "$(GITHUB_ACTIONS)" == "true" -ACTIONS_GROUP = @echo ^#^#[group]$(@:yes-=) -ACTIONS_ENDGROUP = @echo ^#^#[endgroup] +# 93(bright yellow) is copied from .github/workflows/mingw.yml +ACTIONS_GROUP = @echo ::group::[93m$(@:yes-=)[m +ACTIONS_ENDGROUP = @echo ::endgroup:: !else ACTIONS_GROUP = @:: $(empty) ACTIONS_ENDGROUP = @:: !endif +ABI_VERSION_HDR = $(hdrdir)/ruby/internal/abi.h + !include $(srcdir)/common.mk !ifdef SCRIPTPROGRAMS @@ -564,13 +584,16 @@ ACTIONS_ENDGROUP = @:: scriptbin: $(SCRIPTPROGRAMS) +!if "$(SCRIPTPROGRAMS)" != "" $(SCRIPTPROGRAMS): $(STUBPROGRAM) +!endif update-src:: @cd "$(srcdir:/=\)" && set LC_TIME=C && $(VCSUP) .PHONY: reconfig reconfig $(MKFILES): $(srcdir)/common.mk $(srcdir)/version.h \ + $(hdrdir)/ruby/version.h $(ABI_VERSION_HDR) \ $(win_srcdir)/Makefile.sub $(win_srcdir)/configure.bat \ $(win_srcdir)/setup.mak $(win_srcdir)/enc-setup.mak \ $(srcdir)/enc/Makefile.in @@ -621,6 +644,9 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #endif !endif #define RUBY_MSVCRT_VERSION $(RT_VER) +!if defined(ABI_VERSION) +#define RUBY_ABI_VERSION $(ABI_VERSION) +!endif #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 @@ -631,12 +657,19 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define HAVE_STDDEF_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 +!if $(MSC_VER) >= 1920 +#define HAVE_AFUNIX_H 1 +!endif !if $(MSC_VER) >= 1400 #define HAVE_LONG_LONG 1 !else #define ULL_TO_DOUBLE(n) ((double)(unsigned long)((n)>>32) * (1I64 << 32) + (unsigned long)(n)) !endif #define HAVE_OFF_T 1 +#define rb_off_t __int64 +#define SIGNEDNESS_OF_OFF_T -1 +#define OFFT2NUM(v) LL2NUM(v) +#define NUM2OFFT(v) NUM2LL(v) #define SIZEOF_INT 4 #define SIZEOF_SHORT 2 #define SIZEOF_LONG 4 @@ -650,7 +683,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define _INTEGRAL_MAX_BITS 64 #endif #define SIZEOF_OFF_T 8 -!if "$(ARCH)" == "x64" +!if "$(TARGET_OS)" == "mswin64" #define SIZEOF_VOIDP 8 !else #define SIZEOF_VOIDP 4 @@ -672,7 +705,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define NUM2CLOCKID(v) NUM2INT(v) #define SIZEOF_CLOCK_T 4 #define SIZEOF_RLIM_T 0 -!if "$(ARCH)" == "x64" +!if "$(TARGET_OS)" == "mswin64" #define SIZEOF_SIZE_T 8 #define SIZEOF_PTRDIFF_T 8 #define SIZEOF_INTPTR_T 8 @@ -702,21 +735,14 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define ALWAYS_INLINE(x) __forceinline x #define WARN_UNUSED_RESULT(x) x #define MAYBE_UNUSED(x) x -#define UNREACHABLE __assume(0) -#define ASSUME(x) __assume(!!(x)) +#define HAVE___ASSUME 1 #define FUNC_STDCALL(x) __stdcall x #define FUNC_CDECL(x) __cdecl x #define FUNC_FASTCALL(x) __fastcall x !if $(MSC_VER) >= 1500 #define RUBY_FUNCTION_NAME_STRING __FUNCTION__ -#define PACKED_STRUCT(x) __pragma(pack(push, 1)) x __pragma(pack(pop)) -!else -#define PACKED_STRUCT(x) x -!endif -!if "$(MACHINE)" == "x86" || "$(ARCH)" == "x64" -#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x) -!else -#define PACKED_STRUCT_UNALIGNED(x) x +#define RBIMPL_ATTR_PACKED_STRUCT_BEGIN() __pragma(pack(push, 1)) +#define RBIMPL_ATTR_PACKED_STRUCT_END() __pragma(pack(pop)) !endif #define RUBY_EXTERN extern __declspec(dllimport) #define RUBY_ALIGNAS(n) __declspec(align(n)) @@ -736,6 +762,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define HAVE_STRUCT_TIMESPEC !endif !if $(MSC_VER) >= 1600 +#define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 !else #define int8_t signed char @@ -778,7 +805,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define HAVE_INTPTR_T 1 #define HAVE_UINTPTR_T 1 #define HAVE_SSIZE_T 1 -!if "$(ARCH)" == "x64" +!if "$(TARGET_OS)" == "mswin64" #define ssize_t __int64 #define PRI_PTR_PREFIX "I64" !else @@ -904,15 +931,14 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub !if "$(EXTSTATIC)" == "static" #define EXTSTATIC 1 !endif +!if "$(USE_GMP)" != "" +#define USE_GMP 1 +!endif #define EXECUTABLE_EXTS $(EXECUTABLE_EXTS) #define RUBY_COREDLL "$(RT)" #define RUBY_PLATFORM "$(arch)" #define RUBY_SITEARCH "$(sitearch)" -!if "$(MJIT_SUPPORT)" == "yes" -#define USE_MJIT 1 -!else -#define USE_MJIT 0 -!endif +#define USE_RJIT 0 #endif /* $(guard) */ << @@ -980,7 +1006,7 @@ s,@target_alias@,$(ARCH)-$(PLATFORM),;t t s,@target_cpu@,$(ARCH),;t t s,@target_vendor@,pc,;t t s,@target_os@,$(PLATFORM),;t t -s,@NULLCMD@,:,;t t +s,@NULLCMD@,$(NULLCMD),;t t s,@CC@,$(CC),;t t s,@CPP@,$(CPP),;t t s,@CXX@,$$(CC),;t t @@ -1051,7 +1077,7 @@ s,@LIBPATHFLAG@, -libpath:%s,;t t s,@RPATHFLAG@,,;t t s,@LIBARG@,%s.lib,;t t s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) -link $$(DLDFLAGS) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb -def:$$(DEFFILE),;t t -!if $(MSC_VER) >= 1400 +!if $(MSC_VER) >= 1400 && $(MSC_VER) < 1800 s,@LINK_SO@,@if exist $$(@).manifest $$(RUBY) -run -e wait_writable -- -n 10 $$(@),;t t s,@LINK_SO@,@if exist $$(@).manifest $(MANIFESTTOOL) -manifest $$(@).manifest -outputresource:$$(@);2,;t t s,@LINK_SO@,@if exist $$(@).manifest $$(RM) $$(@:/=\).manifest,;t t @@ -1105,9 +1131,13 @@ s,@srcdir@,$(srcdir),;t t s,@top_srcdir@,$(srcdir),;t t s,@try_header@,try_compile,;t t s,@ruby_pc@,$(ruby_pc),;t t -s,@MJIT_SUPPORT@,$(MJIT_SUPPORT),;t t +s,@RJIT_SUPPORT@,$(RJIT_SUPPORT),;t t <<KEEP +!if "$(HAVE_BASERUBY)" != "yes" || "$(CROSS_COMPILING)" == "yes" +$(RBCONFIG): $(PREP) +!endif + miniruby: miniruby$(EXEEXT) miniruby$(EXEEXT): @@ -1127,9 +1157,11 @@ $(PROGRAM): $(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res $(ECHO) linking $(@:\=/) $(Q) $(PURIFY) $(CC) $(MAINOBJ) $(EXTOBJS) $(RUBY_INSTALL_NAME).res \ $(OUTFLAG)$@ $(LIBRUBYARG) -link $(LDFLAGS) $(XLDFLAGS) +! if defined(LDSHARED_0) $(Q) $(LDSHARED_0) $(Q) $(LDSHARED_1) $(Q) $(LDSHARED_2) +! endif !endif !if "$(WPROGRAM)" != "" @@ -1138,9 +1170,11 @@ $(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res $(Q) $(PURIFY) $(CC) $(MAINOBJ) $(WINMAINOBJ) \ $(RUBYW_INSTALL_NAME).res $(OUTFLAG)$@ $(LIBRUBYARG) \ -link $(LDFLAGS) $(XLDFLAGS) -subsystem:Windows +! if defined(LDSHARED_0) $(Q) $(LDSHARED_0) $(Q) $(LDSHARED_1) $(Q) $(LDSHARED_2) +! endif !endif !if "$(STUBPROGRAM)" != "" @@ -1148,9 +1182,11 @@ $(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME) $(ECHO) linking $(@:\=/) $(Q) $(PURIFY) $(CC) rubystub.$(OBJEXT) $(RUBY_INSTALL_NAME).res \ $(OUTFLAG)$@ $(LIBRUBYARG) -link $(LDFLAGS) $(XLDFLAGS) +! if defined(LDSHARED_0) $(Q) $(LDSHARED_0) $(Q) $(LDSHARED_1) $(Q) $(LDSHARED_2) +! endif !endif !if "$(LIBRUBY_SO_UPDATE)" == "" @@ -1180,14 +1216,16 @@ $(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res $(RUBY_SO_NAME).res $(SOLIBS) $(EXTSOLIBS) $(LIBS) -Fe$@ -link $(LDFLAGS) \ $(LIBRUBY_DLDFLAGS) @$(RM) dummy.lib dummy.exp +!if defined(LDSHARED_0) $(Q) $(LDSHARED_0) $(Q) $(LDSHARED_1) $(Q) $(LDSHARED_2) # | findstr -v -c:LNK4049 -c:LNK4217 +!endif $(RUBYDEF): $(LIBRUBY_A) $(RBCONFIG) $(ECHO) generating $(@:\=/) - $(Q) $(MINIRUBY) $(srcdir)/win32/mkexports.rb \ + $(Q) $(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/mkexports.rb \ -output=$@ -arch=$(ARCH) $(LIBRUBY_A) {$(win_srcdir)}.def.lib: @@ -1231,10 +1269,8 @@ clean-enc distclean-enc realclean-enc: -$(Q)$(MAKE) $(MAKE_ENC) $(@:-enc=) !endif -$(RBCONFIG): $(PREP) - $(RCFILES): $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb - @$(MINIRUBY) $(srcdir)/win32/resource.rb \ + @$(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/resource.rb \ -ruby_name=$(RUBY_INSTALL_NAME) \ -rubyw_name=$(RUBYW_INSTALL_NAME) \ -so_name=$(RUBY_SO_NAME) \ @@ -1256,6 +1292,15 @@ $(ruby_pc): $(RBCONFIG) $(ECHO) assembling $(<:\=/) $(Q) $(AS) $(ASFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(<:\=/) +{$(srcdir)/prism}.c.obj: + $(ECHO) compiling $(<:\=/) + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/) +{$(srcdir)/prism/enc}.c.obj: + $(ECHO) compiling $(<:\=/) + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/) +{$(srcdir)/prism/util}.c.obj: + $(ECHO) compiling $(<:\=/) + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/) {$(srcdir)/enc/trans}.c.obj: $(ECHO) compiling $(<:\=/) $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/) @@ -1319,6 +1364,10 @@ win32/win32.$(OBJEXT): {$(VPATH)}id.h dir.$(OBJEXT) win32/win32.$(OBJEXT): {$(srcdir)}win32/dir.h file.$(OBJEXT) win32/win32.$(OBJEXT): {$(VPATH)}win32/file.h +!if "$(srcdir)" != "." && "$(HAVE_BASERUBY)" == "yes" +revision.h: $(REVISION_H) +!endif + ext/extinit.obj: ext/extinit.c $(SETUP) $(ECHO) compiling ext/extinit.c $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c @@ -1328,44 +1377,8 @@ probes.h: {$(VPATH)}probes.dmyh #include "$(*F).dmyh" <<KEEP -main: mjit-headers -yes-mjit-headers: $(MJIT_PRECOMPILED_HEADER) -clean-local:: - $(Q)$(RM) $(MJIT_PRECOMPILED_HEADER_NAME) $(MJIT_PRECOMPILED_HEADER_NAME:.pch=.)$(OBJEXT) - $(Q)$(RM) $(TIMESTAMPDIR)/$(MJIT_PRECOMPILED_HEADER_NAME:.pch=.time) mjit_config.h - $(Q)$(RM) $(MJIT_HEADER_INSTALL_DIR)/rb_mjit_header-*.pch - $(Q)$(RM) $(MJIT_HEADER_INSTALL_DIR)/rb_mjit_header-*.$(OBJEXT) - -$(Q) $(RMDIRS) $(MJIT_HEADER_INSTALL_DIR) 2> $(NULL) || exit 0 - $(Q)$(RM) $(arch_hdrdir)/rb_mjit_header-*.pch - $(Q)$(RM) $(arch_hdrdir)/rb_mjit_header-*.$(OBJEXT) - -# Non-mswin environment is not using prebuilt precompiled header because upgrading compiler -# or changing compiler options may break MJIT so build (currently only by --mjit-debug though). -# -# But mswin is building precompiled header because cl.exe cannot leave macro after preprocess. -# As a workaround to use macro without installing many source files, it uses precompiled header -# without sufficient guard for a broken build. -# -# TODO: Fix the above issue by including VC version in header name, and create another header -# for --mjit-debug as well. -$(TIMESTAMPDIR)/$(MJIT_PRECOMPILED_HEADER_NAME:.pch=).time: probes.h vm.$(OBJEXT) - $(ECHO) building $(@F:.time=.pch) - $(Q) $(CC) -DMJIT_HEADER $(CFLAGS: -Zi = -Z7 ) $(XCFLAGS:-DRUBY_EXPORT =) -URUBY_EXPORT $(CPPFLAGS) $(srcdir)/vm.c -c -Yc \ - $(COUTFLAG)$(@F:.time=.)$(OBJEXT) -Fd$(@F:.time=.pdb) -Fp$(@F:.time=.pch).new -Z7 - $(Q) $(IFCHANGE) "--timestamp=$@" $(@F:.time=.pch) $(@F:.time=.pch).new - -$(MJIT_PRECOMPILED_HEADER_NAME): $(TIMESTAMPDIR)/$(MJIT_PRECOMPILED_HEADER_NAME:.pch=).time - -$(MJIT_PRECOMPILED_HEADER): $(MJIT_PRECOMPILED_HEADER_NAME) - $(Q) $(MAKEDIRS) $(MJIT_HEADER_INSTALL_DIR) - $(Q) $(MAKE_LINK) $(MJIT_PRECOMPILED_HEADER_NAME) $@ - $(Q) $(MAKE_LINK) $(MJIT_PRECOMPILED_HEADER_NAME:.pch=.)$(OBJEXT) $(MJIT_HEADER_INSTALL_DIR)/$(MJIT_PRECOMPILED_HEADER_NAME:.pch=.)$(OBJEXT) - $(Q) $(MAKEDIRS) $(arch_hdrdir) - $(Q) $(MAKE_LINK) $(MJIT_PRECOMPILED_HEADER_NAME) $(arch_hdrdir)/$(MJIT_PRECOMPILED_HEADER_NAME) - $(Q) $(MAKE_LINK) $(MJIT_PRECOMPILED_HEADER_NAME:.pch=.)$(OBJEXT) $(arch_hdrdir)/$(MJIT_PRECOMPILED_HEADER_NAME:.pch=.)$(OBJEXT) - -INSNS = opt_sc.inc optinsn.inc optunifs.inc insns.inc insns_info.inc \ - vmtc.inc vm.inc mjit_compile.inc +INSNS = optinsn.inc optunifs.inc insns.inc insns_info.inc \ + vmtc.inc vm.inc !if [exit > insns_rules.mk] !else if [for %I in ($(INSNS)) do \ @@ -1390,45 +1403,34 @@ loadpath: verconf.h sed -e '1,/^const char ruby_initial_load_paths/d;/;/,$$d' \ -e '/^^ /!d;s/ *"\\\\0"$$//;s/" *"//g' -mjit_config.h: $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub - @echo making <<$@ -#ifndef RUBY_MJIT_CONFIG_H -#define RUBY_MJIT_CONFIG_H 1 +RUBYSPEC_CAPIEXT_SRCDIR = $(srcdir)/$(RUBYSPEC_CAPIEXT) +RUBYSPEC_CAPIEXT_DEPS = $(RUBYSPEC_CAPIEXT_SRCDIR)/rubyspec.h $(RUBY_H_INCLUDES) $(LIBRUBY) +RUBYSPEC_CAPIEXT_EXTS = -#define MJIT_CONFIG_ESCAPED_EQ "=" -#define MJIT_HEADER_INSTALL_DIR "/$(MJIT_HEADER_INSTALL_DIR)" -#define MJIT_MIN_HEADER_NAME "$(MJIT_MIN_HEADER_NAME)" -#define MJIT_PRECOMPILED_HEADER_NAME "$(MJIT_PRECOMPILED_HEADER_NAME)" -<<KEEP - @ - @(set sep=#define MJIT_CC_COMMON ) & \ - for %I in ($(MJIT_CC)) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_CC_COMMON */>> $@ - @ - @(set sep=#define MJIT_CFLAGS ) & \ - for %I in ($(RUNTIMEFLAG) $(ARCH_FLAG)) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_CFLAGS */>> $@ - @ - @(set sep=#define MJIT_OPTFLAGS ) & \ - for %I in ($(MJIT_OPTFLAGS:^==" MJIT_CONFIG_ESCAPED_EQ ")) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_OPTFLAGS */>> $@ - @ - @(set sep=#define MJIT_DEBUGFLAGS ) & \ - for %I in ($(MJIT_DEBUGFLAGS:^==" MJIT_CONFIG_ESCAPED_EQ ")) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_DEBUGFLAGS */>> $@ - @ - @(set sep=#define MJIT_LDSHARED ) & \ - for %I in ($(MJIT_LDSHARED)) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_LDSHARED */>> $@ - @ - @(set sep=#define MJIT_DLDFLAGS ) & \ - for %I in ($(DLDFLAGS)) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_DLDFLAGS */>> $@ - @ - @(set sep=#define MJIT_LIBS ) & \ - for %I in ($(LIBRUBYARG_SHARED)) do @(call echo.%%sep%%"%%~I", \& set sep= ) >> $@ - @echo /* MJIT_LIBS */>> $@ - @ - @echo.>> $@ - @echo #endif /* RUBY_MJIT_CONFIG_H */>> $@ - @$(Q:@=: :) type $@ +!if [echo>rubyspec-capiext.mk RUBYSPEC_CAPIEXT_EXTS = \] +!else if [for %I in ($(RUBYSPEC_CAPIEXT_SRCDIR)\*_spec.c) do \ + @echo. $$(RUBYSPEC_CAPIEXT)/%~nI.so \>>rubyspec-capiext.mk] +!else if [echo. $$(empty)>>rubyspec-capiext.mk] +!else +! include rubyspec-capiext.mk +! if [del rubyspec-capiext.mk > nul] +! endif +!endif + +$(RUBYSPEC_CAPIEXT_EXTS): $(RUBYSPEC_CAPIEXT_DEPS) +rubyspec-capiext: $(RUBYSPEC_CAPIEXT_EXTS) + @ $(NULLCMD) + +{$(RUBYSPEC_CAPIEXT_SRCDIR)}.c{$(RUBYSPEC_CAPIEXT)}.so: + $(ECHO) building $(@F) + $(Q)$(MAKEDIRS) $(@D) + $(Q)echo> $*.def EXPORTS + $(Q)echo>> $*.def Init_$(*F) + $(Q)$(LDSHARED) -Fe$(@) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) $< $(LIBRUBYARG) -link $(DLDFLAGS) $(LIBS) $(LOCAL_LIBS) -implib:$*.lib -pdb:$*.pdb -def:$*.def +!if defined(LDSHARED_0) + $(Q)$(LDSHARED_0) + $(Q)$(LDSHARED_1) + $(Q)$(LDSHARED_2) +!endif + +exts: rubyspec-capiext |