diff --git a/.github/workflows/amd64_web.yml b/.github/workflows/amd64_web.yml new file mode 100644 index 00000000000..b1e4f05986f --- /dev/null +++ b/.github/workflows/amd64_web.yml @@ -0,0 +1,22 @@ +# ref: https://github.com/docker-library/official-images +name: amd64 Web + +on: [push, pull_request, workflow_dispatch] + +jobs: + Distros: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Check docker + run: | + docker info + docker buildx ls + - name: Build env image + run: make --directory=cmake web_env + - name: Build devel project + run: make --directory=cmake web_devel + - name: Build project + run: make --directory=cmake web_build + - name: Test project + run: make --directory=cmake web_test diff --git a/cmake/Makefile b/cmake/Makefile index f4ea0b12e4c..1346cea9847 100644 --- a/cmake/Makefile +++ b/cmake/Makefile @@ -392,6 +392,46 @@ $(foreach stage,$(TOOLCHAIN_STAGES),$(eval $(call toolchain-stage-target,$(stage clean_toolchains: $(addprefix clean_toolchain_, $(TOOLCHAIN_STAGES)) -rmdir $(addprefix cache/, $(TOOLCHAIN_TARGETS)) +######### +## WEB ## +######### +WEB_STAGES := env devel build test + +define make-web-stage-target = +#$$(info STAGE: $1) +#$$(info Create target: web_$1.) +.PHONY: web_$1 +web_$1: docker/web/Dockerfile + #@docker image rm -f ${IMAGE}:web_$1 2>/dev/null + ${DOCKER_BUILD_CMD} --target=$1 --tag ${IMAGE}:web_$1 -f $$< .. + +#$$(info Create target: save_web_$1 (debug).) +.PHONY: save_web_$1 +save_web_$1: cache/web/docker_$1.tar +cache/web/docker_$1.tar: web_$1 + @rm -f $$@ + mkdir -p cache/web + docker save ${IMAGE}:web_$1 -o $$@ + +#$$(info Create target: sh_web_$1 (debug).) +.PHONY: sh_web_$1 +sh_web_$1: web_$1 + ${DOCKER_RUN_CMD} -it --name ${IMAGE}_web_$1 ${IMAGE}:web_$1 + +#$$(info Create target: clean_web_$1.) +.PHONY: clean_web_$1 +clean_web_$1: + docker image rm -f ${IMAGE}:web_$1 2>/dev/null + rm -f cache/web/docker_$1.tar +endef + +$(foreach stage,$(WEB_STAGES),$(eval $(call make-web-stage-target,$(stage)))) + +## MERGE ## +.PHONY: clean_web +clean_web: $(addprefix clean_web_, $(WEB_STAGES)) + rm -f cache/web + ############# ## VAGRANT ## ############# @@ -451,7 +491,7 @@ $(clean_glop_targets): clean_glop_% ########### ## CLEAN ## ########### -targets = $(addprefix clean_, $(DISTROS)) +targets = $(addprefix clean_, $(DISTROS)) clean_web vms = $(addprefix clean_, $(VMS)) glops = $(addprefix clean_glop_, $(STAGES)) .PHONY: clean $(targets) diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index 36b6da63523..98c5f5af760 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -202,7 +202,7 @@ if(BUILD_MATH_OPT) ) list(APPEND proto_files ${math_opt_proto_files}) endif() -if(USE_PDLP) +if(USE_PDLP OR BUILD_MATH_OPT) file(GLOB_RECURSE pdlp_proto_files RELATIVE ${PROJECT_SOURCE_DIR} "ortools/pdlp/*.proto") list(APPEND proto_files ${pdlp_proto_files}) endif() diff --git a/cmake/docker/web/Dockerfile b/cmake/docker/web/Dockerfile new file mode 100644 index 00000000000..b74b8e13aa3 --- /dev/null +++ b/cmake/docker/web/Dockerfile @@ -0,0 +1,31 @@ +# Create a virtual environment with all tools installed +# ref: https://hub.docker.com/_/archlinux/ +FROM archlinux:latest AS env +# Install system build dependencies +ENV PATH=/usr/local/bin:$PATH +RUN pacman -Syu --noconfirm git base-devel cmake +RUN cmake -version +RUN pacman -Syu --noconfirm nodejs emscripten +ENV PATH=/usr/lib/emscripten:$PATH +RUN emcc -v + +# Add the library src to our build env +FROM env AS devel +WORKDIR /home/project +COPY . . + +FROM devel AS build +RUN emcmake cmake -S. -Bbuild \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_DEPS=ON \ + -DBUILD_EXAMPLES=OFF \ + -DUSE_COINOR=OFF \ + -DUSE_GLPK=OFF \ + -DUSE_HIGHS=OFF \ + -DUSE_PDLP=OFF \ + -DUSE_SCIP=OFF +RUN cmake --build build --target all -v +#RUN cmake --build build --target install -v + +FROM build AS test +#RUN CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test +RUN cd build && ctest -V diff --git a/cmake/host.CMakeLists.txt b/cmake/host.CMakeLists.txt index 7f8edd632d0..d4b770ecd42 100644 --- a/cmake/host.CMakeLists.txt +++ b/cmake/host.CMakeLists.txt @@ -97,17 +97,6 @@ set(BUILD_SHARED_LIBS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(BUILD_TESTING OFF) -message(CHECK_START "Fetching ZLIB") -list(APPEND CMAKE_MESSAGE_INDENT " ") -FetchContent_Declare( - zlib - GIT_REPOSITORY "https://github.com/madler/ZLIB.git" - GIT_TAG "v1.2.13" - PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/../../../patches/ZLIB.patch") -FetchContent_MakeAvailable(zlib) -list(POP_BACK CMAKE_MESSAGE_INDENT) -message(CHECK_PASS "fetched") - message(CHECK_START "Fetching Abseil-cpp") list(APPEND CMAKE_MESSAGE_INDENT " ") set(ABSL_ENABLE_INSTALL ON) @@ -117,7 +106,7 @@ FetchContent_Declare( absl GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git" GIT_TAG "20230802.0" - PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/../../../patches/abseil-cpp-20230802.0.patch") + PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/@PATCHES_PATH@/abseil-cpp-20230802.0.patch") FetchContent_MakeAvailable(absl) list(POP_BACK CMAKE_MESSAGE_INDENT) message(CHECK_PASS "fetched") @@ -128,12 +117,13 @@ set(protobuf_BUILD_TESTS OFF) set(protobuf_BUILD_SHARED_LIBS ON) set(protobuf_BUILD_EXPORT OFF) set(protobuf_MSVC_STATIC_RUNTIME OFF) +set(protobuf_WITH_ZLIB OFF) FetchContent_Declare( protobuf GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git" GIT_TAG "v24.0" GIT_SUBMODULES "" - PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/../../../patches/protobuf-v24.0.patch") + PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/@PATCHES_PATH@/protobuf-v24.0.patch") FetchContent_MakeAvailable(protobuf) list(POP_BACK CMAKE_MESSAGE_INDENT) message(CHECK_PASS "fetched") diff --git a/cmake/host.cmake b/cmake/host.cmake index 63e4dd30039..b8a8bdd5304 100644 --- a/cmake/host.cmake +++ b/cmake/host.cmake @@ -18,37 +18,18 @@ endif() message(STATUS "Subproject: HostTools...") -#configure_file( -# ${CMAKE_CURRENT_SOURCE_DIR}/host.CMakeLists.txt -# ${CMAKE_CURRENT_BINARY_DIR}/host_tools/CMakeLists.txt) -# -#execute_process( -# COMMAND ${CMAKE_COMMAND} -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -G "${CMAKE_GENERATOR}" . -# RESULT_VARIABLE result -# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/host_tools) -#if(result) -# message(FATAL_ERROR "CMake step for host tools failed: ${result}") -#endif() -#execute_process( -# COMMAND ${CMAKE_COMMAND} --build . -# RESULT_VARIABLE result -# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/host_tools) -#if(result) -# message(FATAL_ERROR "Build step for host tools failed: ${result}") -#endif() - -#file(COPY -# ${CMAKE_CURRENT_SOURCE_DIR}/cmake/host.CMakeLists.txt -# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/host_tools) +file(RELATIVE_PATH + PATCHES_PATH + ${CMAKE_CURRENT_BINARY_DIR}/host_tools + ${CMAKE_CURRENT_SOURCE_DIR}/patches) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/host.CMakeLists.txt ${CMAKE_CURRENT_BINARY_DIR}/host_tools/CMakeLists.txt - COPYONLY) + @ONLY) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/host_tools - #COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/host.CMakeLists.txt CMakeLists.txt COMMAND ${CMAKE_COMMAND} -E remove_directory build COMMAND ${CMAKE_COMMAND} -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_CURRENT_BINARY_DIR}/host_tools/bin COMMAND ${CMAKE_COMMAND} --build build --config Release -v diff --git a/ortools/base/sysinfo.cc b/ortools/base/sysinfo.cc index aae73b68f9a..03be046d89d 100644 --- a/ortools/base/sysinfo.cc +++ b/ortools/base/sysinfo.cc @@ -47,7 +47,7 @@ int64_t GetProcessMemoryUsage() { int64_t resident_memory = t_info.resident_size; return resident_memory; } -#elif defined(__GNUC__) && !defined(__FreeBSD__) // LINUX +#elif defined(__GNUC__) && !defined(__FreeBSD__) && !defined(__EMSCRIPTEN__) // LINUX int64_t GetProcessMemoryUsage() { unsigned size = 0; char buf[30]; diff --git a/ortools/linear_solver/proto_solver/CMakeLists.txt b/ortools/linear_solver/proto_solver/CMakeLists.txt index cb5b49cc558..2cf0e4e17b5 100644 --- a/ortools/linear_solver/proto_solver/CMakeLists.txt +++ b/ortools/linear_solver/proto_solver/CMakeLists.txt @@ -12,6 +12,22 @@ # limitations under the License. file(GLOB _SRCS "*.h" "*.cc") +if(NOT USE_COINOR) + list(FILTER _SRCS EXCLUDE REGEX "/clp_proto_solver.") + list(FILTER _SRCS EXCLUDE REGEX "/cbc_proto_solver.") +endif() +if(NOT USE_GLPK) + list(FILTER _SRCS EXCLUDE REGEX "/glpk_proto_solver.") +endif() +if(NOT USE_HIGHS) + list(FILTER _SRCS EXCLUDE REGEX "/highs_proto_solver.") +endif() +if(NOT USE_PDLP) + list(FILTER _SRCS EXCLUDE REGEX "/pdlp_proto_solver.") +endif() +if(NOT USE_SCIP) + list(FILTER _SRCS EXCLUDE REGEX "/scip_proto_solver.") +endif() set(NAME ${PROJECT_NAME}_linear_solver_proto_solver) diff --git a/ortools/math_opt/cpp/variable_and_expressions.h b/ortools/math_opt/cpp/variable_and_expressions.h index ffc07706620..65f02ff809d 100644 --- a/ortools/math_opt/cpp/variable_and_expressions.h +++ b/ortools/math_opt/cpp/variable_and_expressions.h @@ -151,6 +151,35 @@ class Variable { VariableId id_; }; +namespace internal { + +// The result of the equality comparison between two Variable. +// +// We use an object here to delay the evaluation of equality so that we can use +// the operator== in two use-cases: +// +// 1. when the user want to test that two Variable values references the same +// variable. This is supported by having this object support implicit +// conversion to bool. +// +// 2. when the user want to use the equality to create a constraint of equality +// between two variables. +struct VariablesEquality { + // Users are not expected to call this constructor. Instead they should only + // use the overload of `operator==` that returns this when comparing two + // Variable. For example `x == y`. + inline VariablesEquality(Variable lhs, Variable rhs); + inline operator bool() const; // NOLINT + Variable lhs; + Variable rhs; +}; + +} // namespace internal + +inline internal::VariablesEquality operator==(const Variable& lhs, + const Variable& rhs); +inline bool operator!=(const Variable& lhs, const Variable& rhs); + template using VariableMap = absl::flat_hash_map; @@ -463,35 +492,6 @@ inline LinearExpression operator*(LinearExpression lhs, double rhs); inline LinearExpression operator*(double lhs, LinearExpression rhs); inline LinearExpression operator/(LinearExpression lhs, double rhs); -namespace internal { - -// The result of the equality comparison between two Variable. -// -// We use an object here to delay the evaluation of equality so that we can use -// the operator== in two use-cases: -// -// 1. when the user want to test that two Variable values references the same -// variable. This is supported by having this object support implicit -// conversion to bool. -// -// 2. when the user want to use the equality to create a constraint of equality -// between two variables. -struct VariablesEquality { - // Users are not expected to call this constructor. Instead they should only - // use the overload of `operator==` that returns this when comparing two - // Variable. For example `x == y`. - inline VariablesEquality(Variable lhs, Variable rhs); - inline operator bool() const; // NOLINT - Variable lhs; - Variable rhs; -}; - -} // namespace internal - -inline internal::VariablesEquality operator==(const Variable& lhs, - const Variable& rhs); -inline bool operator!=(const Variable& lhs, const Variable& rhs); - // A LinearExpression with a lower bound. struct LowerBoundedLinearExpression { // Users are not expected to use this constructor. Instead, they should build diff --git a/tools/cross_compile.sh b/tools/cross_compile.sh index 755e8eba8f7..97971158f4c 100755 --- a/tools/cross_compile.sh +++ b/tools/cross_compile.sh @@ -62,8 +62,8 @@ function install_qemu() { # Checking for a tarball before downloading makes testing easier :-) local -r QEMU_URL="https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz" local -r QEMU_DIR="qemu-${QEMU_VERSION}" - unpack ${QEMU_URL} ${QEMU_DIR} - cd ${QEMU_DIR} || exit 2 + unpack "${QEMU_URL}" "${QEMU_DIR}" + cd "${QEMU_DIR}" || exit 2 ./configure \ --prefix="${QEMU_INSTALL}" \ @@ -104,49 +104,56 @@ function clean_build() { mkdir -p "${BUILD_DIR}" } -function expand_codescape_config() { - # https://www.mips.com/develop/tools/codescape-mips-sdk/mips-toolchain-configurations/ - # mips-mti: MIPS32R6 and MIPS64R6 - # mips-img: MIPS32R2 and MIPS64R2 - - # ref: https://codescape.mips.com/components/toolchain/2020.06-01/downloads.html - local -r DATE=2020.06-01 - local -r CODESCAPE_URL=https://codescape.mips.com/components/toolchain/${DATE}/Codescape.GNU.Tools.Package.${DATE}.for.MIPS.MTI.Linux.CentOS-6.x86_64.tar.gz - local -r GCC_RELATIVE_DIR="mips-mti-linux-gnu/${DATE}" - - # ref: https://codescape.mips.com/components/toolchain/2019.02-04/downloads.html - #local -r DATE=2019.02-04 - #local -r CODESCAPE_URL=https://codescape.mips.com/components/toolchain/${DATE}/Codescape.GNU.Tools.Package.${DATE}.for.MIPS.IMG.Linux.CentOS-6.x86_64.tar.gz - #local -r GCC_RELATIVE_DIR="mips-img-linux-gnu/${DATE}" - - local -r GCC_URL=${CODESCAPE_URL} - unpack "${GCC_URL}" "${GCC_RELATIVE_DIR}" - +function expand_bootlin_config() { + # ref: https://toolchains.bootlin.com/ local -r GCC_DIR=${ARCHIVE_DIR}/${GCC_RELATIVE_DIR} - local MIPS_FLAGS="" - local LIBC_DIR_SUFFIX="" - local FLAVOUR="" + case "${TARGET}" in - "mips64") - MIPS_FLAGS="-EB -mips64r6 -mabi=64" - #MIPS_FLAGS="-EB -mips64r2 -mabi=64" - FLAVOUR="mips-r6-hard" - #FLAVOUR="mips-r2-hard" - LIBC_DIR_SUFFIX="lib64" + "aarch64") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="aarch64" ;; - "mips64el") - MIPS_FLAGS="-EL -mips64r6 -mabi=64" - #MIPS_FLAGS="-EL -mips64r2 -mabi=64" - FLAVOUR="mipsel-r6-hard" - #FLAVOUR="mipsel-r2-hard" - LIBC_DIR_SUFFIX="lib64" + "aarch64be") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="aarch64_be" + ;; + "ppc64le" | "ppc64le-power8") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="powerpc64le" + ;; + "ppc64" | "ppc64-power8") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="powerpc64" + ;; + "ppc-e500mc") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="powerpc" + QEMU_ARGS+=( -cpu "e500mc" ) + ;; + "ppc" | "ppc-440fp") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--glibc--stable-2021.11-1.tar.bz2" + local -r GCC_PREFIX="powerpc" + ;; + "riscv64") + local -r TOOLCHAIN_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/riscv64-lp64d/tarballs/riscv64-lp64d--glibc--stable-2022.08-1.tar.bz2" + local -r GCC_PREFIX="riscv64" ;; *) - >&2 echo 'unknown mips platform' + >&2 echo 'unknown power platform' exit 1 ;; esac - local -r SYSROOT_DIR=${GCC_DIR}/sysroot - local -r STAGING_DIR=${SYSROOT_DIR}-stage + + local -r TOOLCHAIN_RELATIVE_DIR="${TARGET}" + unpack "${TOOLCHAIN_URL}" "${TOOLCHAIN_RELATIVE_DIR}" + local -r EXTRACT_DIR="${ARCHIVE_DIR}/$(basename ${TOOLCHAIN_URL%.tar.bz2})" + + local -r TOOLCHAIN_DIR=${ARCHIVE_DIR}/${TOOLCHAIN_RELATIVE_DIR} + if [[ -d "${EXTRACT_DIR}" ]]; then + mv "${EXTRACT_DIR}" "${TOOLCHAIN_DIR}" + fi + + local -r SYSROOT_DIR="${TOOLCHAIN_DIR}/${GCC_PREFIX}-buildroot-linux-gnu/sysroot" + #local -r STAGING_DIR=${SYSROOT_DIR}-stage # Write a Toolchain file # note: This is manadatory to use a file in order to have the CMake variable @@ -154,26 +161,19 @@ function expand_codescape_config() { # ref: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-linux cat >"${TOOLCHAIN_FILE}" <&2 echo 'unknown platform' + exit 1 ;; + esac + + local -r GCC_URL=${CODESCAPE_URL} + unpack "${GCC_URL}" "${GCC_RELATIVE_DIR}" + local -r GCC_DIR=${ARCHIVE_DIR}/${GCC_RELATIVE_DIR} case "${TARGET}" in - "aarch64") - local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--stable-2021.11-1.tar.bz2" - local -r GCC_PREFIX="aarch64" + "mips" | "mips32-r6") + local -r MIPS_FLAGS="-EB -mips32r6 -mabi=32" + local -r FLAVOUR="mips-r6-hard" + local -r LIBC_DIR_SUFFIX="lib" ;; - "aarch64be") - local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--glibc--stable-2021.11-1.tar.bz2" - local -r GCC_PREFIX="aarch64_be" + "mips32-r2") + local -r MIPS_FLAGS="-EB -mips32r2 -mabi=32" + local -r FLAVOUR="mips-r2-hard" + local -r LIBC_DIR_SUFFIX="lib" ;; - "ppc64le") - local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--glibc--stable-2021.11-1.tar.bz2" - local -r GCC_PREFIX="powerpc64le" + "mipsle" | "mips32el-r6") + local -r MIPS_FLAGS="-EL -mips32r6 -mabi=32" + local -r FLAVOUR="mipsel-r6-hard" + local -r LIBC_DIR_SUFFIX="lib" ;; - "ppc64") - local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--glibc--stable-2021.11-1.tar.bz2" - local -r GCC_PREFIX="powerpc64" + "mips32el-r2") + local -r MIPS_FLAGS="-EL -mips32r2 -mabi=32" + local -r FLAVOUR="mipsel-r2-hard" + local -r LIBC_DIR_SUFFIX="lib" ;; - "ppc") - #local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--glibc--stable-2021.11-1.tar.bz2" - local -r POWER_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--glibc--stable-2021.11-1.tar.bz2" - local -r GCC_PREFIX="powerpc" + "mips64" | "mips64-r6") + local -r MIPS_FLAGS="-EB -mips64r6 -mabi=64" + local -r FLAVOUR="mips-r6-hard" + local -r LIBC_DIR_SUFFIX="lib64" + ;; + "mips64-r2") + local -r MIPS_FLAGS="-EB -mips64r2 -mabi=64" + local -r FLAVOUR="mips-r2-hard" + local -r LIBC_DIR_SUFFIX="lib64" + ;; + "mips64le" | "mips64el-r6") + local -r MIPS_FLAGS="-EL -mips64r6 -mabi=64" + local -r FLAVOUR="mipsel-r6-hard" + local -r LIBC_DIR_SUFFIX="lib64" + ;; + "mips64el-r2") + local -r MIPS_FLAGS="-EL -mips64r2 -mabi=64" + local -r FLAVOUR="mipsel-r2-hard" + local -r LIBC_DIR_SUFFIX="lib64" ;; *) - >&2 echo 'unknown power platform' + >&2 echo 'unknown mips platform' exit 1 ;; esac - - local -r POWER_RELATIVE_DIR="${TARGET}" - unpack "${POWER_URL}" "${POWER_RELATIVE_DIR}" - local -r EXTRACT_DIR="${ARCHIVE_DIR}/$(basename ${POWER_URL%.tar.bz2})" - - local -r POWER_DIR=${ARCHIVE_DIR}/${POWER_RELATIVE_DIR} - if [[ -d "${EXTRACT_DIR}" ]]; then - mv "${EXTRACT_DIR}" "${POWER_DIR}" - fi - - local -r SYSROOT_DIR="${POWER_DIR}/${GCC_PREFIX}-buildroot-linux-gnu/sysroot" - #local -r STAGING_DIR=${SYSROOT_DIR}-stage + local -r SYSROOT_DIR=${GCC_DIR}/sysroot + local -r STAGING_DIR=${SYSROOT_DIR}-stage # Write a Toolchain file # note: This is manadatory to use a file in order to have the CMake variable @@ -236,19 +274,19 @@ function expand_bootlin_config() { # ref: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-linux cat >"${TOOLCHAIN_FILE}" <&2 echo "Unknown TARGET '${TARGET}'..." exit 1 ;;