herumi / mcl

a portable and fast pairing-based cryptography library
BSD 3-Clause "New" or "Revised" License
450 stars 152 forks source link

Question: Cross-compile linux -> windows #149

Closed Nk185 closed 1 year ago

Nk185 commented 1 year ago

Hi Guys,

As the title suggests, I wonder if it's possible to cross-compile the library for Windows as *.dll under Ubuntu (jammy)? I was trying to use g++-mingw-w64-x86-64 package togather with cmake -S . -B ./build -DCMAKE_TOOLCHAIN_FILE=/toolchain where content of toolchain is as follows

set(CMAKE_SYSTEM_NAME Windows)
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)

# cross compilers to use for C, C++ and Fortran
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)

# target environment on the build host system
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX} /usr/lib/gcc/${TOOLCHAIN_PREFIX}/10-win32)

# modify default behavior of FIND_XXX() commands
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

As result I got the following output:

-- The CXX compiler identification is GNU 10.0.0
-- The C compiler identification is GNU 10.0.0
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/x86_64-w64-mingw32-gcc
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/x86_64-w64-mingw32-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/x86_64-w64-mingw32-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
bint_obj=/source/mcl/.build/bint64.o
CMake Error at CMakeLists.txt:162 (message):
  requiring clang++.  cmake -DCMAKE_CXX_COMPILER=clang++ ...

-- Configuring incomplete, errors occurred!
See also "/source/mcl/.build/CMakeFiles/CMakeOutput.log".

Apparently, the error is due to this check in CMakeLists.txt. Changing cmake invocation to cmake -S . -B ./build -DCMAKE_TOOLCHAIN_FILE=/toolchain -DCMAKE_SYSTEM_PROCESSOR=x86_64 or cmake -S . -B ./build -DCMAKE_TOOLCHAIN_FILE=/toolchain -DCMAKE_SYSTEM_PROCESSOR=AMD64 doesn't help either:

-- The CXX compiler identification is GNU 10.0.0
-- The C compiler identification is GNU 10.0.0
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/x86_64-w64-mingw32-gcc-win32
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/x86_64-w64-mingw32-g++-win32 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/x86_64-w64-mingw32-gcc-win32 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find GMP (missing: GMP_INCLUDE_DIR GMP_LIBRARY
  GMP_GMPXX_INCLUDE_DIR GMP_GMPXX_LIBRARY)
Call Stack (most recent call first):
  /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindGMP.cmake:53 (find_package_handle_standard_args)
  CMakeLists.txt:217 (find_package)

-- Configuring incomplete, errors occurred!
See also "/source/mcl/build/CMakeFiles/CMakeOutput.log".

The above error is shown regardless of whether I comment everything below CMAKE_RC_COMPILER in the toolchain or not. And simply disabling GMP via -DMCL_TEST_WITH_GMP=OFF flag makes configuring OK, but running cmake --build ./build yields the following error:

