diff --git a/.github/disabled/build-android.yml b/.github/disabled/build-android.yml deleted file mode 100644 index 1245de505..000000000 --- a/.github/disabled/build-android.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: build-android - -on: - push: - paths-ignore: - - '**/README.md' - pull_request: - paths-ignore: - - '**/README.md' - -jobs: - build-android: - runs-on: ubuntu-latest - strategy: - matrix: - cfg: - - {target: android, arch: armv7} - - {target: android, arch: arm64} - - {target: android, arch: x86} - - {target: android, arch: x86_64} - env: - TARGET: ${{ matrix.cfg.target }} - ARCH: ${{ matrix.cfg.arch }} - steps: - - name: Determine Release - id: vars - shell: bash - run: | - if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then - echo "release=nightly" >> $GITHUB_ENV - echo "prerelease=false" >> $GITHUB_ENV - elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then - echo "release=bleeding" >> $GITHUB_ENV - echo "prerelease=true" >> $GITHUB_ENV - fi - - uses: actions/checkout@v2 - - name: Scripts Calc Formula - ${{ matrix.cfg.target }} - ${{ matrix.cfg.arch }} - run: ./scripts/calculate_formulas.sh - - name: Scripts Install - run: ./scripts/$TARGET/install.sh - - name: build - run: ./scripts/build.sh - env: - GA_CI_SECRET: ${{ secrets.CI_SECRET }} - - name: List output directory - run: ls -lah out/ - - name: Package - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: scripts/package.sh - env: - BUNDLE: ${{ matrix.bundle }} - GA_CI_SECRET: ${{ secrets.CI_SECRET }} - - name: Update Release arm64 - if: (github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')) - uses: johnwbyrd/update-release@v1.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - tag: ${{ env.release }} - release: ${{ env.release }} - prerelease: ${{ env.prerelease }} - files: out/openFrameworksLibs_${{ env.release }}_android_${{ matrix.cfg.arch }}.zip diff --git a/.github/workflows/build-emscripten.yml b/.github/disabled/build-emscripten.yml similarity index 100% rename from .github/workflows/build-emscripten.yml rename to .github/disabled/build-emscripten.yml diff --git a/.github/disabled/build-linux-arm.yml b/.github/disabled/build-linux-arm.yml index 2548f45c7..008118f4b 100644 --- a/.github/disabled/build-linux-arm.yml +++ b/.github/disabled/build-linux-arm.yml @@ -42,15 +42,16 @@ jobs: TOOLCHAIN_PREFIX: "aarch64-linux-gnu" steps: - name: Determine Release - id: vars - run: | - if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then - echo "::set-output name=tag::nightly" - echo "::set-output name=release::nightly" - elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then - echo "::set-output name=tag::bleeding" - echo "::set-output name=release::bleeding" - fi + id: vars + shell: bash + run: | + if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then + echo "release=nightly" >> $GITHUB_ENV + echo "prerelease=false" >> $GITHUB_ENV + elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then + echo "release=bleeding" >> $GITHUB_ENV + echo "prerelease=true" >> $GITHUB_ENV + fi - uses: actions/checkout@v4 - name: Scripts Calc Formula run: ./scripts/calculate_formulas.sh diff --git a/.github/disabled/build-linux64.yml b/.github/disabled/build-linux64.yml index f2757e3e5..d84d17037 100644 --- a/.github/disabled/build-linux64.yml +++ b/.github/disabled/build-linux64.yml @@ -14,35 +14,36 @@ jobs: strategy: matrix: cfg: - - {target: linux, opt: gcc6} + - {target: linux64, opt: gcc6} env: TARGET: ${{matrix.cfg.target}} OPT: ${{matrix.cfg.opt}} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4.1.1 - name: Scripts Calc Formula - ${{matrix.cfg.target}} - ${{matrix.cfg.opt}} run: ./scripts/calculate_formulas.sh - name: Scripts Install run: ./scripts/$TARGET/install.sh - name: Determine Release - id: vars - shell: bash - run: | - if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then - echo "release=nightly" >> $GITHUB_ENV - echo "prerelease=false" >> $GITHUB_ENV - elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then - echo "release=bleeding" >> $GITHUB_ENV - echo "prerelease=true" >> $GITHUB_ENV - fi + id: vars + shell: bash + run: | + if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then + echo "release=nightly" >> $GITHUB_ENV + echo "prerelease=false" >> $GITHUB_ENV + elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then + echo "release=bleeding" >> $GITHUB_ENV + echo "prerelease=true" >> $GITHUB_ENV + fi - name: build run: ./scripts/build.sh env: GA_CI_SECRET: ${{ secrets.CI_SECRET }} - - name: Package + - name: Package working-directory: ${{ env.GITHUB_WORKSPACE }} run: scripts/package.sh env: + TARGET: "linux64" BUNDLE: ${{ matrix.bundle }} GA_CI_SECRET: ${{ secrets.CI_SECRET }} - name: Update Release diff --git a/apothecary/aarch64-linux-gnu.toolchain.cmake b/apothecary/aarch64-linux-gnu.toolchain.cmake deleted file mode 100644 index 43f938b17..000000000 --- a/apothecary/aarch64-linux-gnu.toolchain.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# -# CMake Toolchain file for crosscompiling on ARM. -# -# Target operating system name. -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR aarch64) - -# Name of C compiler. -set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc-8") -set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++-8") - -# Where to look for the target environment. (More paths can be added here) -set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) -#set(CMAKE_SYSROOT /usr/aarch64-linux-gnu) - -# Adjust the default behavior of the FIND_XXX() commands: -# search programs in the host environment only. -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - -set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64) \ No newline at end of file diff --git a/apothecary/android_configure.sh b/apothecary/android_configure.sh index e1614dcac..062bb5498 100755 --- a/apothecary/android_configure.sh +++ b/apothecary/android_configure.sh @@ -139,17 +139,17 @@ if [ "$ABI" = "armeabi-v7a" ]; then export CFLAGS="$CFLAGS $MAKE_TARGET " export CPPFLAGS="$CPPFLAGS $MAKE_TARGET " #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/arm-linux-androideabi" - export LDFLAGS="$LDFLAGS $MAKE_TARGET -march=armv7-a -mfloat-abi=softfp -Wl,--fix-cortex-a8 -Wl,--no-undefined" + export LDFLAGS="$LDFLAGS $MAKE_TARGET -Wl,--fix-cortex-a8 -Wl,--no-undefined" elif [ $ABI = "arm64-v8a" ]; then export CFLAGS="$CFLAGS $MAKE_TARGET " export CPPFLAGS="$CPPFLAGS $MAKE_TARGET" #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/aarch64-linux-android" # for ASM includes - export LDFLAGS="$LDFLAGS" + export LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8 -Wl,--no-undefined" elif [ "$ABI" = "x86-64" ]; then export CFLAGS="$CFLAGS $MAKE_TARGET" export CPPFLAGS="$CPPFLAGS $MAKE_TARGET " #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/x86_64-linux-android" # for ASM includes - export LDFLAGS="$LDFLAGS $MAKE_TARGET -Wl,--fix-cortex-a8 -shared -Wl,--no-undefined" + export LDFLAGS="$LDFLAGS $MAKE_TARGET -Wl,--fix-cortex-a8 -Wl,--no-undefined" elif [ "$ABI" = "x86" ]; then export CFLAGS="$CFLAGS $MAKE_TARGET" #march=i686 -target i686-linux-android export CPPFLAGS="$CPPFLAGS $MAKE_TARGET" # -target i686-none-linux-android diff --git a/apothecary/formulas/FreeImage/FreeImage.sh b/apothecary/formulas/FreeImage/FreeImage.sh index 8249afb9d..d3df1254b 100644 --- a/apothecary/formulas/FreeImage/FreeImage.sh +++ b/apothecary/formulas/FreeImage/FreeImage.sh @@ -101,7 +101,7 @@ function build() { -DENABLE_ARC=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ -DENABLE_VISIBILITY=OFF \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake " cmake .. ${DEFS} \ -DCMAKE_C_STANDARD=17 \ @@ -175,6 +175,7 @@ function build() { -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=17 \ -DCMAKE_CXX_STANDARD=17 \ diff --git a/apothecary/formulas/_depends/pixman.sh b/apothecary/formulas/_depends/pixman.sh index 56b0f10a7..11ab0c287 100644 --- a/apothecary/formulas/_depends/pixman.sh +++ b/apothecary/formulas/_depends/pixman.sh @@ -69,7 +69,7 @@ function build() { -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=lib \ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=bin \ -D CMAKE_VERBOSE_MAKEFILE=OFF \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/_depends/zlib.sh b/apothecary/formulas/_depends/zlib.sh index 064fbfdb0..f636233c8 100644 --- a/apothecary/formulas/_depends/zlib.sh +++ b/apothecary/formulas/_depends/zlib.sh @@ -75,7 +75,7 @@ function build() { -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_CXX_FLAGS_RELEASE="-DUSE_PTHREADS=1 ${FLAG_RELEASE} " \ -DCMAKE_C_FLAGS_RELEASE="-DUSE_PTHREADS=1 ${FLAG_RELEASE} " \ diff --git a/apothecary/formulas/assimp.sh b/apothecary/formulas/assimp.sh index 72e0afeb9..f1d1dd0a2 100644 --- a/apothecary/formulas/assimp.sh +++ b/apothecary/formulas/assimp.sh @@ -76,7 +76,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -186,6 +186,7 @@ function build() { -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=$ABI + -DCMAKE_ANDROID_ARCH_ABI=$ABI -DANDROID_STL=c++_static -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM -DANDROID_FORCE_ARM_BUILD=TRUE @@ -203,6 +204,7 @@ function build() { -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=$ABI + -DCMAKE_ANDROID_ARCH_ABI=$ABI -DANDROID_STL=c++_static -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM -DANDROID_FORCE_ARM_BUILD=TRUE @@ -219,6 +221,7 @@ function build() { -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=$ABI + -DCMAKE_ANDROID_ARCH_ABI=$ABI -DANDROID_STL=c++_static -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM -DCMAKE_INSTALL_PREFIX=install" @@ -234,6 +237,7 @@ function build() { -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=$ABI + -DCMAKE_ANDROID_ARCH_ABI=$ABI -DANDROID_STL=c++_static -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM -DCMAKE_INSTALL_PREFIX=install" @@ -287,6 +291,7 @@ function build() { -DANDROID_NDK=$NDK_ROOT \ -DCMAKE_BUILD_TYPE=Release \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DANDROID_PLATFORM=$ANDROID_PLATFORM \ -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM \ diff --git a/apothecary/formulas/cairo/cairo.sh b/apothecary/formulas/cairo/cairo.sh index 5ed258d2a..1c0985956 100644 --- a/apothecary/formulas/cairo/cairo.sh +++ b/apothecary/formulas/cairo/cairo.sh @@ -238,7 +238,7 @@ function build() { -DBUILD_GTK_DOC=OFF -DNO_BUILD_TESTS=ON -DNO_DEPENDENCY_TRACKING=ON -DBUILD_XLIB=OFF -DNO_QT=ON -DBUILD_SHARED_LIBS=OFF -DNO_QUARTZ_FONT=OFF -DNO_QUARTZ=OFF -DNO_QUARTZ_IMAGE=OFF" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/curl/curl.sh b/apothecary/formulas/curl/curl.sh index 39b05db9a..04a591c64 100644 --- a/apothecary/formulas/curl/curl.sh +++ b/apothecary/formulas/curl/curl.sh @@ -244,7 +244,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -291,7 +291,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/fmt/CMakeLists.txt b/apothecary/formulas/fmt/CMakeLists.txt new file mode 100644 index 000000000..a37749d4c --- /dev/null +++ b/apothecary/formulas/fmt/CMakeLists.txt @@ -0,0 +1,470 @@ +cmake_minimum_required(VERSION 3.8...3.26) + +# Fallback for using newer policies on CMake <3.12. +if (${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif () + +# Determine if fmt is built as a subproject (using add_subdirectory) +# or if it is the master project. +if (NOT DEFINED FMT_MASTER_PROJECT) + set(FMT_MASTER_PROJECT OFF) + if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(FMT_MASTER_PROJECT ON) + message(STATUS "CMake version: ${CMAKE_VERSION}") + endif () +endif () + +# Joins arguments and places the results in ${result_var}. +function(join result_var) + set(result "") + foreach (arg ${ARGN}) + set(result "${result}${arg}") + endforeach () + set(${result_var} "${result}" PARENT_SCOPE) +endfunction() + +# DEPRECATED! Should be merged into add_module_library. +function(enable_module target) + if (MSVC) + set(BMI ${CMAKE_CURRENT_BINARY_DIR}/${target}.ifc) + target_compile_options(${target} + PRIVATE /interface /ifcOutput ${BMI} + INTERFACE /reference fmt=${BMI}) + set_target_properties(${target} PROPERTIES ADDITIONAL_CLEAN_FILES ${BMI}) + set_source_files_properties(${BMI} PROPERTIES GENERATED ON) + endif () +endfunction() + +# Adds a library compiled with C++20 module support. +# `enabled` is a CMake variables that specifies if modules are enabled. +# If modules are disabled `add_module_library` falls back to creating a +# non-modular library. +# +# Usage: +# add_module_library( [sources...] FALLBACK [sources...] [IF enabled]) +function(add_module_library name) + cmake_parse_arguments(AML "" "IF" "FALLBACK" ${ARGN}) + set(sources ${AML_UNPARSED_ARGUMENTS}) + + add_library(${name}) + set_target_properties(${name} PROPERTIES LINKER_LANGUAGE CXX) + + if (NOT ${${AML_IF}}) + # Create a non-modular library. + target_sources(${name} PRIVATE ${AML_FALLBACK}) + return() + endif () + + # Modules require C++20. + target_compile_features(${name} PUBLIC cxx_std_20) + if (CMAKE_COMPILER_IS_GNUCXX) + target_compile_options(${name} PUBLIC -fmodules-ts) + endif () + + # `std` is affected by CMake options and may be higher than C++20. + get_target_property(std ${name} CXX_STANDARD) + + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(pcms) + foreach (src ${sources}) + get_filename_component(pcm ${src} NAME_WE) + set(pcm ${pcm}.pcm) + + # Propagate -fmodule-file=*.pcm to targets that link with this library. + target_compile_options( + ${name} PUBLIC -fmodule-file=${CMAKE_CURRENT_BINARY_DIR}/${pcm}) + + # Use an absolute path to prevent target_link_libraries prepending -l + # to it. + set(pcms ${pcms} ${CMAKE_CURRENT_BINARY_DIR}/${pcm}) + add_custom_command( + OUTPUT ${pcm} + COMMAND ${CMAKE_CXX_COMPILER} + -std=c++${std} -x c++-module --precompile -c + -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src} + "-I$,;-I>" + # Required by the -I generator expression above. + COMMAND_EXPAND_LISTS + DEPENDS ${src}) + endforeach () + + # Add .pcm files as sources to make sure they are built before the library. + set(sources) + foreach (pcm ${pcms}) + get_filename_component(pcm_we ${pcm} NAME_WE) + set(obj ${pcm_we}.o) + # Use an absolute path to prevent target_link_libraries prepending -l. + set(sources ${sources} ${pcm} ${CMAKE_CURRENT_BINARY_DIR}/${obj}) + add_custom_command( + OUTPUT ${obj} + COMMAND ${CMAKE_CXX_COMPILER} $ + -c -o ${obj} ${pcm} + DEPENDS ${pcm}) + endforeach () + endif () + target_sources(${name} PRIVATE ${sources}) +endfunction() + +include(CMakeParseArguments) + +# Sets a cache variable with a docstring joined from multiple arguments: +# set( ... CACHE ...) +# This allows splitting a long docstring for readability. +function(set_verbose) + # cmake_parse_arguments is broken in CMake 3.4 (cannot parse CACHE) so use + # list instead. + list(GET ARGN 0 var) + list(REMOVE_AT ARGN 0) + list(GET ARGN 0 val) + list(REMOVE_AT ARGN 0) + list(REMOVE_AT ARGN 0) + list(GET ARGN 0 type) + list(REMOVE_AT ARGN 0) + join(doc ${ARGN}) + set(${var} ${val} CACHE ${type} ${doc}) +endfunction() + +# Set the default CMAKE_BUILD_TYPE to Release. +# This should be done before the project command since the latter can set +# CMAKE_BUILD_TYPE itself (it does so for nmake). +if (FMT_MASTER_PROJECT AND NOT CMAKE_BUILD_TYPE) + set_verbose(CMAKE_BUILD_TYPE Release CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or " + "CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") +endif () + +project(FMT CXX) +include(GNUInstallDirs) +set_verbose(FMT_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING + "Installation directory for include files, a relative path that " + "will be joined with ${CMAKE_INSTALL_PREFIX} or an absolute path.") + +option(FMT_PEDANTIC "Enable extra warnings and expensive tests." OFF) +option(FMT_WERROR "Halt the compilation with an error on compiler warnings." + OFF) + +# Options that control generation of various targets. +option(FMT_DOC "Generate the doc target." ${FMT_MASTER_PROJECT}) +option(FMT_INSTALL "Generate the install target." ON) +option(FMT_TEST "Generate the test target." ${FMT_MASTER_PROJECT}) +option(FMT_FUZZ "Generate the fuzz target." OFF) +option(FMT_CUDA_TEST "Generate the cuda-test target." OFF) +option(FMT_OS "Include core requiring OS (Windows/Posix) " ON) +option(FMT_MODULE "Build a module instead of a traditional library." OFF) +option(FMT_SYSTEM_HEADERS "Expose headers with marking them as system." OFF) + +if (FMT_TEST AND FMT_MODULE) + # The tests require {fmt} to be compiled as traditional library + message(STATUS "Testing is incompatible with build mode 'module'.") +endif () +set(FMT_SYSTEM_HEADERS_ATTRIBUTE "") +if (FMT_SYSTEM_HEADERS) + set(FMT_SYSTEM_HEADERS_ATTRIBUTE SYSTEM) +endif () +if (CMAKE_SYSTEM_NAME STREQUAL "MSDOS") + set(FMT_TEST OFF) + message(STATUS "MSDOS is incompatible with gtest") +endif () + +# Get version from core.h +file(READ include/fmt/core.h core_h) +if (NOT core_h MATCHES "FMT_VERSION ([0-9]+)([0-9][0-9])([0-9][0-9])") + message(FATAL_ERROR "Cannot get FMT_VERSION from core.h.") +endif () +# Use math to skip leading zeros if any. +math(EXPR CPACK_PACKAGE_VERSION_MAJOR ${CMAKE_MATCH_1}) +math(EXPR CPACK_PACKAGE_VERSION_MINOR ${CMAKE_MATCH_2}) +math(EXPR CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_3}) +join(FMT_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}. + ${CPACK_PACKAGE_VERSION_PATCH}) +message(STATUS "Version: ${FMT_VERSION}") + +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") + +if (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +endif () + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/support/cmake") + +include(CheckCXXCompilerFlag) +include(JoinPaths) + +if (FMT_MASTER_PROJECT AND NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET) + set_verbose(CMAKE_CXX_VISIBILITY_PRESET hidden CACHE STRING + "Preset for the export of private symbols") + set_property(CACHE CMAKE_CXX_VISIBILITY_PRESET PROPERTY STRINGS + hidden default) +endif () + +if (FMT_MASTER_PROJECT AND NOT DEFINED CMAKE_VISIBILITY_INLINES_HIDDEN) + set_verbose(CMAKE_VISIBILITY_INLINES_HIDDEN ON CACHE BOOL + "Whether to add a compile flag to hide symbols of inline functions") +endif () + +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") + set(PEDANTIC_COMPILE_FLAGS -pedantic-errors -Wall -Wextra -pedantic + -Wold-style-cast -Wundef + -Wredundant-decls -Wwrite-strings -Wpointer-arith + -Wcast-qual -Wformat=2 -Wmissing-include-dirs + -Wcast-align + -Wctor-dtor-privacy -Wdisabled-optimization + -Winvalid-pch -Woverloaded-virtual + -Wconversion -Wundef + -Wno-ctor-dtor-privacy -Wno-format-nonliteral) + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6) + set(PEDANTIC_COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS} + -Wno-dangling-else -Wno-unused-local-typedefs) + endif () + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) + set(PEDANTIC_COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS} -Wdouble-promotion + -Wtrampolines -Wzero-as-null-pointer-constant -Wuseless-cast + -Wvector-operation-performance -Wsized-deallocation -Wshadow) + endif () + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0) + set(PEDANTIC_COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS} -Wshift-overflow=2 + -Wnull-dereference -Wduplicated-cond) + endif () + set(WERROR_FLAG -Werror) +endif () + +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(PEDANTIC_COMPILE_FLAGS -Wall -Wextra -pedantic -Wconversion -Wundef + -Wdeprecated -Wweak-vtables -Wshadow + -Wno-gnu-zero-variadic-macro-arguments) + check_cxx_compiler_flag(-Wzero-as-null-pointer-constant HAS_NULLPTR_WARNING) + if (HAS_NULLPTR_WARNING) + set(PEDANTIC_COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS} + -Wzero-as-null-pointer-constant) + endif () + set(WERROR_FLAG -Werror) +endif () + +if (MSVC) + set(PEDANTIC_COMPILE_FLAGS /W3) + set(WERROR_FLAG /WX) +endif () + +if (FMT_MASTER_PROJECT AND CMAKE_GENERATOR MATCHES "Visual Studio") + # If Microsoft SDK is installed create script run-msbuild.bat that + # calls SetEnv.cmd to set up build environment and runs msbuild. + # It is useful when building Visual Studio projects with the SDK + # toolchain rather than Visual Studio. + include(FindSetEnv) + if (WINSDK_SETENV) + set(MSBUILD_SETUP "call \"${WINSDK_SETENV}\"") + endif () + # Set FrameworkPathOverride to get rid of MSB3644 warnings. + join(netfxpath + "C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\" + ".NETFramework\\v4.0") + file(WRITE run-msbuild.bat " + ${MSBUILD_SETUP} + ${CMAKE_MAKE_PROGRAM} -p:FrameworkPathOverride=\"${netfxpath}\" %*") +endif () + +function(add_headers VAR) + set(headers ${${VAR}}) + foreach (header ${ARGN}) + set(headers ${headers} include/fmt/${header}) + endforeach() + set(${VAR} ${headers} PARENT_SCOPE) +endfunction() + +# Define the fmt library, its includes and the needed defines. +add_headers(FMT_HEADERS args.h chrono.h color.h compile.h core.h format.h + format-inl.h os.h ostream.h printf.h ranges.h std.h + xchar.h) +set(FMT_SOURCES src/format.cc) +if (FMT_OS) + set(FMT_SOURCES ${FMT_SOURCES} src/os.cc) +endif () + +add_module_library(fmt src/fmt.cc FALLBACK + ${FMT_SOURCES} ${FMT_HEADERS} README.md ChangeLog.md + IF FMT_MODULE) +add_library(fmt::fmt ALIAS fmt) +if (FMT_MODULE) + enable_module(fmt) +endif () + +if (FMT_WERROR) + target_compile_options(fmt PRIVATE ${WERROR_FLAG}) +endif () +if (FMT_PEDANTIC) + target_compile_options(fmt PRIVATE ${PEDANTIC_COMPILE_FLAGS}) +endif () + +if (cxx_std_11 IN_LIST CMAKE_CXX_COMPILE_FEATURES) + target_compile_features(fmt PUBLIC cxx_std_11) +else () + message(WARNING "Feature cxx_std_11 is unknown for the CXX compiler") +endif () + +target_include_directories(fmt ${FMT_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC + $ + $) + +set(FMT_DEBUG_POSTFIX d CACHE STRING "Debug library postfix.") + +set_target_properties(fmt PROPERTIES + VERSION ${FMT_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR} + PUBLIC_HEADER "${FMT_HEADERS}" + DEBUG_POSTFIX "${FMT_DEBUG_POSTFIX}" + + # Workaround for Visual Studio 2017: + # Ensure the .pdb is created with the same name and in the same directory + # as the .lib. Newer VS versions already do this by default, but there is no + # harm in setting it for those too. Ignored by other generators. + COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" + COMPILE_PDB_NAME "fmt" + COMPILE_PDB_NAME_DEBUG "fmt${FMT_DEBUG_POSTFIX}") + +# Set FMT_LIB_NAME for pkg-config fmt.pc. We cannot use the OUTPUT_NAME target +# property because it's not set by default. +set(FMT_LIB_NAME fmt) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(FMT_LIB_NAME ${FMT_LIB_NAME}${FMT_DEBUG_POSTFIX}) +endif () + +if (BUILD_SHARED_LIBS) + target_compile_definitions(fmt PRIVATE FMT_LIB_EXPORT INTERFACE FMT_SHARED) +endif () +if (FMT_SAFE_DURATION_CAST) + target_compile_definitions(fmt PUBLIC FMT_SAFE_DURATION_CAST) +endif () + +add_library(fmt-header-only INTERFACE) +add_library(fmt::fmt-header-only ALIAS fmt-header-only) + +target_compile_definitions(fmt-header-only INTERFACE FMT_HEADER_ONLY=1) +target_compile_features(fmt-header-only INTERFACE cxx_std_11) + +target_include_directories(fmt-header-only + ${FMT_SYSTEM_HEADERS_ATTRIBUTE} INTERFACE + $ + $) + +# Install targets. +if (FMT_INSTALL) + include(CMakePackageConfigHelpers) + set_verbose(FMT_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/fmt CACHE STRING + "Installation directory for cmake files, a relative path that " + "will be joined with ${CMAKE_INSTALL_PREFIX} or an absolute " + "path.") + set(version_config ${PROJECT_BINARY_DIR}/fmt-config-version.cmake) + set(project_config ${PROJECT_BINARY_DIR}/fmt-config.cmake) + set(pkgconfig ${PROJECT_BINARY_DIR}/fmt.pc) + set(targets_export_name fmt-targets) + + set_verbose(FMT_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING + "Installation directory for libraries, a relative path that " + "will be joined to ${CMAKE_INSTALL_PREFIX} or an absolute path.") + + set_verbose(FMT_PKGCONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/pkgconfig CACHE STRING + "Installation directory for pkgconfig (.pc) files, a relative " + "path that will be joined with ${CMAKE_INSTALL_PREFIX} or an " + "absolute path.") + + # Generate the version, config and target files into the build directory. + write_basic_package_version_file( + ${version_config} + VERSION ${FMT_VERSION} + COMPATIBILITY AnyNewerVersion) + + join_paths(libdir_for_pc_file "\${exec_prefix}" "${FMT_LIB_DIR}") + join_paths(includedir_for_pc_file "\${prefix}" "${FMT_INC_DIR}") + + configure_file( + "${PROJECT_SOURCE_DIR}/support/cmake/fmt.pc.in" + "${pkgconfig}" + @ONLY) + configure_package_config_file( + ${PROJECT_SOURCE_DIR}/support/cmake/fmt-config.cmake.in + ${project_config} + INSTALL_DESTINATION ${FMT_CMAKE_DIR}) + + set(INSTALL_TARGETS fmt fmt-header-only) + + # Install the library and headers. + install(TARGETS ${INSTALL_TARGETS} EXPORT ${targets_export_name} + LIBRARY DESTINATION ${FMT_LIB_DIR} + ARCHIVE DESTINATION ${FMT_LIB_DIR} + PUBLIC_HEADER DESTINATION "${FMT_INC_DIR}/fmt" + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + # Use a namespace because CMake provides better diagnostics for namespaced + # imported targets. + export(TARGETS ${INSTALL_TARGETS} NAMESPACE fmt:: + FILE ${PROJECT_BINARY_DIR}/${targets_export_name}.cmake) + + # Install version, config and target files. + install( + FILES ${project_config} ${version_config} + DESTINATION ${FMT_CMAKE_DIR}) + install(EXPORT ${targets_export_name} DESTINATION ${FMT_CMAKE_DIR} + NAMESPACE fmt::) + + install(FILES "${pkgconfig}" DESTINATION "${FMT_PKGCONFIG_DIR}") +endif () + +if (FMT_DOC) + add_subdirectory(doc) +endif () + +if (FMT_TEST) + enable_testing() + add_subdirectory(test) +endif () + +if(EMSCRIPTEN) + set(FMT_WASM_SOURCES + ${FMT_SOURCES} + ${FMT_HEADERS} + ) + add_executable(fmt_wasm + ${FMT_WASM_SOURCES} + ) + target_include_directories(fmt_wasm PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) + set_target_properties(fmt_wasm PROPERTIES COMPILE_FLAGS "-Os -s SIDE_MODULE=1 ") + set_target_properties(fmt_wasm PROPERTIES LINK_FLAGS "-Os -s WASM=1 -s SIDE_MODULE=1 -s STANDALONE_WASM --no-entry") + set(CMAKE_EXECUTABLE_SUFFIX ".wasm") + +endif() + +# Control fuzzing independent of the unit tests. +if (FMT_FUZZ) + add_subdirectory(test/fuzzing) + + # The FMT_FUZZ macro is used to prevent resource exhaustion in fuzzing + # mode and make fuzzing practically possible. It is similar to + # FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION but uses a different name to + # avoid interfering with fuzzing of projects that use {fmt}. + # See also https://llvm.org/docs/LibFuzzer.html#fuzzer-friendly-build-mode. + target_compile_definitions(fmt PUBLIC FMT_FUZZ) +endif () + +set(gitignore ${PROJECT_SOURCE_DIR}/.gitignore) +if (FMT_MASTER_PROJECT AND EXISTS ${gitignore}) + # Get the list of ignored files from .gitignore. + file (STRINGS ${gitignore} lines) + list(REMOVE_ITEM lines /doc/html) + foreach (line ${lines}) + string(REPLACE "." "[.]" line "${line}") + string(REPLACE "*" ".*" line "${line}") + set(ignored_files ${ignored_files} "${line}$" "${line}/") + endforeach () + set(ignored_files ${ignored_files} + /.git /breathe /format-benchmark sphinx/ .buildinfo .doctrees) + + set(CPACK_SOURCE_GENERATOR ZIP) + set(CPACK_SOURCE_IGNORE_FILES ${ignored_files}) + set(CPACK_SOURCE_PACKAGE_FILE_NAME fmt-${FMT_VERSION}) + set(CPACK_PACKAGE_NAME fmt) + set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md) + include(CPack) +endif () diff --git a/apothecary/formulas/fmt/fmt.sh b/apothecary/formulas/fmt/fmt.sh new file mode 100644 index 000000000..25839ec89 --- /dev/null +++ b/apothecary/formulas/fmt/fmt.sh @@ -0,0 +1,286 @@ +#!/usr/bin/env bash +# +# {fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams. +# https://github.com/fmtlib/fmt + +# define the version +VER=10.2.1 + +# tools for git use +GIT_URL=https://github.com/fmtlib/fmt +URL=${GIT_URL}/archive/refs/tags/${VER} + +SHA= + +FORMULA_TYPES=( "osx" "vs" "ios" "watchos" "catos" "xros" "tvos" "android" "emscripten" "linux64" "msys2" "linuxaarch64" ) + +FORMULA_DEPENDS=( ) + + +# download the source code and unpack it into LIB_NAME +function download() { + . "$DOWNLOADER_SCRIPT" + + if [ "$TYPE" == "vs" ] ; then + downloader "${URL}.zip" + unzip -q "${VER}.zip" + mv "fmt-${VER}" fmt + rm "${VER}.zip" + else + downloader "${URL}.tar.gz" + tar -xf "${VER}.tar.gz" + mv "fmt-${VER}" fmt + rm "${VER}.tar.gz" + fi + + cp -Rv $FORMULA_DIR/ ./ + + +} + +# prepare the build environment, executed inside the lib src dir +function prepare() { + + echoVerbose "prepare" + # . "$DOWNLOADER_SCRIPT" + # downloader "$CMAKE_URL" + +} + +# executed inside the lib src dir +function build() { + LIBS_ROOT=$(realpath $LIBS_DIR) + + DEFS=" + -DCMAKE_C_STANDARD=17 \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_PREFIX_PATH=${LIBS_ROOT} \ + -DBUILD_SHARED_LIBS=OFF \ + -DFMT_MASTER_PROJECT=OFF \ + -DFMT_MODULE=OFF \ + -DFMT_SYSTEM_HEADERS=OFF \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include" + + if [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then + mkdir -p "build_${TYPE}_${PLATFORM}" + cd "build_${TYPE}_${PLATFORM}" + rm -f CMakeCache.txt *.a *.o + cmake .. ${DEFS} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ + -DENABLE_BITCODE=OFF \ + -DENABLE_ARC=OFF \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + cmake --build . --config Release --target install + cd .. + elif [ "$TYPE" == "vs" ] ; then + echoVerbose "building $TYPE | $ARCH | $VS_VER | vs: $VS_VER_GEN" + echoVerbose "--------------------" + GENERATOR_NAME="Visual Studio ${VS_VER_GEN}" + + mkdir -p "build_${TYPE}_${ARCH}" + cd "build_${TYPE}_${ARCH}" + rm -f CMakeCache.txt *.lib *.o + + env CXXFLAGS="-DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${CALLING_CONVENTION}" + env CFLAGS="-DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${CALLING_CONVENTION}" + cmake .. ${DEFS} \ + -B . \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE=Release \ + -A "${PLATFORM}" \ + -G "${GENERATOR_NAME}" \ + ${CMAKE_WIN_SDK} \ + -UCMAKE_CXX_FLAGS \ + -UCMAKE_C_FLAGS \ + -DCMAKE_CXX_FLAGS_RELEASE="-DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${EXCEPTION_FLAGS}" \ + -DCMAKE_C_FLAGS_RELEASE="-DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${EXCEPTION_FLAGS}" \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -D BUILD_SHARED_LIBS=OFF + + cmake --build . --config Release --target install + + cd .. + + elif [ "$TYPE" == "android" ] ; then + + source $APOTHECARY_DIR/android_configure.sh $ABI cmake + + mkdir -p "build_${TYPE}_${ABI}" + cd "build_${TYPE}_${ABI}" + rm -f CMakeCache.txt *.a *.o + cmake .. ${DEFS} \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 " \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1" \ + -DCMAKE_C_COMPILER=${CC} \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE=Release \ + -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ + -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ + -D CMAKE_CXX_COMPILER_AR=${AR} \ + -D CMAKE_C_COMPILER_AR=${AR} \ + -D CMAKE_C_COMPILER=${CC} \ + -D CMAKE_CXX_COMPILER=${CXX} \ + -D CMAKE_C_FLAGS=${CFLAGS} \ + -D CMAKE_CXX_FLAGS=${CXXFLAGS} \ + -D ANDROID_ABI=${ABI} \ + -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ + -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ + -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ + -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ + -D ANDROID_TOOLCHAIN=clang \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + cmake --build . --config Release --target install + cd .. + elif [ "$TYPE" == "linux64" ] || [ "$TYPE" == "msys2" ]; then + mkdir -p build_$TYPE + cd build_$TYPE + rm -f CMakeCache.txt *.a *.o + cmake .. \ + ${DEFS} \ + -DCMAKE_SYSTEM_NAME=$TYPE \ + -DCMAKE_SYSTEM_PROCESSOR=$ABI \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -std=c++17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -std=c17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + cmake --build . --target install --config Release + cd .. + elif [ "$TYPE" == "linuxaarch64" ]; then + source ../../${TYPE}_configure.sh + mkdir -p build_$TYPE + cd build_$TYPE + rm -f CMakeCache.txt *.a *.o + cmake .. \ + ${DEFS} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/aarch64-linux-gnu.toolchain.cmake \ + -DCMAKE_SYSTEM_NAME=$TYPE \ + -DCMAKE_SYSTEM_PROCESSOR=$ABI \ + -DCMAKE_C_STANDARD=17 \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -std=c++17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -std=c17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + cmake --build . --target install --config Release + cd .. + elif [ "$TYPE" == "emscripten" ]; then + mkdir -p build_$TYPE + cd build_$TYPE + $EMSDK/upstream/emscripten/emcmake cmake .. \ + ${DEFS} \ + -DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ + -DCMAKE_C_STANDARD=17 \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -std=c++17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -std=c17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE=. \ + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=. \ + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=. + cmake --build . --target install --config Release + cd .. + fi + + +} + +# executed inside the lib src dir, first arg $1 is the dest libs dir root +function copy() { + mkdir -p $1/include + if [ "$TYPE" == "vs" ] ; then + mkdir -p $1/lib/$TYPE/$PLATFORM/ + mkdir -p $1/include + cp -v "build_${TYPE}_${ARCH}/Release/lib/fmt.lib" $1/lib/$TYPE/$PLATFORM/fmt.lib + cp -RT "build_${TYPE}_${ARCH}/Release/include/" $1/include + elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then + mkdir -p $1/lib/$TYPE/$PLATFORM/ + mkdir -p $1/include + cp -v "build_${TYPE}_${PLATFORM}/Release/lib/libfmt.a" $1/lib/$TYPE/$PLATFORM/libfmt.a + cp -R "build_${TYPE}_${PLATFORM}/Release/include/" $1/include + elif [ "$TYPE" == "android" ] ; then + mkdir -p $1/lib/$TYPE/$ABI/ + mkdir -p $1/include + cp -v "build_${TYPE}_${ABI}/Release/lib/libfmt.lib" $1/lib/$TYPE/$ABI/libfmt.a + cp -R "build_${TYPE}_${ABI}/Release/include/" $1/include + elif [ "$TYPE" == "emscripten" ] ; then + mkdir -p $1/lib/$TYPE/ + mkdir -p $1/include + cp -v "build_${TYPE}/bin/fmt_wasm.wasm" $1/lib/$TYPE/libfmt.wasm + cp -R "build_${TYPE}/Release/include/" $1/include + else + mkdir -p $1/include + mkdir -p $1/lib/$TYPE/$PLATFORM/ + cp -v "build_${TYPE}_${PLATFORM}/Release/bin/.a" $1/lib/$TYPE/$PLATFORM/libfmt.a + cp -R "build_${TYPE}_${PLATFORM}/Release/include/" $1/include + fi + + # copy license file + if [ -d "$1/license" ]; then + rm -rf $1/license + fi + mkdir -p $1/license + cp -v LICENSE $1/license/ +} + +# executed inside the lib src dir +function clean() { + if [ "$TYPE" == "vs" ] ; then + if [ -d "build_${TYPE}_${ARCH}" ]; then + rm -r build_${TYPE}_${ARCH} + fi + elif [ "$TYPE" == "android" ] ; then + if [ -d "build_${TYPE}_${ABI}" ]; then + rm -r build_${TYPE}_${ABI} + fi + elif [ "$TYPE" == "emscripten" ] ; then + if [ -d "build_${TYPE}" ]; then + rm -r build_${TYPE} + fi + elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then + if [ -d "build_${TYPE}_${PLATFORM}" ]; then + rm -r build_${TYPE}_${PLATFORM} + fi + else + echoVerbose "clean not setup for $TYPE" + fi +} + +function save() { + . "$SAVE_SCRIPT" + savestatus ${TYPE} "fmt" ${ARCH} ${VER} true "${SAVE_FILE}" +} + +function load() { + . "$LOAD_SCRIPT" + if loadsave ${TYPE} "fmt" ${ARCH} ${VER} "${SAVE_FILE}"; then + return 0; + else + return 1; + fi +} diff --git a/apothecary/formulas/freetype/freetype.sh b/apothecary/formulas/freetype/freetype.sh index b0c3a3740..3cdc000e0 100644 --- a/apothecary/formulas/freetype/freetype.sh +++ b/apothecary/formulas/freetype/freetype.sh @@ -89,7 +89,7 @@ function build() { -DCMAKE_INSTALL_INCLUDEDIR=include" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -234,7 +234,7 @@ function build() { -DCMAKE_INSTALL_INCLUDEDIR=include" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -282,6 +282,7 @@ function build() { -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=17 \ -DCMAKE_CXX_STANDARD=17 \ diff --git a/apothecary/formulas/glew.sh b/apothecary/formulas/glew.sh index 133bd3e7f..1f419befd 100644 --- a/apothecary/formulas/glew.sh +++ b/apothecary/formulas/glew.sh @@ -57,7 +57,7 @@ function build() { -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/glfw.sh b/apothecary/formulas/glfw.sh index 7b02523bc..8535e0163 100644 --- a/apothecary/formulas/glfw.sh +++ b/apothecary/formulas/glfw.sh @@ -95,7 +95,7 @@ function build() { cmake .. -DGLFW_BUILD_DOCS=OFF \ -DGLFW_BUILD_TESTS=OFF \ -DGLFW_BUILD_EXAMPLES=OFF \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ -DENABLE_BITCODE=OFF \ diff --git a/apothecary/formulas/libpng/libpng.sh b/apothecary/formulas/libpng/libpng.sh index d6056631d..8350009f7 100644 --- a/apothecary/formulas/libpng/libpng.sh +++ b/apothecary/formulas/libpng/libpng.sh @@ -97,7 +97,7 @@ function build() { -DCMAKE_INSTALL_INCLUDEDIR=include" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ diff --git a/apothecary/formulas/libxml2/libxml2.sh b/apothecary/formulas/libxml2/libxml2.sh index 592a30371..9be99391c 100644 --- a/apothecary/formulas/libxml2/libxml2.sh +++ b/apothecary/formulas/libxml2/libxml2.sh @@ -160,6 +160,7 @@ function build() { export LDFLAGS="" cmake .. -DCMAKE_TOOLCHAIN_FILE="${NDK_ROOT}/build/cmake/android.toolchain.cmake" \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_TOOLCHAIN=clang++ \ -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++17 -Wno-implicit-function-declaration -frtti " \ @@ -167,7 +168,6 @@ function build() { -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ - -DANDROID_ABI=$ABI \ -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=17 \ @@ -205,7 +205,7 @@ function build() { cd "build_${TYPE}_$PLATFORM" rm -f CMakeCache.txt *.a *.o cmake .. \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ -DENABLE_BITCODE=OFF \ @@ -343,6 +343,7 @@ function build() { export CFLAGS="$CFLAGS -DTRIO_FPCLASSIFY=fpclassify" sed -i "s/#if defined.STANDALONE./#if 0/g" trionan.c + find . -name "test*.c" | xargs -r rm find . -name "run*.c" | xargs -r rm @@ -377,7 +378,7 @@ function build() { -DLIBXML2_WITH_THREADS=ON \ -DLIBXML2_WITH_PROGRAMS=OFF \ -DLIBXML2_WITH_TESTS=OFF \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/aarch64-linux-gnu.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/aarch64-linux-gnu.toolchain.cmake \ -DLIBXML2_WITH_THREAD_ALLOC=OFF cmake --build . --config Release cd .. diff --git a/apothecary/formulas/opencv/opencv.sh b/apothecary/formulas/opencv/opencv.sh index 849bf44f0..a5422907a 100644 --- a/apothecary/formulas/opencv/opencv.sh +++ b/apothecary/formulas/opencv/opencv.sh @@ -77,7 +77,7 @@ function build() { cmake .. ${DEFS} \ -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -394,6 +394,7 @@ function build() { -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=17 \ -DCMAKE_CXX_STANDARD=17 \ @@ -456,7 +457,6 @@ function build() { -DBUILD_TESTS=OFF \ -DANDROID_NDK=${NDK_ROOT} \ -DCMAKE_BUILD_TYPE=Release \ - -DANDROID_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DANDROID_PLATFORM=$ANDROID_PLATFORM \ -DBUILD_PERF_TESTS=OFF .. diff --git a/apothecary/formulas/openssl/openssl.sh b/apothecary/formulas/openssl/openssl.sh index 7654bbc23..3553fb56e 100644 --- a/apothecary/formulas/openssl/openssl.sh +++ b/apothecary/formulas/openssl/openssl.sh @@ -121,7 +121,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ ${BUILD_OPTS_CMAKE} \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DCMAKE_MACOSX_BUNDLE=OFF \ @@ -223,7 +223,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ ${BUILD_OPTS_CMAKE} \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DCMAKE_MACOSX_BUNDLE=OFF \ diff --git a/apothecary/formulas/poco/poco.sh b/apothecary/formulas/poco/poco.sh index 931d34176..02cdb7c23 100644 --- a/apothecary/formulas/poco/poco.sh +++ b/apothecary/formulas/poco/poco.sh @@ -135,7 +135,7 @@ function build() { -DCMAKE_INSTALL_INCLUDEDIR=include" cmake .. ${DEFS} \ ${BUILD_OPTS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/pugixml.sh b/apothecary/formulas/pugixml.sh index bb6febde9..0b91ebcef 100644 --- a/apothecary/formulas/pugixml.sh +++ b/apothecary/formulas/pugixml.sh @@ -109,7 +109,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/rtAudio/rtAudio.sh b/apothecary/formulas/rtAudio/rtAudio.sh index 17d1de35e..81a4a2684 100755 --- a/apothecary/formulas/rtAudio/rtAudio.sh +++ b/apothecary/formulas/rtAudio/rtAudio.sh @@ -52,7 +52,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ diff --git a/apothecary/formulas/svgtiny/svgtiny.sh b/apothecary/formulas/svgtiny/svgtiny.sh index 2ccfa677c..c1d6bcab1 100644 --- a/apothecary/formulas/svgtiny/svgtiny.sh +++ b/apothecary/formulas/svgtiny/svgtiny.sh @@ -164,6 +164,7 @@ function build() { export LDFLAGS="" cmake .. -DCMAKE_TOOLCHAIN_FILE="${NDK_ROOT}/build/cmake/android.toolchain.cmake" \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_TOOLCHAIN=clang++ \ -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++17 -Wno-implicit-function-declaration -frtti " \ @@ -217,7 +218,7 @@ function build() { -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=ON \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c17 -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ diff --git a/apothecary/formulas/tess2/tess2.sh b/apothecary/formulas/tess2/tess2.sh index f473ae4e5..74304024e 100644 --- a/apothecary/formulas/tess2/tess2.sh +++ b/apothecary/formulas/tess2/tess2.sh @@ -66,7 +66,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" cmake .. ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ -DENABLE_ARC=OFF \ @@ -144,6 +144,7 @@ function build() { -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ -DANDROID_ABI=$ABI \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=17 \ -DCMAKE_CXX_STANDARD=17 \ diff --git a/apothecary/formulas/uriparser/uriparser.sh b/apothecary/formulas/uriparser/uriparser.sh index 5d0407d66..a0a38da6b 100644 --- a/apothecary/formulas/uriparser/uriparser.sh +++ b/apothecary/formulas/uriparser/uriparser.sh @@ -149,7 +149,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ - -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/ios.toolchain.cmake \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DURIPARSER_BUILD_TESTS=OFF \ -DURIPARSER_BUILD_DOCS=OFF \ -DURIPARSER_BUILD_TOOLS=OFF \ @@ -175,20 +175,20 @@ function build() { rm -f CMakeCache.txt mkdir -p "build_${TYPE}" cd "build_${TYPE}" - export CFLAGS="-Wno-implicit-function-declaration " - export CXXFLAGS="-fvisibility-inlines-hidden -Wno-implicit-function-declaration" - emcmake cmake \ - -DURIPARSER_BUILD_TESTS=OFF \ - -DURIPARSER_BUILD_DOCS=OFF \ - -DURIPARSER_BUILD_TOOLS=OFF \ - -DURIPARSER_SHARED_LIBS=OFF \ - -DURIPARSER_BUILD_WCHAR_T=ON \ - -DURIPARSER_BUILD_CHAR=ON \ - -DBUILD_SHARED_LIBS=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_FLAGS=${CFLAGS} \ - -DCMAKE_CXX_FLAGS=${CXXFLAGS} \ - -G 'Unix Makefiles' .. + export CFLAGS="-Wno-implicit-function-declaration " + export CXXFLAGS="-fvisibility-inlines-hidden -Wno-implicit-function-declaration" + emcmake cmake \ + -DURIPARSER_BUILD_TESTS=OFF \ + -DURIPARSER_BUILD_DOCS=OFF \ + -DURIPARSER_BUILD_TOOLS=OFF \ + -DURIPARSER_SHARED_LIBS=OFF \ + -DURIPARSER_BUILD_WCHAR_T=ON \ + -DURIPARSER_BUILD_CHAR=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS=${CFLAGS} \ + -DCMAKE_CXX_FLAGS=${CXXFLAGS} \ + -G 'Unix Makefiles' .. #emconfigure ./configure --prefix=$BUILD_TO_DIR --disable-test --disable-doc --enable-static --disable-shared emmake make clean emmake make -j${PARALLEL_MAKE} diff --git a/apothecary/toolchains/aarch64-linux-gnu.toolchain.cmake b/apothecary/toolchains/aarch64-linux-gnu.toolchain.cmake new file mode 100644 index 000000000..5b032eea4 --- /dev/null +++ b/apothecary/toolchains/aarch64-linux-gnu.toolchain.cmake @@ -0,0 +1,31 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD 17) +set(CMAKE_C_STANDARD_REQUIRED ON) + +set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + +set(CMAKE_C_FLAGS "-march=armv8-a") +set(CMAKE_CXX_FLAGS "-march=armv8-a") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") + +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64) \ No newline at end of file diff --git a/apothecary/arm-linux-gnueabi.toolchain.cmake b/apothecary/toolchains/arm-linux-gnueabi.toolchain.cmake similarity index 54% rename from apothecary/arm-linux-gnueabi.toolchain.cmake rename to apothecary/toolchains/arm-linux-gnueabi.toolchain.cmake index eed03122c..83580a2a8 100644 --- a/apothecary/arm-linux-gnueabi.toolchain.cmake +++ b/apothecary/toolchains/arm-linux-gnueabi.toolchain.cmake @@ -4,9 +4,19 @@ set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER "arm-linux-gnueabi-gcc") set(CMAKE_CXX_COMPILER "arm-linux-gnueabi-g++") -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") diff --git a/apothecary/ios.toolchain.cmake b/apothecary/toolchains/ios.toolchain.cmake similarity index 100% rename from apothecary/ios.toolchain.cmake rename to apothecary/toolchains/ios.toolchain.cmake diff --git a/apothecary/toolchains/linux-clang.toolchain.cmake b/apothecary/toolchains/linux-clang.toolchain.cmake new file mode 100644 index 000000000..a320562de --- /dev/null +++ b/apothecary/toolchains/linux-clang.toolchain.cmake @@ -0,0 +1,13 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(triple arm-linux-gnueabihf) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_C_COMPILER_TARGET ${triple}) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_CXX_COMPILER_TARGET ${triple}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/scripts/calculate_formulas.sh b/scripts/calculate_formulas.sh index b1b3cbcb3..36127501e 100755 --- a/scripts/calculate_formulas.sh +++ b/scripts/calculate_formulas.sh @@ -40,6 +40,7 @@ FORMULAS=( "svgtiny" #"uri" "cairo" + "fmt" ) # Seperate in bundles on osx @@ -71,6 +72,7 @@ if [ "$BUNDLE" == "1" ]; then "uriparser" # # Formulas with depenencies in the end "cairo" + ) elif [ "$BUNDLE" == "2" ]; then if [[ "$TYPE" =~ ^(osx)$ ]]; then @@ -89,6 +91,7 @@ if [ "$BUNDLE" == "1" ]; then fi elif [ "$BUNDLE" == "3" ]; then FORMULAS=( + "fmt" "openssl" "curl" # "poco" @@ -135,6 +138,7 @@ elif [ "$TARGET" == "vs" ]; then ) elif [ "$BUNDLE" == "2" ]; then FORMULAS=( + "fmt" "openssl" "curl" # "poco" diff --git a/scripts/linuxaarch64/install.sh b/scripts/linuxaarch64/install.sh index d5024d647..a30962312 100755 --- a/scripts/linuxaarch64/install.sh +++ b/scripts/linuxaarch64/install.sh @@ -32,11 +32,12 @@ downloadToolchain(){ } downloadFirmware(){ - wget -nv https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip - unzip firmware.zip - cp -r firmware-master/opt raspbian/ - rm -r firmware-master - rm firmware.zip + echo "no firmware" + # wget -nv https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip + # unzip firmware.zip + # cp -r firmware-master/opt raspbian/ + # rm -r firmware-master + # rm firmware.zip } relativeSoftLinks(){ diff --git a/scripts/linuxarmv6l/install.sh b/scripts/linuxarmv6l/install.sh index c84f1b350..c30ab3fe1 100755 --- a/scripts/linuxarmv6l/install.sh +++ b/scripts/linuxarmv6l/install.sh @@ -44,11 +44,12 @@ downloadToolchain(){ } downloadFirmware(){ - wget -nv https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip - unzip -q firmware.zip - cp -r firmware-master/opt raspbian/ - rm -r firmware-master - rm firmware.zip + echo "no firmware" + # wget -nv https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip + # unzip -q firmware.zip + # cp -r firmware-master/opt raspbian/ + # rm -r firmware-master + # rm firmware.zip } relativeSoftLinks(){ diff --git a/scripts/linuxarmv7l/install.sh b/scripts/linuxarmv7l/install.sh index 296a820c9..edc9acf1f 100755 --- a/scripts/linuxarmv7l/install.sh +++ b/scripts/linuxarmv7l/install.sh @@ -46,11 +46,12 @@ downloadToolchain(){ } downloadFirmware(){ - wget -q https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip - unzip -q firmware.zip - ${SUDO} cp -r firmware-master/opt archlinux/ - rm -r firmware-master - rm firmware.zip + echo "no firmware" + # wget -q https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip + # unzip -q firmware.zip + # ${SUDO} cp -r firmware-master/opt archlinux/ + # rm -r firmware-master + # rm firmware.zip }