From 8011e3fabb38e5bbc40038b540459595cce7a995 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 13 Oct 2011 12:23:50 -0700 Subject: [PATCH] hack around on makefiles trying to get a 64 bit build right now there are many temporary hacks, search for NDM to find them --- mk/libuv/{ => ia32}/mac/Makefile | 4 +- mk/libuv/{ => ia32}/mac/gyp-mac-tool | 0 .../mac/src/rt/libuv/run-benchmarks.target.mk | 0 .../ia32/mac/src/rt/libuv/run-tests.target.mk | 115 ++++++ .../mac}/src/rt/libuv/uv.Makefile | 2 +- .../{ => ia32}/mac/src/rt/libuv/uv.target.mk | 0 mk/libuv/{ => ia32}/unix/Makefile | 4 +- .../src/rt/libuv/run-benchmarks.target.mk | 0 .../unix/src/rt/libuv/run-tests.target.mk | 0 .../{ => ia32}/unix/src/rt/libuv/uv.Makefile | 2 +- .../{ => ia32}/unix/src/rt/libuv/uv.target.mk | 0 mk/libuv/{ => ia32}/win/Makefile | 4 +- .../win/src/rt/libuv/run-benchmarks.target.mk | 0 .../win/src/rt/libuv/run-tests.target.mk | 0 .../win}/src/rt/libuv/uv.Makefile | 2 +- .../{ => ia32}/win/src/rt/libuv/uv.target.mk | 0 mk/libuv/x86_64/mac/Makefile | 375 ++++++++++++++++++ mk/libuv/x86_64/mac/gyp-mac-tool | 190 +++++++++ .../mac/src/rt/libuv/run-benchmarks.target.mk | 92 +++++ .../mac/src/rt/libuv/run-tests.target.mk | 0 mk/libuv/x86_64/mac/src/rt/libuv/uv.Makefile | 6 + mk/libuv/x86_64/mac/src/rt/libuv/uv.target.mk | 142 +++++++ mk/libuv/x86_64/unix/Makefile | 353 +++++++++++++++++ .../src/rt/libuv/run-benchmarks.target.mk | 78 ++++ .../unix/src/rt/libuv/run-tests.target.mk | 101 +++++ mk/libuv/x86_64/unix/src/rt/libuv/uv.Makefile | 6 + .../x86_64/unix/src/rt/libuv/uv.target.mk | 134 +++++++ mk/libuv/x86_64/win/Makefile | 353 +++++++++++++++++ .../win/src/rt/libuv/run-benchmarks.target.mk | 79 ++++ .../win/src/rt/libuv/run-tests.target.mk | 102 +++++ mk/libuv/x86_64/win/src/rt/libuv/uv.Makefile | 6 + mk/libuv/x86_64/win/src/rt/libuv/uv.target.mk | 135 +++++++ mk/platform.mk | 10 +- mk/rt.mk | 11 +- src/comp/back/x86_64.rs | 49 +++ src/comp/driver/rustc.rs | 8 +- src/comp/driver/session.rs | 2 +- src/comp/rustc.rc | 1 + src/etc/gyp-uv | 58 +-- src/rt/arch/{x64 => x86_64}/_context.S | 0 src/rt/arch/{x64 => x86_64}/ccall.S | 0 src/rt/arch/{x64 => x86_64}/context.cpp | 0 src/rt/arch/{x64 => x86_64}/context.h | 0 src/rt/rust_internal.h | 6 +- src/rt/rust_log.cpp | 15 +- src/rt/rust_upcall.cpp | 6 +- src/rt/test/rust_test_util.cpp | 2 +- 47 files changed, 2396 insertions(+), 57 deletions(-) rename mk/libuv/{ => ia32}/mac/Makefile (99%) rename mk/libuv/{ => ia32}/mac/gyp-mac-tool (100%) rename mk/libuv/{ => ia32}/mac/src/rt/libuv/run-benchmarks.target.mk (100%) create mode 100644 mk/libuv/ia32/mac/src/rt/libuv/run-tests.target.mk rename mk/libuv/{win => ia32/mac}/src/rt/libuv/uv.Makefile (64%) rename mk/libuv/{ => ia32}/mac/src/rt/libuv/uv.target.mk (100%) rename mk/libuv/{ => ia32}/unix/Makefile (99%) rename mk/libuv/{ => ia32}/unix/src/rt/libuv/run-benchmarks.target.mk (100%) rename mk/libuv/{ => ia32}/unix/src/rt/libuv/run-tests.target.mk (100%) rename mk/libuv/{ => ia32}/unix/src/rt/libuv/uv.Makefile (64%) rename mk/libuv/{ => ia32}/unix/src/rt/libuv/uv.target.mk (100%) rename mk/libuv/{ => ia32}/win/Makefile (99%) rename mk/libuv/{ => ia32}/win/src/rt/libuv/run-benchmarks.target.mk (100%) rename mk/libuv/{ => ia32}/win/src/rt/libuv/run-tests.target.mk (100%) rename mk/libuv/{mac => ia32/win}/src/rt/libuv/uv.Makefile (64%) rename mk/libuv/{ => ia32}/win/src/rt/libuv/uv.target.mk (100%) create mode 100644 mk/libuv/x86_64/mac/Makefile create mode 100755 mk/libuv/x86_64/mac/gyp-mac-tool create mode 100644 mk/libuv/x86_64/mac/src/rt/libuv/run-benchmarks.target.mk rename mk/libuv/{ => x86_64}/mac/src/rt/libuv/run-tests.target.mk (100%) create mode 100644 mk/libuv/x86_64/mac/src/rt/libuv/uv.Makefile create mode 100644 mk/libuv/x86_64/mac/src/rt/libuv/uv.target.mk create mode 100644 mk/libuv/x86_64/unix/Makefile create mode 100644 mk/libuv/x86_64/unix/src/rt/libuv/run-benchmarks.target.mk create mode 100644 mk/libuv/x86_64/unix/src/rt/libuv/run-tests.target.mk create mode 100644 mk/libuv/x86_64/unix/src/rt/libuv/uv.Makefile create mode 100644 mk/libuv/x86_64/unix/src/rt/libuv/uv.target.mk create mode 100644 mk/libuv/x86_64/win/Makefile create mode 100644 mk/libuv/x86_64/win/src/rt/libuv/run-benchmarks.target.mk create mode 100644 mk/libuv/x86_64/win/src/rt/libuv/run-tests.target.mk create mode 100644 mk/libuv/x86_64/win/src/rt/libuv/uv.Makefile create mode 100644 mk/libuv/x86_64/win/src/rt/libuv/uv.target.mk create mode 100644 src/comp/back/x86_64.rs rename src/rt/arch/{x64 => x86_64}/_context.S (100%) rename src/rt/arch/{x64 => x86_64}/ccall.S (100%) rename src/rt/arch/{x64 => x86_64}/context.cpp (100%) rename src/rt/arch/{x64 => x86_64}/context.h (100%) diff --git a/mk/libuv/mac/Makefile b/mk/libuv/ia32/mac/Makefile similarity index 99% rename from mk/libuv/mac/Makefile rename to mk/libuv/ia32/mac/Makefile index 79a35ca39af..dee46615323 100644 --- a/mk/libuv/mac/Makefile +++ b/mk/libuv/ia32/mac/Makefile @@ -7,7 +7,7 @@ MAKEFLAGS=-r # The source directory tree. -srcdir := ../../.. +srcdir := ../../../.. # The name of the builddir. builddir_name ?= out @@ -344,7 +344,7 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/mac" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=mac" src/rt/libuv/uv.gyp +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/ia32/mac" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=mac" src/rt/libuv/uv.gyp #Makefile: $(srcdir)/src/rt/libuv/uv.gyp # $(call do_cmd,regen_makefile) diff --git a/mk/libuv/mac/gyp-mac-tool b/mk/libuv/ia32/mac/gyp-mac-tool similarity index 100% rename from mk/libuv/mac/gyp-mac-tool rename to mk/libuv/ia32/mac/gyp-mac-tool diff --git a/mk/libuv/mac/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/ia32/mac/src/rt/libuv/run-benchmarks.target.mk similarity index 100% rename from mk/libuv/mac/src/rt/libuv/run-benchmarks.target.mk rename to mk/libuv/ia32/mac/src/rt/libuv/run-benchmarks.target.mk diff --git a/mk/libuv/ia32/mac/src/rt/libuv/run-tests.target.mk b/mk/libuv/ia32/mac/src/rt/libuv/run-tests.target.mk new file mode 100644 index 00000000000..6e8687bdc6b --- /dev/null +++ b/mk/libuv/ia32/mac/src/rt/libuv/run-tests.target.mk @@ -0,0 +1,115 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-tests +DEFS_Default := '-D_GNU_SOURCE' + +# Flags passed to all source files. +CFLAGS_Default := -fasm-blocks \ + -mpascal-strings \ + -Os \ + -gdwarf-2 \ + -arch i386 + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +# Flags passed to only ObjC files. +CFLAGS_OBJC_Default := + +# Flags passed to only ObjC++ files. +CFLAGS_OBJCC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-tests.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-async.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-callback-stack.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-connection-fail.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-delayed-accept.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fail-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs-event.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-get-currentexe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getsockname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-hrtime.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-idle.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-loop-handles.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pass-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ping-pong.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pipe-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ref.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-shutdown-eof.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind6-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-close.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-write-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-writealot.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-threadpool.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer-again.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-dgram-too-big.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-ipv6.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-send-and-recv.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-unix.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(builddir)/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := -arch i386 \ + -L$(builddir) + +LIBS := -framework Carbon \ + -framework CoreServices + +$(builddir)/run-tests: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-tests: LIBS := $(LIBS) +$(builddir)/run-tests: LD_INPUTS := $(OBJS) $(builddir)/libuv.a +$(builddir)/run-tests: TOOLSET := $(TOOLSET) +$(builddir)/run-tests: $(OBJS) $(builddir)/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-tests +# Add target alias +.PHONY: run-tests +run-tests: $(builddir)/run-tests + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-tests + diff --git a/mk/libuv/win/src/rt/libuv/uv.Makefile b/mk/libuv/ia32/mac/src/rt/libuv/uv.Makefile similarity index 64% rename from mk/libuv/win/src/rt/libuv/uv.Makefile rename to mk/libuv/ia32/mac/src/rt/libuv/uv.Makefile index f7bfa935ff3..e1ee2faf422 100644 --- a/mk/libuv/win/src/rt/libuv/uv.Makefile +++ b/mk/libuv/ia32/mac/src/rt/libuv/uv.Makefile @@ -1,6 +1,6 @@ # This file is generated by gyp; do not edit. -export builddir_name ?= mk/libuv/win/./src/rt/libuv/out +export builddir_name ?= mk/libuv/ia32/mac/./src/rt/libuv/out .PHONY: all all: $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/mac/src/rt/libuv/uv.target.mk b/mk/libuv/ia32/mac/src/rt/libuv/uv.target.mk similarity index 100% rename from mk/libuv/mac/src/rt/libuv/uv.target.mk rename to mk/libuv/ia32/mac/src/rt/libuv/uv.target.mk diff --git a/mk/libuv/unix/Makefile b/mk/libuv/ia32/unix/Makefile similarity index 99% rename from mk/libuv/unix/Makefile rename to mk/libuv/ia32/unix/Makefile index f00580ec35b..ea0e20a9a13 100644 --- a/mk/libuv/unix/Makefile +++ b/mk/libuv/ia32/unix/Makefile @@ -7,7 +7,7 @@ MAKEFLAGS=-r # The source directory tree. -srcdir := ../../.. +srcdir := ../../../.. # The name of the builddir. builddir_name ?= out @@ -322,7 +322,7 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/unix" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=linux" src/rt/libuv/uv.gyp +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/ia32/unix" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=linux" src/rt/libuv/uv.gyp #Makefile: $(srcdir)/src/rt/libuv/uv.gyp # $(call do_cmd,regen_makefile) diff --git a/mk/libuv/unix/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/ia32/unix/src/rt/libuv/run-benchmarks.target.mk similarity index 100% rename from mk/libuv/unix/src/rt/libuv/run-benchmarks.target.mk rename to mk/libuv/ia32/unix/src/rt/libuv/run-benchmarks.target.mk diff --git a/mk/libuv/unix/src/rt/libuv/run-tests.target.mk b/mk/libuv/ia32/unix/src/rt/libuv/run-tests.target.mk similarity index 100% rename from mk/libuv/unix/src/rt/libuv/run-tests.target.mk rename to mk/libuv/ia32/unix/src/rt/libuv/run-tests.target.mk diff --git a/mk/libuv/unix/src/rt/libuv/uv.Makefile b/mk/libuv/ia32/unix/src/rt/libuv/uv.Makefile similarity index 64% rename from mk/libuv/unix/src/rt/libuv/uv.Makefile rename to mk/libuv/ia32/unix/src/rt/libuv/uv.Makefile index 579a5915782..6b2f5eab0d6 100644 --- a/mk/libuv/unix/src/rt/libuv/uv.Makefile +++ b/mk/libuv/ia32/unix/src/rt/libuv/uv.Makefile @@ -1,6 +1,6 @@ # This file is generated by gyp; do not edit. -export builddir_name ?= mk/libuv/unix/./src/rt/libuv/out +export builddir_name ?= mk/libuv/ia32/unix/./src/rt/libuv/out .PHONY: all all: $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/unix/src/rt/libuv/uv.target.mk b/mk/libuv/ia32/unix/src/rt/libuv/uv.target.mk similarity index 100% rename from mk/libuv/unix/src/rt/libuv/uv.target.mk rename to mk/libuv/ia32/unix/src/rt/libuv/uv.target.mk diff --git a/mk/libuv/win/Makefile b/mk/libuv/ia32/win/Makefile similarity index 99% rename from mk/libuv/win/Makefile rename to mk/libuv/ia32/win/Makefile index e77596ae7be..06fe8946dfc 100644 --- a/mk/libuv/win/Makefile +++ b/mk/libuv/ia32/win/Makefile @@ -7,7 +7,7 @@ MAKEFLAGS=-r # The source directory tree. -srcdir := ../../.. +srcdir := ../../../.. # The name of the builddir. builddir_name ?= out @@ -322,7 +322,7 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/win" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=win" src/rt/libuv/uv.gyp +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/ia32/win" "-Dlibrary=static_library" "-Dtarget_arch=ia32" "-DOS=win" src/rt/libuv/uv.gyp #Makefile: $(srcdir)/src/rt/libuv/uv.gyp # $(call do_cmd,regen_makefile) diff --git a/mk/libuv/win/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/ia32/win/src/rt/libuv/run-benchmarks.target.mk similarity index 100% rename from mk/libuv/win/src/rt/libuv/run-benchmarks.target.mk rename to mk/libuv/ia32/win/src/rt/libuv/run-benchmarks.target.mk diff --git a/mk/libuv/win/src/rt/libuv/run-tests.target.mk b/mk/libuv/ia32/win/src/rt/libuv/run-tests.target.mk similarity index 100% rename from mk/libuv/win/src/rt/libuv/run-tests.target.mk rename to mk/libuv/ia32/win/src/rt/libuv/run-tests.target.mk diff --git a/mk/libuv/mac/src/rt/libuv/uv.Makefile b/mk/libuv/ia32/win/src/rt/libuv/uv.Makefile similarity index 64% rename from mk/libuv/mac/src/rt/libuv/uv.Makefile rename to mk/libuv/ia32/win/src/rt/libuv/uv.Makefile index fd944e922e5..e1c7ed09137 100644 --- a/mk/libuv/mac/src/rt/libuv/uv.Makefile +++ b/mk/libuv/ia32/win/src/rt/libuv/uv.Makefile @@ -1,6 +1,6 @@ # This file is generated by gyp; do not edit. -export builddir_name ?= mk/libuv/mac/./src/rt/libuv/out +export builddir_name ?= mk/libuv/ia32/win/./src/rt/libuv/out .PHONY: all all: $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/win/src/rt/libuv/uv.target.mk b/mk/libuv/ia32/win/src/rt/libuv/uv.target.mk similarity index 100% rename from mk/libuv/win/src/rt/libuv/uv.target.mk rename to mk/libuv/ia32/win/src/rt/libuv/uv.target.mk diff --git a/mk/libuv/x86_64/mac/Makefile b/mk/libuv/x86_64/mac/Makefile new file mode 100644 index 00000000000..659834e4cd2 --- /dev/null +++ b/mk/libuv/x86_64/mac/Makefile @@ -0,0 +1,375 @@ +# We borrow heavily from the kernel build setup, though we are simpler since +# we don't have Kconfig tweaking settings on us. + +# The implicit make rules have it looking for RCS files, among other things. +# We instead explicitly write all the rules we care about. +# It's even quicker (saves ~200ms) to pass -r on the command line. +MAKEFLAGS=-r + +# The source directory tree. +srcdir := ../../../.. + +# The name of the builddir. +builddir_name ?= out + +# The V=1 flag on command line makes us verbosely print command lines. +ifdef V + quiet= +else + quiet=quiet_ +endif + +# Specify BUILDTYPE=Release on the command line for a release build. +BUILDTYPE ?= Default + +# Directory all our build output goes into. +# Note that this must be two directories beneath src/ for unit tests to pass, +# as they reach into the src/ directory for data with relative paths. +builddir ?= $(builddir_name)/$(BUILDTYPE) +abs_builddir := $(abspath $(builddir)) +depsdir := $(builddir)/.deps + +# Object output directory. +obj := $(builddir)/obj +abs_obj := $(abspath $(obj)) + +# We build up a list of every single one of the targets so we can slurp in the +# generated dependency rule Makefiles in one pass. +all_deps := + + + +# C++ apps need to be linked with g++. +# +# Note: flock is used to seralize linking. Linking is a memory-intensive +# process so running parallel links can often lead to thrashing. To disable +# the serialization, override LINK via an envrionment variable as follows: +# +# export LINK=g++ +# +# This will allow make to invoke N linker processes as specified in -jN. +LINK ?= ./gyp-mac-tool flock $(builddir)/linker.lock $(CXX) + +CC.target ?= $(CC) +CFLAGS.target ?= $(CFLAGS) +CXX.target ?= $(CXX) +CXXFLAGS.target ?= $(CXXFLAGS) +LINK.target ?= $(LINK) +LDFLAGS.target ?= $(LDFLAGS) +AR.target ?= $(AR) +ARFLAGS.target ?= crs + +# N.B.: the logic of which commands to run should match the computation done +# in gyp's make.py where ARFLAGS.host etc. is computed. +# TODO(evan): move all cross-compilation logic to gyp-time so we don't need +# to replicate this environment fallback in make as well. +CC.host ?= gcc +CFLAGS.host ?= +CXX.host ?= g++ +CXXFLAGS.host ?= +LINK.host ?= g++ +LDFLAGS.host ?= +AR.host ?= ar +ARFLAGS.host := crs + +# Define a dir function that can handle spaces. +# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions +# "leading spaces cannot appear in the text of the first argument as written. +# These characters can be put into the argument value by variable substitution." +empty := +space := $(empty) $(empty) + +# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces +replace_spaces = $(subst $(space),?,$1) +unreplace_spaces = $(subst ?,$(space),$1) +dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) + +# Flags to make gcc output dependency info. Note that you need to be +# careful here to use the flags that ccache and distcc can understand. +# We write to a dep file on the side first and then rename at the end +# so we can't end up with a broken dep file. +depfile = $(depsdir)/$(call replace_spaces,$@).d +DEPFLAGS = -MMD -MF $(depfile).raw + +# We have to fixup the deps output in a few ways. +# (1) the file output should mention the proper .o file. +# ccache or distcc lose the path to the target, so we convert a rule of +# the form: +# foobar.o: DEP1 DEP2 +# into +# path/to/foobar.o: DEP1 DEP2 +# (2) we want missing files not to cause us to fail to build. +# We want to rewrite +# foobar.o: DEP1 DEP2 \ +# DEP3 +# to +# DEP1: +# DEP2: +# DEP3: +# so if the files are missing, they're just considered phony rules. +# We have to do some pretty insane escaping to get those backslashes +# and dollar signs past make, the shell, and sed at the same time. +# Doesn't work with spaces, but that's fine: .d files have spaces in +# their names replaced with other characters. +define fixup_dep +# The depfile may not exist if the input file didn't have any #includes. +touch $(depfile).raw +# Fixup path as in (1). +sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) +# Add extra rules as in (2). +# We remove slashes and replace spaces with new lines; +# remove blank lines; +# delete the first line and append a colon to the remaining lines. +sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ + grep -v '^$$' |\ + sed -e 1d -e 's|$$|:|' \ + >> $(depfile) +rm $(depfile).raw +endef + +# Command definitions: +# - cmd_foo is the actual command to run; +# - quiet_cmd_foo is the brief-output summary of the command. + +quiet_cmd_cc = CC($(TOOLSET)) $@ +cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_cxx = CXX($(TOOLSET)) $@ +cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_objc = CXX($(TOOLSET)) $@ +cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< + +quiet_cmd_objcxx = CXX($(TOOLSET)) $@ +cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< + +# Commands for precompiled header files. +quiet_cmd_pch_c = CXX($(TOOLSET)) $@ +cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< +quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ +cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CCFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< +quiet_cmd_pch_m = CXX($(TOOLSET)) $@ +cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< +quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ +cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< + +# gyp-mac-tool is written next to the root Makefile by gyp. +# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd +# already. +quiet_cmd_mac_tool = MACTOOL $(4) $< +cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" + +quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ +cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) + +quiet_cmd_touch = TOUCH $@ +cmd_touch = touch $@ + +quiet_cmd_copy = COPY $@ +# send stderr to /dev/null to ignore messages when linking directories. +cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@") + +quiet_cmd_alink = LIBTOOL-STATIC $@ +cmd_alink = rm -f $@ && libtool -static -o $@ $(filter %.o,$^) + +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) + +# TODO(thakis): Find out and document the difference between shared_library and +# loadable_module on mac. +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) + +# TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass +# -bundle -single_module here (for osmesa.so). +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) + + +# Define an escape_quotes function to escape single quotes. +# This allows us to handle quotes properly as long as we always use +# use single quotes and escape_quotes. +escape_quotes = $(subst ','\'',$(1)) +# This comment is here just to include a ' to unconfuse syntax highlighting. +# Define an escape_vars function to escape '$' variable syntax. +# This allows us to read/write command lines with shell variables (e.g. +# $LD_LIBRARY_PATH), without triggering make substitution. +escape_vars = $(subst $$,$$$$,$(1)) +# Helper that expands to a shell command to echo a string exactly as it is in +# make. This uses printf instead of echo because printf's behaviour with respect +# to escape sequences is more portable than echo's across different shells +# (e.g., dash, bash). +exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' + +# Helper to compare the command we're about to run against the command +# we logged the last time we ran the command. Produces an empty +# string (false) when the commands match. +# Tricky point: Make has no string-equality test function. +# The kernel uses the following, but it seems like it would have false +# positives, where one string reordered its arguments. +# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ +# $(filter-out $(cmd_$@), $(cmd_$(1)))) +# We instead substitute each for the empty string into the other, and +# say they're equal if both substitutions produce the empty string. +# .d files contain ? instead of spaces, take that into account. +command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ + $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) + +# Helper that is non-empty when a prerequisite changes. +# Normally make does this implicitly, but we force rules to always run +# so we can check their command lines. +# $? -- new prerequisites +# $| -- order-only dependencies +prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) + +# Helper that executes all postbuilds, and deletes the output file when done +# if any of the postbuilds failed. +define do_postbuilds + @E=0;\ + for p in $(POSTBUILDS); do\ + eval $$p;\ + F=$$?;\ + if [ $$F -ne 0 ]; then\ + E=$$F;\ + fi;\ + done;\ + if [ $$E -ne 0 ]; then\ + rm -rf "$@";\ + exit $$E;\ + fi +endef + +# do_cmd: run a command via the above cmd_foo names, if necessary. +# Should always run for a given target to handle command-line changes. +# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. +# Third argument, if non-zero, makes it do POSTBUILDS processing. +# Note: We intentionally do NOT call dirx for depfile, since it contains ? for +# spaces already and dirx strips the ? characters. +define do_cmd +$(if $(or $(command_changed),$(prereq_changed)), + @$(call exact_echo, $($(quiet)cmd_$(1))) + @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" + $(if $(findstring flock,$(word 2,$(cmd_$1))), + @$(cmd_$(1)) + @echo " $(quiet_cmd_$(1)): Finished", + @$(cmd_$(1)) + ) + @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) + @$(if $(2),$(fixup_dep)) + $(if $(and $(3), $(POSTBUILDS)), + $(call do_postbuilds) + ) +) +endef + +# Declare "all" target first so it is the default, even though we don't have the +# deps yet. +.PHONY: all +all: + +# Use FORCE_DO_CMD to force a target to run. Should be coupled with +# do_cmd. +.PHONY: FORCE_DO_CMD +FORCE_DO_CMD: + +TOOLSET := target +# Suffix rules, putting all outputs into $(obj). +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + + +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-benchmarks.target.mk)))),) + include src/rt/libuv/run-benchmarks.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-tests.target.mk)))),) + include src/rt/libuv/run-tests.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/uv.target.mk)))),) + include src/rt/libuv/uv.target.mk +endif + +quiet_cmd_regen_makefile = ACTION Regenerating $@ +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/x86_64/mac" "-Dlibrary=static_library" "-Dtarget_arch=x86_64" "-DOS=mac" src/rt/libuv/uv.gyp +#Makefile: $(srcdir)/src/rt/libuv/uv.gyp +# $(call do_cmd,regen_makefile) + +# "all" is a concatenation of the "all" targets from all the included +# sub-makefiles. This is just here to clarify. +all: + +# Add in dependency-tracking rules. $(all_deps) is the list of every single +# target in our tree. Only consider the ones with .d (dependency) info: +d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) +ifneq ($(d_files),) + # Rather than include each individual .d file, concatenate them into a + # single file which make is able to load faster. We split this into + # commands that take 1000 files at a time to avoid overflowing the + # command line. + $(shell cat $(wordlist 1,1000,$(d_files)) > $(depsdir)/all.deps) + + ifneq ($(word 1001,$(d_files)),) + $(error Found unprocessed dependency files (gyp didn't generate enough rules!)) + endif + + # make looks for ways to re-generate included makefiles, but in our case, we + # don't have a direct way. Explicitly telling make that it has nothing to do + # for them makes it go faster. + $(depsdir)/all.deps: ; + + include $(depsdir)/all.deps +endif diff --git a/mk/libuv/x86_64/mac/gyp-mac-tool b/mk/libuv/x86_64/mac/gyp-mac-tool new file mode 100755 index 00000000000..15272c03c13 --- /dev/null +++ b/mk/libuv/x86_64/mac/gyp-mac-tool @@ -0,0 +1,190 @@ +#!/usr/bin/python +# Generated by gyp. Do not edit. +# Copyright (c) 2011 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Utility functions to perform Xcode-style build steps. + +These functions are executed via gyp-mac-tool when using the Makefile generator. +""" + +import os +import fcntl +import plistlib +import shutil +import string +import subprocess +import sys + +def main(args): + executor = MacTool() + executor.Dispatch(args) + +class MacTool(object): + """This class performs all the Mac tooling steps. The methods can either be + executed directly, or dispatched from an argument list.""" + + def Dispatch(self, args): + """Dispatches a string command to a method.""" + if len(args) < 1: + raise Exception("Not enough arguments") + + method = "Exec%s" % self._CommandifyName(args[0]) + getattr(self, method)(*args[1:]) + + def _CommandifyName(self, name_string): + """Transforms a tool name like copy-info-plist to CopyInfoPlist""" + return name_string.title().replace('-', '') + + def ExecFlock(self, lockfile, *cmd_list): + """Emulates the most basic behavior of Linux's flock(1).""" + # Rely on exception handling to report errors. + fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) + fcntl.flock(fd, fcntl.LOCK_EX) + return subprocess.call(cmd_list) + + def ExecCopyInfoPlist(self, source, dest): + """Copies the |source| Info.plist to the destination directory |dest|.""" + # Read the source Info.plist into memory. + fd = open(source, 'r') + lines = fd.read() + fd.close() + + # Go through all the environment variables and replace them as variables in + # the file. + for key in os.environ: + if key.startswith('_'): + continue + evar = '${%s}' % key + lines = string.replace(lines, evar, os.environ[key]) + + # Write out the file with variables replaced. + fd = open(dest, 'w') + fd.write(lines) + fd.close() + + # Now write out PkgInfo file now that the Info.plist file has been + # "compiled". + self._WritePkgInfo(dest) + + def _WritePkgInfo(self, info_plist): + """This writes the PkgInfo file from the data stored in Info.plist.""" + plist = plistlib.readPlist(info_plist) + if not plist: + return + + # Only create PkgInfo for executable types. + package_type = plist['CFBundlePackageType'] + if package_type != 'APPL': + return + + # The format of PkgInfo is eight characters, representing the bundle type + # and bundle signature, each four characters. If that is missing, four + # '?' characters are used instead. + signature_code = plist['CFBundleSignature'] + if len(signature_code) != 4: + signature_code = '?' * 4 + + dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') + fp = open(dest, 'w') + fp.write('%s%s' % (package_type, signature_code)) + fp.close() + + def ExecPackageFramework(self, framework, version): + """Takes a path to Something.framework and the Current version of that and + sets up all the symlinks.""" + # Find the name of the binary based on the part before the ".framework". + binary = os.path.basename(framework).split('.')[0] + + CURRENT = 'Current' + RESOURCES = 'Resources' + VERSIONS = 'Versions' + + if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): + # Binary-less frameworks don't seem to contain symlinks (see e.g. + # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). + return + + # Move into the framework directory to set the symlinks correctly. + pwd = os.getcwd() + os.chdir(framework) + + # Set up the Current version. + self._Relink(version, os.path.join(VERSIONS, CURRENT)) + + # Set up the root symlinks. + self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) + self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) + + # Back to where we were before! + os.chdir(pwd) + + def _Relink(self, dest, link): + """Creates a symlink to |dest| named |link|. If |link| already exists, + it is overwritten.""" + if os.path.lexists(link): + os.remove(link) + os.symlink(dest, link) + + def ExecCopyBundleResource(self, source, dest): + """Copies a resource file to the bundle/Resources directory, performing any + necessary compilation on each resource.""" + extension = os.path.splitext(source)[1].lower() + if os.path.isdir(source): + # Copy tree. + if os.path.exists(dest): + shutil.rmtree(dest) + shutil.copytree(source, dest) + elif extension == '.xib': + self._CopyXIBFile(source, dest) + elif extension == '.strings': + self._CopyStringsFile(source, dest) + # TODO: Given that files with arbitrary extensions can be copied to the + # bundle, we will want to get rid of this whitelist eventually. + elif extension in [ + '.icns', '.manifest', '.pak', '.pdf', '.png', '.sb', '.sh', + '.ttf', '.sdef']: + shutil.copyfile(source, dest) + else: + raise NotImplementedError( + "Don't know how to copy bundle resources of type %s while copying " + "%s to %s)" % (extension, source, dest)) + + def _CopyXIBFile(self, source, dest): + """Compiles a XIB file with ibtool into a binary plist in the bundle.""" + args = ['/Developer/usr/bin/ibtool', '--errors', '--warnings', + '--notices', '--output-format', 'human-readable-text', '--compile', + dest, source] + subprocess.call(args) + + def _CopyStringsFile(self, source, dest): + """Copies a .strings file using iconv to reconvert the input into UTF-16.""" + input_code = self._DetectInputEncoding(source) or "UTF-8" + fp = open(dest, 'w') + args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code', + 'UTF-16', source] + subprocess.call(args, stdout=fp) + fp.close() + + def _DetectInputEncoding(self, file_name): + """Reads the first few bytes from file_name and tries to guess the text + encoding. Returns None as a guess if it can't detect it.""" + fp = open(file_name, 'rb') + try: + header = fp.read(3) + except e: + fp.close() + return None + fp.close() + if header.startswith("\xFE\xFF"): + return "UTF-16BE" + elif header.startswith("\xFF\xFE"): + return "UTF-16LE" + elif header.startswith("\xEF\xBB\xBF"): + return "UTF-8" + else: + return None + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/mk/libuv/x86_64/mac/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/x86_64/mac/src/rt/libuv/run-benchmarks.target.mk new file mode 100644 index 00000000000..d4c4a17a93b --- /dev/null +++ b/mk/libuv/x86_64/mac/src/rt/libuv/run-benchmarks.target.mk @@ -0,0 +1,92 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-benchmarks +DEFS_Default := '-D_GNU_SOURCE' + +# Flags passed to all source files. +CFLAGS_Default := -fasm-blocks \ + -mpascal-strings \ + -Os \ + -gdwarf-2 \ + -arch i386 + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +# Flags passed to only ObjC files. +CFLAGS_OBJC_Default := + +# Flags passed to only ObjC++ files. +CFLAGS_OBJCC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ping-pongs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pound.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pump.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-sizes.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-udp-packet-storm.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/dns-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-benchmarks.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-unix.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(builddir)/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := -arch i386 \ + -L$(builddir) + +LIBS := -framework Carbon \ + -framework CoreServices + +$(builddir)/run-benchmarks: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-benchmarks: LIBS := $(LIBS) +$(builddir)/run-benchmarks: LD_INPUTS := $(OBJS) $(builddir)/libuv.a +$(builddir)/run-benchmarks: TOOLSET := $(TOOLSET) +$(builddir)/run-benchmarks: $(OBJS) $(builddir)/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-benchmarks +# Add target alias +.PHONY: run-benchmarks +run-benchmarks: $(builddir)/run-benchmarks + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-benchmarks + diff --git a/mk/libuv/mac/src/rt/libuv/run-tests.target.mk b/mk/libuv/x86_64/mac/src/rt/libuv/run-tests.target.mk similarity index 100% rename from mk/libuv/mac/src/rt/libuv/run-tests.target.mk rename to mk/libuv/x86_64/mac/src/rt/libuv/run-tests.target.mk diff --git a/mk/libuv/x86_64/mac/src/rt/libuv/uv.Makefile b/mk/libuv/x86_64/mac/src/rt/libuv/uv.Makefile new file mode 100644 index 00000000000..c146ac9b8ce --- /dev/null +++ b/mk/libuv/x86_64/mac/src/rt/libuv/uv.Makefile @@ -0,0 +1,6 @@ +# This file is generated by gyp; do not edit. + +export builddir_name ?= mk/libuv/x86_64/mac/./src/rt/libuv/out +.PHONY: all +all: + $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/x86_64/mac/src/rt/libuv/uv.target.mk b/mk/libuv/x86_64/mac/src/rt/libuv/uv.target.mk new file mode 100644 index 00000000000..e6983a24554 --- /dev/null +++ b/mk/libuv/x86_64/mac/src/rt/libuv/uv.target.mk @@ -0,0 +1,142 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := uv +DEFS_Default := '-DHAVE_CONFIG_H' \ + '-D_LARGEFILE_SOURCE' \ + '-D_FILE_OFFSET_BITS=64' \ + '-D_GNU_SOURCE' \ + '-DEIO_STACKSIZE=262144' \ + '-DEV_CONFIG_H="config_darwin.h"' \ + '-DEIO_CONFIG_H="config_darwin.h"' + +# Flags passed to all source files. +CFLAGS_Default := -fasm-blocks \ + -mpascal-strings \ + -Os \ + -gdwarf-2 \ + -arch i386 + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +# Flags passed to only ObjC files. +CFLAGS_OBJC_Default := + +# Flags passed to only ObjC++ files. +CFLAGS_OBJCC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include \ + -I$(srcdir)/src/rt/libuv/include/uv-private \ + -I$(srcdir)/src/rt/libuv/src \ + -I$(srcdir)/src/rt/libuv/src/unix/ev \ + -I$(srcdir)/src/rt/libuv/src/ares/config_darwin + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/src/uv-common.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__close_sockets.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__get_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__read_line.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__timeval.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_cancel.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_data.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_destroy.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_name.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_fds.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyaddr.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getnameinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getopt.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getsock.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_library_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_llist.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_mkquery.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_nowarn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_options.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_a_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_aaaa_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_mx_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ns_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ptr_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_srv_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_txt_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_query.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_search.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_send.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strcasecmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strdup.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strerror.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_timeout.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_version.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_writev.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/bitncmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_net_pton.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_ntop.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/core.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/uv-eio.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/udp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/tcp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/pipe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/stream.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/cares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/eio/eio.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/ev/ev.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/darwin.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) +$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := -arch i386 \ + -L$(builddir) + +LIBS := -lm + +$(builddir)/libuv.a: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/libuv.a: LIBS := $(LIBS) +$(builddir)/libuv.a: TOOLSET := $(TOOLSET) +$(builddir)/libuv.a: $(OBJS) FORCE_DO_CMD + $(call do_cmd,alink) + +all_deps += $(builddir)/libuv.a +# Add target alias +.PHONY: uv +uv: $(builddir)/libuv.a + +# Add target alias to "all" target. +.PHONY: all +all: uv + diff --git a/mk/libuv/x86_64/unix/Makefile b/mk/libuv/x86_64/unix/Makefile new file mode 100644 index 00000000000..122dadf5678 --- /dev/null +++ b/mk/libuv/x86_64/unix/Makefile @@ -0,0 +1,353 @@ +# We borrow heavily from the kernel build setup, though we are simpler since +# we don't have Kconfig tweaking settings on us. + +# The implicit make rules have it looking for RCS files, among other things. +# We instead explicitly write all the rules we care about. +# It's even quicker (saves ~200ms) to pass -r on the command line. +MAKEFLAGS=-r + +# The source directory tree. +srcdir := ../../../.. + +# The name of the builddir. +builddir_name ?= out + +# The V=1 flag on command line makes us verbosely print command lines. +ifdef V + quiet= +else + quiet=quiet_ +endif + +# Specify BUILDTYPE=Release on the command line for a release build. +BUILDTYPE ?= Default + +# Directory all our build output goes into. +# Note that this must be two directories beneath src/ for unit tests to pass, +# as they reach into the src/ directory for data with relative paths. +builddir ?= $(builddir_name)/$(BUILDTYPE) +abs_builddir := $(abspath $(builddir)) +depsdir := $(builddir)/.deps + +# Object output directory. +obj := $(builddir)/obj +abs_obj := $(abspath $(obj)) + +# We build up a list of every single one of the targets so we can slurp in the +# generated dependency rule Makefiles in one pass. +all_deps := + + + +# C++ apps need to be linked with g++. +# +# Note: flock is used to seralize linking. Linking is a memory-intensive +# process so running parallel links can often lead to thrashing. To disable +# the serialization, override LINK via an envrionment variable as follows: +# +# export LINK=g++ +# +# This will allow make to invoke N linker processes as specified in -jN. +LINK ?= flock $(builddir)/linker.lock $(CXX) + +CC.target ?= $(CC) +CFLAGS.target ?= $(CFLAGS) +CXX.target ?= $(CXX) +CXXFLAGS.target ?= $(CXXFLAGS) +LINK.target ?= $(LINK) +LDFLAGS.target ?= $(LDFLAGS) +AR.target ?= $(AR) +ARFLAGS.target ?= crsT + +# N.B.: the logic of which commands to run should match the computation done +# in gyp's make.py where ARFLAGS.host etc. is computed. +# TODO(evan): move all cross-compilation logic to gyp-time so we don't need +# to replicate this environment fallback in make as well. +CC.host ?= gcc +CFLAGS.host ?= +CXX.host ?= g++ +CXXFLAGS.host ?= +LINK.host ?= g++ +LDFLAGS.host ?= +AR.host ?= ar +ARFLAGS.host := crsT + +# Define a dir function that can handle spaces. +# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions +# "leading spaces cannot appear in the text of the first argument as written. +# These characters can be put into the argument value by variable substitution." +empty := +space := $(empty) $(empty) + +# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces +replace_spaces = $(subst $(space),?,$1) +unreplace_spaces = $(subst ?,$(space),$1) +dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) + +# Flags to make gcc output dependency info. Note that you need to be +# careful here to use the flags that ccache and distcc can understand. +# We write to a dep file on the side first and then rename at the end +# so we can't end up with a broken dep file. +depfile = $(depsdir)/$(call replace_spaces,$@).d +DEPFLAGS = -MMD -MF $(depfile).raw + +# We have to fixup the deps output in a few ways. +# (1) the file output should mention the proper .o file. +# ccache or distcc lose the path to the target, so we convert a rule of +# the form: +# foobar.o: DEP1 DEP2 +# into +# path/to/foobar.o: DEP1 DEP2 +# (2) we want missing files not to cause us to fail to build. +# We want to rewrite +# foobar.o: DEP1 DEP2 \ +# DEP3 +# to +# DEP1: +# DEP2: +# DEP3: +# so if the files are missing, they're just considered phony rules. +# We have to do some pretty insane escaping to get those backslashes +# and dollar signs past make, the shell, and sed at the same time. +# Doesn't work with spaces, but that's fine: .d files have spaces in +# their names replaced with other characters. +define fixup_dep +# The depfile may not exist if the input file didn't have any #includes. +touch $(depfile).raw +# Fixup path as in (1). +sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) +# Add extra rules as in (2). +# We remove slashes and replace spaces with new lines; +# remove blank lines; +# delete the first line and append a colon to the remaining lines. +sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ + grep -v '^$$' |\ + sed -e 1d -e 's|$$|:|' \ + >> $(depfile) +rm $(depfile).raw +endef + +# Command definitions: +# - cmd_foo is the actual command to run; +# - quiet_cmd_foo is the brief-output summary of the command. + +quiet_cmd_cc = CC($(TOOLSET)) $@ +cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_cxx = CXX($(TOOLSET)) $@ +cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_touch = TOUCH $@ +cmd_touch = touch $@ + +quiet_cmd_copy = COPY $@ +# send stderr to /dev/null to ignore messages when linking directories. +cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@") + +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) $(ARFLAGS.$(TOOLSET)) $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) + +# We support two kinds of shared objects (.so): +# 1) shared_library, which is just bundling together many dependent libraries +# into a link line. +# 2) loadable_module, which is generating a module intended for dlopen(). +# +# They differ only slightly: +# In the former case, we want to package all dependent code into the .so. +# In the latter case, we want to package just the API exposed by the +# outermost module. +# This means shared_library uses --whole-archive, while loadable_module doesn't. +# (Note that --whole-archive is incompatible with the --start-group used in +# normal linking.) + +# Other shared-object link notes: +# - Set SONAME to the library filename so our binaries don't reference +# the local, absolute paths used on the link command-line. +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) + +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) + + +# Define an escape_quotes function to escape single quotes. +# This allows us to handle quotes properly as long as we always use +# use single quotes and escape_quotes. +escape_quotes = $(subst ','\'',$(1)) +# This comment is here just to include a ' to unconfuse syntax highlighting. +# Define an escape_vars function to escape '$' variable syntax. +# This allows us to read/write command lines with shell variables (e.g. +# $LD_LIBRARY_PATH), without triggering make substitution. +escape_vars = $(subst $$,$$$$,$(1)) +# Helper that expands to a shell command to echo a string exactly as it is in +# make. This uses printf instead of echo because printf's behaviour with respect +# to escape sequences is more portable than echo's across different shells +# (e.g., dash, bash). +exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' + +# Helper to compare the command we're about to run against the command +# we logged the last time we ran the command. Produces an empty +# string (false) when the commands match. +# Tricky point: Make has no string-equality test function. +# The kernel uses the following, but it seems like it would have false +# positives, where one string reordered its arguments. +# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ +# $(filter-out $(cmd_$@), $(cmd_$(1)))) +# We instead substitute each for the empty string into the other, and +# say they're equal if both substitutions produce the empty string. +# .d files contain ? instead of spaces, take that into account. +command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ + $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) + +# Helper that is non-empty when a prerequisite changes. +# Normally make does this implicitly, but we force rules to always run +# so we can check their command lines. +# $? -- new prerequisites +# $| -- order-only dependencies +prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) + +# Helper that executes all postbuilds, and deletes the output file when done +# if any of the postbuilds failed. +define do_postbuilds + @E=0;\ + for p in $(POSTBUILDS); do\ + eval $$p;\ + F=$$?;\ + if [ $$F -ne 0 ]; then\ + E=$$F;\ + fi;\ + done;\ + if [ $$E -ne 0 ]; then\ + rm -rf "$@";\ + exit $$E;\ + fi +endef + +# do_cmd: run a command via the above cmd_foo names, if necessary. +# Should always run for a given target to handle command-line changes. +# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. +# Third argument, if non-zero, makes it do POSTBUILDS processing. +# Note: We intentionally do NOT call dirx for depfile, since it contains ? for +# spaces already and dirx strips the ? characters. +define do_cmd +$(if $(or $(command_changed),$(prereq_changed)), + @$(call exact_echo, $($(quiet)cmd_$(1))) + @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" + $(if $(findstring flock,$(word 1,$(cmd_$1))), + @$(cmd_$(1)) + @echo " $(quiet_cmd_$(1)): Finished", + @$(cmd_$(1)) + ) + @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) + @$(if $(2),$(fixup_dep)) + $(if $(and $(3), $(POSTBUILDS)), + $(call do_postbuilds) + ) +) +endef + +# Declare "all" target first so it is the default, even though we don't have the +# deps yet. +.PHONY: all +all: + +# Use FORCE_DO_CMD to force a target to run. Should be coupled with +# do_cmd. +.PHONY: FORCE_DO_CMD +FORCE_DO_CMD: + +TOOLSET := target +# Suffix rules, putting all outputs into $(obj). +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + + +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-benchmarks.target.mk)))),) + include src/rt/libuv/run-benchmarks.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-tests.target.mk)))),) + include src/rt/libuv/run-tests.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/uv.target.mk)))),) + include src/rt/libuv/uv.target.mk +endif + +quiet_cmd_regen_makefile = ACTION Regenerating $@ +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/x86_64/unix" "-Dlibrary=static_library" "-Dtarget_arch=x86_64" "-DOS=linux" src/rt/libuv/uv.gyp +#Makefile: $(srcdir)/src/rt/libuv/uv.gyp +# $(call do_cmd,regen_makefile) + +# "all" is a concatenation of the "all" targets from all the included +# sub-makefiles. This is just here to clarify. +all: + +# Add in dependency-tracking rules. $(all_deps) is the list of every single +# target in our tree. Only consider the ones with .d (dependency) info: +d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) +ifneq ($(d_files),) + # Rather than include each individual .d file, concatenate them into a + # single file which make is able to load faster. We split this into + # commands that take 1000 files at a time to avoid overflowing the + # command line. + $(shell cat $(wordlist 1,1000,$(d_files)) > $(depsdir)/all.deps) + + ifneq ($(word 1001,$(d_files)),) + $(error Found unprocessed dependency files (gyp didn't generate enough rules!)) + endif + + # make looks for ways to re-generate included makefiles, but in our case, we + # don't have a direct way. Explicitly telling make that it has nothing to do + # for them makes it go faster. + $(depsdir)/all.deps: ; + + include $(depsdir)/all.deps +endif diff --git a/mk/libuv/x86_64/unix/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/x86_64/unix/src/rt/libuv/run-benchmarks.target.mk new file mode 100644 index 00000000000..ad3900cea63 --- /dev/null +++ b/mk/libuv/x86_64/unix/src/rt/libuv/run-benchmarks.target.mk @@ -0,0 +1,78 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-benchmarks +DEFS_Default := '-D_GNU_SOURCE' + +# Flags passed to all source files. +CFLAGS_Default := + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ping-pongs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pound.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pump.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-sizes.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-udp-packet-storm.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/dns-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-benchmarks.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-unix.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(obj).target/src/rt/libuv/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := -pthread + +LIBS := -lrt + +$(builddir)/run-benchmarks: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-benchmarks: LIBS := $(LIBS) +$(builddir)/run-benchmarks: LD_INPUTS := $(OBJS) $(obj).target/src/rt/libuv/libuv.a +$(builddir)/run-benchmarks: TOOLSET := $(TOOLSET) +$(builddir)/run-benchmarks: $(OBJS) $(obj).target/src/rt/libuv/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-benchmarks +# Add target alias +.PHONY: run-benchmarks +run-benchmarks: $(builddir)/run-benchmarks + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-benchmarks + diff --git a/mk/libuv/x86_64/unix/src/rt/libuv/run-tests.target.mk b/mk/libuv/x86_64/unix/src/rt/libuv/run-tests.target.mk new file mode 100644 index 00000000000..605892fea05 --- /dev/null +++ b/mk/libuv/x86_64/unix/src/rt/libuv/run-tests.target.mk @@ -0,0 +1,101 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-tests +DEFS_Default := '-D_GNU_SOURCE' + +# Flags passed to all source files. +CFLAGS_Default := + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-tests.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-async.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-callback-stack.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-connection-fail.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-delayed-accept.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fail-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs-event.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-get-currentexe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getsockname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-hrtime.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-idle.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-loop-handles.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pass-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ping-pong.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pipe-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ref.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-shutdown-eof.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind6-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-close.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-write-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-writealot.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-threadpool.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer-again.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-dgram-too-big.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-ipv6.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-send-and-recv.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-unix.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(obj).target/src/rt/libuv/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := -pthread + +LIBS := -lrt + +$(builddir)/run-tests: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-tests: LIBS := $(LIBS) +$(builddir)/run-tests: LD_INPUTS := $(OBJS) $(obj).target/src/rt/libuv/libuv.a +$(builddir)/run-tests: TOOLSET := $(TOOLSET) +$(builddir)/run-tests: $(OBJS) $(obj).target/src/rt/libuv/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-tests +# Add target alias +.PHONY: run-tests +run-tests: $(builddir)/run-tests + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-tests + diff --git a/mk/libuv/x86_64/unix/src/rt/libuv/uv.Makefile b/mk/libuv/x86_64/unix/src/rt/libuv/uv.Makefile new file mode 100644 index 00000000000..b635300e7f5 --- /dev/null +++ b/mk/libuv/x86_64/unix/src/rt/libuv/uv.Makefile @@ -0,0 +1,6 @@ +# This file is generated by gyp; do not edit. + +export builddir_name ?= mk/libuv/x86_64/unix/./src/rt/libuv/out +.PHONY: all +all: + $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/x86_64/unix/src/rt/libuv/uv.target.mk b/mk/libuv/x86_64/unix/src/rt/libuv/uv.target.mk new file mode 100644 index 00000000000..dc5264341b7 --- /dev/null +++ b/mk/libuv/x86_64/unix/src/rt/libuv/uv.target.mk @@ -0,0 +1,134 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := uv +DEFS_Default := '-DHAVE_CONFIG_H' \ + '-D_LARGEFILE_SOURCE' \ + '-D_FILE_OFFSET_BITS=64' \ + '-D_GNU_SOURCE' \ + '-DEIO_STACKSIZE=262144' \ + '-DEV_CONFIG_H="config_linux.h"' \ + '-DEIO_CONFIG_H="config_linux.h"' + +# Flags passed to all source files. +CFLAGS_Default := -g \ + --std=gnu89 \ + -pedantic \ + -Wall \ + -Wextra \ + -Wno-unused-parameter + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include \ + -I$(srcdir)/src/rt/libuv/include/uv-private \ + -I$(srcdir)/src/rt/libuv/src \ + -I$(srcdir)/src/rt/libuv/src/unix/ev \ + -I$(srcdir)/src/rt/libuv/src/ares/config_linux + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/src/uv-common.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__close_sockets.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__get_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__read_line.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__timeval.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_cancel.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_data.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_destroy.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_name.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_fds.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyaddr.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getnameinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getopt.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getsock.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_library_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_llist.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_mkquery.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_nowarn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_options.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_a_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_aaaa_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_mx_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ns_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ptr_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_srv_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_txt_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_query.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_search.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_send.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strcasecmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strdup.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strerror.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_timeout.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_version.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_writev.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/bitncmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_net_pton.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_ntop.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/core.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/uv-eio.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/udp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/tcp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/pipe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/stream.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/cares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/eio/eio.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/ev/ev.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/unix/linux.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := + +LIBS := -lm + +$(obj).target/src/rt/libuv/libuv.a: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(obj).target/src/rt/libuv/libuv.a: LIBS := $(LIBS) +$(obj).target/src/rt/libuv/libuv.a: TOOLSET := $(TOOLSET) +$(obj).target/src/rt/libuv/libuv.a: $(OBJS) FORCE_DO_CMD + $(call do_cmd,alink) + +all_deps += $(obj).target/src/rt/libuv/libuv.a +# Add target alias +.PHONY: uv +uv: $(obj).target/src/rt/libuv/libuv.a + +# Add target alias to "all" target. +.PHONY: all +all: uv + diff --git a/mk/libuv/x86_64/win/Makefile b/mk/libuv/x86_64/win/Makefile new file mode 100644 index 00000000000..cc92055b2a2 --- /dev/null +++ b/mk/libuv/x86_64/win/Makefile @@ -0,0 +1,353 @@ +# We borrow heavily from the kernel build setup, though we are simpler since +# we don't have Kconfig tweaking settings on us. + +# The implicit make rules have it looking for RCS files, among other things. +# We instead explicitly write all the rules we care about. +# It's even quicker (saves ~200ms) to pass -r on the command line. +MAKEFLAGS=-r + +# The source directory tree. +srcdir := ../../../.. + +# The name of the builddir. +builddir_name ?= out + +# The V=1 flag on command line makes us verbosely print command lines. +ifdef V + quiet= +else + quiet=quiet_ +endif + +# Specify BUILDTYPE=Release on the command line for a release build. +BUILDTYPE ?= Default + +# Directory all our build output goes into. +# Note that this must be two directories beneath src/ for unit tests to pass, +# as they reach into the src/ directory for data with relative paths. +builddir ?= $(builddir_name)/$(BUILDTYPE) +abs_builddir := $(abspath $(builddir)) +depsdir := $(builddir)/.deps + +# Object output directory. +obj := $(builddir)/obj +abs_obj := $(abspath $(obj)) + +# We build up a list of every single one of the targets so we can slurp in the +# generated dependency rule Makefiles in one pass. +all_deps := + + + +# C++ apps need to be linked with g++. +# +# Note: flock is used to seralize linking. Linking is a memory-intensive +# process so running parallel links can often lead to thrashing. To disable +# the serialization, override LINK via an envrionment variable as follows: +# +# export LINK=g++ +# +# This will allow make to invoke N linker processes as specified in -jN. +LINK ?= flock $(builddir)/linker.lock $(CXX) + +CC.target ?= $(CC) +CFLAGS.target ?= $(CFLAGS) +CXX.target ?= $(CXX) +CXXFLAGS.target ?= $(CXXFLAGS) +LINK.target ?= $(LINK) +LDFLAGS.target ?= $(LDFLAGS) +AR.target ?= $(AR) +ARFLAGS.target ?= crsT + +# N.B.: the logic of which commands to run should match the computation done +# in gyp's make.py where ARFLAGS.host etc. is computed. +# TODO(evan): move all cross-compilation logic to gyp-time so we don't need +# to replicate this environment fallback in make as well. +CC.host ?= gcc +CFLAGS.host ?= +CXX.host ?= g++ +CXXFLAGS.host ?= +LINK.host ?= g++ +LDFLAGS.host ?= +AR.host ?= ar +ARFLAGS.host := crsT + +# Define a dir function that can handle spaces. +# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions +# "leading spaces cannot appear in the text of the first argument as written. +# These characters can be put into the argument value by variable substitution." +empty := +space := $(empty) $(empty) + +# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces +replace_spaces = $(subst $(space),?,$1) +unreplace_spaces = $(subst ?,$(space),$1) +dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) + +# Flags to make gcc output dependency info. Note that you need to be +# careful here to use the flags that ccache and distcc can understand. +# We write to a dep file on the side first and then rename at the end +# so we can't end up with a broken dep file. +depfile = $(depsdir)/$(call replace_spaces,$@).d +DEPFLAGS = -MMD -MF $(depfile).raw + +# We have to fixup the deps output in a few ways. +# (1) the file output should mention the proper .o file. +# ccache or distcc lose the path to the target, so we convert a rule of +# the form: +# foobar.o: DEP1 DEP2 +# into +# path/to/foobar.o: DEP1 DEP2 +# (2) we want missing files not to cause us to fail to build. +# We want to rewrite +# foobar.o: DEP1 DEP2 \ +# DEP3 +# to +# DEP1: +# DEP2: +# DEP3: +# so if the files are missing, they're just considered phony rules. +# We have to do some pretty insane escaping to get those backslashes +# and dollar signs past make, the shell, and sed at the same time. +# Doesn't work with spaces, but that's fine: .d files have spaces in +# their names replaced with other characters. +define fixup_dep +# The depfile may not exist if the input file didn't have any #includes. +touch $(depfile).raw +# Fixup path as in (1). +sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) +# Add extra rules as in (2). +# We remove slashes and replace spaces with new lines; +# remove blank lines; +# delete the first line and append a colon to the remaining lines. +sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ + grep -v '^$$' |\ + sed -e 1d -e 's|$$|:|' \ + >> $(depfile) +rm $(depfile).raw +endef + +# Command definitions: +# - cmd_foo is the actual command to run; +# - quiet_cmd_foo is the brief-output summary of the command. + +quiet_cmd_cc = CC($(TOOLSET)) $@ +cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_cxx = CXX($(TOOLSET)) $@ +cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< + +quiet_cmd_touch = TOUCH $@ +cmd_touch = touch $@ + +quiet_cmd_copy = COPY $@ +# send stderr to /dev/null to ignore messages when linking directories. +cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@") + +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) $(ARFLAGS.$(TOOLSET)) $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) + +# We support two kinds of shared objects (.so): +# 1) shared_library, which is just bundling together many dependent libraries +# into a link line. +# 2) loadable_module, which is generating a module intended for dlopen(). +# +# They differ only slightly: +# In the former case, we want to package all dependent code into the .so. +# In the latter case, we want to package just the API exposed by the +# outermost module. +# This means shared_library uses --whole-archive, while loadable_module doesn't. +# (Note that --whole-archive is incompatible with the --start-group used in +# normal linking.) + +# Other shared-object link notes: +# - Set SONAME to the library filename so our binaries don't reference +# the local, absolute paths used on the link command-line. +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) + +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) + + +# Define an escape_quotes function to escape single quotes. +# This allows us to handle quotes properly as long as we always use +# use single quotes and escape_quotes. +escape_quotes = $(subst ','\'',$(1)) +# This comment is here just to include a ' to unconfuse syntax highlighting. +# Define an escape_vars function to escape '$' variable syntax. +# This allows us to read/write command lines with shell variables (e.g. +# $LD_LIBRARY_PATH), without triggering make substitution. +escape_vars = $(subst $$,$$$$,$(1)) +# Helper that expands to a shell command to echo a string exactly as it is in +# make. This uses printf instead of echo because printf's behaviour with respect +# to escape sequences is more portable than echo's across different shells +# (e.g., dash, bash). +exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' + +# Helper to compare the command we're about to run against the command +# we logged the last time we ran the command. Produces an empty +# string (false) when the commands match. +# Tricky point: Make has no string-equality test function. +# The kernel uses the following, but it seems like it would have false +# positives, where one string reordered its arguments. +# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ +# $(filter-out $(cmd_$@), $(cmd_$(1)))) +# We instead substitute each for the empty string into the other, and +# say they're equal if both substitutions produce the empty string. +# .d files contain ? instead of spaces, take that into account. +command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ + $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) + +# Helper that is non-empty when a prerequisite changes. +# Normally make does this implicitly, but we force rules to always run +# so we can check their command lines. +# $? -- new prerequisites +# $| -- order-only dependencies +prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) + +# Helper that executes all postbuilds, and deletes the output file when done +# if any of the postbuilds failed. +define do_postbuilds + @E=0;\ + for p in $(POSTBUILDS); do\ + eval $$p;\ + F=$$?;\ + if [ $$F -ne 0 ]; then\ + E=$$F;\ + fi;\ + done;\ + if [ $$E -ne 0 ]; then\ + rm -rf "$@";\ + exit $$E;\ + fi +endef + +# do_cmd: run a command via the above cmd_foo names, if necessary. +# Should always run for a given target to handle command-line changes. +# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. +# Third argument, if non-zero, makes it do POSTBUILDS processing. +# Note: We intentionally do NOT call dirx for depfile, since it contains ? for +# spaces already and dirx strips the ? characters. +define do_cmd +$(if $(or $(command_changed),$(prereq_changed)), + @$(call exact_echo, $($(quiet)cmd_$(1))) + @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" + $(if $(findstring flock,$(word 1,$(cmd_$1))), + @$(cmd_$(1)) + @echo " $(quiet_cmd_$(1)): Finished", + @$(cmd_$(1)) + ) + @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) + @$(if $(2),$(fixup_dep)) + $(if $(and $(3), $(POSTBUILDS)), + $(call do_postbuilds) + ) +) +endef + +# Declare "all" target first so it is the default, even though we don't have the +# deps yet. +.PHONY: all +all: + +# Use FORCE_DO_CMD to force a target to run. Should be coupled with +# do_cmd. +.PHONY: FORCE_DO_CMD +FORCE_DO_CMD: + +TOOLSET := target +# Suffix rules, putting all outputs into $(obj). +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) + + +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-benchmarks.target.mk)))),) + include src/rt/libuv/run-benchmarks.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/run-tests.target.mk)))),) + include src/rt/libuv/run-tests.target.mk +endif +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,src/rt/libuv/uv.target.mk)))),) + include src/rt/libuv/uv.target.mk +endif + +quiet_cmd_regen_makefile = ACTION Regenerating $@ +cmd_regen_makefile = ./src/rt/libuv/build/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." "--depth=." "--generator-output=mk/libuv/x86_64/win" "-Dlibrary=static_library" "-Dtarget_arch=x86_64" "-DOS=win" src/rt/libuv/uv.gyp +#Makefile: $(srcdir)/src/rt/libuv/uv.gyp +# $(call do_cmd,regen_makefile) + +# "all" is a concatenation of the "all" targets from all the included +# sub-makefiles. This is just here to clarify. +all: + +# Add in dependency-tracking rules. $(all_deps) is the list of every single +# target in our tree. Only consider the ones with .d (dependency) info: +d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) +ifneq ($(d_files),) + # Rather than include each individual .d file, concatenate them into a + # single file which make is able to load faster. We split this into + # commands that take 1000 files at a time to avoid overflowing the + # command line. + $(shell cat $(wordlist 1,1000,$(d_files)) > $(depsdir)/all.deps) + + ifneq ($(word 1001,$(d_files)),) + $(error Found unprocessed dependency files (gyp didn't generate enough rules!)) + endif + + # make looks for ways to re-generate included makefiles, but in our case, we + # don't have a direct way. Explicitly telling make that it has nothing to do + # for them makes it go faster. + $(depsdir)/all.deps: ; + + include $(depsdir)/all.deps +endif diff --git a/mk/libuv/x86_64/win/src/rt/libuv/run-benchmarks.target.mk b/mk/libuv/x86_64/win/src/rt/libuv/run-benchmarks.target.mk new file mode 100644 index 00000000000..0a3cbf31b5b --- /dev/null +++ b/mk/libuv/x86_64/win/src/rt/libuv/run-benchmarks.target.mk @@ -0,0 +1,79 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-benchmarks +DEFS_Default := + +# Flags passed to all source files. +CFLAGS_Default := + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-ping-pongs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pound.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-pump.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-sizes.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/benchmark-udp-packet-storm.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/dns-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-benchmarks.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-win.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(obj).target/src/rt/libuv/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := + +LIBS := ws2_32.lib \ + -lws2_32.lib + +$(builddir)/run-benchmarks: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-benchmarks: LIBS := $(LIBS) +$(builddir)/run-benchmarks: LD_INPUTS := $(OBJS) $(obj).target/src/rt/libuv/libuv.a +$(builddir)/run-benchmarks: TOOLSET := $(TOOLSET) +$(builddir)/run-benchmarks: $(OBJS) $(obj).target/src/rt/libuv/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-benchmarks +# Add target alias +.PHONY: run-benchmarks +run-benchmarks: $(builddir)/run-benchmarks + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-benchmarks + diff --git a/mk/libuv/x86_64/win/src/rt/libuv/run-tests.target.mk b/mk/libuv/x86_64/win/src/rt/libuv/run-tests.target.mk new file mode 100644 index 00000000000..438b41ea520 --- /dev/null +++ b/mk/libuv/x86_64/win/src/rt/libuv/run-tests.target.mk @@ -0,0 +1,102 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := run-tests +DEFS_Default := + +# Flags passed to all source files. +CFLAGS_Default := + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/test/echo-server.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/run-tests.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-async.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-callback-stack.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-connection-fail.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-delayed-accept.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fail-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-fs-event.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-get-currentexe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-getsockname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-hrtime.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-idle.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-loop-handles.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pass-always.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ping-pong.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-pipe-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-ref.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-shutdown-eof.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-spawn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-bind6-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-close.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-write-error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tcp-writealot.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-threadpool.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer-again.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-timer.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-dgram-too-big.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-ipv6.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/test-udp-send-and-recv.o \ + $(obj).target/$(TARGET)/src/rt/libuv/test/runner-win.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# Make sure our dependencies are built before any of us. +$(OBJS): | $(obj).target/src/rt/libuv/libuv.a + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := + +LIBS := ws2_32.lib \ + -lws2_32.lib + +$(builddir)/run-tests: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(builddir)/run-tests: LIBS := $(LIBS) +$(builddir)/run-tests: LD_INPUTS := $(OBJS) $(obj).target/src/rt/libuv/libuv.a +$(builddir)/run-tests: TOOLSET := $(TOOLSET) +$(builddir)/run-tests: $(OBJS) $(obj).target/src/rt/libuv/libuv.a FORCE_DO_CMD + $(call do_cmd,link) + +all_deps += $(builddir)/run-tests +# Add target alias +.PHONY: run-tests +run-tests: $(builddir)/run-tests + +# Add executable to "all" target. +.PHONY: all +all: $(builddir)/run-tests + diff --git a/mk/libuv/x86_64/win/src/rt/libuv/uv.Makefile b/mk/libuv/x86_64/win/src/rt/libuv/uv.Makefile new file mode 100644 index 00000000000..8bfd8a0ebff --- /dev/null +++ b/mk/libuv/x86_64/win/src/rt/libuv/uv.Makefile @@ -0,0 +1,6 @@ +# This file is generated by gyp; do not edit. + +export builddir_name ?= mk/libuv/x86_64/win/./src/rt/libuv/out +.PHONY: all +all: + $(MAKE) -C ../../.. uv run-tests run-benchmarks diff --git a/mk/libuv/x86_64/win/src/rt/libuv/uv.target.mk b/mk/libuv/x86_64/win/src/rt/libuv/uv.target.mk new file mode 100644 index 00000000000..e8f7a135ac5 --- /dev/null +++ b/mk/libuv/x86_64/win/src/rt/libuv/uv.target.mk @@ -0,0 +1,135 @@ +# This file is generated by gyp; do not edit. + +TOOLSET := target +TARGET := uv +DEFS_Default := '-DHAVE_CONFIG_H' \ + '-D_WIN32_WINNT=0x0502' \ + '-DEIO_STACKSIZE=262144' \ + '-D_GNU_SOURCE' + +# Flags passed to all source files. +CFLAGS_Default := + +# Flags passed to only C files. +CFLAGS_C_Default := + +# Flags passed to only C++ files. +CFLAGS_CC_Default := + +INCS_Default := -I$(srcdir)/src/rt/libuv/include \ + -I$(srcdir)/src/rt/libuv/include/uv-private \ + -I$(srcdir)/src/rt/libuv/src \ + -I$(srcdir)/src/rt/libuv/src/ares/config_win32 + +OBJS := $(obj).target/$(TARGET)/src/rt/libuv/src/uv-common.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__close_sockets.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__get_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__read_line.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares__timeval.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_cancel.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_data.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_destroy.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_name.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_expand_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_fds.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_hostent.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_free_string.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyaddr.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_gethostbyname.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getnameinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getopt.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_getsock.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_library_init.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_llist.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_mkquery.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_nowarn.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_options.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_a_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_aaaa_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_mx_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ns_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_ptr_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_srv_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_parse_txt_reply.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_query.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_search.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_send.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strcasecmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strdup.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_strerror.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_timeout.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_version.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/ares_writev.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/bitncmp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_net_pton.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/inet_ntop.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/ares/windows_port.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/async.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/cares.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/core.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/error.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/fs.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/fs-event.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/getaddrinfo.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/handle.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/loop-watcher.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/pipe.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/process.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/req.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/stdio.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/stream.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/tcp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/tty.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/threadpool.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/threads.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/timer.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/udp.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/util.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/winapi.o \ + $(obj).target/$(TARGET)/src/rt/libuv/src/win/winsock.o + +# Add to the list of files we specially track dependencies for. +all_deps += $(OBJS) + +# CFLAGS et al overrides must be target-local. +# See "Target-specific Variable Values" in the GNU Make manual. +$(OBJS): TOOLSET := $(TOOLSET) +$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) +$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) + +# Suffix rules, putting all outputs into $(obj). + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# End of this set of suffix rules +### Rules for final target. +LDFLAGS_Default := + +LIBS := + +$(obj).target/src/rt/libuv/libuv.a: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(obj).target/src/rt/libuv/libuv.a: LIBS := $(LIBS) +$(obj).target/src/rt/libuv/libuv.a: TOOLSET := $(TOOLSET) +$(obj).target/src/rt/libuv/libuv.a: $(OBJS) FORCE_DO_CMD + $(call do_cmd,alink) + +all_deps += $(obj).target/src/rt/libuv/libuv.a +# Add target alias +.PHONY: uv +uv: $(obj).target/src/rt/libuv/libuv.a + +# Add target alias to "all" target. +.PHONY: all +all: uv + diff --git a/mk/platform.mk b/mk/platform.mk index 312ea3bc566..c14c88c9671 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -66,13 +66,13 @@ ifneq ($(findstring darwin,$(CFG_OSTYPE)),) # approaches welcome! # # NB: Currently GCC's optimizer breaks rustrt (task-comm-1 hangs) on Darwin. - CFG_GCC_CFLAGS += -m32 - CFG_CLANG_CFLAGS += -m32 + CFG_GCC_CFLAGS += -m64 #NDM + CFG_CLANG_CFLAGS += -m64 #NDM ifeq ($(CFG_CPUTYPE), x86_64) - CFG_GCCISH_CFLAGS += -arch i386 - CFG_GCCISH_LINK_FLAGS += -arch i386 + CFG_GCCISH_CFLAGS += -arch x86_64 #NDM + CFG_GCCISH_LINK_FLAGS += -arch x86_64 #NDM endif - CFG_GCCISH_LINK_FLAGS += -m32 + CFG_GCCISH_LINK_FLAGS += -m64 CFG_DSYMUTIL := dsymutil CFG_DEF_SUFFIX := .darwin.def # Mac requires this flag to make rpath work diff --git a/mk/rt.mk b/mk/rt.mk index 8d096558923..c45e0b9b4da 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -32,8 +32,8 @@ RUNTIME_CS := rt/sync/timer.cpp \ rt/memory_region.cpp \ rt/test/rust_test_harness.cpp \ rt/test/rust_test_runtime.cpp \ - rt/test/rust_test_util.cpp \ - rt/arch/i386/context.cpp \ + rt/test/rust_test_util.cpp #NDM +#NDM rt/arch/i386/context.cpp RUNTIME_LL := @@ -76,16 +76,19 @@ RUNTIME_HDR := rt/globals.h \ rt/test/rust_test_harness.h \ rt/test/rust_test_runtime.h \ rt/test/rust_test_util.h \ - rt/arch/i386/context.h \ + rt/arch/i386/context.h ifeq ($(CFG_WINDOWSY), 1) LIBUV_OSTYPE := win + LIBUV_ARCH := x86_64 #NDM LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a else ifeq ($(CFG_OSTYPE), apple-darwin) LIBUV_OSTYPE := mac + LIBUV_ARCH := x86_64 #NDM LIBUV_LIB := rt/libuv/Default/libuv.a else LIBUV_OSTYPE := unix + LIBUV_ARCH := x86_64 #NDM LIBUV_LIB := rt/libuv/Default/obj.target/src/rt/libuv/libuv.a endif @@ -121,7 +124,7 @@ $(LIBUV_LIB): $(wildcard \ $(S)src/rt/libuv/*/* \ $(S)src/rt/libuv/*/*/* \ $(S)src/rt/libuv/*/*/*/*) - $(Q)$(MAKE) -C $(S)mk/libuv/$(LIBUV_OSTYPE) \ + $(Q)$(MAKE) -C $(S)mk/libuv/$(LIBUV_ARCH)/$(LIBUV_OSTYPE) \ CFLAGS="-m32" LDFLAGS="-m32" \ CC="$(CFG_GCCISH_CROSS)$(CC)" \ CXX="$(CFG_GCCISH_CROSS)$(CXX)" \ diff --git a/src/comp/back/x86_64.rs b/src/comp/back/x86_64.rs new file mode 100644 index 00000000000..8cbebebf1ff --- /dev/null +++ b/src/comp/back/x86_64.rs @@ -0,0 +1,49 @@ +import lib::llvm::llvm; +import lib::llvm::llvm::ModuleRef; +import std::str; +import driver::session; + +fn get_target_strs(target_os: session::os) -> target_strs::t { + ret { + module_asm: "", + + meta_sect_name: alt target_os { + session::os_macos. { "__DATA,__note.rustc" } + session::os_win32. { ".note.rustc" } + session::os_linux. { ".note.rustc" } + }, + + data_layout: alt target_os { + session::os_macos. { + "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-"+ + "f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-"+ + "s0:64:64-f80:128:128-n8:16:32:64" + } + + session::os_win32. { + "e-p:32:32-f64:64:64-i64:64:64-f80:32:32-n8:16:32" //NDM i386 + } + + session::os_linux. { + "e-p:32:32-f64:32:64-i64:32:64-f80:32:32-n8:16:32" //NDM i386 + } + }, + + target_triple: alt target_os { + session::os_macos. { "x86_64-apple-darwin" } + session::os_win32. { "x86_64-pc-mingw32" } + session::os_linux. { "x86_64-unknown-linux-gnu" } + } + }; +} + +// +// Local Variables: +// mode: rust +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: +// diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 3fbe6aea516..22d6bcd8366 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -16,7 +16,7 @@ import std::map::mk_hashmap; import std::option::{some, none}; import std::getopts::{optopt, optmulti, optflag, optflagopt, opt_present}; import back::link::output_type; -import back::x86; +import back::{x86, x86_64}; tag pp_mode { ppm_normal; ppm_expanded; ppm_typed; ppm_identified; } @@ -295,7 +295,7 @@ fn get_arch(triple: str) -> session::arch { str::find(triple, "i786") >= 0 { session::arch_x86 } else if str::find(triple, "x86_64") >= 0 { - session::arch_x64 + session::arch_x86_64 } else if str::find(triple, "arm") >= 0 || str::find(triple, "xscale") >= 0 { session::arch_arm @@ -307,12 +307,12 @@ fn build_target_config(sopts: @session::options) -> @session::config { let arch = get_arch(sopts.target_triple); let (int_type, uint_type, float_type) = alt arch { session::arch_x86. {(ast::ty_i32, ast::ty_u32, ast::ty_f64)} - session::arch_x64. {(ast::ty_i64, ast::ty_u64, ast::ty_f64)} + session::arch_x86_64. {(ast::ty_i64, ast::ty_u64, ast::ty_f64)} session::arch_arm. {(ast::ty_i32, ast::ty_u32, ast::ty_f64)} }; let target_strs = alt arch { session::arch_x86. {x86::get_target_strs(os)} - session::arch_x64. {x86::get_target_strs(os)} + session::arch_x86_64. {x86_64::get_target_strs(os)} session::arch_arm. {x86::get_target_strs(os)} }; let target_cfg: @session::config = diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs index d688a57831b..e766b7eb030 100644 --- a/src/comp/driver/session.rs +++ b/src/comp/driver/session.rs @@ -11,7 +11,7 @@ import back::target_strs; tag os { os_win32; os_macos; os_linux; } -tag arch { arch_x86; arch_x64; arch_arm; } +tag arch { arch_x86; arch_x86_64; arch_arm; } type config = {os: os, diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index af0358bff9e..b54610dd5c3 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -92,6 +92,7 @@ mod back { mod abi; mod upcall; mod x86; + mod x86_64; mod rpath; mod target_strs; } diff --git a/src/etc/gyp-uv b/src/etc/gyp-uv index 3a0d48cf684..d7477e09354 100755 --- a/src/etc/gyp-uv +++ b/src/etc/gyp-uv @@ -9,43 +9,45 @@ # cd $RUST_DIR/src/rt # rm -r libuv # tar -xvf $LIBUV_DIR/libuv.tar.gz -# cd libuv -# mkdir build -# svn co http://gyp.googlecode.com/svn/trunk build/gyp -# cd ../../.. -# ./src/etc/gyp-uv +# mkdir -p libuv/build +# svn co http://gyp.googlecode.com/svn/trunk libuv/build/gyp +# cd ../.. +# ./src/etc/gyp_uv set -e cd `dirname $0` cd ../.. -args="--depth . -Dlibrary=static_library -Dtarget_arch=ia32" +for ARCH in ia32 x86_64 +do + args="--depth . -Dlibrary=static_library -Dtarget_arch=$ARCH" + + ./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ + -f make-mac \ + --generator-output mk/libuv/$ARCH/mac \ + -DOS=mac -./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ - -f make-mac \ - --generator-output mk/libuv/mac \ - -DOS=mac + ./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ + -f make-linux \ + --generator-output mk/libuv/$ARCH/unix \ + -DOS=linux -./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ - -f make-linux \ - --generator-output mk/libuv/unix \ - -DOS=linux + ./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ + -f make-linux \ + --generator-output mk/libuv/$ARCH/win \ + -DOS=win -./src/rt/libuv/build/gyp/gyp src/rt/libuv/uv.gyp $args \ - -f make-linux \ - --generator-output mk/libuv/win \ - -DOS=win + # Comment out the gyp auto regeneration + for os in mac unix win; do + sed -i ".save" \ + -e 's/^\(Makefile: $(srcdir)\/src\/rt\/libuv\/uv\.gyp\)/#\1/' \ + mk/libuv/$ARCH/$os/Makefile -# Comment out the gyp auto regeneration -for os in mac unix win; do - sed -i".save" \ - -e 's/^\(Makefile: $(srcdir)\/src\/rt\/libuv\/uv\.gyp\)/#\1/' \ - mk/libuv/$os/Makefile + sed -i ".save" \ + -e 's/^\( $(call do_cmd,regen_makefile)\)/#\1/' \ + mk/libuv/$ARCH/$os/Makefile - sed -i".save" \ - -e 's/^\( $(call do_cmd,regen_makefile)\)/#\1/' \ - mk/libuv/$os/Makefile - - rm mk/libuv/$os/Makefile.save + rm mk/libuv/$ARCH/$os/Makefile.save + done done diff --git a/src/rt/arch/x64/_context.S b/src/rt/arch/x86_64/_context.S similarity index 100% rename from src/rt/arch/x64/_context.S rename to src/rt/arch/x86_64/_context.S diff --git a/src/rt/arch/x64/ccall.S b/src/rt/arch/x86_64/ccall.S similarity index 100% rename from src/rt/arch/x64/ccall.S rename to src/rt/arch/x86_64/ccall.S diff --git a/src/rt/arch/x64/context.cpp b/src/rt/arch/x86_64/context.cpp similarity index 100% rename from src/rt/arch/x64/context.cpp rename to src/rt/arch/x86_64/context.cpp diff --git a/src/rt/arch/x64/context.h b/src/rt/arch/x86_64/context.h similarity index 100% rename from src/rt/arch/x64/context.h rename to src/rt/arch/x86_64/context.h diff --git a/src/rt/rust_internal.h b/src/rt/rust_internal.h index a820262cc65..06790fccd58 100644 --- a/src/rt/rust_internal.h +++ b/src/rt/rust_internal.h @@ -67,9 +67,9 @@ struct frame_glue_fns; typedef intptr_t rust_task_id; typedef intptr_t rust_port_id; -#ifndef __i386__ -#error "Target CPU not supported." -#endif +//NDM #ifndef __i386__ +//NDM #error "Target CPU not supported." +//NDM #endif #define I(dom, e) ((e) ? (void)0 : \ (dom)->srv->fatal(#e, __FILE__, __LINE__, "")) diff --git a/src/rt/rust_log.cpp b/src/rt/rust_log.cpp index b4d26c780e6..e0d799f7caa 100644 --- a/src/rt/rust_log.cpp +++ b/src/rt/rust_log.cpp @@ -26,6 +26,7 @@ rust_log::~rust_log() { const uint16_t hash(uintptr_t ptr) { +# if(ULONG_MAX == 0xFFFFFFFF) // Robert Jenkins' 32 bit integer hash function ptr = (ptr + 0x7ed55d16) + (ptr << 12); ptr = (ptr ^ 0xc761c23c) ^ (ptr >> 19); @@ -33,6 +34,18 @@ hash(uintptr_t ptr) { ptr = (ptr + 0xd3a2646c) ^ (ptr << 9); ptr = (ptr + 0xfd7046c5) + (ptr << 3); ptr = (ptr ^ 0xb55a4f09) ^ (ptr >> 16); +# elif(ULONG_MAX == 0xFFFFFFFFFFFFFFFF) + // "hash64shift()" from http://www.concentric.net/~Ttwang/tech/inthash.htm + ptr = (~ptr) + (ptr << 21); // ptr = (ptr << 21) - ptr - 1; + ptr = ptr ^ (ptr >> 24); + ptr = (ptr + (ptr << 3)) + (ptr << 8); // ptr * 265 + ptr = ptr ^ (ptr >> 14); + ptr = (ptr + (ptr << 2)) + (ptr << 4); // ptr * 21 + ptr = ptr ^ (ptr >> 28); + ptr = ptr + (ptr << 31); +# else +# error "hash() not defined for this pointer size" +# endif return (uint16_t) ptr; } @@ -72,7 +85,7 @@ rust_log::trace_ln(rust_task *task, uint32_t level, char *message) { #if defined(__WIN32__) uint32_t thread_id = 0; #else - uint32_t thread_id = hash((uint32_t) pthread_self()); + uint32_t thread_id = hash((uintptr_t) pthread_self()); #endif char prefix[BUF_BYTES] = ""; if (_sched && _sched->name) { diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 82d82323ae5..c0544383d23 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -8,11 +8,15 @@ // Upcalls. -#ifdef __i386__ +#if defined(__i386__) || defined(__x86_64__) || defined(_M_X64) void check_stack(rust_task *task) { void *esp; +# ifdef __i386__ asm volatile("movl %%esp,%0" : "=r" (esp)); +# else + asm volatile("mov %%rsp,%0" : "=r" (esp)); +# endif if (esp < task->stk->data) task->kernel->fatal("Out of stack space, sorry"); } diff --git a/src/rt/test/rust_test_util.cpp b/src/rt/test/rust_test_util.cpp index 2e9d764f69b..9c6c5d7e2e3 100644 --- a/src/rt/test/rust_test_util.cpp +++ b/src/rt/test/rust_test_util.cpp @@ -54,7 +54,7 @@ rust_synchronized_indexed_list_test::run() { delete worker; } - long long expected_items = LARGE_COUNT * THREADS; + size_t expected_items = LARGE_COUNT * THREADS; CHECK(list.length() == expected_items);