Skip to content

Commit

Permalink
Initial support for winegcc on ARM64
Browse files Browse the repository at this point in the history
  • Loading branch information
tresf committed Feb 5, 2025
1 parent 6a0a4cd commit 9078d5c
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 8 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ jobs:
ccache --zero-stats
cmake -S . \
-B build \
-DWANT_VST_32=OFF \
-DWANT_VST_64=OFF \
$CMAKE_OPTS
- name: Build
run: cmake --build build
Expand Down
9 changes: 8 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,14 @@ if(WANT_VST)
elseif(NOT WINE_FOUND)
set(STATUS_VST_${bits} "not found, please install (lib)wine-dev (or similar) - 64 bit systems additionally need gcc-multilib and g++-multilib")
else()
CheckWineGcc("${bits}" "${WINEGCC}" WINEGCC_WORKING)
if(LMMS_HOST_X86_64)
CheckWineGcc(-m${bits} "${WINEGCC}" WINEGCC_WORKING)
elseif("${bits}" EQUAL 64)
# assume 64-bit only
CheckWineGcc("" "${WINEGCC}" WINEGCC_WORKING)
else()
set(WINEGCC_WORKING false)
endif()
if(WINEGCC_WORKING)
set(LMMS_HAVE_VST_${bits} TRUE)
if(WINE_LIBRARY_FIX)
Expand Down
4 changes: 2 additions & 2 deletions cmake/modules/CheckWineGcc.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
INCLUDE(CheckCXXSourceCompiles)

FUNCTION(CheckWineGcc BITNESS WINEGCC_EXECUTABLE RESULT)
FUNCTION(CheckWineGcc MPLATFORM WINEGCC_EXECUTABLE RESULT)
FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx" "
#include <iostream>
#define USE_WS_PREFIX
Expand All @@ -9,7 +9,7 @@ FUNCTION(CheckWineGcc BITNESS WINEGCC_EXECUTABLE RESULT)
return 0;
}
")
EXECUTE_PROCESS(COMMAND ${WINEGCC_EXECUTABLE} "-m${BITNESS}"
EXECUTE_PROCESS(COMMAND ${WINEGCC_EXECUTABLE} "${MPLATFORM}"
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx"
"-o" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test"
OUTPUT_QUIET ERROR_QUIET
Expand Down
9 changes: 7 additions & 2 deletions cmake/modules/FindWine.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,13 @@ FIND_PROGRAM(WINE_BUILD NAMES winebuild PATHS ${WINE_CXX_LOCATIONS} NO_DEFAULT_P
# Detect wine paths and handle linking problems
IF(WINE_CXX)
# call wineg++ to obtain implied includes and libs
execute_process(COMMAND ${WINE_CXX} -m32 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_32 ERROR_QUIET)
execute_process(COMMAND ${WINE_CXX} -m64 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_64 ERROR_QUIET)
if(LMMS_HOST_X86_64 OR LMMS_HOST_X86)
execute_process(COMMAND ${WINE_CXX} -m32 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_32 ERROR_QUIET)
execute_process(COMMAND ${WINE_CXX} -m64 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_64 ERROR_QUIET)
else()
execute_process(COMMAND ${WINE_CXX} -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_64 ERROR_QUIET)
endif()

_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem/usr/include$" BUGGED_WINEGCC)
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem" WINEGCC_INCLUDE_DIR)
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "libwinecrt0\\.a.*" WINECRT_32)
Expand Down
5 changes: 4 additions & 1 deletion plugins/VstBase/RemoteVstPlugin64.cmake
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
IF(LMMS_BUILD_WIN64)
ADD_SUBDIRECTORY(RemoteVstPlugin)
ELSEIF(LMMS_BUILD_LINUX)
if(LMMS_HOST_X86_64)
set(CXX_FLAGS -m64)
endif()
ExternalProject_Add(RemoteVstPlugin64
"${EXTERNALPROJECT_ARGS}"
CMAKE_ARGS
"${EXTERNALPROJECT_CMAKE_ARGS}"
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
"-DCMAKE_CXX_FLAGS=-m64"
"-DCMAKE_CXX_FLAGS=${CXX_FLAGS}"
)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64" "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe.so" DESTINATION "${PLUGIN_DIR}")
ENDIF()

0 comments on commit 9078d5c

Please sign in to comment.