-IF(NOT DEFINE_HOST_BUILD)
-SET(CMAKE_C_FLAGS ENV${CFLAGS})
-INCLUDE(FindPkgConfig)
-pkg_check_modules(REQUIRED_PKGS REQUIRED hal-api-device)
-FOREACH(flag ${REQUIRED_PKGS_CFLAGS})
- SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-SET(CMAKE_C_FLAGS ${EXTRA_CFLAGS})
-ENDIF()
-
set(COPY_BLOCKDEVSRCS ../upgrade-apply/sha1/sha1.c main.c lib.c)
include_directories(../upgrade-apply/sha1)
set(COPY_BLOCKDEVEXENAME "copy-blockdev")
target_compile_definitions(${COPY_BLOCKDEVEXENAME} PRIVATE -D_FILE_OFFSET_BITS=64)
IF(NOT DEFINE_HOST_BUILD)
-target_link_libraries(${COPY_BLOCKDEVEXENAME} ${REQUIRED_PKGS_LDFLAGS})
+target_link_options(${COPY_BLOCKDEVEXENAME} PRIVATE "-static")
+set_target_properties(${COPY_BLOCKDEVEXENAME} PROPERTIES
+ LINK_SEARCH_START_STATIC ON
+ LINK_SEARCH_END_STATIC ON
+ )
ELSE()
target_compile_definitions(${COPY_BLOCKDEVEXENAME} PRIVATE -DHOST_BUILD)
ENDIF()
#include <sys/statvfs.h>
#include <sys/types.h>
#include <sys/vfs.h>
+#include <sys/wait.h>
#include <unistd.h>
#include <upgrade-apply/sha1/sha1.h>
-#ifndef HOST_BUILD
-#include <hal/hal-device-board.h>
-#endif
-
void usage(char *name) {
fprintf(stderr, "Usage:\n"
"\n"
close(*fd);
}
+#ifndef HOST_BUILD
+static int set_upgrade_progress_status(int progress)
+{
+ int child_ret = 0;
+ pid_t pid = fork();
+
+ if (pid == -1) {
+ fprintf(stderr, "Failed to fork\n");
+ return -1;
+ }
+
+ if (pid == 0) {
+ // Max value for progress is 100
+ char buf[4];
+ snprintf(buf, sizeof(buf), "%d", progress);
+ if (execl(DEVICE_BOARD_SET_UPGRADE_PROGRESS_STATUS_BIN,
+ DEVICE_BOARD_SET_UPGRADE_PROGRESS_STATUS_BIN, buf, (char *)NULL) < 0) {
+ fprintf(stderr, "Failed to exec %s\n", DEVICE_BOARD_SET_UPGRADE_PROGRESS_STATUS_BIN);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (waitpid(pid, &child_ret, 0) < 0) {
+ fprintf(stderr, "Failed to wait child\n");
+ return -1;
+ }
+
+ return WEXITSTATUS(child_ret) == 0 ? 0 : -1;
+}
+#endif
+
int copy_and_update_progress(struct params_t *params) {
int prev_progress = params->progress_from;
int progress = params->progress_from;
if (progress - prev_progress > 0) {
#ifndef HOST_BUILD
- if (params->update && hal_device_board_set_upgrade_progress_status(progress) < 0) {
+ if (params->update && set_upgrade_progress_status(progress) < 0) {
fprintf(stderr, "Cannot set upgrade progress status.\n");
return ERR_STATUS;
};
}
#ifndef HOST_BUILD
- if (params->update && hal_device_board_set_upgrade_progress_status(params->progress_to) < 0) {
+ if (params->update && set_upgrade_progress_status(params->progress_to) < 0) {
fprintf(stderr, "Cannot set upgrade progress status.\n");
return ERR_STATUS;
}