github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/Makefile (about)

     1  .EXPORT_ALL_VARIABLES:
     2  VERSION := $(shell head -n 1 VERSION)
     3  PROJECT := zd
     4  QINIU_DIR := "${HOME}/work/zentao/qiniu/"
     5  QINIU_DIST_DIR := ${QINIU_DIR}${PROJECT}/${VERSION}/
     6  PACKAGE := ${PROJECT}-${VERSION}
     7  BIN_DIR := bin
     8  BIN_ZIP_DIR := ${BIN_DIR}/zip/${PROJECT}/${VERSION}/
     9  BIN_OUT := ${BIN_DIR}/${PROJECT}/${VERSION}/
    10  CLIENT_OUT_DIR := client/out/
    11  CLIENT_BIN_DIR := client/bin/
    12  CLIENT_OUT_DIR := client/out/
    13  CLIENT_OUT_DIR_EXECUTABLE := ${CLIENT_OUT_DIR}executable/
    14  CLIENT_OUT_DIR_UPGRADE := ${CLIENT_OUT_DIR}upgrade/
    15  CLIENT_UI_DIR := client/ui/
    16  COMMAND_MAIN_DIR := cmd/command/
    17  COMMAND_MAIN_FILE := ${COMMAND_MAIN_DIR}main.go
    18  SERVER_MAIN_FILE := cmd/server/main.go
    19  BUILD_TIME := $(shell git show -s --format=%cd)
    20  GO_VERSION := $(go version)
    21  GIT_HASH := $(git show -s --format=%H)
    22  BUILD_CMD_UNIX := go build -ldflags "-X 'main.AppVersion=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}' -X 'main.GoVersion=${GO_VERSION}' -X 'main.GitHash=${GIT_HASH}'"
    23  BUILD_CMD_WIN := go build -ldflags "-s -w -X 'main.AppVersion=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}' -X 'main.GoVersion=${GO_VERSION}' -X 'main.GitHash=${GIT_HASH}'"
    24  
    25  default: clear build_ui prepare_build compile_all copy_files package package_upgrade
    26  clear:
    27  	@rm -rf ${BIN_DIR}
    28  	@rm -rf ${CLIENT_OUT_DIR}
    29  
    30  prepare_build: clear update_version_in_config gen_version_file prepare_res
    31  
    32  win64:       prepare_build compile_launcher_win64 compile_server_win64       package_gui_win64_client       compile_command_win64   copy_files package package_upgrade
    33  # win32:       prepare_build compile_launcher_win32 compile_server_win32       package_gui_win32_client       compile_command_win32   copy_files package package_upgrade
    34  linux:       prepare_build                        compile_server_linux       package_gui_linux_client       compile_command_linux   copy_files package package_upgrade
    35  linux_arm64: prepare_build                        compile_server_linux_arm64 package_gui_linux_client_arm64 compile_command_linux_arm64 copy_files package package_upgrade
    36  mac:         prepare_build                        compile_server_mac         package_gui_mac_client         compile_command_mac     copy_files package package_upgrade
    37  
    38  compile_all: compile_win64 compile_linux compile_mac
    39  
    40  compile_win64: compile_launcher_win64 compile_server_win64 package_gui_win64_client compile_command_win64
    41  # compile_win32: compile_launcher_win32 compile_server_win32 package_gui_win32_client compile_command_win32
    42  compile_linux: compile_server_linux package_gui_linux_client compile_command_linux
    43  compile_linux_arm64: compile_server_linux_arm64 package_gui_linux_client_arm64 compile_command_linux_arm64
    44  compile_mac: compile_server_mac package_gui_mac_client compile_command_mac
    45  
    46  upload: upload_to
    47  
    48  prepare_res:
    49  	@echo 'start prepare res'
    50  	@cp res/zh/sample.yaml demo/default.yaml
    51  	@rm -rf ${BIN_DIR}
    52  
    53  
    54  build_ui:
    55  	@echo 'compile ui'
    56  	@cd ui && yarn install && yarn build --dest ../client/ui && cd ..
    57  
    58  compile_server_win64:
    59  	@echo 'start compile win64'
    60  	@GOOS=windows GOARCH=amd64 \
    61  		${BUILD_CMD_WIN} -x -v \
    62   		-o ${BIN_DIR}/win64/server.exe ${SERVER_MAIN_FILE}
    63  
    64  	@rm -rf "${CLIENT_OUT_DIR_UPGRADE}win64" && mkdir -p "${CLIENT_OUT_DIR_UPGRADE}win64" && \
    65    		cp ${BIN_DIR}/win64/server.exe "${CLIENT_OUT_DIR_UPGRADE}win64/"
    66  
    67  compile_server_win32:
    68  	@echo 'start compile server win32'
    69  	@rm -rf ${BIN_DIR}/win32/server.exe
    70  	@GOOS=windows GOARCH=386 \
    71  		${BUILD_CMD_WIN} -x -v \
    72  		-o ${BIN_DIR}/win32/server.exe ${SERVER_MAIN_FILE}
    73  
    74  	@rm -rf "${CLIENT_OUT_DIR_UPGRADE}win32" && mkdir -p "${CLIENT_OUT_DIR_UPGRADE}win32" && \
    75    		cp ${BIN_DIR}/win32/server.exe "${CLIENT_OUT_DIR_UPGRADE}win32/"
    76  
    77  compile_server_linux:
    78  	@echo 'start compile server linux'
    79  	@rm -rf ${BIN_DIR}/linux/server
    80  	@GOOS=linux GOARCH=amd64 \
    81  		${BUILD_CMD_UNIX} \
    82  		-o ${BIN_DIR}/linux/server ${SERVER_MAIN_FILE}
    83  
    84  	@rm -rf "${CLIENT_OUT_DIR_UPGRADE}linux" && mkdir -p "${CLIENT_OUT_DIR_UPGRADE}linux" && \
    85    		cp ${BIN_DIR}/linux/server "${CLIENT_OUT_DIR_UPGRADE}linux/"
    86  
    87  compile_server_linux_arm64:
    88  	@echo 'start compile server linux for arm64'
    89  	@rm -rf ${BIN_DIR}/linux_arm64/server
    90  	@GOOS=linux GOARCH=arm64 GOARM=7 \
    91  		${BUILD_CMD_UNIX} \
    92  		-o ${BIN_DIR}/linux_arm64/server ${SERVER_MAIN_FILE}
    93  
    94  	@rm -rf "${CLIENT_OUT_DIR_UPGRADE}linux_arm64" && mkdir -p "${CLIENT_OUT_DIR_UPGRADE}linux_arm64" && \
    95    		cp ${BIN_DIR}/linux_arm64/server "${CLIENT_OUT_DIR_UPGRADE}linux_arm64/"
    96  
    97  compile_server_mac:
    98  	@echo 'start compile server mac'
    99  	@GOOS=darwin GOARCH=amd64 \
   100  		${BUILD_CMD_UNIX} \
   101  		-o ${BIN_DIR}/darwin/server ${SERVER_MAIN_FILE}
   102  
   103  	@rm -rf "${CLIENT_OUT_DIR_UPGRADE}darwin" && mkdir -p "${CLIENT_OUT_DIR_UPGRADE}darwin" && \
   104    		cp ${BIN_DIR}/darwin/server "${CLIENT_OUT_DIR_UPGRADE}darwin/"
   105  
   106  # gui
   107  package_gui_win64_client:
   108  	@echo 'start package gui win64'
   109  	@rm -rf ${CLIENT_BIN_DIR}/* && mkdir -p ${CLIENT_BIN_DIR}win32
   110  	@cp -rf ${BIN_DIR}/win64/server.exe ${CLIENT_BIN_DIR}win32/server.exe
   111  
   112  	@cd client && npm install && npm run package-win64 && cd ..
   113  	@rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}win64 && mkdir -p ${CLIENT_OUT_DIR_EXECUTABLE}win64 && \
   114  		mv ${CLIENT_OUT_DIR}${PROJECT}-win32-x64 ${CLIENT_OUT_DIR_EXECUTABLE}win64/gui
   115  
   116  package_gui_win32_client:
   117  	@echo 'start package gui win32'
   118  	@rm -rf ${CLIENT_BIN_DIR}/* && mkdir -p ${CLIENT_BIN_DIR}win32
   119  	@cp -rf ${BIN_DIR}/win32/server.exe ${CLIENT_BIN_DIR}win32/server.exe
   120  
   121  	@cd client && npm install && npm run package-win32 && cd ..
   122  	@rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}win32 && mkdir -p ${CLIENT_OUT_DIR_EXECUTABLE}win32 && \
   123  		mv ${CLIENT_OUT_DIR}${PROJECT}-win32-ia32 ${CLIENT_OUT_DIR_EXECUTABLE}win32/gui
   124  
   125  package_gui_linux_client:
   126  	@echo 'start package gui linux'
   127  	@rm -rf ${CLIENT_BIN_DIR}/* && mkdir -p ${CLIENT_BIN_DIR}linux
   128  	@cp -rf ${BIN_DIR}/linux/server ${CLIENT_BIN_DIR}linux/server
   129  
   130  	@cd client && npm install && npm run package-linux && cp -r icon out/${PROJECT}-linux-x64 && cd ..
   131  	@rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}linux && mkdir -p ${CLIENT_OUT_DIR_EXECUTABLE}linux && \
   132  		mv ${CLIENT_OUT_DIR}${PROJECT}-linux-x64 ${CLIENT_OUT_DIR_EXECUTABLE}linux/gui
   133  
   134  package_gui_linux_client_arm64:
   135  	@echo 'start package gui linux for arm64'
   136  	@rm -rf ${CLIENT_BIN_DIR}/* && mkdir -p ${CLIENT_BIN_DIR}linux
   137  	@cp -rf ${BIN_DIR}/linux_arm64/server ${CLIENT_BIN_DIR}linux/server
   138  
   139  	@cd client && npm install && npm run package-linux-arm64 && cp -r icon out/${PROJECT}-linux-arm64 && cd ..
   140  	@rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}linux_arm64 && mkdir -p ${CLIENT_OUT_DIR_EXECUTABLE}linux_arm64 && \
   141  		mv ${CLIENT_OUT_DIR}${PROJECT}-linux-arm64 ${CLIENT_OUT_DIR_EXECUTABLE}linux_arm64/gui
   142  
   143  package_gui_mac_client:
   144  	@echo 'start package gui mac'
   145  	@rm -rf ${CLIENT_BIN_DIR}/* && mkdir -p ${CLIENT_BIN_DIR}darwin
   146  	@cp -rf ${BIN_DIR}/darwin/server ${CLIENT_BIN_DIR}darwin/server
   147  
   148  	@cd client && npm install && npm run package-mac && cd ..
   149  	@rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}darwin && mkdir -p ${CLIENT_OUT_DIR_EXECUTABLE}darwin && \
   150  		mv ${CLIENT_OUT_DIR}${PROJECT}-darwin-x64 ${CLIENT_OUT_DIR_EXECUTABLE}darwin/gui && \
   151  		mv ${CLIENT_OUT_DIR_EXECUTABLE}darwin/gui/zd.app ${CLIENT_OUT_DIR_EXECUTABLE}darwin/zd.app && rm -rf ${CLIENT_OUT_DIR_EXECUTABLE}darwin/gui
   152  
   153  
   154  # launcher
   155  compile_launcher_win64:
   156  	@echo 'start compile win64 launcher'
   157  	@rsrc -arch amd64 -manifest xdoc/main.manifest -ico xdoc/favicon.ico -o cmd/launcher/main.syso
   158  	@cd cmd/launcher && \
   159      GOOS=windows GOARCH=amd64 \
   160  		${BUILD_CMD_WIN} -x -v \
   161  		-o ../../${BIN_DIR}/win64/${PROJECT}-gui.exe && \
   162  		cd ..
   163  
   164  compile_launcher_win32:
   165  	@echo 'start compile win32 launcher'
   166  	@rsrc -arch 386 -manifest xdoc/main.manifest -ico xdoc/favicon.ico -o cmd/launcher/main.syso
   167  	@cd cmd/launcher && \
   168          GOOS=windows GOARCH=386 \
   169  		${BUILD_CMD_WIN} -x -v \
   170  		-o ../../${BIN_DIR}/win32/${PROJECT}-gui.exe && \
   171          cd ..
   172  
   173  # command line
   174  compile_command_win64:
   175  	@echo 'start compile win64'
   176  	@GOOS=windows GOARCH=amd64 \
   177  		${BUILD_CMD_WIN} -x -v \
   178   		-o ${BIN_DIR}/win64/${PROJECT}.exe ${COMMAND_MAIN_FILE}
   179  
   180  compile_command_win32:
   181  	@echo 'start compile win32'
   182  	@GOOS=windows GOARCH=386 \
   183  		${BUILD_CMD_WIN} -x -v \
   184   		-o ${BIN_DIR}/win32/${PROJECT}.exe ${COMMAND_MAIN_FILE}
   185  
   186  compile_command_linux:
   187  	@echo 'start compile linux'
   188  	@rm -rf ${BIN_DIR}/linux/${PROJECT}
   189  	@GOOS=linux GOARCH=amd64 \
   190  		${BUILD_CMD_UNIX} \
   191  		-o ${BIN_DIR}/linux/${PROJECT} ${COMMAND_MAIN_FILE}
   192  
   193  
   194  compile_command_linux_arm64:
   195  	@echo 'start compile linux for arm64'
   196  	@rm -rf ${BIN_DIR}/linux_arm64/${PROJECT}
   197  	@GOOS=linux GOARCH=arm64 GOARM=7 \
   198  		${BUILD_CMD_UNIX} \
   199  		-o ${BIN_DIR}/linux_arm64/${PROJECT} ${COMMAND_MAIN_FILE}
   200  
   201  compile_command_mac:
   202  	@echo 'start compile mac'
   203  	@GOOS=darwin GOARCH=amd64 \
   204  		${BUILD_CMD_UNIX} \
   205  		-o ${BIN_DIR}/darwin/${PROJECT} ${COMMAND_MAIN_FILE}
   206  
   207  
   208  copy_files:
   209  	@echo 'start copy files to ${BIN_DIR}'
   210  	@cp -r .zd.conf ${BIN_DIR}
   211  	@cp -r data ${BIN_DIR}
   212  	@cp -r yaml ${BIN_DIR}
   213  	@cp -r users ${BIN_DIR}
   214  	@cp -r demo ${BIN_DIR}
   215  	@cp -r runtime ${BIN_DIR}
   216  	@rm -rf ${BIN_DIR}/demo/out ${BIN_DIR}/yaml/article/chinese/slang/out ${BIN_DIR}/runtime/protobuf/out
   217  
   218  	@rm -rf ${BIN_DIR}/tmp
   219  	@mkdir -p ${BIN_DIR}/tmp/cache && sqlite3 tmp/cache/.data.db ".backup '${BIN_DIR}/tmp/cache/.data.db'"
   220  	@sqlite3 '${BIN_DIR}/tmp/cache/.data.db' ".read 'xdoc/clear-data.txt'"
   221  
   222  	@for platform in `ls ${CLIENT_OUT_DIR_EXECUTABLE}`;do \
   223  		cp -r .zd.conf "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   224  		cp -r bin/data "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   225  		cp -r bin/runtime "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   226  		cp -r bin/yaml "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   227  		cp -r bin/users "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   228  		cp -r bin/demo "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   229  		cp -r bin/tmp "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}"; \
   230  		cp ${BIN_DIR}/$${platform}/${PROJECT}.exe "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}" || true; \
   231  		cp ${BIN_DIR}/$${platform}/${PROJECT} "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}" || true; \
   232  		cp ${BIN_DIR}/$${platform}/${PROJECT}-gui.exe "${CLIENT_OUT_DIR_EXECUTABLE}$${platform}" || true; \
   233  	done
   234  
   235  	@rm -rf ${BIN_OUT}linux/runtime/php \
   236  		${BIN_OUT}linux/runtime/protobuf/bin/mac \
   237  		${BIN_OUT}linux/runtime/protobuf/bin/win*
   238  	@rm -rf ${BIN_OUT}darwin/runtime/php \
   239  		${BIN_OUT}darwin/runtime/protobuf/bin/linux \
   240  		${BIN_OUT}darwin/runtime/protobuf/bin/win*
   241  	# @rm -rf ${BIN_OUT}win32/runtime/protobuf/bin/mac \
   242  	# 	${BIN_OUT}win32/runtime/protobuf/bin/linux \
   243  	# 	${BIN_OUT}win32/runtime/protobuf/bin/win64
   244  	@rm -rf ${BIN_OUT}win64/runtime/protobuf/bin/mac \
   245  		${BIN_OUT}win64/runtime/protobuf/bin/linux \
   246  		${BIN_OUT}win64/runtime/protobuf/bin/win32
   247  
   248  package:
   249  	@echo 'start package'
   250  	@find . -name .DS_Store -print0 | xargs -0 rm -f
   251  	@for platform in `ls ${CLIENT_OUT_DIR_EXECUTABLE}`; do mkdir -p ${QINIU_DIST_DIR}$${platform}; done
   252  
   253  	@cd ${CLIENT_OUT_DIR_EXECUTABLE} && \
   254  		for platform in `ls ./`; \
   255  			do  cd $${platform} && \
   256  				pwd; \
   257  				zip -ry ${QINIU_DIST_DIR}$${platform}/${PROJECT}.zip ./* && \
   258  				md5sum ${QINIU_DIST_DIR}$${platform}/${PROJECT}.zip | awk '{print $$1}' | \
   259  					xargs echo > ${QINIU_DIST_DIR}$${platform}/${PROJECT}.zip.md5 && \
   260  				cd ../; \
   261  			done
   262  
   263  package_upgrade:
   264  	@echo 'start package upgrade'
   265  	@find . -name .DS_Store -print0 | xargs -0 rm -f
   266  	@for platform in `ls ${CLIENT_OUT_DIR_UPGRADE}`; do mkdir -p ${QINIU_DIST_DIR}$${platform}; done
   267  
   268  	@cd ${CLIENT_OUT_DIR_UPGRADE} && \
   269  		for platform in `ls ./`; \
   270  			do  cd $${platform} && \
   271  				cp -r ../../../ui ./; \
   272  				zip -ry ${QINIU_DIST_DIR}$${platform}/${PROJECT}-upgrade.zip ./* && \
   273  				md5sum ${QINIU_DIST_DIR}$${platform}/${PROJECT}-upgrade.zip | awk '{print $$1}' | \
   274  					xargs echo > ${QINIU_DIST_DIR}$${platform}/${PROJECT}-upgrade.zip.md5 && \
   275  				cd ../; \
   276  			done
   277  
   278  update_version_in_config:
   279  	@echo 'update version in config ${VERSION}'
   280  	@echo 'gen version'
   281  	@sed -i "s/Version.*/Version = ${VERSION}/" .zd.conf
   282  
   283  gen_version_file:
   284  	@echo 'gen version'
   285  	@mkdir -p ${QINIU_DIR}/${PROJECT}/
   286  	@echo '{"version": "${VERSION}"}' > ${QINIU_DIR}/${PROJECT}/version.json
   287  
   288  upload_to:
   289  	@echo 'upload...'
   290  	@find ${QINIU_DIR} -name ".DS_Store" -type f -delete
   291  	@qshell qupload2 --src-dir=${QINIU_DIR} --bucket=download --thread-count=10 --log-file=qshell.log \
   292                       --skip-path-prefixes=ztf,zv,zmanager,driver,deeptest --rescan-local --overwrite --check-hash
   293  
   294  help: ## this help
   295  	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)