From 48ef6589f762dff38d6692ecdaca77df95b16337 Mon Sep 17 00:00:00 2001 From: xicilion Date: Fri, 12 Jan 2024 21:43:41 +0800 Subject: [PATCH] build, refactor: refactor build.cmd and CMakeLists.txt --- build.cmd | 40 +++++++++++++++++++++++++++++------- fibjs/program/CMakeLists.txt | 28 ++++++++++++++++--------- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/build.cmd b/build.cmd index 5c099e049..fa9f78df0 100644 --- a/build.cmd +++ b/build.cmd @@ -3,28 +3,54 @@ set WORK_ROOT=%cd% set SOURCE_ROOT=%~dp0 +set dev=0 +set build_addon=0 + +set i=0 +for %%a in (%*) do ( + if "%%a"=="dev" ( + set dev=1 + set build_addon=1 + ) else if "%%a"=="ci" ( + set USE_VENDER_DIST=1 + set build_addon=1 + ) else ( + set new_args[!i!]=%%a + set /a i+=1 + ) +) + +set args_count=0 +for /f %%a in ('set new_args[ 2^>nul ^| find /c "="') do set args_count=%%a + +if %dev%==0 ( + set USE_VENDER_DIST=1 +) + if "%USE_VENDER_DIST%" == "" ( if exist "%SOURCE_ROOT%/vender/build.cmd" ( cd /d "%SOURCE_ROOT%/vender" - call build %*% + call build %new_args% if ERRORLEVEL 1 goto exitbuild ) else goto inform ) cd /d "%SOURCE_ROOT%/fibjs" -call build %*% +call build %new_args% if ERRORLEVEL 1 goto exitbuild cd /d "%SOURCE_ROOT%/fibjs/program" -call build %*% +call build %new_args% if ERRORLEVEL 1 goto exitbuild -cd /d "%SOURCE_ROOT%/fibjs/addons" -call build %*% -if ERRORLEVEL 1 goto exitbuild +if %build_addon%==0 ( + cd /d "%SOURCE_ROOT%/fibjs/addons" + call build %new_args% + if ERRORLEVEL 1 goto exitbuild +) cd /d "%SOURCE_ROOT%/fibjs/installer" -call build %*% +call build %new_args% if ERRORLEVEL 1 goto exitbuild cd /d "%SOURCE_ROOT%" diff --git a/fibjs/program/CMakeLists.txt b/fibjs/program/CMakeLists.txt index 5c63c04ba..143f3484a 100644 --- a/fibjs/program/CMakeLists.txt +++ b/fibjs/program/CMakeLists.txt @@ -5,15 +5,25 @@ project(${name}) include(${CMAKE_CURRENT_LIST_DIR}/../../vender/build_tools/cmake/option.cmake) +set(VENDER_PATH ${BIN_PATH}) + if(NOT "$ENV{USE_VENDER_DIST}" STREQUAL "") - include(FetchContent) - execute_process( - COMMAND git describe --tags --abbrev=0 - WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/../../vender" - OUTPUT_VARIABLE VENDER_TAG - OUTPUT_STRIP_TRAILING_WHITESPACE - ) + file(READ ${CMAKE_CURRENT_LIST_DIR}/../../.git/modules/vender/refs/heads/dev REF_HEAD) + file(GLOB ALL_TAGS ${CMAKE_CURRENT_LIST_DIR}/../../.git/modules/vender/refs/tags/*) + foreach(FILE ${ALL_TAGS}) + file(READ ${FILE} CONTENT) + if("${CONTENT}" STREQUAL "${REF_HEAD}") + get_filename_component(VENDER_TAG ${FILE} NAME) + break() + endif() + endforeach() + + if("${VENDER_TAG}" STREQUAL "") + message(FATAL_ERROR "cannot find vender tag") + endif() + + include(FetchContent) if("${BUILD_OS}" STREQUAL "Linux") set(BUILD_TARGET "linux") @@ -40,9 +50,7 @@ if(NOT "$ENV{USE_VENDER_DIST}" STREQUAL "") FetchContent_Populate(vender) endif () - set(VENDER_PATH ${vender_SOURCE_DIR}/${BUILD_OS}_${BUILD_ARCH}_${BUILD_TYPE}) -else() - set(VENDER_PATH ${BIN_PATH}) + file(COPY ${vender_SOURCE_DIR}/${BUILD_OS}_${BUILD_ARCH}_${BUILD_TYPE}/ DESTINATION ${VENDER_PATH}) endif() if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")