diff --git a/build.sh b/build.sh index 5c0a82c..3c5a6ba 100755 --- a/build.sh +++ b/build.sh @@ -322,6 +322,18 @@ elif [ $(osxcross-cmp $OSX_VERSION_MIN "<" 10.4) -eq 1 ]; then exit 1 fi +# CMAKE + +echo "installing CMake" + +cp -f "$BASE_DIR/tools/toolchain.cmake" "$TARGET_DIR/" +cp -f "$BASE_DIR/tools/osxcross-cmake" "$TARGET_DIR/bin/" +chmod 755 "$TARGET_DIR/bin/osxcross-cmake" +create_symlink osxcross-cmake "$TARGET_DIR/bin/i386-apple-$TARGET-cmake" +create_symlink osxcross-cmake "$TARGET_DIR/bin/x86_64-apple-$TARGET-cmake" + +# CMAKE END + unset MACOSX_DEPLOYMENT_TARGET test_compiler o32-clang $BASE_DIR/oclang/test.c diff --git a/tools/osxcross-cmake b/tools/osxcross-cmake new file mode 100755 index 0000000..c9a3fdd --- /dev/null +++ b/tools/osxcross-cmake @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +dir=`dirname "$0"` +progname=`basename "$0"` + +host=${progname%-cmake} +if test "$host" = "osxcross" ; then + echo "Do not invoke this script directly." + exit 1 +fi + +eval "`$dir/$host-osxcross-conf`" +export OSXCROSS_HOST="$host" + +exec cmake -DCMAKE_TOOLCHAIN_FILE="$OSXCROSS_TARGET_DIR"/toolchain.cmake "$@" diff --git a/tools/toolchain.cmake b/tools/toolchain.cmake new file mode 100644 index 0000000..48e3462 --- /dev/null +++ b/tools/toolchain.cmake @@ -0,0 +1,50 @@ +# OSXCross toolchain + +macro(osxcross_getconf VAR) + if(NOT ${VAR}) + set(${VAR} "$ENV{${VAR}}") + if(${VAR}) + set(${VAR} "${${VAR}}" CACHE STRING "${VAR}") + message(STATUS "Found ${VAR}: ${${VAR}}") + else() + message(FATAL_ERROR "Cannot determine \"${VAR}\"") + endif() + endif() +endmacro() + +osxcross_getconf(OSXCROSS_HOST) +osxcross_getconf(OSXCROSS_TARGET_DIR) +osxcross_getconf(OSXCROSS_TARGET) +osxcross_getconf(OSXCROSS_SDK) + +set(CMAKE_SYSTEM_NAME "Darwin") +string(REGEX REPLACE "-.*" "" CMAKE_SYSTEM_PROCESSOR "${OSXCROSS_HOST}") + +# specify the cross compiler +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") + set(CMAKE_C_COMPILER "${OSXCROSS_TARGET_DIR}/bin/o32-clang") + set(CMAKE_CXX_COMPILER "${OSXCROSS_TARGET_DIR}/bin/o32-clang++") +elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(CMAKE_C_COMPILER "${OSXCROSS_TARGET_DIR}/bin/o64-clang") + set(CMAKE_CXX_COMPILER "${OSXCROSS_TARGET_DIR}/bin/o64-clang++") +else() + message(FATAL_ERROR "Unrecognized target architecture") +endif() + +# where is the target environment +set(CMAKE_FIND_ROOT_PATH + "${OSXCROSS_SDK}" + "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local") + +# search for programs in the build host directories +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# for libraries and headers in the target directories +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(CMAKE_AR "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-ar" CACHE FILEPATH "ar") +set(CMAKE_RANLIB "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-ranlib" CACHE FILEPATH "ranlib") + +set(ENV{PKG_CONFIG_LIBDIR} "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local/lib/pkgconfig") +set(ENV{PKG_CONFIG_SYSROOT_DIR} "${OSXCROSS_TARGET_DIR}/macports/pkgs")