1
- cmake_minimum_required (VERSION 3.0)
1
+ cmake_minimum_required (VERSION 3.18)
2
+
3
+ project (wsl-ssh-agent NONE)
2
4
3
5
message (STATUS "Running cmake version ${CMAKE_VERSION} " )
4
- if (NOT CMAKE_TOOLCHAIN_FILE)
5
- set (CMAKE_TOOLCHAIN_FILE "../cmake/win64.toolchain" CACHE STRING "default toolchain" FORCE)
6
- endif ()
7
6
if (NOT CMAKE_BUILD_TYPE )
8
7
set (CMAKE_BUILD_TYPE "Release" CACHE STRING "default to release build type" FORCE)
9
8
endif ()
10
-
11
- project (wsl-ssh-agent NONE)
12
- set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR} /cmake)
13
-
9
+ set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" )
14
10
message (STATUS "Build type: ${CMAKE_BUILD_TYPE} " )
15
11
message (STATUS "Generator: ${CMAKE_GENERATOR} " )
16
12
17
- # Release installation directory
18
- if (NOT CMAKE_CROSSCOMPILING )
19
- message (FATAL_ERROR "Currently unsuppored environment. CMake willl exit now." )
13
+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR} /cmake)
14
+
15
+ if (NOT "$ENV{MSYSTEM_NAME} " STREQUAL "" )
16
+ set (MSYSTEM_NAME "$ENV{MSYSTEM_NAME} " CACHE INTERNAL "Copied from environment" )
20
17
else ()
21
- set (HOST_GOOS linux)
22
- set (HOST_GOARCH amd64)
18
+ set (MSYSTEM_NAME "linux_amd64" CACHE INTERNAL "Host environment" )
23
19
endif ()
24
20
25
- if (MSYSTEM_NAME STREQUAL "win32" )
26
- set (CROSS_GOOS windows)
27
- set (CROSS_GOARCH 386)
28
- message (STATUS "Targeting 32 bits Windows executable" )
29
- elseif (MSYSTEM_NAME STREQUAL "win64" )
21
+ if (MSYSTEM_NAME STREQUAL "win64" )
30
22
set (CROSS_GOOS windows)
31
23
set (CROSS_GOARCH amd64)
24
+ # we are not using cmake cross compilation abilities
25
+ set (CROSS_EXECUTABLE_SUFFIX ".exe" )
26
+ find_program (CROSS_RC_COMPILER x86_64-w64-mingw32-windres PATHS usr PATH_SUFFIXES bin DOC "Windows resource compiler path" REQUIRED)
32
27
message (STATUS "Targeting 64 bits Windows executable" )
33
28
else ()
34
- message (FATAL_ERROR "Currently unsuppored environment \" ${MSYSTEM_NAME} \" . CMake willl exit now. " )
29
+ message (FATAL_ERROR "Currently unsuppored environment \" ${MSYSTEM_NAME} \" ." )
35
30
endif ()
36
31
37
- set (DEST_DIR "${PROJECT_SOURCE_DIR} /bin" )
38
- message (STATUS "Installation directory: ${DEST_DIR} " )
39
-
40
- set (GO_MIN_REQURED_VERSION 1.19)
41
- find_package (Go ${GO_MIN_REQURED_VERSION} REQUIRED)
32
+ find_package (Go REQUIRED)
42
33
find_package (Git REQUIRED)
43
34
44
35
# Make sure we setup go properly
@@ -57,12 +48,21 @@ endif()
57
48
# Setting up versioning
58
49
########################################################################################################
59
50
60
- # Project version number
61
- set (PRJ_VERSION_Major "1" )
62
- set (PRJ_VERSION_Minor "6" )
63
- set (PRJ_VERSION_Patch "3" )
51
+ # Project version number - comes from release version tag
52
+ set (GIT_REF $ENV{GITHUB_REF} )
53
+ if (GIT_REF MATCHES "refs/tags/v([0-9]+)\\ .([0-9]+)\\ .([0-9]+)" )
54
+ set (PRJ_VERSION_Major ${CMAKE_MATCH_1} )
55
+ set (PRJ_VERSION_Minor ${CMAKE_MATCH_2} )
56
+ set (PRJ_VERSION_Patch ${CMAKE_MATCH_3} )
57
+ else ()
58
+ set (PRJ_VERSION_Major 0)
59
+ set (PRJ_VERSION_Minor 0)
60
+ set (PRJ_VERSION_Patch 0)
61
+ endif ()
64
62
65
- if (EXISTS "${PROJECT_SOURCE_DIR} /.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR} /.git" )
63
+ if (DEFINED ENV{GITHUB_SHA})
64
+ set (GIT_HASH "$ENV{GITHUB_SHA} " )
65
+ elseif (EXISTS "${PROJECT_SOURCE_DIR} /.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR} /.git" )
66
66
execute_process (COMMAND ${CMAKE_SOURCE_DIR} /cmake/githash.sh ${GIT_EXECUTABLE}
67
67
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
68
68
RESULT_VARIABLE res
@@ -75,25 +75,25 @@ else()
75
75
set (GIT_HASH "no-git" )
76
76
endif ()
77
77
configure_file ("${PROJECT_SOURCE_DIR} /cmake/version.go.in" "${PROJECT_SOURCE_DIR} /misc/version.go" )
78
- configure_file ("${PROJECT_SOURCE_DIR} /cmake/agent.rc.in" "${PROJECT_SOURCE_DIR} /cmd/agent/resources.rc" )
79
- configure_file ("${PROJECT_SOURCE_DIR} /cmake/agent.xml.in" "${PROJECT_SOURCE_DIR} /cmd/agent/manifest.xml" )
80
- configure_file ("${PROJECT_SOURCE_DIR} /cmake/wsl-ssh-agent.json.in" "${PROJECT_SOURCE_DIR} /wsl-ssh-agent.json" )
81
-
82
- # for user convinience
83
- execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR} /../../jstarks/npiperelay/npiperelay.exe ${PROJECT_BINARY_DIR} )
84
-
85
- # distribute history
86
- execute_process (COMMAND ${CMAKE_COMMAND} -E env ${GIT_EXECUTABLE} changelog --all --tag "v${PRJ_VERSION_Major} .${PRJ_VERSION_Minor} .${PRJ_VERSION_Patch} " --stdout OUTPUT_FILE ${PROJECT_BINARY_DIR} /changelog.txt ERROR_QUIET)
87
-
88
- message (STATUS "Building version \" ${PRJ_VERSION_Major} .${PRJ_VERSION_Minor} .${PRJ_VERSION_Patch} \" git \" ${GIT_HASH} \" " )
89
78
90
79
if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
91
- # Create git pre-commit hook to check formatting before commit
80
+ # Create local git hooks
92
81
if (EXISTS "${PROJECT_SOURCE_DIR} /.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR} /.git" )
93
82
execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR} /cmake/pre-commit ${PROJECT_SOURCE_DIR} /.git/hooks/. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} )
83
+ configure_file ("${PROJECT_SOURCE_DIR} /cmake/pre-push" "${PROJECT_SOURCE_DIR} /.git/hooks/pre-push" @ONLY)
94
84
endif ()
95
85
endif ()
96
86
87
+ if (CROSS_GOOS STREQUAL "windows" )
88
+ if (NOT EXISTS "${PROJECT_SOURCE_DIR} /gclpr.json" )
89
+ configure_file ("${PROJECT_SOURCE_DIR} /cmake/wsl-ssh-agent.json.in" "${PROJECT_SOURCE_DIR} /wsl-ssh-agent.json" @ONLY)
90
+ endif ()
91
+ configure_file ("${PROJECT_SOURCE_DIR} /cmake/agent.rc.in" "${PROJECT_SOURCE_DIR} /cmd/gui/resources.rc" @ONLY)
92
+ configure_file ("${PROJECT_SOURCE_DIR} /cmake/agent.xml.in" "${PROJECT_SOURCE_DIR} /cmd/gui/manifest.xml" @ONLY)
93
+ endif ()
94
+
95
+ message (STATUS "Building version \" ${PRJ_VERSION_Major} .${PRJ_VERSION_Minor} .${PRJ_VERSION_Patch} \" git \" ${GIT_HASH} \" " )
96
+
97
97
########################################################################################################
98
98
# Some contexts dependent settings
99
99
########################################################################################################
@@ -102,12 +102,14 @@ list(APPEND GO_ENV
102
102
GOPATH=${GO_PATH}
103
103
GOOS=${CROSS_GOOS}
104
104
GOARCH=${CROSS_GOARCH}
105
+ CGO_ENABLED=0
105
106
)
106
107
107
108
if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
108
- set (GO_ARGS "-mod=mod" )
109
+ set (TEST_RUN_ARGS "-v" )
110
+ set (GO_MOD_ARGS "-mod=mod" )
109
111
else ()
110
- set (GO_ARGS "-mod=vendor" )
112
+ set (GO_MOD_ARGS "-mod=vendor" )
111
113
endif ()
112
114
113
115
########################################################################################################
@@ -117,38 +119,43 @@ endif()
117
119
add_custom_target (release
118
120
DEPENDS ${PROJECT_SOURCE_DIR} /wsl-ssh-agent.zip
119
121
${PROJECT_SOURCE_DIR} /wsl-ssh-agent.json
120
- COMMAND ${CMAKE_SOURCE_DIR} /cmake/sign .sh
122
+ COMMAND ${CMAKE_SOURCE_DIR} /cmake/scoophash .sh ${MSYSTEM_NAME}
121
123
COMMENT "Building release..."
122
124
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} " )
123
125
124
126
add_custom_command (OUTPUT ${PROJECT_SOURCE_DIR} /wsl-ssh-agent.zip
125
- DEPENDS ${PROJECT_BINARY_DIR} /changelog.txt
126
- ${PROJECT_BINARY_DIR} /npiperelay${CMAKE_EXECUTABLE_SUFFIX}
127
- ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX}
127
+ DEPENDS ${PROJECT_BINARY_DIR} /npiperelay${CROSS_EXECUTABLE_SUFFIX}
128
+ ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX}
128
129
COMMAND ${CMAKE_COMMAND} -E tar "cfv" ${PROJECT_SOURCE_DIR} /wsl-ssh-agent.zip --format=zip
129
- changelog.txt npiperelay${CMAKE_EXECUTABLE_SUFFIX } wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX }
130
+ npiperelay${CROSS_EXECUTABLE_SUFFIX } wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX }
130
131
COMMENT "Archiving release..."
131
132
WORKING_DIRECTORY "${PROJECT_BINARY_DIR} " )
132
133
133
134
add_custom_target (bin_agent ALL
134
135
DEPENDS ${PROJECT_SOURCE_DIR} /cmd/agent/resources.syso
135
- BYPRODUCTS ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX }
136
- COMMAND ${GO_ENV} ${GO_EXECUTABLE} build -trimpath -o ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX }
136
+ BYPRODUCTS ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX }
137
+ COMMAND ${GO_ENV} ${GO_EXECUTABLE} build ${GO_MOD_ARGS} -trimpath -o ${PROJECT_BINARY_DIR} /wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX }
137
138
-ldflags='-H=windowsgui'
138
- ${GO_ARGS}
139
139
./cmd/agent
140
140
COMMENT "Building wsl-ssh-agent-gui..."
141
141
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} " )
142
142
143
143
add_custom_command (OUTPUT ${PROJECT_SOURCE_DIR} /cmd/agent/resources.syso
144
- DEPENDS ${PROJECT_SOURCE_DIR} /cmd/agent/resources.rc
145
- ${PROJECT_SOURCE_DIR} /cmd/agent/manifest.xml
146
- ${PROJECT_SOURCE_DIR} /cmd/agent/icon.ico
147
- COMMAND ${CMAKE_RC_COMPILER} -O coff
148
- -o ${PROJECT_SOURCE_DIR} /cmd/agent/resources.syso
149
- -i ${PROJECT_SOURCE_DIR} /cmd/agent/resources.rc
150
- WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
151
- COMMENT "Building wsl-ssh-agent-gui resources..." )
144
+ DEPENDS ${PROJECT_SOURCE_DIR} /cmd/agent/resources.rc
145
+ ${PROJECT_SOURCE_DIR} /cmd/agent/manifest.xml
146
+ ${PROJECT_SOURCE_DIR} /cmd/agent/icon.ico
147
+ COMMAND ${CROSS_RC_COMPILER} -O coff
148
+ -o ${PROJECT_SOURCE_DIR} /cmd/agent/resources.syso
149
+ -i ${PROJECT_SOURCE_DIR} /cmd/agent/resources.rc
150
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
151
+ COMMENT "Building wsl-ssh-agent-gui resources..." )
152
+
153
+ add_custom_target (bin_npiperelay
154
+ BYPRODUCTS ${PROJECT_BINARY_DIR} /npiperelay${CROSS_EXECUTABLE_SUFFIX}
155
+ COMMAND ${GO_ENV} ${GO_EXECUTABLE} build ${GO_MOD_ARGS} -trimpath -o ${PROJECT_BINARY_DIR} /npiperelay${CROSS_EXECUTABLE_SUFFIX}
156
+ github.com/jstarks/npiperelay
157
+ COMMENT "Building npiperelay..."
158
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} " )
152
159
153
160
########################################################################################################
154
161
# Development
@@ -178,7 +185,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
178
185
179
186
add_custom_target (deps_tidy
180
187
SOURCES ${PROJECT_SOURCE_DIR} /go.mod
181
- COMMAND ${GO_ENV} ${GO_EXECUTABLE} mod tidy -compat =${GO_MIN_REQURED_VERSION }
188
+ COMMAND ${GO_ENV} ${GO_EXECUTABLE} mod tidy -go =${GO_LANG_VERSION }
182
189
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
183
190
COMMENT "Cleaning dependencies (go mod tidy)"
184
191
VERBATIM )
0 commit comments