Fix universal build support for Mac and iOS

This commit is contained in:
Ole André Vadla Ravnås
2014-07-04 23:09:19 +02:00
parent d392f6ef89
commit 6583f069a7
3 changed files with 40 additions and 8 deletions

View File

@ -39,6 +39,8 @@ ifeq ($(CAPSTONE_USE_SYS_DYN_MEM),yes)
CFLAGS += -DCAPSTONE_USE_SYS_DYN_MEM
endif
CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
PREFIX ?= /usr
DESTDIR ?=
ifndef BUILDDIR
@ -416,9 +418,23 @@ define create-archive
endef
ifeq ($(LIBARCHS),)
define create-library
$(CC) $(LDFLAGS) $($(LIBNAME)_LDFLAGS) $(LIBOBJ) -o $(LIBRARY)
endef
else
ifeq ($(call words,$(LIBARCHS)),1)
define create-library
$(CC) -arch $(LIBARCHS) $(LDFLAGS) $($(LIBNAME)_LDFLAGS) $(LIBOBJ) -o $(LIBRARY)
endef
else
define create-library
$(foreach arch,$(LIBARCHS),$(CC) -arch $(arch) $(LDFLAGS) $($(LIBNAME)_LDFLAGS) $(LIBOBJ) -o $(LIBRARY).$(arch);)
lipo -create $(foreach arch,$(LIBARCHS),$(LIBRARY).$(arch)) -output $(LIBRARY)
rm $(foreach arch,$(LIBARCHS),$(LIBRARY).$(arch))
endef
endif
endif
define generate-pkgcfg

13
make.sh
View File

@ -9,16 +9,17 @@
# build iOS lib for all iDevices, or only specific device
function build_iOS {
${MAKE} clean
SDK=`xcrun --sdk iphoneos --show-sdk-path`
GCC_BIN=`xcrun --sdk iphoneos -f gcc`
GCC_BASE="$GCC_BIN -Os -Wimplicit -isysroot $SDK"
IOS_SDK=`xcrun --sdk iphoneos --show-sdk-path`
IOS_CC=`xcrun --sdk iphoneos -f clang`
IOS_CFLAGS="-Os -Wimplicit -isysroot $IOS_SDK"
IOS_LDFLAGS="-isysroot $IOS_SDK"
if (( $# == 0 )); then
# build for all iDevices
GCC="$GCC_BASE -arch armv7 -arch armv7s -arch arm64"
IOS_ARCHS="armv7 armv7s arm64"
else
GCC="$GCC_BASE -arch $1"
IOS_ARCHS="$1"
fi
${MAKE} CC="$GCC"
CC="$IOS_CC" CFLAGS="$IOS_CFLAGS" LDFLAGS="$IOS_LDFLAGS" LIBARCHS="$IOS_ARCHS" ${MAKE} V=1
}
function build {

View File

@ -26,6 +26,7 @@ endif
CFLAGS += -O3 -Wall -I$(INCDIR)
CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
LDFLAGS += -L$(LIBDIR)
LIBNAME = capstone
@ -127,13 +128,27 @@ else
endif
ifeq ($(LIBARCHS),)
define link-dynamic
${CC} $(CFLAGS) $(LDFLAGS) $< -O3 -Wall -l$(LIBNAME) -o $@
$(CC) $(LDFLAGS) $< -l$(LIBNAME) -o $@
endef
else
ifeq ($(call words,$(LIBARCHS)),1)
define link-dynamic
$(CC) -arch $(LIBARCHS) $(LDFLAGS) $< -l$(LIBNAME) -o $@
endef
else
define link-dynamic
$(foreach arch,$(LIBARCHS),$(CC) -arch $(arch) $(LDFLAGS) $< -l$(LIBNAME) -o $(@).$(arch);)
lipo -create $(foreach arch,$(LIBARCHS),$(@).$(arch)) -output $@
rm $(foreach arch,$(LIBARCHS),$(@).$(arch))
endef
endif
endif
define link-static
${CC} $(CFLAGS) $(LDFLAGS) $< -O3 -Wall $(ARCHIVE) -o $(call staticname,$@)
${CC} $(LDFLAGS) $< $(ARCHIVE) -o $(call staticname,$@)
endef