Click to expand ``` root@e9fea978fb6b:/source/mcl# cmake --build ./build Scanning dependencies of target mcl [ 7%] Building CXX object CMakeFiles/mcl.dir/src/fp.cpp.obj [ 14%] Building ASM object CMakeFiles/mcl.dir/src/asm/bint-x64-amd64.s.obj [ 21%] Building ASM object CMakeFiles/mcl.dir/src/asm/x86-64.s.obj /source/mcl/src/asm/x86-64.s: Assembler messages: /source/mcl/src/asm/x86-64.s:5: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:13: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:13: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:17: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:17: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:66: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:66: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:70: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:70: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:167: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:167: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:171: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:171: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:225: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:225: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:229: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:229: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:320: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:320: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:324: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:324: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:347: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:347: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:351: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:351: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:374: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:374: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:378: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:378: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:456: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:456: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:460: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:460: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:526: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:526: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:530: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:530: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:706: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:706: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:710: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:710: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:872: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:872: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:876: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:876: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:985: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:985: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:989: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:989: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1096: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1096: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1100: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1100: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1116: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1116: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1120: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1120: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1137: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1137: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1141: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1141: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1156: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1156: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1160: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1160: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1187: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1187: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1191: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1191: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1216: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1216: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1220: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1220: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1247: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1247: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1251: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1251: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1276: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1276: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1280: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1280: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1316: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1316: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1320: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1320: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1357: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1357: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1361: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1361: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1392: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1392: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1396: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1396: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1429: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1429: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1433: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1433: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1568: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1568: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1572: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1572: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1682: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1682: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1686: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1686: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1957: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1957: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:1961: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:1961: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2219: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2219: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2223: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2223: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2388: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2388: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2392: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2392: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2555: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2555: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2559: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2559: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2578: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2578: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2582: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2582: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2602: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2602: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2606: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2606: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2624: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2624: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2628: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2628: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2660: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2660: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2664: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2664: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2695: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2695: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2699: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2699: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2731: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2731: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2735: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2735: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2767: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2767: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2771: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2771: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2820: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2820: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2824: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2824: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2874: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2874: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2878: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2878: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2929: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2929: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2933: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2933: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2986: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2986: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:2990: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:2990: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:3269: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:3269: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:3273: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:3273: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:3519: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:3519: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:3523: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:3523: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4096: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4096: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4100: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4100: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4635: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4635: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4639: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4639: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4971: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4971: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:4975: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:4975: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5306: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5306: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5310: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5310: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5335: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5335: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5339: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5339: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5365: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5365: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5369: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5369: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5393: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5393: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5397: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5397: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5439: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5439: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5443: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5443: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5496: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5496: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5500: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5500: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5545: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5545: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5549: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5549: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5602: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5602: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5606: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5606: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5681: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5681: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5685: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5685: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5765: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5765: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5769: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5769: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5834: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5834: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5838: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5838: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5868: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5868: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:5872: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:5872: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6086: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6086: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6090: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6090: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6306: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6306: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6310: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6310: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6751: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6751: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:6755: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:6755: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7166: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7166: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7170: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7170: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7471: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7471: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7475: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7475: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7776: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7776: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7780: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7780: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7813: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7813: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7817: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7817: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7853: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7853: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7857: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7857: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7889: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7889: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7893: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7893: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7949: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7949: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:7953: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:7953: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8019: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8019: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8023: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8023: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8080: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8080: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8084: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8084: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8155: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8155: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8159: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8159: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8274: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8274: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8278: Warning: .type pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8278: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8387: Warning: .size pseudo-op used outside of .def/.endef: ignored. /source/mcl/src/asm/x86-64.s:8387: Error: junk at end of line, first unrecognized character is `m' /source/mcl/src/asm/x86-64.s:8389: Error: junk at end of line, first unrecognized character is `,' gmake[2]: *** [CMakeFiles/mcl.dir/build.make:105: CMakeFiles/mcl.dir/src/asm/x86-64.s.obj] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:91: CMakeFiles/mcl.dir/all] Error 2 gmake: *** [Makefile:136: all] Error 2 ```

So am I trying to do something that is not possible / supported in the first place, or am I just doing it wrong? If the latter, please advise on how to do it properly.

Thanks in advance.

herumi commented 1 year ago

I've not yet cross-compiled, but

cmake .. -DBUILD_TESTING=ON -DMCL_USE_LLVM=OFF -DMCL_TEST_WITH_GMP=OFF -DCMAKE_CXX_COMPILER=clang++

on Mingw/Windows with clang++ at https://github.com/herumi/mcl/commit/6a7c4f5506f6d42f2d30d733997c49388957c35c Is this helpful?

Nk185 commented 1 year ago

Hi Thanks a lot for your reply, I will try it a bit later and get back to you with my results.

Nk185 commented 1 year ago

@herumi Hi again Running the above script results in the following output:

Click to expand ``` root@aa692efcb967:/source/mcl# cmake -S . -B ./build -DBUILD_TESTING=ON -DMCL_USE_LLVM=OFF -DMCL_TEST_WITH_GMP=OFF -DCMAKE_CXX_COMPILER=clang++ -- The CXX compiler identification is Clang 14.0.0 -- The C compiler identification is GNU 11.2.0 -- The ASM compiler identification is GNU -- Found assembler: /usr/bin/cc -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Configuring done -- Generating done -- Build files have been written to: /source/mcl/build root@aa692efcb967:/source/mcl# cmake --build ./build Scanning dependencies of target mcl [ 2%] Building CXX object CMakeFiles/mcl.dir/src/fp.cpp.o [ 5%] Building ASM object CMakeFiles/mcl.dir/src/asm/bint-x64-amd64.s.o [ 7%] Building ASM object CMakeFiles/mcl.dir/src/asm/x86-64.s.o [ 10%] Linking CXX shared library lib/libmcl.so [ 10%] Built target mcl Scanning dependencies of target mcl_st [ 12%] Building CXX object CMakeFiles/mcl_st.dir/src/fp.cpp.o [ 15%] Building ASM object CMakeFiles/mcl_st.dir/src/asm/bint-x64-amd64.s.o [ 17%] Building ASM object CMakeFiles/mcl_st.dir/src/asm/x86-64.s.o [ 20%] Linking CXX static library lib/libmcl.a [ 20%] Built target mcl_st [ 22%] Building CXX object CMakeFiles/mclbn256.dir/src/bn_c256.cpp.o [ 25%] Linking CXX shared library lib/libmclbn256.so [ 25%] Built target mclbn256 [ 27%] Building CXX object CMakeFiles/mclbn384.dir/src/bn_c384.cpp.o [ 30%] Linking CXX shared library lib/libmclbn384.so [ 30%] Built target mclbn384 [ 32%] Building CXX object CMakeFiles/mclbn384_256.dir/src/bn_c384_256.cpp.o [ 35%] Linking CXX shared library lib/libmclbn384_256.so [ 35%] Built target mclbn384_256 [ 37%] Building CXX object test/CMakeFiles/fp_test.dir/fp_test.cpp.o [ 40%] Linking CXX executable ../bin/fp_test [ 40%] Built target fp_test [ 42%] Building CXX object test/CMakeFiles/ec_test.dir/ec_test.cpp.o [ 45%] Linking CXX executable ../bin/ec_test [ 45%] Built target ec_test [ 47%] Building CXX object test/CMakeFiles/fp_util_test.dir/fp_util_test.cpp.o [ 50%] Linking CXX executable ../bin/fp_util_test [ 50%] Built target fp_util_test [ 52%] Building CXX object test/CMakeFiles/window_method_test.dir/window_method_test.cpp.o [ 55%] Linking CXX executable ../bin/window_method_test [ 55%] Built target window_method_test [ 57%] Building CXX object test/CMakeFiles/elgamal_test.dir/elgamal_test.cpp.o [ 60%] Linking CXX executable ../bin/elgamal_test [ 60%] Built target elgamal_test [ 62%] Building CXX object test/CMakeFiles/bls12_test.dir/bls12_test.cpp.o [ 65%] Linking CXX executable ../bin/bls12_test [ 65%] Built target bls12_test [ 67%] Building CXX object test/CMakeFiles/fp_tower_test.dir/fp_tower_test.cpp.o [ 70%] Linking CXX executable ../bin/fp_tower_test [ 70%] Built target fp_tower_test [ 72%] Building CXX object test/CMakeFiles/gmp_test.dir/gmp_test.cpp.o [ 75%] Linking CXX executable ../bin/gmp_test [ 75%] Built target gmp_test [ 77%] Building CXX object test/CMakeFiles/bn_test.dir/bn_test.cpp.o [ 80%] Linking CXX executable ../bin/bn_test [ 80%] Built target bn_test [ 82%] Building CXX object test/CMakeFiles/glv_test.dir/glv_test.cpp.o [ 85%] Linking CXX executable ../bin/glv_test [ 85%] Built target glv_test [ 87%] Building CXX object test/CMakeFiles/bn_c256_test.dir/bn_c256_test.cpp.o [ 90%] Linking CXX executable ../bin/bn_c256_test [ 90%] Built target bn_c256_test [ 92%] Building CXX object test/CMakeFiles/bn_c384_test.dir/bn_c384_test.cpp.o [ 95%] Linking CXX executable ../bin/bn_c384_test [ 95%] Built target bn_c384_test [ 97%] Building CXX object test/CMakeFiles/bn_c384_256_test.dir/bn_c384_256_test.cpp.o [100%] Linking CXX executable ../bin/bn_c384_256_test [100%] Built target bn_c384_256_test root@aa692efcb967:/source/mcl# ls ./build/lib -a . .. libmcl.a libmcl.so libmcl.so.1 libmcl.so.1.67 libmclbn256.so libmclbn256.so.1 libmclbn256.so.1.67 libmclbn384.so libmclbn384.so.1 libmclbn384.so.1.67 libmclbn384_256.so libmclbn384_256.so.1 libmclbn384_256.so.1.67 root@aa692efcb967:/source/mcl# ```

So it generates linux .so/.a binaries, not win .dlls... Although, I might have misunderstood your advice -- is there a chance that what you provided is a how-to build mcl under Windows, using clang and MinGW, via cmake, and not how to build mcl under Linux, using MinGW + clang + cmake, for Windows target?

herumi commented 1 year ago

I studied how to cross compile on Linux and made a makefile.

sudo apt install mingw-w64 binutils-mingw-w64 gcc-mingw-w64 g++-mingw-w64
make -f makefile.win

It makes bin/mclbn384_256.dll, lib/mcl.lib, lib/mclbn384_256.lib. Is it what you need?

Nk185 commented 1 year ago

Hi @herumi My apologies for such a long delay with the reply.

Yes, this is exactly what I need. Thanks a lot!