Revision: 9519 https://osdn.net/projects/ttssh2/scm/svn/commits/9519 Author: zmatsuo Date: 2021-11-10 22:01:59 +0900 (Wed, 10 Nov 2021) Log Message: ----------- cygwin/CMakeLists.txt を整理 - cygterm - cygwin 64bit, 32bit, msys2 用の3種類をビルドできるようにした - ただし msys2(MinGW) でビルド時、msys2term がうまくビルドできない - 全体のビルド時は cygterm_build/CMakeLists.txt からビルドするようにした - cygtool - 全体のビルド時は cygtool_build/CMakeLists.txt からビルドするようにした - 常に32bitバイナリを作成するため Modified Paths: -------------- trunk/cygwin/CMakeLists.txt trunk/cygwin/README.md trunk/cygwin/cyglib/cyglib.c trunk/cygwin/cygterm/CMakeLists.txt trunk/cygwin/cygterm/build_cygterm.cmake Added Paths: ----------- trunk/cygwin/cygterm/cygterm.rc trunk/cygwin/cygterm/msys2term.cfg trunk/cygwin/cygterm/toolchain_i686-cygwin.cmake trunk/cygwin/cygterm/toolchain_x86_64-cygwin.cmake trunk/cygwin/cygterm_build/ trunk/cygwin/cygterm_build/CMakeLists.txt trunk/cygwin/cygtool_build/ trunk/cygwin/cygtool_build/CMakeLists.txt -------------- next part -------------- Modified: trunk/cygwin/CMakeLists.txt =================================================================== --- trunk/cygwin/CMakeLists.txt 2021-11-10 13:01:44 UTC (rev 9518) +++ trunk/cygwin/CMakeLists.txt 2021-11-10 13:01:59 UTC (rev 9519) @@ -8,15 +8,12 @@ cyglib PROPERTIES FOLDER cygwin) -add_subdirectory(cygtool) +add_subdirectory(cygtool_build) set_target_properties( - cygtool_dll + cygtool_build PROPERTIES FOLDER cygwin) -if(false) - add_subdirectory(cygterm) - set_target_properties( - cygterm - PROPERTIES FOLDER cygwin) -endif() - +add_subdirectory(cygterm_build) +set_target_properties( + cygterm_build + PROPERTIES FOLDER cygwin) Modified: trunk/cygwin/README.md =================================================================== --- trunk/cygwin/README.md 2021-11-10 13:01:44 UTC (rev 9518) +++ trunk/cygwin/README.md 2021-11-10 13:01:59 UTC (rev 9519) @@ -3,8 +3,16 @@ - cyglaunch - cygterm を実行するプログラム - cygterm - - cygwin を起動するプログラム + - cygwin(msys2)のシェルとTera Termの橋渡しをするプログラム + - cygwin用64bit, 32bit, msys2用(msys2term) をビルド可能 + - cygwinのとき、コンパイラパッケージをインストールしておく + - cygwin 64bit環境時は cygwin32-gcc-core と cygwin32-gcc-g++ + - cygwin 32bit環境時は cygwin64-gcc-core と cygwin64-gcc-g++ +- cygterm_build + - cmakeビルド用 cygterm(とmsys2term) をビルドするためのフォルダ - cygtool - インストーラから使用するdll +- cygtool_build + - cmakeビルド用 cygtool をビルドするためのフォルダ - cyglib - ttermpro, cyglaunch, cygtool から使用するライブラリ Modified: trunk/cygwin/cyglib/cyglib.c =================================================================== --- trunk/cygwin/cyglib/cyglib.c 2021-11-10 13:01:44 UTC (rev 9518) +++ trunk/cygwin/cyglib/cyglib.c 2021-11-10 13:01:59 UTC (rev 9519) @@ -39,6 +39,13 @@ #include "cyglib.h" +//#define CYGWIN 1 +//#define MSYS2 1 + +#if !defined(CYGWIN) && !defined(MSYS2) +#define CYGWIN 1 +#endif + /** * cygwin1.dll\x82\xF0\x92T\x82\xB7 * @@ -54,7 +61,7 @@ wchar_t file[MAX_PATH]; wchar_t *filename; wchar_t c; -#if 1 +#if CYGWIN const wchar_t *dll_base = L"cygwin1"; const wchar_t *search_paths[] = { L"%c:\\cygwin\\bin", @@ -62,7 +69,7 @@ NULL, }; #endif -#if 0 +#if MSYS2 const wchar_t *dll_base = L"msys-2.0"; const wchar_t *search_paths[] = { L"%c:\\msys\\usr\\bin", @@ -212,10 +219,13 @@ wchar_t *ExeDirW; wchar_t *cygterm_cmd; DWORD e; +#if CYGWIN const wchar_t *cygterm_exe = L"cygterm.exe"; -// const wchar_t *cygterm_exe = L"msys2term.exe"; +#endif +#if MSYS2 + const wchar_t *cygterm_exe = L"msys2term.exe"; +#endif -// CygwinDirectory = NULL; find_cygwin = CygwinSearchDLL(CygwinDirectory, &find_dir, &find_in_path); if (find_cygwin == FALSE) { return ERROR_FILE_NOT_FOUND; Modified: trunk/cygwin/cygterm/CMakeLists.txt =================================================================== --- trunk/cygwin/cygterm/CMakeLists.txt 2021-11-10 13:01:44 UTC (rev 9518) +++ trunk/cygwin/cygterm/CMakeLists.txt 2021-11-10 13:01:59 UTC (rev 9519) @@ -1,12 +1,21 @@ -option(MSYS2TERM "msys2term" OFF) +cmake_minimum_required(VERSION 3.11) +message("CMAKE_COMMAND=${CMAKE_COMMAND}") +message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") +message("CMAKE_HOST_SYSTEM_NAME=${CMAKE_HOST_SYSTEM_NAME}") +if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "MSYS") + message("MSYS2TERM=ON") + set(MSYS2TERM ON) +endif() + if (MSYS2TERM) set(PACKAGE_NAME "msys2term") else() set(PACKAGE_NAME "cygterm") endif() + +project(${PACKAGE_NAME}) ENABLE_LANGUAGE(RC) -project(${PACKAGE_NAME}) add_executable( ${PACKAGE_NAME} @@ -14,7 +23,38 @@ cygterm.rc ) -set_source_files_properties( - cygterm.cc - PROPERTIES COMPILE_FLAGS "-D_GNU_SOURCE -fno-exceptions" -) +if (MSYS2TERM) + target_compile_definitions( + ${PACKAGE_NAME} + PRIVATE + MSYS2=1 + ) +else() + target_compile_definitions( + ${PACKAGE_NAME} + PRIVATE + CYGWIN=1 + ) +endif() + +target_compile_options( + ${PACKAGE_NAME} + PRIVATE + -D_GNU_SOURCE + -fno-exceptions + ) + +target_link_options( + ${PACKAGE_NAME} + PRIVATE + -mwindows + ) + +install( + TARGETS ${PACKAGE_NAME} + DESTINATION . + ) +install( + FILES ${PACKAGE_NAME}.cfg + DESTINATION . + ) Modified: trunk/cygwin/cygterm/build_cygterm.cmake =================================================================== --- trunk/cygwin/cygterm/build_cygterm.cmake 2021-11-10 13:01:44 UTC (rev 9518) +++ trunk/cygwin/cygterm/build_cygterm.cmake 2021-11-10 13:01:59 UTC (rev 9519) @@ -1,36 +1,131 @@ - -if(NOT DEFINED CYGWIN_PATH) - set(CYGWIN_PATH "C:/cygwin64/bin") - if (NOT EXISTS ${CYGWIN_PATH}) - set(CYGWIN_PATH "C:/cygwin/bin") - if (NOT EXISTS ${CYGWIN_PATH}) - message(FATAL_ERROR "Not found cygwin") +# cygterm, msys2termのビルド +# - 生成可能な cygterm, msys2term をビルド +# - CMAKE_INSTALL_PREFIX にコピーする + +message("CMAKE_COMMAND=${CMAKE_COMMAND}") +message("CMAKE_HOST_SYSTEM_NAME=${CMAKE_HOST_SYSTEM_NAME}") +message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") + +# cygwinのインストールパスを返す +# 見つからない場合は "" +function(GetCygwinPath path) + set(${path} "" PARENT_SCOPE) + if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "CYGWIN") + # cygwinのcmake + set(PATH "/usr/bin") + if (EXISTS ${PATH}) + set(${path} ${PATH} PARENT_SCOPE) endif() + elseif(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows") + # windowsのcmake + set(PATH "C:\\cygwin64\\bin") + if (NOT EXISTS ${PATH}) + set(PATH "C:\\cygwin\\bin") + endif() + if (EXISTS ${PATH}) + set(${path} ${PATH} PARENT_SCOPE) + endif() + else() + # msys2? endif() +endfunction() + +# msys2のインストールパスを返す +# 見つからない場合は "" +function(GetMsys2Path path) + set(${path} "" PARENT_SCOPE) + if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "MSYS") + # msys2のcmake + set(PATH "/c/msys64/usr/bin") + if (EXISTS ${PATH}) + set(${path} ${PATH} PARENT_SCOPE) + endif() + elseif(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows") + if(${CMAKE_COMMAND} MATCHES "msys") + # msys2/mingw64(32) のcmake + set(PATH "c:/msys64/usr/bin") + if (EXISTS ${PATH}) + #なぜかうまくいかない + #set(${path} ${PATH} PARENT_SCOPE) + endif() + else() + # windowsのcmake + set(PATH "c:\\msys64\\usr\\bin") + if (EXISTS ${PATH}) + set(${path} ${PATH} PARENT_SCOPE) + endif() + endif() + else() + endif() +endfunction() + +function(build TARGET_CMAKE_COMMAND DIST_DIR GENERATE_OPTION) + file(REMOVE_RECURSE ${DIST_DIR}) + file(MAKE_DIRECTORY ${DIST_DIR}) + if((NOT EXISTS ${TARGET_CMAKE_COMMAND}) AND (NOT EXISTS "${TARGET_CMAKE_COMMAND}.exe")) + message("${TARGET_CMAKE_COMMAND} not found") + return() + endif() + if(${TARGET_CMAKE_COMMAND} MATCHES "msys") + # msys2のときは、c:/path -> /c/path に書き換える + string(REGEX REPLACE "([A-z]):[/\\]" "/\\1/" CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_DIR}") + string(REGEX REPLACE "([A-z]):[/\\]" "/\\1/" GENERATE_OPTION "${GENERATE_OPTION}") + endif() + message("${TARGET_CMAKE_COMMAND} ${CMAKE_CURRENT_LIST_DIR} -G \"Unix Makefiles\" ${GENERATE_OPTION} ${MSYS2_ADD}") + execute_process( + COMMAND ${TARGET_CMAKE_COMMAND} ${CMAKE_CURRENT_LIST_DIR} -G "Unix Makefiles" ${GENERATE_OPTION} ${MSYS2_ADD} + WORKING_DIRECTORY ${DIST_DIR} + RESULT_VARIABLE rv + ) + #message("rv=${rv}") + execute_process( + COMMAND ${TARGET_CMAKE_COMMAND} --build . --config release -- -j + WORKING_DIRECTORY ${DIST_DIR} + ) + if (DEFINED CMAKE_INSTALL_PREFIX) + execute_process( + COMMAND ${TARGET_CMAKE_COMMAND} --build . --config release --target install + WORKING_DIRECTORY ${DIST_DIR} + ) + endif() +endfunction() + +## cygwin +GetCygwinPath(PATH) +set(ENV{PATH} ${PATH}) +message("cygwin ENV{PATH}=$ENV{PATH}") + +if (EXISTS ${PATH}/g++.exe) + # gcc-core, gcc-g++ package (cygwin 64bit) + set(GENERATE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/toolchain_x86_64-cygwin.cmake") + if(DEFINED CMAKE_INSTALL_PREFIX) + list(APPEND GENERATE_OPTIONS "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/cygterm_x86_64") + endif() + build("${PATH}/cmake" "build_cygterm_x86_64" "${GENERATE_OPTIONS}") + if(DEFINED CMAKE_INSTALL_PREFIX) + file(COPY "${CMAKE_INSTALL_PREFIX}/cygterm_x86_64/cygterm.exe" DESTINATION ${CMAKE_INSTALL_PREFIX}) + file(COPY "${CMAKE_INSTALL_PREFIX}/cygterm_x86_64/cygterm.cfg" DESTINATION ${CMAKE_INSTALL_PREFIX}) + endif() endif() -if (NOT EXISTS ${CYGWIN_PATH}/gcc.exe) - # package gcc-core - message("CYGWIN_PATH=${CYGWIN_PATH}") - message(FATAL_ERROR "Not found cygwin gcc") + +if (EXISTS ${PATH}/i686-pc-cygwin-g++.exe) + # cygwin32-gcc-core, cygwin32-gcc-g++ package (cygwin 32bit on cygwin 64bit) + set(GENERATE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/toolchain_i686-cygwin.cmake") + if(DEFINED CMAKE_INSTALL_PREFIX) + list(APPEND GENERATE_OPTIONS "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/cygterm_i686") + endif() + build("${PATH}/cmake" "build_cygterm_i686" "${GENERATE_OPTIONS}") endif() -if (NOT EXISTS ${CYGWIN_PATH}/g++.exe) - # package gpp - message(FATAL_ERROR "Not found cygwin g++") -endif() -# package mingw64-x86_64-gcc-core +## msys2 +GetMsys2Path(PATH) +set(ENV{PATH} ${PATH}) +message("msys2 ENV{PATH}=$ENV{PATH}") -message("build_cygterm.cmake") -message("CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}") -message("CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}") -message("CMAKE_CURRENT_LIST_DIR=${CMAKE_CURRENT_LIST_DIR}") -message("CYGWIN_PATH=${CYGWIN_PATH}") -set(ENV{PATH} ${CYGWIN_PATH}) -execute_process( - COMMAND make all - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - RESULT_VARIABLE rv - ) -if(NOT rv STREQUAL "0") - message(FATAL_ERROR "cygterm build error") +if (EXISTS ${PATH}/g++.exe) + unset(GENERATE_OPTIONS) + if(DEFINED CMAKE_INSTALL_PREFIX) + set(GENERATE_OPTIONS "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") + endif() + build("${PATH}/cmake" "build_msys2term_x86_64" "${GENERATE_OPTIONS}") endif() Added: trunk/cygwin/cygterm/cygterm.rc =================================================================== --- trunk/cygwin/cygterm/cygterm.rc (rev 0) +++ trunk/cygwin/cygterm/cygterm.rc 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1 @@ +icon ICON cygterm.ico Added: trunk/cygwin/cygterm/msys2term.cfg =================================================================== --- trunk/cygwin/cygterm/msys2term.cfg (rev 0) +++ trunk/cygwin/cygterm/msys2term.cfg 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1,12 @@ +# CygTerm setting + +TERM = ttermpro.exe %s %d /E /KR=UTF8 /KT=UTF8 /VTICON=CygTerm /nossh +TERM_TYPE = vt100 +PORT_START = 20000 +PORT_RANGE = 40 +SHELL = auto +ENV_1 = MAKE_MODE=unix +ENV_2 = MSYSTEM=MINGW64 +#ENV_2 = MSYSTEM=MINGW32 +#ENV_2 = MSYSTEM=MSYS +LOGIN_SHELL = Yes Added: trunk/cygwin/cygterm/toolchain_i686-cygwin.cmake =================================================================== --- trunk/cygwin/cygterm/toolchain_i686-cygwin.cmake (rev 0) +++ trunk/cygwin/cygterm/toolchain_i686-cygwin.cmake 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1,8 @@ +set(CMAKE_SYSROOT /usr/i686-pc-cygwin/sys-root) +set(CMAKE_RC_COMPILER /bin/i686-pc-cygwin-windres) +set(CMAKE_C_COMPILER i686-pc-cygwin-gcc) +set(CMAKE_CXX_COMPILER i686-pc-cygwin-g++) +if(NOT EXISTS ${CMAKE_SYSROOT}) + unset(CMAKE_RC_COMPILER) + unset(CMAKE_SYSROOT) +endif() Added: trunk/cygwin/cygterm/toolchain_x86_64-cygwin.cmake =================================================================== --- trunk/cygwin/cygterm/toolchain_x86_64-cygwin.cmake (rev 0) +++ trunk/cygwin/cygterm/toolchain_x86_64-cygwin.cmake 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1,8 @@ +set(CMAKE_SYSROOT /usr/x86_64-pc-cygwin/sys-root) +set(CMAKE_C_COMPILER x86_64-pc-cygwin-gcc) +set(CMAKE_CXX_COMPILER x86_64-pc-cygwin-g++) +set(CMAKE_RC_COMPILER x86_64-pc-cygwin-windres) +if(NOT EXISTS ${CMAKE_SYSROOT}) + unset(CMAKE_RC_COMPILER) + unset(CMAKE_SYSROOT) +endif() Added: trunk/cygwin/cygterm_build/CMakeLists.txt =================================================================== --- trunk/cygwin/cygterm_build/CMakeLists.txt (rev 0) +++ trunk/cygwin/cygterm_build/CMakeLists.txt 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1,44 @@ + +add_custom_target( + cygterm_build ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + ) + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cygterm_build) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + COMMAND ${CMAKE_COMMAND} -E echo ${CMAKE_BINARY_DIR}/$<CONFIG> + COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$<CONFIG> -P ${CMAKE_CURRENT_LIST_DIR}/../cygterm/build_cygterm.cmake + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cygterm_build + ) + +install( + FILES + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_x86_64/cygterm.exe + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_x86_64/cygterm.cfg + DESTINATION cygterm_x86_64 + OPTIONAL + ) +install( + FILES + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_x86_64/cygterm.exe + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_x86_64/cygterm.cfg + DESTINATION . + OPTIONAL + ) +install( + FILES + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_i686/cygterm.exe + ${CMAKE_BINARY_DIR}/$<CONFIG>/cygterm_i686/cygterm.cfg + DESTINATION cygterm_i686 + OPTIONAL + ) +install( + FILES + ${CMAKE_BINARY_DIR}/$<CONFIG>/msys2term.exe + ${CMAKE_BINARY_DIR}/$<CONFIG>/msys2term.cfg + DESTINATION . + OPTIONAL + ) Added: trunk/cygwin/cygtool_build/CMakeLists.txt =================================================================== --- trunk/cygwin/cygtool_build/CMakeLists.txt (rev 0) +++ trunk/cygwin/cygtool_build/CMakeLists.txt 2021-11-10 13:01:59 UTC (rev 9519) @@ -0,0 +1,20 @@ + +add_custom_target( + cygtool_build ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + ) + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cygtool_build) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + COMMAND ${CMAKE_COMMAND} -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$<CONFIG> -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -P ${CMAKE_CURRENT_LIST_DIR}/../cygtool/build_cygtool.cmake + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/build_mark.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cygtool_build + COMMENT Generate "${CMAKE_CURRENT_BINARY_DIR}/cygtool.dll" + ) + +install( + FILES ${CMAKE_BINARY_DIR}/$<CONFIG>/cygtool.dll + DESTINATION . + )