[ttssh2-commit] [9519] cygwin/CMakeLists.txt を整理

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 11月 10日 (水) 22:01:59 JST


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 .
+  )


ttssh2-commit メーリングリストの案内
Back to archive index