diff --git a/.devcontainer b/.devcontainer new file mode 160000 index 00000000..9392dab6 --- /dev/null +++ b/.devcontainer @@ -0,0 +1 @@ +Subproject commit 9392dab66088da3b820424480218fc88492927c7 diff --git a/.github/workflows/xpbuild.yml b/.github/workflows/xpbuild.yml new file mode 100644 index 00000000..b9166a83 --- /dev/null +++ b/.github/workflows/xpbuild.yml @@ -0,0 +1,30 @@ +name: Build +on: + push: + branches: [ "dev" ] + pull_request: + branches: [ "dev" ] + workflow_dispatch: +jobs: + linux: + uses: externpro/externpro/.github/workflows/build-linux.yml@25.05.2 + with: + cmake-workflow-preset: LinuxRelease + runon: ubuntu-latest + secrets: inherit + linux-arm64: + uses: externpro/externpro/.github/workflows/build-linux.yml@25.05.2 + with: + cmake-workflow-preset: LinuxRelease + runon: ubuntu-24.04-arm + secrets: inherit + macos: + uses: externpro/externpro/.github/workflows/build-macos.yml@25.05.2 + with: + cmake-workflow-preset: DarwinRelease + secrets: inherit + windows: + uses: externpro/externpro/.github/workflows/build-windows.yml@25.05.2 + with: + cmake-workflow-preset: WindowsRelease + secrets: inherit diff --git a/.github/workflows/xprelease.yml b/.github/workflows/xprelease.yml new file mode 100644 index 00000000..273199e9 --- /dev/null +++ b/.github/workflows/xprelease.yml @@ -0,0 +1,20 @@ +name: Release +on: + workflow_dispatch: + inputs: + workflow_run_url: + description: 'URL of the workflow run containing artifacts to upload (e.g., https://github.com/owner/repo/actions/runs/123456789)' + required: true + type: string +jobs: + # Upload build artifacts as release assets + release-from-build: + uses: externpro/externpro/.github/workflows/release-from-build.yml@25.05.2 + with: + workflow_run_url: ${{ github.event.inputs.workflow_run_url }} + artifact_pattern: "*.tar.xz" + permissions: + contents: write + id-token: write + attestations: write + secrets: inherit diff --git a/.gitignore b/.gitignore index d76e398f..382b456a 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,7 @@ x64 *.log *.trs .dirstamp +# externpro +.env +_bld*/ +docker-compose.override.yml diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..18932abf --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule ".devcontainer"] + path = .devcontainer + url = https://github.com/externpro/externpro diff --git a/CMakeLists.txt b/CMakeLists.txt index 13e73da9..a302002b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.4...3.31) +set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES .devcontainer/cmake/xproinc.cmake) PROJECT(yasm) if (COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) @@ -6,12 +7,13 @@ endif (COMMAND cmake_policy) OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON) -# Where to look first for cmake modules -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") +# Where to look for cmake modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") INCLUDE(GNUInstallDirs) INCLUDE(YasmMacros) INCLUDE(VersionGen) +INCLUDE(xpflags) OPTION(ENABLE_NLS "Enable message translations" OFF) @@ -37,22 +39,30 @@ INCLUDE_DIRECTORIES(AFTER ${CMAKE_BINARY_DIR} ${yasm_SOURCE_DIR}) INCLUDE(ConfigureChecks.cmake) OPTION(XP_INSTALL_YASM_EXE_ONLY "Only install the yasm executable" OFF) -IF(XP_INSTALL_YASM_EXE_ONLY) - SET(OPT_INSTALL EXCLUDE_FROM_ALL) -ELSE() - SET(OPT_INSTALL) -ENDIF() +if(NOT DEFINED XP_INSTALL_CMAKEDIR) + set(XP_INSTALL_CMAKEDIR ${CMAKE_INSTALL_DATADIR}/cmake) +endif() SET(targetsFile ${PROJECT_NAME}-targets) +set(exe ${PROJECT_NAME}) +if(DEFINED XP_NAMESPACE) + set(nameSpace NAMESPACE ${XP_NAMESPACE}::) + string(PREPEND exe "${XP_NAMESPACE}::") +endif() +xpPackageDevel(TARGETS_FILE ${targetsFile} EXE ${exe}) ADD_SUBDIRECTORY(tools) ADD_SUBDIRECTORY(libyasm) ADD_SUBDIRECTORY(modules) ADD_SUBDIRECTORY(frontends) -INSTALL(EXPORT ${targetsFile} DESTINATION ${CMAKE_INSTALL_BINDIR}/cmake ${OPT_INSTALL}) +if(XP_INSTALL_YASM_EXE_ONLY) +INSTALL(EXPORT ${targetsFile} DESTINATION ${XP_INSTALL_CMAKEDIR} ${nameSpace}) +endif() +if(NOT XP_INSTALL_YASM_EXE_ONLY) INSTALL(FILES libyasm.h ${CMAKE_BINARY_DIR}/libyasm-stdint.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ${OPT_INSTALL} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) +endif() diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..f82cfdd2 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,8 @@ +{ + "version": 8, + "include": [ + ".devcontainer/cmake/presets/xpLinuxNinja.json", + ".devcontainer/cmake/presets/xpDarwinNinja.json", + ".devcontainer/cmake/presets/xpWindowsVs2022.json" + ] +} diff --git a/CMakePresetsBase.json b/CMakePresetsBase.json new file mode 100644 index 00000000..24d566db --- /dev/null +++ b/CMakePresetsBase.json @@ -0,0 +1,22 @@ +{ + "version": 8, + "configurePresets": [ + { + "name": "config-base", + "hidden": true, + "binaryDir": "${sourceDir}/_bld-${presetName}", + "cacheVariables": { + "BUILD_SHARED_LIBS": "OFF", + "CMAKE_BUILD_TYPE": "Release", + "XP_INSTALL_YASM_EXE_ONLY": "ON", + "XP_NAMESPACE": "xpro" + } + } + ], + "buildPresets": [ + { + "name": "build-base", + "hidden": true + } + ] +} diff --git a/docker-compose.sh b/docker-compose.sh new file mode 120000 index 00000000..85f182f0 --- /dev/null +++ b/docker-compose.sh @@ -0,0 +1 @@ +.devcontainer/compose.pro.sh \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 120000 index 00000000..46c1f891 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1 @@ +.devcontainer/compose.bld.yml \ No newline at end of file diff --git a/frontends/tasm/CMakeLists.txt b/frontends/tasm/CMakeLists.txt index 3316aa05..e1fa6ec7 100644 --- a/frontends/tasm/CMakeLists.txt +++ b/frontends/tasm/CMakeLists.txt @@ -34,4 +34,6 @@ SET_SOURCE_FILES_PROPERTIES(tasm.c PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/license.c ) -INSTALL(TARGETS ytasm EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ${OPT_INSTALL}) +if(NOT XP_INSTALL_YASM_EXE_ONLY) +INSTALL(TARGETS ytasm EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/frontends/vsyasm/CMakeLists.txt b/frontends/vsyasm/CMakeLists.txt index fd67f77a..447de727 100644 --- a/frontends/vsyasm/CMakeLists.txt +++ b/frontends/vsyasm/CMakeLists.txt @@ -34,4 +34,6 @@ SET_SOURCE_FILES_PROPERTIES(vsyasm.c PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/license.c ) -INSTALL(TARGETS vsyasm EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ${OPT_INSTALL}) +if(NOT XP_INSTALL_YASM_EXE_ONLY) +INSTALL(TARGETS vsyasm EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/libyasm/CMakeLists.txt b/libyasm/CMakeLists.txt index cced2057..12054600 100644 --- a/libyasm/CMakeLists.txt +++ b/libyasm/CMakeLists.txt @@ -42,13 +42,15 @@ ELSE(BUILD_SHARED_LIBS) ) ENDIF(BUILD_SHARED_LIBS) +if(NOT XP_INSTALL_YASM_EXE_ONLY) INSTALL(TARGETS libyasm EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ${OPT_INSTALL} ) +endif() +if(NOT XP_INSTALL_YASM_EXE_ONLY) INSTALL(FILES arch.h assocdat.h @@ -78,5 +80,5 @@ INSTALL(FILES valparam.h value.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libyasm - ${OPT_INSTALL} ) +endif() diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index e3f8eb11..f59989c9 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -78,8 +78,6 @@ ELSE(regen_init_plugin_c) MESSAGE(STATUS "Not regenerating static modules file (unchanged)") ENDIF(regen_init_plugin_c) -SET_SOURCE_FILES_PROPERTIES(init_plugin.c GENERATED) - SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) IF(BUILD_SHARED_LIBS)