How do I link third party libraries like fftw3 and sndfile to an iPhone project in Xcode?

前端 未结 9 1301
情歌与酒
情歌与酒 2020-12-09 07:08

I\'m trying to link third party libraries like fftw3 and sndfile to my iPhone project in Xcode3.2. I got it working in a regular Mac project by setting the \"Header Search P

相关标签:
9条回答
  • 2020-12-09 07:37

    You need to build your libraries as universal static libraries. The process varies from library to library but it generally goes something like this.

    1. build the library as a static lib for the different platforms (armv6 and i386 at the least)
    2. use lipo to create a universal library from the individual static libraries built above
    3. drag and drop the universal lib into your xcode project
    4. drag and drop the header files into your xcode project

    Step 1 is generally the trickiest since many libraries have different build procedures. It is usually done by setting the proper compiler flags to use the iphone sdk instead of the system wide compiler.

    0 讨论(0)
  • 2020-12-09 07:37

    I tried Adam Freeman's script, its awesome but I had to do the following to make it work, so I am here to share my finding. My goal is to make arm based fftw lib so I can build it++ lib through Xcode with arm architecture

    I also run into the problem posted by loretoparisi

    /libbench2/libbench2.a:5:255: warning: null character ignored [-Wnull-character] 
    ./libbench2/libbench2.a:4:8: error: source file is not valid UTF-8
    

    the workaround is to strip away the make rule for "tests","tools" folders and any fftw-"wisdom" related stuff in Makefile.in and Makefile.am, I don't know how important are the files from those two folders, but I had to remove them so fftw build can success without UTF-8 error

    I also have to modify the script (I took awake the neon and float precision flag, again I also do not know how important are those flag)

    #!/bin/sh
    
    # build_lipo.sh
    # build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
    # make sure to check that all the paths used in this script exist on your system
    #
    # adopted from:
    # http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
    # changed by Adam
    # original: by Nickun
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    # this is the folder where the results of our efforts will end up:
    export RESULT_DIR=ios-library
    
    # Select toolchains folder
    export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
    # Select the desired iPhone SDK
    export DEVROOT_IOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
    export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS7.1.sdk
    # Select the OSX SDK
    export DEVROOT_OSX=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
    export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX10.9.2.sdk
    
    # ------------------------ i386 ---------------------------
    # Do it for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP CC LD CXX LDFLAGS CXXFLAGS
    
    export CFLAGS="-arch i386"
    
    # TODO: error checking
    ./configure --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
    make -j2
    
    # Copy the FAT native library to a temporary location
    mkdir $RESULT_DIR
    cp .libs/libfftw3.a $RESULT_DIR/libfftw3_i386.a
    rm -fr .libs/libfftw3.a
    
    # ------------------------ x86_64 ---------------------------
    # Do it all again for x86_64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP CC LD CXX LDFLAGS CXXFLAGS
    
    # TODO: error checking
    ./configure
    make -j2
    
    # Copy the FAT native library to the temporary location
    cp .libs/libfftw3.a $RESULT_DIR/libfftw3_x86_64.a
    rm -fr .libs/libfftw3.a
    
    # ------------------------ armv7---------------------------
    # Do it all again for armv7
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
    export CFLAGS="$CPPFLAGS -arch armv7  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ "
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 "
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin
    
    make -j2
    
    cp .libs/libfftw3.a $RESULT_DIR/libfftw3_armv7.a
    rm -fr .libs/libfftw3.a
    
    # Copy the header file too, just for convenience
    cp api/fftw3.h $RESULT_DIR/fftw3.h
    
    # ------------------------ armv7s---------------------------
    # Do it all again for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
    export CFLAGS="$CPPFLAGS -arch armv7s  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ "
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 "
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin
    
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/libfftw3.a $RESULT_DIR/libfftw3_armv7s.a
    rm -fr .libs/libfftw3.a
    
    # ------------------------ arm64 ---------------------------
    # Do it all again for arm64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
    export CFLAGS="$CPPFLAGS -arch arm64  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ "
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 "
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin
    
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/libfftw3.a ios-library/libfftw3_arm64.a
    rm -fr .libs/libfftw3.a
    
    # Create fat lib by combining the two versions
    lipo -arch armv7 $RESULT_DIR/libfftw3_armv7.a -arch armv7s $RESULT_DIR/libfftw3_armv7s.a -arch i386 $RESULT_DIR/libfftw3_i386.a -arch x86_64 $RESULT_DIR/libfftw3_x86_64.a -arch arm64 $RESULT_DIR/libfftw3_arm64.a -create -output $RESULT_DIR/libfftw3.a
    
    # Remove intermediate binaries
    #rm $RESULT_DIR/libfftw3_armv7.a
    #rm $RESULT_DIR/libfftw3_i386.a
    #rm $RESULT_DIR/libfftw3_x86_64.a
    
    # Unset used environment variables
    unset CPPFLAGS CFLAGS CPP LD LDFLAGS CC CXX CXXFLAGS
    
    0 讨论(0)
  • 2020-12-09 07:42

    It's not that Apple isn't allowing the library, it's that the version you are linking to is x86, and so it won't run on the iPhone. You need to build the library using the iPhone SDK, then link to that version.

    Alternatively, you can be a little naughty and include the 3rd-party source in your main project. Naughty, but it'll prove the point that Apple isn't stopping you, and show whether the library will run on the phone OK.

    It's cleaner to keep the code in a separately-built library project though.

    0 讨论(0)
  • 2020-12-09 07:43

    I modified Nickun's script for Mac OS X 10.9.2, iOS 7.1, fftw-3.3.4. It also adds an arm64 slice to the fat file. Here is the script ->

    #!/bin/sh
    
    # build_lipo.sh
    # build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
    # make sure to check that all the paths used in this script exist on your system
    #
    # adopted from:
    # http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
    # changed by Adam
    # original: by Nickun
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    # this is the folder where the results of our efforts will end up:
    export RESULT_DIR=ios-library
    
    # Select toolchains folder
    export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
    # Select the desired iPhone SDK
    export DEVROOT_IOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
    export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS7.1.sdk
    # Select the OSX SDK
    export DEVROOT_OSX=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
    export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX10.9.2.sdk
    
    # ------------------------ i386 ---------------------------
    # Do it for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    export CFLAGS="-arch i386"
    
    # TODO: error checking
    ./configure --enable-float --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
    make -j2
    
    # Copy the FAT native library to a temporary location
    mkdir $RESULT_DIR
    cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_i386.a
    
    # ------------------------ x86_64 ---------------------------
    # Do it all again for x86_64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # TODO: error checking
    ./configure --enable-float
    make -j2
    
    # Copy the FAT native library to the temporary location
    cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_x86_64.a
    
    # ------------------------ armv7---------------------------
    # Do it all again for armv7
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch armv7 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon
    
    make -j2
    
    cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7.a
    
    # Copy the header file too, just for convenience
    cp api/fftw3.h $RESULT_DIR/fftw3.h
    
    # ------------------------ armv7s---------------------------
    # Do it all again for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch armv7s -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon
    
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7s.a
    
    # ------------------------ arm64 ---------------------------
    # Do it all again for arm64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch arm64 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon
    
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/libfftw3f.a ios-library/libfftw3f_arm64.a
    
    
    # Create fat lib by combining the two versions
    lipo -arch armv7 $RESULT_DIR/libfftw3f_armv7.a -arch armv7s $RESULT_DIR/libfftw3f_armv7s.a -arch i386 $RESULT_DIR/libfftw3f_i386.a -arch x86_64 $RESULT_DIR/libfftw3f_x86_64.a -arch arm64 $RESULT_DIR/libfftw3f_arm64.a -create -output $RESULT_DIR/libfftw3f.a
    
    # Remove intermediate binaries
    #rm $RESULT_DIR/libfftw3_armv7.a
    #rm $RESULT_DIR/libfftw3_i386.a
    #rm $RESULT_DIR/libfftw3_x86_64.a
    
    # Unset used environment variables
    unset CPPFLAGS CFLAGS CPP LD LDFLAGS CXX CXXFLAGS
    
    0 讨论(0)
  • 2020-12-09 07:46

    I've adapted previous scripts to

    WORK WITH XCODE7 iOS9.3 MACOSX 10.11 FFTW 3.3.4

    #!/bin/sh
    
    # build_lipo.sh
    # build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
    # make sure to check that all the paths used in this script exist on your system
    #
    # adopted from:
    # http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
    # changed by garlix
    # original: by Nickun
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    ######## EDIT HERE ############
    export iOS_SDK_VERSION=9.3
    export MACOSX_VERSION=10.11
    ###############################
    
    # this is the folder where the results of our efforts will end up:
    export RESULT_DIR=ios-library
    export XCODE_DEV_PATH=`xcode-select -print-path`
    # Select toolchains folder
    export XCODE_TOOLCHAINS=$XCODE_DEV_PATH/Toolchains/XcodeDefault.xctoolchain
    # Select the desired iPhone SDK
    export DEVROOT_IOS=$XCODE_DEV_PATH/Platforms/iPhoneOS.platform/Developer
    export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS$iOS_SDK_VERSION.sdk
    # Select the OSX SDK
    export DEVROOT_OSX=$XCODE_DEV_PATH/Platforms/MacOSX.platform/Developer
    export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX$MACOSX_VERSION.sdk
    
    export LIB_NAME=libfftw3f
    
    # ------------------------ i386 ---------------------------
    # Do it for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    export CFLAGS="-arch i386"
    
    # TODO: error checking
    ./configure --enable-float --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
    make -j2
    
    # Copy the FAT native library to a temporary location
    mkdir -p $RESULT_DIR
    cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_i386.a
    
    # ------------------------ x86_64 ---------------------------
    # Do it all again for x86_64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # TODO: error checking
    ./configure --enable-float
    make -j2
    
    # Copy the FAT native library to the temporary location
    cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_x86_64.a
    
    # ------------------------ armv7---------------------------
    # Do it all again for armv7
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch armv7 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin
    
    make -j2
    
    cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_armv7.a
    
    # Copy the header file too, just for convenience
    cp dft/api/fftw3.h $RESULT_DIR/fftw3.h
    
    # ------------------------ armv7s---------------------------
    # Do it all again for i386
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch armv7s -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_armv7s.a
    
    # ------------------------ arm64 ---------------------------
    # Do it all again for arm64
    make clean
    
    # Restore default environment variables
    unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS
    
    # Set up relevant environment variables
    export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
    export CFLAGS="$CPPFLAGS -arch arm64 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 -mfpu=neon"
    export CXXFLAGS="$CFLAGS"
    
    # TODO: add custom flags as necessary for package
    #  remove '--enable-float' for double precision
    #  and take a 'libfftw3.a' file instead
    ./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin
    
    make -j2
    
    # Copy the ARM library to a temporary location
    cp .libs/$LIB_NAME.a ios-library/$LIB_NAME\_arm64.a
    
    
    # Create fat lib by combining the two versions
    lipo -arch armv7 $RESULT_DIR/$LIB_NAME\_armv7.a -arch armv7s $RESULT_DIR/$LIB_NAME\_armv7s.a -arch i386 $RESULT_DIR/$LIB_NAME\_i386.a -arch x86_64 $RESULT_DIR/$LIB_NAME\_x86_64.a -arch arm64 $RESULT_DIR/$LIB_NAME\_arm64.a -create -output $RESULT_DIR/$LIB_NAME.a
    
    # Remove intermediate binaries
    #rm $RESULT_DIR/libfftw3_armv7.a
    #rm $RESULT_DIR/libfftw3_i386.a
    #rm $RESULT_DIR/libfftw3_x86_64.a
    
    # Unset used environment variables
    unset CPPFLAGS CFLAGS CPP LD LDFLAGS CXX CXXFLAGS
    

    According with @Ninji you have to modify Makefile.am

     34c34
     < libbench2 $(CHICKEN_EGG) tests mpi doc tools m4
     ---
     > libbench2 $(CHICKEN_EGG) mpi doc m4
     95,108c95
     < pkgconfig_DATA = fftw3@PREC_SUFFIX@.pc
     < 
     < WISDOM_DIR = /etc/fftw
     < WISDOM = wisdom@PREC_SUFFIX@
     < 
     < WISDOM_TIME=12 # default to 12-hour limit, i.e. overnight
     < WISDOM_FLAGS=--verbose --canonical --time-limit=$(WISDOM_TIME)
     < 
     < wisdom:
     <   tools/fftw@PREC_SUFFIX@-wisdom -o $@ $(WISDOM_FLAGS)
     < 
     < install-wisdom: wisdom
     <   $(mkinstalldirs) $(WISDOM_DIR)
     <   $(INSTALL_DATA) wisdom $(WISDOM_DIR)/$(WISDOM)
     ---
     > pkgconfig_DATA = fftw3@PREC_SUFFIX@.pc
     \ No newline at end of file
    

    and Makefile.in

    235c235
     <    libbench2 . threads tests mpi doc tools m4
     ---
     >    libbench2 . threads mpi doc m4
     447c447
     < libbench2 $(CHICKEN_EGG) tests mpi doc tools m4
     ---
     > libbench2 $(CHICKEN_EGG) mpi doc m4
     1053,1058d1052
     < wisdom:
     <    tools/fftw@PREC_SUFFIX@-wisdom -o $@ $(WISDOM_FLAGS)
     < 
     < install-wisdom: wisdom
     <    $(mkinstalldirs) $(WISDOM_DIR)
     <    $(INSTALL_DATA) wisdom $(WISDOM_DIR)/$(WISDOM)
    
    0 讨论(0)
  • 2020-12-09 07:52

    Build FFTW3 for iOS:

    Here is a script to create .h and .a files for different iOS architectures (device, simulator, ...)

    Enjoy it!

    #!/bin/sh
    
    # build for iOS / Mac
    # changed by 10mitri
    # original:
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    
    # this is the folder where the libs will be generated
    export OUTPUT_DIR=ios-libs
    
    # Select toolchains folder
    export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
    
    
    #$(CURRENT_ARCH)
    
    build_target()
    {
    PLATFORM=$1
    ARCH=$2
    SDK_VERSION=$3
    CONFIGURE_HOST=$4
    IOS_DEPLOYMENT_TARGET=$5
    
    export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/SDKs/$PLATFORM$SDK_VERSION.sdk
    
    export CPPFLAGS="-I$SDKROOT/usr/include/"
    export CFLAGS="$CPPFLAGS -arch $ARCH -isysroot $SDKROOT"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"
    
    echo ---------------------------------------------------
    echo ---------------------------------------------------
    echo ---------------------------------------------------
    echo -------------- BUILD TARGET
    echo -------------- PLATFORM : $PLATFORM
    echo -------------- ARCH : $ARCH
    echo -------------- SDK_VERSION : $SDK_VERSION
    echo -------------- HOST : $CONFIGURE_HOST
    echo -------------- MIN iOS : $IOS_DEPLOYMENT_TARGET
    echo -------------- SDK PATH : $SDKROOT
    echo ---------------------------------------------------
    echo ---------------------------------------------------
    echo ---------------------------------------------------
    
    sleep 3
    
    make clean
    
    ./configure --host=$CONFIGURE_HOST
    
    make -j4
    
    mkdir $OUTPUT_DIR/$ARCH
    
    # Copy the lib
    cp .libs/libfftw3.a $OUTPUT_DIR/$ARCH/libfftw3.a
    
    unset CPPFLAGS CFLAGS LD CXX CC
    }
    
    
    mkdir $OUTPUT_DIR
    
    rm -rf $OUTPUT_DIR/*
    
    # Copy the header file too, just for convenience
    cp api/fftw3.h $OUTPUT_DIR/fftw3.h
    
    build_target "iPhoneOS" "armv7" "10.2" "arm-apple-darwin" "9.0"
    build_target "iPhoneOS" "armv7s" "10.2" "arm-apple-darwin" "9.0"
    build_target "iPhoneOS" "arm64" "10.2" "arm-apple-darwin" "9.0"
    build_target "iPhoneSimulator" "x86_64" "10.2" "x86_64-apple-darwin" "9.0"
    build_target "iPhoneSimulator" "i386" "10.2" "i386-apple-darwin" "9.0"
    
    #build_target "MacOSX" "x86_64" "10.12" "i386-apple-darwin" "10.10"
    
    0 讨论(0)
提交回复
热议问题