From 9e90a5e72c760cee268b714aced54ed30d04fa3c Mon Sep 17 00:00:00 2001 From: Valerii Hiora Date: Mon, 5 May 2014 10:05:11 +0300 Subject: [PATCH] Platform configuration FIXME: avoid using Xcode build and switch to a patched libuv --- mk/platform.mk | 96 +++++++++++++++++++++++++++++++++++--------------- mk/rt.mk | 49 ++++++++++++++++++++++---- 2 files changed, 111 insertions(+), 34 deletions(-) diff --git a/mk/platform.mk b/mk/platform.mk index 3ab55ce4b7b1b..1efa1cc5b6d85 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -155,36 +155,76 @@ CFG_LDPATH_i686-unknown-linux-gnu := CFG_RUN_i686-unknown-linux-gnu=$(2) CFG_RUN_TARG_i686-unknown-linux-gnu=$(call CFG_RUN_i686-unknown-linux-gnu,,$(2)) -# arm-apple-darwin configuration -ifeq ($(CFG_OSTYPE),apple-darwin) +# arm-apple-ios configuration +CFG_SDK_NAME_arm-apple-ios = iphoneos +CFG_SDK_ARCHS_arm-apple-ios = armv7 +ifneq ($(findstring darwin,$(CFG_OSTYPE)),) CFG_IOS_SDK = $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null) -CFG_IOS_FLAGS = -target arm-apple-darwin -isysroot $(CFG_IOS_SDK) -I$(CFG_IOS_SDK)/usr/include -I$(CFG_IOS_SDK)/usr/include/c++/4.2.1 -CC_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang) -CXX_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++) -CPP_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++) -AR_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos ar) -CFG_LIB_NAME_arm-apple-darwin = lib$(1).dylib -CFG_LIB_GLOB_arm-apple-darwin = lib$(1)-*.dylib -CFG_LIB_DSYM_GLOB_arm-apple-darwin = lib$(1)-*.dylib.dSYM -CFG_CFLAGS_arm-apple-darwin := $(CFG_IOS_FLAGS) $(CFLAGS) -CFG_GCCISH_CFLAGS_arm-apple-darwin := -Wall -Werror -g -fPIC $(CFG_IOS_FLAGS) $(CFLAGS) -CFG_GCCISH_CXXFLAGS_arm-apple-darwin := -fno-rtti $(CFG_IOS_FLAGS) $(CXXFLAGS) -CFG_GCCISH_LINK_FLAGS_arm-apple-darwin := -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind -CFG_GCCISH_DEF_FLAG_arm-apple-darwin := -Wl,-exported_symbols_list, -CFG_GCCISH_PRE_LIB_FLAGS_arm-apple-darwin := -CFG_GCCISH_POST_LIB_FLAGS_arm-apple-darwin := -CFG_DEF_SUFFIX_arm-apple-darwin := .darwin.def -CFG_LLC_FLAGS_arm-apple-darwin := -CFG_INSTALL_NAME_arm-apple-darwin = -Wl,-install_name,@rpath/$(1) -CFG_LIBUV_LINK_FLAGS_arm-apple-darwin = -CFG_EXE_SUFFIX_arm-apple-darwin := -CFG_WINDOWSY_arm-apple-darwin := -CFG_UNIXY_arm-apple-darwin := 1 -CFG_PATH_MUNGE_arm-apple-darwin := true -CFG_LDPATH_arm-apple-darwin := -CFG_RUN_arm-apple-darwin = $(2) -CFG_RUN_TARG_arm-apple-darwin = $(call CFG_RUN_arm-apple-darwin,,$(2)) +CFG_IOS_FLAGS = -target armv7-apple-darwin -isysroot $(CFG_IOS_SDK) -mios-version-min=7.0 +CC_arm-apple-ios = $(shell xcrun -find -sdk iphoneos clang) +CXX_arm-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) +CPP_arm-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) +AR_arm-apple-ios = $(shell xcrun -find -sdk iphoneos ar) endif +CFG_LIB_NAME_arm-apple-ios = lib$(1).a +CFG_LIB_GLOB_arm-apple-ios = lib$(1)-*.a +CFG_STATIC_LIB_NAME_arm-apple-ios=lib$(1).a +CFG_LIB_DSYM_GLOB_arm-apple-ios = lib$(1)-*.a.dSYM +CFG_CFLAGS_arm-apple-ios := -arch armv7 -mfpu=vfp3 $(CFG_IOS_FLAGS) +CFG_GCCISH_CFLAGS_arm-apple-ios := -Wall -Werror -g -fPIC $(CFG_IOS_FLAGS) -mfpu=vfp3 -arch armv7 +CFG_GCCISH_CXXFLAGS_arm-apple-ios := -fno-rtti $(CFG_IOS_FLAGS) -I$(CFG_IOS_SDK)/usr/include/c++/4.2.1 +CFG_GCCISH_LINK_FLAGS_arm-apple-ios := -lpthread -syslibroot $(CFG_IOS_SDK) -Wl,-no_compact_unwind +CFG_GCCISH_DEF_FLAG_arm-apple-ios := -Wl,-exported_symbols_list, +CFG_GCCISH_PRE_LIB_FLAGS_arm-apple-ios := +CFG_GCCISH_POST_LIB_FLAGS_arm-apple-ios := +CFG_DEF_SUFFIX_arm-apple-ios := .darwin.def +CFG_LLC_FLAGS_arm-apple-ios := -mattr=+vfp3,+v7,+thumb2,+neon -march=arm +CFG_INSTALL_NAME_arm-apple-ios = -Wl,-install_name,@rpath/$(1) +CFG_LIBUV_LINK_FLAGS_arm-apple-ios = +CFG_EXE_SUFFIX_arm-apple-ios := +CFG_WINDOWSY_arm-apple-ios := +CFG_UNIXY_arm-apple-ios := 1 +CFG_PATH_MUNGE_arm-apple-ios := true +CFG_LDPATH_arm-apple-ios := +CFG_RUN_arm-apple-ios = $(2) +CFG_RUN_TARG_arm-apple-ios = $(call CFG_RUN_arm-apple-ios,,$(2)) +RUSTC_FLAGS_arm-apple-ios := -C relocation_model=pic +RUSTC_CROSS_FLAGS_arm-apple-ios :=-C relocation_model=pic + +# i386-apple-ios configuration +CFG_SDK_NAME_i386-apple-ios = iphonesimulator +CFG_SDK_ARCHS_i386-apple-ios = i386 +ifneq ($(findstring darwin,$(CFG_OSTYPE)),) +CFG_IOSSIM_SDK = $(shell xcrun --show-sdk-path -sdk iphonesimulator 2>/dev/null) +CFG_IOSSIM_FLAGS = -target i386-apple-ios -isysroot $(CFG_IOSSIM_SDK) -mios-simulator-version-min=7.0 +CC_i386-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang) +CXX_i386-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang++) +CPP_i386-apple-ios = $(shell xcrun -find -sdk iphonesimulator clang++) +AR_i386-apple-ios = $(shell xcrun -find -sdk iphonesimulator ar) +endif +CFG_LIB_NAME_i386-apple-ios = lib$(1).a +CFG_LIB_GLOB_i386-apple-ios = lib$(1)-*.dylib +CFG_STATIC_LIB_NAME_i386-apple-ios=lib$(1).a +CFG_LIB_DSYM_GLOB_i386-apple-ios = lib$(1)-*.dylib.dSYM +CFG_CFLAGS_i386-apple-ios = $(CFG_IOSSIM_FLAGS) +CFG_GCCISH_CFLAGS_i386-apple-ios = -Wall -Werror -g -fPIC -m32 $(CFG_IOSSIM_FLAGS) +CFG_GCCISH_CXXFLAGS_i386-apple-ios = -fno-rtti $(CFG_IOSSIM_FLAGS) -I$(CFG_IOSSIM_SDK)/usr/include/c++/4.2.1 +CFG_GCCISH_LINK_FLAGS_i386-apple-ios = -lpthread -Wl,-no_compact_unwind -m32 -Wl,-syslibroot $(CFG_IOSSIM_SDK) +CFG_GCCISH_DEF_FLAG_i386-apple-ios = -Wl,-exported_symbols_list, +CFG_GCCISH_PRE_LIB_FLAGS_i386-apple-ios = +CFG_GCCISH_POST_LIB_FLAGS_i386-apple-ios = +CFG_DEF_SUFFIX_i386-apple-ios = .darwin.def +CFG_LLC_FLAGS_i386-apple-ios = +CFG_INSTALL_NAME_i386-apple-ios = -Wl,-install_name,@rpath/$(1) +CFG_LIBUV_LINK_FLAGS_i386-apple-ios = +CFG_EXE_SUFFIX_i386-apple-ios = +CFG_WINDOWSY_i386-apple-ios = +CFG_UNIXY_i386-apple-ios = 1 +CFG_PATH_MUNGE_i386-apple-ios = true +CFG_LDPATH_i386-apple-ios = +CFG_RUN_i386-apple-ios = $(2) +CFG_RUN_TARG_i386-apple-ios = $(call CFG_RUN_i386-apple-ios,,$(2)) +CFG_JEMALLOC_CFLAGS_i386-apple-ios = -target i386-apple-ios -Wl,-syslibroot $(CFG_IOSSIM_SDK) -Wl,-no_compact_unwind # x86_64-apple-darwin configuration CC_x86_64-apple-darwin=$(CC) diff --git a/mk/rt.mk b/mk/rt.mk index 1c4efd641f063..cb6c0fc7e5e8b 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -166,6 +166,9 @@ ifeq ($$(CFG_WINDOWSY_$(1)), 1) JEMALLOC_ARGS_$(1) := --enable-lazy-lock else ifeq ($(OSTYPE_$(1)), apple-darwin) LIBUV_OSTYPE_$(1) := mac +else ifeq ($(OSTYPE_$(1)), apple-ios) + LIBUV_OSTYPE_$(1) := ios + JEMALLOC_ARGS_$(1) := --disable-tls else ifeq ($(OSTYPE_$(1)), unknown-freebsd) LIBUV_OSTYPE_$(1) := freebsd else ifeq ($(OSTYPE_$(1)), linux-androideabi) @@ -181,6 +184,8 @@ LIBUV_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/libuv LIBUV_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(LIBUV_NAME_$(1)) LIBUV_MAKEFILE_$(1) := $$(CFG_BUILD_DIR)$$(RT_OUTPUT_DIR_$(1))/libuv/Makefile +LIBUV_BUILD_DIR_$(1) := $$(CFG_BUILD_DIR)$$(RT_OUTPUT_DIR_$(1))/libuv +LIBUV_XCODEPROJ_$(1) := $$(LIBUV_BUILD_DIR_$(1))/uv.xcodeproj LIBUV_STAMP_$(1) = $$(LIBUV_DIR_$(1))/libuv-auto-clean-stamp @@ -212,6 +217,31 @@ $$(LIBUV_LOCAL_$(1)): $$(LIBUV_DEPS) $$(MKFILE_DEPS) CXX="$$(CXX_$(1))" \ AR="$$(AR_$(1))" \ V=$$(VERBOSE) + $$(Q)cp $$(S)src/libuv/libuv.a $$@ +else ifeq ($(OSTYPE_$(1)), apple-ios) # iOS +$$(LIBUV_XCODEPROJ_$(1)): $$(LIBUV_DEPS) $$(MKFILE_DEPS) $$(LIBUV_STAMP_$(1)) + cp -rf $(S)src/libuv/ $$(LIBUV_BUILD_DIR_$(1)) + (cd $$(LIBUV_BUILD_DIR_$(1)) && \ + $$(CFG_PYTHON) ./gyp_uv.py -f xcode \ + -D ninja \ + -R libuv) + touch $$@ + +LIBUV_XCODE_OUT_LIB_$(1) := $$(LIBUV_BUILD_DIR_$(1))/build/Release-$$(CFG_SDK_NAME_$(1))/libuv.a + +$$(LIBUV_LIB_$(1)): $$(LIBUV_XCODE_OUT_LIB_$(1)) $$(MKFILE_DEPS) + $$(Q)cp $$< $$@ +$$(LIBUV_XCODE_OUT_LIB_$(1)): $$(LIBUV_DEPS) $$(LIBUV_XCODEPROJ_$(1)) \ + $$(MKFILE_DEPS) + $$(Q)xcodebuild -project $$(LIBUV_BUILD_DIR_$(1))/uv.xcodeproj \ + CFLAGS="$$(LIBUV_CFLAGS_$(1)) $$(SNAP_DEFINES)" \ + LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS_$(1))" \ + $$(LIBUV_ARGS_$(1)) \ + V=$$(VERBOSE) \ + -configuration Release \ + -sdk "$$(CFG_SDK_NAME_$(1))" \ + ARCHS="$$(CFG_SDK_ARCHS_$(1))" + $$(Q)touch $$@ else LIBUV_LOCAL_$(1) := $$(LIBUV_DIR_$(1))/Release/libuv.a $$(LIBUV_LOCAL_$(1)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1)) $$(MKFILE_DEPS) @@ -226,7 +256,6 @@ $$(LIBUV_LOCAL_$(1)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1)) $$(MKFILE_DEPS) NO_LOAD="$$(LIBUV_NO_LOAD)" \ V=$$(VERBOSE) $$(Q)touch $$@ - endif ifeq ($(1),$$(CFG_BUILD)) @@ -269,13 +298,13 @@ JEMALLOC_LOCAL_$(1) := $$(JEMALLOC_BUILD_DIR_$(1))/lib/$$(JEMALLOC_REAL_NAME_$(1 $$(JEMALLOC_LOCAL_$(1)): $$(JEMALLOC_DEPS) $$(MKFILE_DEPS) @$$(call E, make: jemalloc) cd "$$(JEMALLOC_BUILD_DIR_$(1))"; "$(S)src/jemalloc/configure" \ - $$(JEMALLOC_ARGS_$(1)) --enable-cc-silence --with-jemalloc-prefix=je_ \ - --disable-experimental --build=$(CFG_BUILD) --host=$(1) \ + $$(JEMALLOC_ARGS_$(1)) --with-jemalloc-prefix=je_ \ + --build=$(CFG_BUILD) --host=$(1) \ CC="$$(CC_$(1))" \ AR="$$(AR_$(1))" \ RANLIB="$$(AR_$(1)) s" \ CPPFLAGS="-I $(S)src/rt/" \ - EXTRA_CFLAGS="$$(CFG_CFLAGS_$(1)) -g1" + EXTRA_CFLAGS="$$(CFG_CFLAGS_$(1)) $$(CFG_JEMALLOC_CFLAGS_$(1)) -g1" $$(Q)$$(MAKE) -C "$$(JEMALLOC_BUILD_DIR_$(1))" build_lib_static ifeq ($(1),$$(CFG_BUILD)) @@ -335,15 +364,22 @@ BACKTRACE_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),backtrace) BACKTRACE_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(BACKTRACE_NAME_$(1)) BACKTRACE_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/libbacktrace -ifeq ($$(findstring darwin,$$(OSTYPE_$(1))),darwin) - # We don't use this on platforms that aren't linux-based, so just make the file # available, the compilation of libstd won't actually build it. +ifeq ($$(findstring darwin,$$(OSTYPE_$(1))),darwin) +# See comment above $$(BACKTRACE_LIB_$(1)): touch $$@ else +ifeq ($$(findstring ios,$$(OSTYPE_$(1))),ios) +# See comment above +$$(BACKTRACE_LIB_$(1)): + touch $$@ +else + ifeq ($$(CFG_WINDOWSY_$(1)),1) +# See comment above $$(BACKTRACE_LIB_$(1)): touch $$@ else @@ -388,6 +424,7 @@ $$(BACKTRACE_LIB_$(1)): $$(BACKTRACE_BUILD_DIR_$(1))/Makefile $$(MKFILE_DEPS) $$(Q)cp $$(BACKTRACE_BUILD_DIR_$(1))/.libs/libbacktrace.a $$@ endif # endif for windowsy +endif # endif for ios endif # endif for darwin endef