diff --git a/taskfile.yaml b/taskfile.yaml index 567483b7..3ab15cb4 100644 --- a/taskfile.yaml +++ b/taskfile.yaml @@ -3,7 +3,9 @@ version: "3" includes: deps: "taskfiles/deps.yaml" lint: "taskfiles/lint.yaml" + node-modules: "taskfiles/node-modules.yaml" test: "taskfiles/test.yaml" + toolchains: "taskfiles/toolchains.yaml" utils: "tools/yscope-dev-utils/exports/taskfiles/utils/utils.yaml" vars: @@ -11,9 +13,6 @@ vars: G_CLP_FFI_JS_BUILD_DIR: "{{.G_BUILD_DIR}}/clp-ffi-js" G_DEPS_DIR: "{{.G_BUILD_DIR}}/deps" G_DIST_DIR: "{{.ROOT_DIR}}/dist" - G_EMSDK_DIR: "{{.G_BUILD_DIR}}/emsdk" - G_EMSCRIPTEN_CMAKE_TOOLCHAIN_FILE: >- - {{.G_EMSDK_DIR}}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake G_CLP_FFI_JS_ENV_NAMES: ["node", "worker"] G_CLP_FFI_JS_TARGET_PREFIX: "ClpFfiJs-" @@ -23,25 +22,16 @@ vars: G_DEPS_CMAKE_SETTINGS_FILE: "{{.G_DEPS_CMAKE_SETTINGS_DIR}}/settings.cmake" G_CLP_FFI_JS_CHECKSUM: "{{.G_BUILD_DIR}}/clp-ffi-js.md5" - G_EMSDK_CHECKSUM: "{{.G_BUILD_DIR}}/emsdk.md5" tasks: default: - deps: ["clp-ffi-js"] + deps: ["package"] clean: + run: "once" cmds: - - task: "clean-emsdk" - - task: "clean-clp-ffi-js" - "rm -rf '{{.G_BUILD_DIR}}'" - - clean-emsdk: - cmds: - - "rm -rf '{{.G_EMSDK_DIR}}'" - - clean-clp-ffi-js: - cmds: - - "rm -rf '{{.G_CLP_FFI_JS_BUILD_DIR}}'" + - "rm -rf '{{.G_DIST_DIR}}'" clp-ffi-js: vars: @@ -49,13 +39,15 @@ tasks: OUTPUT_DIR: "{{.G_CLP_FFI_JS_BUILD_DIR}}" sources: - "{{.G_CLP_FFI_JS_BUILD_DIR}}/CMakeCache.txt" + - "{{.G_DEPS_CMAKE_SETTINGS_FILE}}" - "{{.G_EMSDK_CHECKSUM}}" - "{{.TASKFILE}}" - "CMakeLists.txt" - "src/**/*" + - "taskfiles/**/*" generates: ["{{.CHECKSUM_FILE}}"] + run: "once" deps: - - "emsdk" - task: "utils:checksum:validate" vars: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" @@ -73,59 +65,19 @@ tasks: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] - emsdk: - vars: - CHECKSUM_FILE: "{{.G_EMSDK_CHECKSUM}}" - EMSDK_VERSION: "4.0.10" - OUTPUT_DIR: "{{.G_EMSDK_DIR}}" - sources: ["{{.TASKFILE}}"] - generates: ["{{.CHECKSUM_FILE}}"] - run: "once" - deps: - - "init" - - task: "utils:checksum:validate" - vars: - CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" - EXCLUDE_PATTERNS: &emsdk_checksum_exclude_paths - - "upstream/emscripten/__pycache__" - - "upstream/emscripten/cache/sanity.txt" - - "upstream/emscripten/cache/symbol_lists" - - "upstream/emscripten/cache/symbol_lists.lock" - - "upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto" - - "upstream/emscripten/third_party/leb128/__pycache__" - - "upstream/emscripten/tools/__pycache__" - - "upstream/emscripten/tools/ports/__pycache__" - - "upstream/emscripten/tools/ports/contrib/__pycache__" - INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] - cmds: - - task: "clean-emsdk" - - "git clone https://github.com/emscripten-core/emsdk.git '{{.G_EMSDK_DIR}}'" - - |- - cd "{{.G_EMSDK_DIR}}" - ./emsdk install {{.EMSDK_VERSION}} - ./emsdk activate {{.EMSDK_VERSION}} - - |- - cd "{{.G_EMSDK_DIR}}/upstream/emscripten" - PATH=$(echo {{.G_EMSDK_DIR}}/node/*/bin):$PATH npm install - # This command must be last - - task: "utils:checksum:compute" - vars: - CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" - EXCLUDE_PATTERNS: *emsdk_checksum_exclude_paths - INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] - package: vars: CHECKSUM_FILE: "{{.G_BUILD_DIR}}/{{.TASK}}.md5" OUTPUT_DIR: "{{.G_DIST_DIR}}" sources: + - "{{.G_CLP_FFI_JS_CHECKSUM}}" + - "{{.TASKFILE}}" - "package.json" - "src/**/*.ts" - "tsconfig.build.json" - "tsconfig.json" - - "{{.G_CLP_FFI_JS_CHECKSUM}}" - - "{{.TASKFILE}}" generates: ["{{.CHECKSUM_FILE}}"] + run: "once" deps: - "clp-ffi-js" - "node-modules" @@ -134,15 +86,15 @@ tasks: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] cmds: - - "rm -rf {{.OUTPUT_DIR}}" + - "rm -rf '{{.OUTPUT_DIR}}'" - for: var: "G_CLP_FFI_JS_ENV_NAMES" cmd: >- rsync -a "{{.G_CLP_FFI_JS_BUILD_DIR}}/{{.G_CLP_FFI_JS_TARGET_PREFIX}}{{.ITEM}}."{d.ts,js,wasm} "{{.OUTPUT_DIR}}/" - - "npx tsc -p tsconfig.build.json" - - "npm pack" + - "npm run build:ts -- --outDir '{{.OUTPUT_DIR}}'" + - "npm pack --pack-destination '{{.OUTPUT_DIR}}'" # This command must be last - task: "utils:checksum:compute" vars: @@ -152,15 +104,16 @@ tasks: config-cmake-project: internal: true sources: + - "{{.G_DEPS_CMAKE_SETTINGS_FILE}}" - "{{.G_EMSDK_CHECKSUM}}" - "{{.TASKFILE}}" - "CMakeLists.txt" + - "taskfiles/**/*" generates: - "{{.G_CLP_FFI_JS_BUILD_DIR}}/CMakeCache.txt" - "{{.G_CLP_FFI_JS_BUILD_DIR}}/compile_commands.json" - deps: - - "deps" - - "emsdk" + run: "once" + deps: ["deps"] cmd: |- cmake \ -DCLP_FFI_JS_SUPPORTED_ENVIRONMENTS="{{.G_CLP_FFI_JS_ENV_NAMES | join ";"}}" \ @@ -168,17 +121,6 @@ tasks: -S "{{.ROOT_DIR}}" \ -B "{{.G_CLP_FFI_JS_BUILD_DIR}}" - node-modules: - internal: true - sources: - - "{{.ROOT_DIR}}/package.json" - - "{{.ROOT_DIR}}/package-lock.json" - - "{{.TASKFILE}}" - generates: - - "{{.ROOT_DIR}}/node_modules/**/*" - cmds: - - "npm clean-install" - init: internal: true silent: true diff --git a/taskfiles/deps.yaml b/taskfiles/deps.yaml index f5a426a8..166facc3 100644 --- a/taskfiles/deps.yaml +++ b/taskfiles/deps.yaml @@ -28,7 +28,7 @@ tasks: desc: "Download, and install (except for clp) all dependencies using Emscripten toolchain." run: "once" deps: - - ":emsdk" + - ":toolchains:emsdk" cmds: - task: ":utils:cmake:install-deps-and-generate-settings" vars: diff --git a/taskfiles/node-modules.yaml b/taskfiles/node-modules.yaml new file mode 100644 index 00000000..441aca54 --- /dev/null +++ b/taskfiles/node-modules.yaml @@ -0,0 +1,13 @@ +version: "3" + +tasks: + default: + sources: + - "{{.ROOT_DIR}}/package.json" + - "{{.ROOT_DIR}}/package-lock.json" + - "{{.TASKFILE}}" + generates: + - "{{.ROOT_DIR}}/node_modules/**/*" + run: "once" + cmds: + - "npm clean-install" diff --git a/taskfiles/test.yaml b/taskfiles/test.yaml index 3a6d2989..35d4f659 100644 --- a/taskfiles/test.yaml +++ b/taskfiles/test.yaml @@ -5,7 +5,7 @@ tasks: deps: ["js"] init: - deps: [":package", ":node-modules"] + deps: [":node-modules", ":package"] cmd: "npm run test:init" js: diff --git a/taskfiles/toolchains.yaml b/taskfiles/toolchains.yaml new file mode 100644 index 00000000..1dcfa86d --- /dev/null +++ b/taskfiles/toolchains.yaml @@ -0,0 +1,56 @@ +version: "3" + +vars: + G_EMSDK_DIR: "{{.G_BUILD_DIR}}/emsdk" + G_EMSCRIPTEN_CMAKE_TOOLCHAIN_FILE: >- + {{.G_EMSDK_DIR}}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake + G_EMSDK_CHECKSUM: "{{.G_BUILD_DIR}}/emsdk.md5" + +tasks: + emsdk: + vars: + CHECKSUM_FILE: "{{.G_EMSDK_CHECKSUM}}" + OUTPUT_DIR: "{{.G_EMSDK_DIR}}" + VERSION: "4.0.23" + sources: ["{{.TASKFILE}}"] + generates: ["{{.CHECKSUM_FILE}}"] + run: "once" + deps: + - ":init" + - task: ":utils:checksum:validate" + vars: + CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" + EXCLUDE_PATTERNS: &emsdk_checksum_exclude_paths + - "upstream/emscripten/__pycache__" + - "upstream/emscripten/cache/sanity.txt" + - "upstream/emscripten/cache/symbol_lists" + - "upstream/emscripten/cache/symbol_lists.lock" + - "upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto" + - "upstream/emscripten/third_party/leb128/__pycache__" + - "upstream/emscripten/tools/__pycache__" + - "upstream/emscripten/tools/ports/__pycache__" + - "upstream/emscripten/tools/ports/contrib/__pycache__" + INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] + cmds: + - "rm -rf '{{.G_EMSDK_DIR}}'" + - "rm -rf '{{.G_EMSDK_DIR}}.tar.gz'" + - task: ":utils:remote:download-and-extract-tar" + vars: + CHECKSUM_FILE: "{{.G_EMSDK_DIR}}.tar.gz.md5" + FILE_SHA256: "a91a4c1f42dbb0345faac093161e27d43e9b6964840d8c8d80976ab8d3eaf2d3" + OUTPUT_DIR: "{{.G_EMSDK_DIR}}" + TAR_FILE: "{{.G_EMSDK_DIR}}.tar.gz" + URL: "https://github.com/emscripten-core/emsdk/archive/refs/tags/{{.VERSION}}.tar.gz" + - |- + cd "{{.G_EMSDK_DIR}}" + ./emsdk install {{.VERSION}} + ./emsdk activate {{.VERSION}} + - |- + cd "{{.G_EMSDK_DIR}}/upstream/emscripten" + PATH="$(echo '{{.G_EMSDK_DIR}}'/node/*/bin):$PATH" npm install + # This command must be last + - task: ":utils:checksum:compute" + vars: + CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" + EXCLUDE_PATTERNS: *emsdk_checksum_exclude_paths + INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"]