diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..8d96444 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,26 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile +{ + "name": "Existing Dockerfile", + "build": { + // Sets the run context to one level up instead of the .devcontainer folder. + "context": "..", + // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. + "dockerfile": "../Dockerfile" + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Uncomment the next line to run commands after the container is created. + // "postCreateCommand": "cat /etc/os-release", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "devcontainer" +} diff --git a/CMakePresets.json b/CMakePresets.json index b38599b..bef647a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -11,10 +11,7 @@ "displayName": "Default Config", "generator": "Ninja", "binaryDir": "${sourceDir}/build", - "toolchainFile": "cmake/toolchain.cmake", - "cacheVariables": { - "Python3_EXECUTABLE": "/home/didas/src/SAT/incp-test/.venv/bin/python" - } + "toolchainFile": "cmake/toolchain.cmake" } ], "buildPresets": [ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f25c57a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM dockerhub.dsi.tecnico.ulisboa.pt/nanosatlab/istsat-2/incp:develop + +RUN apk update + +# Install friendlier shell +RUN apk add fish + +# Install compilers toolchain +RUN apk add git cmake ninja openocd gdb-multiarch build-base wget ca-certificates +ENV ARM_GCC_VERSION=15.2.rel1 +ENV ARM_GCC_URL=https://developer.arm.com/-/media/Files/downloads/gnu/${ARM_GCC_VERSION}/binrel/arm-gnu-toolchain-${ARM_GCC_VERSION}-x86_64-arm-none-eabi.tar.xz + +RUN mkdir -p /opt && \ + wget -O /tmp/arm-gcc.tar.xz ${ARM_GCC_URL} && \ + tar -xf /tmp/arm-gcc.tar.xz -C /opt && \ + rm /tmp/arm-gcc.tar.xz + +ENV PATH="/opt/arm-gnu-toolchain-${ARM_GCC_VERSION}-x86_64-arm-none-eabi/bin:${PATH}" diff --git a/app/cmake/incp.cmake b/app/cmake/incp.cmake index 731b23c..50742d8 100644 --- a/app/cmake/incp.cmake +++ b/app/cmake/incp.cmake @@ -1,18 +1,12 @@ -FetchContent_Declare( - pyincp - GIT_REPOSITORY git@repo.dsi.tecnico.ulisboa.pt:nanosatlab/istsat-2/incp.git - GIT_TAG develop -) - -FetchContent_MakeAvailable(pyincp) - -find_program(ASN1SCC NAMES asn1scc) - -set(INCP_SCHEMA ${CMAKE_CURRENT_LIST_DIR}/../incp/schema.yml) # Can also be a directory or list of files +set(INCP_SCHEMA ${CMAKE_CURRENT_LIST_DIR}/../incp/schema.yml) set(INCP_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) +set(INCP_APP_TARGET ${EXECUTABLE}) -set(ASN1_OUTPUT ${INCP_OUTPUT_DIR}/gen.asn1) +# External dependencies +find_program(ASN1SCC NAMES asn1scc) +find_program(PYINCP NAMES pyincp) +# Auxiliar variables set(ASN1_OUTPUT ${INCP_OUTPUT_DIR}/gen.asn1) set(ASN1SCC_SOURCES ${INCP_OUTPUT_DIR}/gen.c @@ -37,9 +31,7 @@ set(INCP_SOURCES add_custom_command( OUTPUT ${ASN1_OUTPUT} COMMAND - ${CMAKE_COMMAND} -E env - PYTHONPATH=${pyincp_SOURCE_DIR} - ${INCP_GEN_COMMAND} --asn1 ${INCP_OUTPUT_DIR} ${INCP_SCHEMA} + ${PYINCP} codegen --asn1 ${INCP_OUTPUT_DIR} ${INCP_SCHEMA} MAIN_DEPENDENCY ${INCP_SCHEMA} COMMENT "INCP: Generating ASN1 definition" VERBATIM @@ -63,20 +55,29 @@ add_custom_command( ${WRAPPER_SOURCE} ${WRAPPER_HEADER} COMMAND - ${CMAKE_COMMAND} -E env - PYTHONPATH=${pyincp_SOURCE_DIR} - ${INCP_GEN_COMMAND} --c ${INCP_OUTPUT_DIR} ${INCP_SCHEMA} + ${PYINCP} codegen --c ${INCP_OUTPUT_DIR} ${INCP_SCHEMA} MAIN_DEPENDENCY ${INCP_SCHEMA} COMMENT "INCP: Generating C wrapper" VERBATIM ) -# Integrate generated artifacts with the project's build -target_sources(${EXECUTABLE} PRIVATE - ${ASN1SCC_SOURCES} - ${WRAPPER_SOURCE} +# Custom target helps force ordering of code generation +add_custom_target(generate_incp + DEPENDS + ${WRAPPER_SOURCE} + ${WRAPPER_HEADER} + ${ASN1SCC_SOURCES} + ${ASN1SCC_HEADERS} +) +add_dependencies(${INCP_APP_TARGET} generate_incp) + +# Add generated sources tp the project build +target_sources(${INCP_APP_TARGET} PRIVATE + ${INCP_SOURCES} ) -target_include_directories(${EXECUTABLE} PRIVATE - ${INCP_OUTPUT_DIR} +# Add include paths +target_include_directories(${INCP_APP_TARGET} PRIVATE + ${INCP_OUTPUT_DIR} ) +