Skip to content

Commit

Permalink
Prepare darwin toolchain
Browse files Browse the repository at this point in the history
  • Loading branch information
braydonf committed Feb 20, 2017
1 parent be51277 commit 776a6ef
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,5 @@ test/tests.exe
depends/downloads/*
depends/sources/*
depends/build/*
depends/toolchain/*
!depends/Makefile
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,21 @@ Configure command for libstorj-c:
PKG_CONFIG_LIBDIR="$(pwd)/depends/build/i686-pc-linux-gnu/lib/pkgconfig" CFLAGS="-I$(pwd)/depends/build/i686-pc-linux-gnu/include -L$(pwd)/depends/build/i686-pc-linux-gnu/lib -static -m32" LDFLAGS="-m32" ./configure --host=i686-pc-linux-gnu --enable-static --disable-shared --prefix=$(pwd)/depends/build/i686-pc-linux-gnu
```

**Mac OSX**

The Apple SDK `MacOSX10.11.sdk` is needed and is available in [Xcode_7.3.1.dmg](https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg) *(requires a developer account)*.

```
cd ./depends
make HOST="x86_64-apple-darwin11"
```

Configure command for libstorj-c:
```
export PATH="$(pwd)/depends/toolchain/build/bin:${PATH}" && PKG_CONFIG_LIBDIR="$(pwd)/depends/build/x86_64-apple-darwin11/lib/pkgconfig" CC=clang CXX=clang++ CFLAGS="-target x86_64-apple-darwin11 -isysroot $(pwd)/depends/MacOSX10.11.sdk -mmacosx-version-min=10.8 -mlinker-version=253.9 -pipe -I$(pwd)/depends/build/x86_64-apple-darwin11/include" LDFLAGS="-L$(pwd)/depends/toolchain/build/lib -L$(pwd)/depends/MacOSX10.11.sdk/usr/lib -L$(pwd)/depends/build/x86_64-apple-darwin11/lib -Wl,-syslibroot $(pwd)/depends/MacOSX10.11.sdk" ./configure --host="x86_64-apple-darwin11" --enable-static --disable-shared --prefix=$(pwd)/depends/build/x86_64-apple-darwin11
```


### Compiling Dependencies from OS X

```
Expand Down
48 changes: 42 additions & 6 deletions depends/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ HOST ?= $(BUILD)
DOWNLOAD_DIR = "$(CURDIR)/downloads/"
SOURCES_DIR = "$(CURDIR)/sources/$(HOST)/"
PREFIX_DIR = "$(CURDIR)/build/$(HOST)/"
TOOLCHAIN_BUILD_DIR = "$(CURDIR)/toolchain/build/"
TOOLCHAIN_SOURCE_DIR = "$(CURDIR)/toolchain/source/"

canonical_host:=$(shell ./config.sub $(HOST))
build:=$(shell ./config.sub $(BUILD))
Expand All @@ -34,23 +36,25 @@ host_os=$(full_host_os)
endif

# mac build
DARWIN_SDK_PATH ?= "/home/bgf/storj/libstorj-c/depends/MacOSX10.11.sdk"
DARWIN_SDK_PATH ?= "$(CURDIR)/MacOSX10.11.sdk"
DARWIN_CFLAGS = "-target $(HOST) -isysroot $(DARWIN_SDK_PATH) -mmacosx-version-min=10.8 -mlinker-version=253.9 -pipe -I$(PREFIX_DIR)include"
DARWIN_LDFLAGS="-L/home/bgf/vendor/clang+llvm/lib -L$(DARWIN_SDK_PATH)/usr/lib -L$(PREFIX_DIR)lib -Wl,-syslibroot $(DARWIN_SDK_PATH)"
DARWIN_LDFLAGS="-L$(TOOLCHAIN_BUILD_DIR)lib -L$(DARWIN_SDK_PATH)/usr/lib -L$(PREFIX_DIR)lib -Wl,-syslibroot $(DARWIN_SDK_PATH)"

build_SHA256SUM = $(if "$(build_os)" == "darwin",shasum -a 256,sha256sum -c)

build_env=
ifeq ($(host_os), darwin)
build_env=PATH="/home/bgf/vendor/clang+llvm/bin:${PATH}" CC=clang CXX=clang++ CFLAGS=$(DARWIN_CFLAGS) LDFLAGS=$(DARWIN_LDFLAGS)
build_env=PATH="$(TOOLCHAIN_BUILD_DIR)bin:${PATH}" CC=clang CXX=clang++ CFLAGS=$(DARWIN_CFLAGS) LDFLAGS=$(DARWIN_LDFLAGS)
endif
ifeq ($(HOST), i686-pc-linux-gnu)
build_env=CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
endif

toolchain_packages:=clang cctools
packages:=gmp nettle gnutls libcurl json-c libuv libmicrohttpd
all_packages = $(toolchain_packages) $(packages)

$(foreach package,$(packages),$(eval include packages/$(package).mk))
$(foreach package,$(all_packages),$(eval include packages/$(package).mk))

define fetch_file
set -e && \
Expand Down Expand Up @@ -88,23 +92,55 @@ define build_source
echo "host: $(HOST)" && \
echo "prefix: $(PREFIX_DIR)" && \
echo "====================================\n\n" && \
export PATH="/home/bgf/vendor/clang+llvm/bin:${PATH}" && \
export PATH="$(TOOLCHAIN_BUILD_DIR)bin:${PATH}" && \
if test -f "./autogen.sh"; then ./autogen.sh; fi && \
$(build_env) $($(1)_config_env) ./configure --host="$(HOST)" $($(1)_config_opts) --enable-static --disable-shared --prefix=$(PREFIX_DIR) || exit && \
make || exit && \
make install || exit && \
cd "$(CURDIR)"
endef

define extract_toolchain_file
if test -d "$(TOOLCHAIN_SOURCE_DIR)$(1)"; then \
echo "Skipping extract: $(DOWNLOAD_DIR)$($(1)_file_name)"; \
else \
echo "Extracting: $(DOWNLOAD_DIR)$($(1)_file_name)"; \
mkdir -p "$(TOOLCHAIN_SOURCE_DIR)$(1)"; \
tar xf "$(DOWNLOAD_DIR)$($(1)_file_name)" -C "$(TOOLCHAIN_SOURCE_DIR)$(1)" --strip-components=1; \
fi
endef

define extract_toolchain_file_build
mkdir -p "$(TOOLCHAIN_BUILD_DIR)"; \
tar xfv "$(DOWNLOAD_DIR)$($(1)_file_name)" -C "$(TOOLCHAIN_BUILD_DIR)" --strip-components=1; \
rm -f $(TOOLCHAIN_BUILD_DIR)lib/libc++abi.so
endef

define build_darwin_toolchain
echo "Building darwin toolchain" && \
$(foreach package,$(toolchain_packages),$(call fetch_file,$(package));)
$(foreach package,clang,$(call extract_toolchain_file_build,$(package));)
$(foreach package,cctools,$(call extract_toolchain_file,$(package));)
cd "$(TOOLCHAIN_SOURCE_DIR)cctools/cctools" && \
if test -f "./autogen.sh"; then ./autogen.sh; fi && \
PATH="$(TOOLCHAIN_BUILD_DIR)bin:${PATH}" CC=clang CXX=clang++ ./configure --prefix="$(TOOLCHAIN_BUILD_DIR)" --target="x86_64-apple-darwin11" || exit && \
make || exit && \
make install || exit && \
cd "$(CURDIR)"
endef

build-sources: extract-sources
@$(foreach package,$(packages),$(call build_source,$(package));)

extract-sources: download-sources
@$(foreach package,$(packages),$(call extract_file,$(package));)

download-sources:
download-sources: build-toolchain
@$(foreach package,$(packages),$(call fetch_file,$(package));)

build-toolchain:
@$(call build_darwin_toolchain,)

clean:
$(RM) -rv $(DOWNLOAD_DIR)
$(RM) -rv $(SOURCES_DIR)
Expand Down
7 changes: 7 additions & 0 deletions depends/packages/cctools.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package=cctools
$(package)_version=8e9c3f2506b51cf56725eaa60b6e90e240e249ca
$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive/$($(package)_version).tar.gz
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_sha256_hash=c413a0c29468518fa4980dd4fdf90f8ca13843d86df6041c22d38bd26358e512
$(package)_config_env=
$(package)_config_opts=
7 changes: 7 additions & 0 deletions depends/packages/clang.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package=clang
$(package)_version=3.9.1
$(package)_download_path=http://releases.llvm.org/$($(package)_version)/clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-16.04.tar.xz
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_sha256_hash=99d1ffd4be8fd3331b4d2478ada7ee6ed352729bfe4a1070450cdb9a3ce8ef9b
$(package)_config_env=
$(package)_config_opts=

0 comments on commit 776a6ef

Please sign in to comment.