From c42971bc3639779c5abf0bc0215e24191f7aee41 Mon Sep 17 00:00:00 2001 From: Kyuma Ohta Date: Sat, 3 Oct 2020 16:50:36 +0000 Subject: [PATCH] [BUILD][CMAKE][WIN32] Available to cross build for Win32, with CLANG/Docker. --- source/cmake/config.cmake | 42 +++++++------------ .../toolchains}/toolchain_mingw_cross_linux.cmake | 8 ++-- .../toolchains}/toolchain_native_gcc.cmake | 0 .../toolchains}/toolchain_native_llvm.cmake | 0 .../toolchain_win32_cross_linux_llvm.cmake | 0 .../toolchains}/windows-mingw-cross.cmake | 0 source/sample-scripts/build_default_vars.llvm.sh | 2 +- source/sample-scripts/build_default_vars.sh.gcc.sh | 2 +- .../build_default_vars_mingw-cross.sh | 49 ++++++++++++++++++++++ source/src/qt/CMakeLists.txt | 17 ++++---- source/src/qt/emuutils/CMakeLists.txt | 2 +- source/src/vm/fmgen/CMakeLists.txt | 40 +++++++++--------- 12 files changed, 99 insertions(+), 63 deletions(-) rename source/{build-cmake/cmake => cmake/toolchains}/toolchain_mingw_cross_linux.cmake (91%) rename source/{build-cmake/cmake => cmake/toolchains}/toolchain_native_gcc.cmake (100%) rename source/{build-cmake/cmake => cmake/toolchains}/toolchain_native_llvm.cmake (100%) rename source/{build-cmake/cmake => cmake/toolchains}/toolchain_win32_cross_linux_llvm.cmake (100%) rename source/{build-cmake/cmake => cmake/toolchains}/windows-mingw-cross.cmake (100%) create mode 100644 source/sample-scripts/build_default_vars_mingw-cross.sh diff --git a/source/cmake/config.cmake b/source/cmake/config.cmake index 40e03b9d3..8ee8b6552 100644 --- a/source/cmake/config.cmake +++ b/source/cmake/config.cmake @@ -42,6 +42,9 @@ if(USE_DEVICES_SHARED_LIB) add_definitions(-DUSE_SHARED_DLL) add_definitions(-DUSE_SHARED_UI_DLL) add_definitions(-DUSE_SHARED_DEVICES_DLL) +elseif(WIN32) + add_definitions(-DUSE_SHARED_DLL) + add_definitions(-DUSE_SHARED_UI_DLL) endif() set(USE_FMGEN ON) @@ -192,7 +195,7 @@ endif() include(FindZLIB) if(ZLIB_FOUND) add_definitions(-DUSE_ZLIB) - include_directories(${ZLIB_INCLUDE_DIRS}) + include_directories(${ZLIB_INCLUDE_DIRS}) endif() # GCC Only? @@ -301,7 +304,8 @@ if(USE_DEVICES_SHARED_LIB) add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen) else() add_subdirectory("${PROJECT_SOURCE_DIR}/src" common) - add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm" vm) + add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/common_vm" vm/) + add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen) endif() function(ADD_VM VM_NAME EXE_NAME VMDEF) @@ -371,32 +375,12 @@ function(ADD_VM VM_NAME EXE_NAME VMDEF) # endif() if(NOT USE_DEVICES_SHARED_LIB) if(USE_FMGEN) - set(VM_APPEND_LIBS fmgen) + set(VM_APPEND_LIBS CSPfmgen) else() set(VM_APPEND_LIBS) endif() endif() if(WIN32) - set(LOCAL_LIBS - common_emu - qt_${EXE_NAME} - vm_${EXE_NAME} - vm_vm - ${VM_APPEND_LIBS} - ${DEBUG_LIBS} - common_${EXE_NAME} - ) - else() - set(LOCAL_LIBS - qt_${EXE_NAME} - vm_${EXE_NAME} - vm_vm - ${VM_APPEND_LIBS} - ${DEBUG_LIBS} - common_${EXE_NAME} - ) - endif() - if(WIN32) set(BUNDLE_LIBS ${OPENGL_LIBRARY} ${OPENCL_LIBRARY} @@ -424,7 +408,7 @@ function(ADD_VM VM_NAME EXE_NAME VMDEF) set(LOCAL_LIBS qt_${EXE_NAME} vm_${EXE_NAME} - vm_vm + vm_common_vm ${VM_APPEND_LIBS} ${DEBUG_LIBS} common_${EXE_NAME} @@ -450,10 +434,12 @@ function(ADD_VM VM_NAME EXE_NAME VMDEF) ) else() set(BUNDLE_LIBS + CSPosd +# CSPfmgen + CSPgui + CSPemu_utils + CSPavio ${BUNDLE_LIBS} -# -lCSPosd -# -lCSPgui -# -lCSPavio ) endif() @@ -462,7 +448,7 @@ function(ADD_VM VM_NAME EXE_NAME VMDEF) add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/${VM_NAME}" vm/${EXE_NAME} EXCLUDE_FROM_ALL) if(NOT USE_DEVICES_SHARED_LIB) if(USE_FMGEN) - add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen_${EXE_NAME} EXCLUDE_FROM_ALL) +# add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen_${EXE_NAME} EXCLUDE_FROM_ALL) endif() endif() add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/machines/${VM_NAME}" qt/${EXE_NAME} EXCLUDE_FROM_ALL) diff --git a/source/build-cmake/cmake/toolchain_mingw_cross_linux.cmake b/source/cmake/toolchains/toolchain_mingw_cross_linux.cmake similarity index 91% rename from source/build-cmake/cmake/toolchain_mingw_cross_linux.cmake rename to source/cmake/toolchains/toolchain_mingw_cross_linux.cmake index 06592bcbb..fb97f2c86 100644 --- a/source/build-cmake/cmake/toolchain_mingw_cross_linux.cmake +++ b/source/cmake/toolchains/toolchain_mingw_cross_linux.cmake @@ -5,7 +5,7 @@ SET(CMAKE_SYSTEM_NAME Windows) SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) -SET(CMAKE_AR i686-w64-mingw32-gcc-ar) +SET(CMAKE_AR i686-w64-mingw32-ar) #set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") @@ -17,7 +17,7 @@ SET(CMAKE_AR i686-w64-mingw32-gcc-ar) #SET(CMAKE_CXX_ARCHIVE_CREATE " qcs --plugin==$(i686-w64-mingw32-gcc --print-file-name=liblto_plugin.so) ") #SET(CMAKE_CXX_ARCHIVE_FINISH true) -set(LIBAV_ROOT_DIR "/usr/local/i586-mingw-msvc/ffmpeg-4.1") +#set(LIBAV_ROOT_DIR "/usr/local/i586-mingw-msvc/ffmpeg-4.1") # here is the target environment located set(USE_SDL2 ON) @@ -25,13 +25,13 @@ if(USE_SDL2) SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /usr/local/i586-mingw-msvc /usr/local/i586-mingw-msvc/SDL/i686-w64-mingw32 - /usr/local/i586-mingw-msvc/Qt5.12/mingw_82x + /usr/local/i586-mingw-msvc/Qt5.15/mingw_82x ) else() SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /usr/local/i586-mingw-msvc /usr/local/i586-mingw-msvc/SDL1/ - /usr/local/i586-mingw-msvc/Qt5.12/mingw_82x + /usr/local/i586-mingw-msvc/Qt5.15/mingw_82x ) endif() SET(CSP_CROSS_BUILD 1) diff --git a/source/build-cmake/cmake/toolchain_native_gcc.cmake b/source/cmake/toolchains/toolchain_native_gcc.cmake similarity index 100% rename from source/build-cmake/cmake/toolchain_native_gcc.cmake rename to source/cmake/toolchains/toolchain_native_gcc.cmake diff --git a/source/build-cmake/cmake/toolchain_native_llvm.cmake b/source/cmake/toolchains/toolchain_native_llvm.cmake similarity index 100% rename from source/build-cmake/cmake/toolchain_native_llvm.cmake rename to source/cmake/toolchains/toolchain_native_llvm.cmake diff --git a/source/build-cmake/cmake/toolchain_win32_cross_linux_llvm.cmake b/source/cmake/toolchains/toolchain_win32_cross_linux_llvm.cmake similarity index 100% rename from source/build-cmake/cmake/toolchain_win32_cross_linux_llvm.cmake rename to source/cmake/toolchains/toolchain_win32_cross_linux_llvm.cmake diff --git a/source/build-cmake/cmake/windows-mingw-cross.cmake b/source/cmake/toolchains/windows-mingw-cross.cmake similarity index 100% rename from source/build-cmake/cmake/windows-mingw-cross.cmake rename to source/cmake/toolchains/windows-mingw-cross.cmake diff --git a/source/sample-scripts/build_default_vars.llvm.sh b/source/sample-scripts/build_default_vars.llvm.sh index 3b9b7d273..e7b03f0cd 100644 --- a/source/sample-scripts/build_default_vars.llvm.sh +++ b/source/sample-scripts/build_default_vars.llvm.sh @@ -1,4 +1,4 @@ -cmake .. -DCMAKE_TOOLCHAIN_FILE="$PWD/../build-cmake/cmake/toolchain_native_llvm.cmake" \ +cmake .. -DCMAKE_TOOLCHAIN_FILE="$PWD/../cmake/toolchains/toolchain_native_llvm.cmake" \ -DCMAKE_BUILD_TYPE=Relwithdebinfo \ -DCMAKE_C_FLAGS_RELWITHDEBINFO=" \ -g2 \ diff --git a/source/sample-scripts/build_default_vars.sh.gcc.sh b/source/sample-scripts/build_default_vars.sh.gcc.sh index fd20ec3a8..b263c631d 100644 --- a/source/sample-scripts/build_default_vars.sh.gcc.sh +++ b/source/sample-scripts/build_default_vars.sh.gcc.sh @@ -1,4 +1,4 @@ -cmake .. -DCMAKE_TOOLCHAIN_FILE="$PWD/../build-cmake/cmake/toolchain_native_gcc.cmake" \ +cmake .. -DCMAKE_TOOLCHAIN_FILE="$PWD/../cmake/toolchains/toolchain_native_gcc.cmake" \ -DCMAKE_BUILD_TYPE=Relwithdebinfo \ -DCMAKE_C_FLAGS_RELWITHDEBINFO=" \ -gz=zlib \ diff --git a/source/sample-scripts/build_default_vars_mingw-cross.sh b/source/sample-scripts/build_default_vars_mingw-cross.sh new file mode 100644 index 000000000..be0962844 --- /dev/null +++ b/source/sample-scripts/build_default_vars_mingw-cross.sh @@ -0,0 +1,49 @@ +FFMPEG_DIR="/usr/local/i586-mingw-msvc/ffmpeg-4.2" +QT5_DIR="/usr/local/i586-mingw-msvc/Qt5.15/mingw_82x" +PATH=/opt/llvm-mingw/bin:$PATH +cmake .. \ + -DCMAKE_TOOLCHAIN_FILE="$PWD/../cmake/toolchains/toolchain_mingw_cross_linux.cmake" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS_RELWITHDEBINFO=" \ + -g2 \ + -ggdb \ + -gz=zlib \ + -O3 \ + -msse2 \ + -mfpmath=sse \ + -Wreserved-user-defined-literal \ + -fslp-vectorize \ + -fvectorize \ + -fstrict-vtable-pointers \ + -fstrict-enums \ + " \ + -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=" \ + -g2 \ + -ggdb \ + -gz=zlib \ + -O3 \ + -msse2 \ + -mfpmath=sse \ + -Wreserved-user-defined-literal \ + -fslp-vectorize \ + -fvectorize \ + -fstrict-vtable-pointers \ + -fstrict-enums \ + " \ + -DCMAKE_EXE_LINKER_FLAGS="\ + -g2 \ + -ggdb \ + -gz=zlib \ + -L/usr/i686-w64-mingw32/lib \ + " \ + -DCMAKE_MODULE_LINKER_FLAGS="\ + -g2 \ + -ggdb \ + -gz=zlib \ + -L/usr/i686-w64-mingw32/lib \ + " \ + -DLIBAV_ROOT_DIR="${FFMPEG_DIR}" \ + -DQT5_ROOT_PATH="${QT5_DIR}" \ + -DUSE_DEVICES_SHARED_LIB=ON \ + + \ No newline at end of file diff --git a/source/src/qt/CMakeLists.txt b/source/src/qt/CMakeLists.txt index f56e8daa4..d357c432a 100644 --- a/source/src/qt/CMakeLists.txt +++ b/source/src/qt/CMakeLists.txt @@ -33,16 +33,17 @@ include (GenerateExportHeader) if(WIN32) target_link_libraries(CSPosd PUBLIC - PRIVATE ${CMAKE_SOURCE_DIR}/../../build-cmake/bin-win32/libCSPemu_utils.dll.a +# PRIVATE ${CMAKE_SOURCE_DIR}/../../build-cmake/bin-win32/libCSPemu_utils.dll.a # INTERFACE ${CMAKE_SOURCE_DIR}/../../build-cmake/bin-win32/libCSPgui.dll.a # ${CMAKE_SOURCE_DIR}/../../build-cmake/bin-win32/libCSPavio.dll.a - Qt5::Core - Qt5::Gui - Qt5::OpenGL - Qt5::Widgets - Qt5::Network - ${SDL2_LIBRARIES} - ) + CSPemu_utils + Qt5::Core + Qt5::Gui + Qt5::OpenGL + Qt5::Widgets + Qt5::Network + ${SDL2_LIBRARIES} + ) generate_export_header(CSPosd BASE_NAME CSPosd EXPORT_MACRO_NAME CSPosd_EXPORT diff --git a/source/src/qt/emuutils/CMakeLists.txt b/source/src/qt/emuutils/CMakeLists.txt index ed2ebd65e..1ffb8bee1 100644 --- a/source/src/qt/emuutils/CMakeLists.txt +++ b/source/src/qt/emuutils/CMakeLists.txt @@ -30,7 +30,7 @@ add_library(CSPemu_utils SHARED target_link_libraries(CSPemu_utils PRIVATE Qt5::Core - libz.dll.a + ${ZLIB_LIBRARIES} ${SDL2_LIBRARIES} ) diff --git a/source/src/vm/fmgen/CMakeLists.txt b/source/src/vm/fmgen/CMakeLists.txt index 0b275818f..cfe21b1e5 100644 --- a/source/src/vm/fmgen/CMakeLists.txt +++ b/source/src/vm/fmgen/CMakeLists.txt @@ -14,28 +14,28 @@ SET(s_vm_fmgen_srcs ) if(WIN32) -#add_library(vm_fmgen -# ${s_vm_fmgen_srcs} -# ) + add_library(vm_fmgen SHARED + ${s_vm_fmgen_srcs} + ) -include (GenerateExportHeader) -add_library(CSPfmgen SHARED - ${s_vm_fmgen_srcs} - ) -target_link_libraries(CSPfmgen - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../build-cmake/bin-win32/libCSPemu_utils.dll.a + include (GenerateExportHeader) + add_library(CSPfmgen SHARED + ${s_vm_fmgen_srcs} + ) + target_link_libraries(CSPfmgen + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../build-cmake/bin-win32/libCSPemu_utils.dll.a + ) + set_target_properties(CSPfmgen PROPERTIES + SOVERSION ${THIS_LIB_VERSION} + VERSION ${THIS_LIB_VERSION} + LINK_INTERFACE_LIBRARIES "" + ) + generate_export_header(CSPfmgen + BASE_NAME CSPfmgen + EXPORT_MACRO_NAME CSPfmgen_EXPORT + EXPORT_FILE_NAME CSPfmgen_Export.h + STATIC_DEFINE CSPfmgen_BUILT_AS_STATIC ) -set_target_properties(CSPfmgen PROPERTIES - SOVERSION ${THIS_LIB_VERSION} - VERSION ${THIS_LIB_VERSION} - LINK_INTERFACE_LIBRARIES "" - ) -generate_export_header(CSPfmgen - BASE_NAME CSPfmgen - EXPORT_MACRO_NAME CSPfmgen_EXPORT - EXPORT_FILE_NAME CSPfmgen_Export.h - STATIC_DEFINE CSPfmgen_BUILT_AS_STATIC -) else() if(USE_DEVICES_SHARED_LIB) -- 2.11.0