From 7352247c090b417859eb4c477dc001fe45c91697 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Tue, 6 Dec 2022 14:33:47 +0000 Subject: [PATCH 01/12] feat: Added cheribsd preset --- CMakeLists.txt | 2 +- CMakePresets.json | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e6cdcd5c..835cf50e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,7 +158,7 @@ else() # only use standard C and opt-in to non-standard includes set(CMAKE_C_EXTENSIONS OFF) endif() -set(CMAKE_C_FLAGS "-Wunused-variable -Wall -Wextra") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-variable -Wall -Wextra") set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/CMakePresets.json b/CMakePresets.json index b77dd14e5..090aa3250 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -40,6 +40,24 @@ "BUILD_CMOCKA_LIB": true } }, + { + "name": "cheribsd", + "inherits": "default", + "description": "CheriBSD build (alpha)", + "toolchainFile": "${sourceDir}/CMakeModules/CMakeToolchains/cheri.cmake", + "cacheVariables": { + "BUILD_MNL_LIB": false, + "BUILD_NETLINK_LIB": false, + "USE_NETLINK_SERVICE": false, + "USE_UCI_SERVICE": false, + "USE_GENERIC_IP_SERVICE": true, + "USE_RADIUS_SERVICE": true, + "BUILD_HOSTAPD": false, + "USE_CRYPTO_SERVICE": false, + "BUILD_OPENSSL_LIB": false, + "BUILD_CMOCKA_LIB": true + } + }, { "name": "linux", "inherits": "default", @@ -252,6 +270,10 @@ "name": "freebsd", "configurePreset": "freebsd" }, + { + "name": "cheribsd", + "configurePreset": "cheribsd" + }, { "name": "linux/header", "configurePreset": "linux/header" @@ -338,6 +360,10 @@ "name": "freebsd", "configurePreset": "freebsd" }, + { + "name": "cheribsd", + "configurePreset": "cheribsd" + }, { "name": "openwrt", "configurePreset": "openwrt", From c17469dbef611864e6f4a8b96a26b486fd58f1b7 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Tue, 6 Dec 2022 14:59:29 +0000 Subject: [PATCH 02/12] chore: cleanup --- CMakeModules/CMakeToolchains/cheri.cmake | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 CMakeModules/CMakeToolchains/cheri.cmake diff --git a/CMakeModules/CMakeToolchains/cheri.cmake b/CMakeModules/CMakeToolchains/cheri.cmake new file mode 100644 index 000000000..747076ed2 --- /dev/null +++ b/CMakeModules/CMakeToolchains/cheri.cmake @@ -0,0 +1,4 @@ +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -target aarch64-unknown-freebsd -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") From 64a9bb7c35b7bc19303dc958377ef61d241e08bf Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Tue, 6 Dec 2022 15:08:25 +0000 Subject: [PATCH 03/12] Update CMakePresets.json Co-authored-by: Alois Klink --- CMakePresets.json | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 090aa3250..3123e0d37 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -42,21 +42,9 @@ }, { "name": "cheribsd", - "inherits": "default", + "inherits": "freebsd", "description": "CheriBSD build (alpha)", - "toolchainFile": "${sourceDir}/CMakeModules/CMakeToolchains/cheri.cmake", - "cacheVariables": { - "BUILD_MNL_LIB": false, - "BUILD_NETLINK_LIB": false, - "USE_NETLINK_SERVICE": false, - "USE_UCI_SERVICE": false, - "USE_GENERIC_IP_SERVICE": true, - "USE_RADIUS_SERVICE": true, - "BUILD_HOSTAPD": false, - "USE_CRYPTO_SERVICE": false, - "BUILD_OPENSSL_LIB": false, - "BUILD_CMOCKA_LIB": true - } + "toolchainFile": "${sourceDir}/CMakeModules/CMakeToolchains/cheri.cmake" }, { "name": "linux", From 0233264ba40e013f6187005da97f5359fd90c4be Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Tue, 6 Dec 2022 15:51:51 +0000 Subject: [PATCH 04/12] feat: Added a new target cherbsd cross compile --- .../CMakeToolchains/cheri-cross.cmake | 62 +++++++++++++++++++ CMakePresets.json | 14 +++++ 2 files changed, 76 insertions(+) create mode 100644 CMakeModules/CMakeToolchains/cheri-cross.cmake diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake new file mode 100644 index 000000000..c995799d1 --- /dev/null +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -0,0 +1,62 @@ +# Below replaced later with actual toolchaibn download and compile, which takes hours +set(cheribsd_toolchain_location "/home/alexandru/cheri/output/morello-sdk") +set(CheriBSD_SDK_TOOLCHAIN_DIR "bin") +set(CheriBSD_SDK_TARGET_DIR "sysroot-morello-purecap") +set(CheriBSD_SDK_GNU_TARGET "aarch64-unknown-freebsd") + +# make sure we skip downloading the toolchain again for sub-CMake processes +# Setting cheribsd_toolchain_location should work for all sub-CMake processes +set(ENV{cheribsd_toolchain_location} "${cheribsd_toolchain_location}") +# setting CMAKE_REQUIRED_DEFINITIONS should be better for `check_include_file()` +list(APPEND CMAKE_REQUIRED_DEFINITIONS "-Dcheribsd_toolchain_location=${cheribsd_toolchain_location}") +set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") + + +set(tools "${cheribsd_toolchain_location}/${CheriBSD_SDK_TOOLCHAIN_DIR}") +if (NOT IS_DIRECTORY "${tools}") + message(FATAL_ERROR "CheriBSD SDK toolchain directory TOOLCHAIN_DIR=${CheriBSD_SDK_TOOLCHAIN_DIR} is not found in ${cheribsd_toolchain_location}") +endif() + +set(target_dir "${cheribsd_toolchain_location}/${CheriBSD_SDK_TARGET_DIR}") +if (NOT IS_DIRECTORY "${target_dir}") + message(FATAL_ERROR "CheriBSD SDK target directory TARGET_DIR=${CheriBSD_SDK_TARGET_DIR} is not found in ${cheribsd_toolchain_location}") +endif() + +set(CMAKE_SYSROOT "${target_dir}") +if (NOT DEFINED CMAKE_STAGING_PREFIX) + # let ExternalProject override this + set(CMAKE_STAGING_PREFIX "${target_dir}") +endif() + +set(ENV{STAGING_DIR} "${CMAKE_STAGING_PREFIX}") + +# need to add toolchain prefix to path, as dependencies use autoconf ./configure to find compilers +set(ENV{PATH} "$ENV{PATH}:${tools}") + +set(CMAKE_SYSTEM_NAME FreeBSD) # FreeBSD +set(CMAKE_LIBRARY_ARCHITECTURE "${CheriBSD_SDK_GNU_TARGET}") +set(CROSS_COMPILE_PREFIX "${tools}/${CheriBSD_SDK_GNU_TARGET}-") # used by lib/openssl.cmake only +#set(CMAKE_SYSTEM_PROCESSOR "${CheriBSD_SDK_SYSTEM_PROCESSOR}") + +set(c_compiler "${tools}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") +if(NOT EXISTS "${c_compiler}") + message(FATAL_ERROR "C compiler ${c_compiler} does not exist. Please make sure that you have set GNU_TARGET to the GNU target prefix in ${tools}") +endif() + +set(CMAKE_AR "${tools}/${CheriBSD_SDK_GNU_TARGET}-ar${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_ASM_COMPILER "${tools}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_C_COMPILER "${c_compiler}") +set(CMAKE_CXX_COMPILER "${tools}/${CheriBSD_SDK_GNU_TARGET}-c++${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_LINKER "${tools}/${CheriBSD_SDK_GNU_TARGET}-ld${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_OBJCOPY "${tools}/${CheriBSD_SDK_GNU_TARGET}-objcopy${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_RANLIB "${tools}/${CheriBSD_SDK_GNU_TARGET}-ranlib${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_STRIP "${tools}/${CheriBSD_SDK_GNU_TARGET}-strip${CMAKE_EXECUTABLE_SUFFIX}") + +# Without this flag CMake is not able to pass test compilation check +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "NEVER") + +# we use custom find_library() commands, so we can't use ONLY +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY "BOTH") +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE "BOTH") diff --git a/CMakePresets.json b/CMakePresets.json index 3123e0d37..86c0d39ae 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -46,6 +46,12 @@ "description": "CheriBSD build (alpha)", "toolchainFile": "${sourceDir}/CMakeModules/CMakeToolchains/cheri.cmake" }, + { + "name": "cheribsd-cc", + "inherits": "freebsd", + "description": "CheriBSD Cross Compile build (alpha)", + "toolchainFile": "${sourceDir}/CMakeModules/CMakeToolchains/cheri-cross.cmake" + }, { "name": "linux", "inherits": "default", @@ -262,6 +268,10 @@ "name": "cheribsd", "configurePreset": "cheribsd" }, + { + "name": "cheribsd-cc", + "configurePreset": "cheribsd-cc" + }, { "name": "linux/header", "configurePreset": "linux/header" @@ -352,6 +362,10 @@ "name": "cheribsd", "configurePreset": "cheribsd" }, + { + "name": "cheribsd-cc", + "configurePreset": "cheribsd-cc" + }, { "name": "openwrt", "configurePreset": "openwrt", From 88ca70e5a5abe25a768814b4cba0fa79cb1de486 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Tue, 6 Dec 2022 18:03:22 +0000 Subject: [PATCH 05/12] feat: Added CFLAGS to libs --- .../CMakeToolchains/cheri-cross.cmake | 89 ++++++++++++------- conftest.c | 16 ++++ lib/sqlite.cmake | 2 +- lib/uuid.cmake | 2 +- 4 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 conftest.c diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index c995799d1..cb9770416 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -1,8 +1,24 @@ # Below replaced later with actual toolchaibn download and compile, which takes hours -set(cheribsd_toolchain_location "/home/alexandru/cheri/output/morello-sdk") -set(CheriBSD_SDK_TOOLCHAIN_DIR "bin") -set(CheriBSD_SDK_TARGET_DIR "sysroot-morello-purecap") +set(CheriBSD_output_location "/home/alexandru/cheri/output") +set(CheriBSD_toolchain_location "${CheriBSD_output_location}/morello-sdk") +set(CheriBSD_tools_location "${CheriBSD_toolchain_location}/bin") +set(CheriBSD_rootfs_location "${CheriBSD_output_location}/rootfs-morello-purecap") +set(CheriBSD_usr_location "${CheriBSD_rootfs_location}/usr") +set(CheriBSD_pkgconfig_locations "${CheriBSD_usr_location}/libdata/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/morello-purecap/lib/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/morello-purecap/share/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/morello-purecap/libdata/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/lib/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/share/pkgconfig") +set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/libdata/pkgconfig") + set(CheriBSD_SDK_GNU_TARGET "aarch64-unknown-freebsd") +set(CheriBSD_c_flags "-target aarch64-unknown-freebsd13 --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") +set(CheriBSD_cxx_flags "-target aarch64-unknown-freebsd13 --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") + +if (NOT IS_DIRECTORY "${CheriBSD_tools_location}") + message(FATAL_ERROR "CheriBSD SDK toolchain directory TOOLCHAIN_DIR=${CheriBSD_tools_location} is not found") +endif() # make sure we skip downloading the toolchain again for sub-CMake processes # Setting cheribsd_toolchain_location should work for all sub-CMake processes @@ -11,52 +27,59 @@ set(ENV{cheribsd_toolchain_location} "${cheribsd_toolchain_location}") list(APPEND CMAKE_REQUIRED_DEFINITIONS "-Dcheribsd_toolchain_location=${cheribsd_toolchain_location}") set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") +set(CMAKE_SYSROOT "${CheriBSD_rootfs_location}") -set(tools "${cheribsd_toolchain_location}/${CheriBSD_SDK_TOOLCHAIN_DIR}") -if (NOT IS_DIRECTORY "${tools}") - message(FATAL_ERROR "CheriBSD SDK toolchain directory TOOLCHAIN_DIR=${CheriBSD_SDK_TOOLCHAIN_DIR} is not found in ${cheribsd_toolchain_location}") -endif() - -set(target_dir "${cheribsd_toolchain_location}/${CheriBSD_SDK_TARGET_DIR}") -if (NOT IS_DIRECTORY "${target_dir}") - message(FATAL_ERROR "CheriBSD SDK target directory TARGET_DIR=${CheriBSD_SDK_TARGET_DIR} is not found in ${cheribsd_toolchain_location}") -endif() - -set(CMAKE_SYSROOT "${target_dir}") -if (NOT DEFINED CMAKE_STAGING_PREFIX) - # let ExternalProject override this - set(CMAKE_STAGING_PREFIX "${target_dir}") -endif() +# where is the target environment +set(CMAKE_FIND_ROOT_PATH "${CheriBSD_rootfs_location}") set(ENV{STAGING_DIR} "${CMAKE_STAGING_PREFIX}") # need to add toolchain prefix to path, as dependencies use autoconf ./configure to find compilers -set(ENV{PATH} "$ENV{PATH}:${tools}") +set(ENV{PATH} "$ENV{PATH}:${CheriBSD_tools_location}") set(CMAKE_SYSTEM_NAME FreeBSD) # FreeBSD set(CMAKE_LIBRARY_ARCHITECTURE "${CheriBSD_SDK_GNU_TARGET}") -set(CROSS_COMPILE_PREFIX "${tools}/${CheriBSD_SDK_GNU_TARGET}-") # used by lib/openssl.cmake only +set(CROSS_COMPILE_PREFIX "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-") # used by lib/openssl.cmake only #set(CMAKE_SYSTEM_PROCESSOR "${CheriBSD_SDK_SYSTEM_PROCESSOR}") -set(c_compiler "${tools}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") +set(c_compiler "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") if(NOT EXISTS "${c_compiler}") - message(FATAL_ERROR "C compiler ${c_compiler} does not exist. Please make sure that you have set GNU_TARGET to the GNU target prefix in ${tools}") + message(FATAL_ERROR "C compiler ${c_compiler} does not exist. Please make sure that you have set GNU_TARGET to the GNU target prefix in ${CheriBSD_tools_location}") endif() -set(CMAKE_AR "${tools}/${CheriBSD_SDK_GNU_TARGET}-ar${CMAKE_EXECUTABLE_SUFFIX}") -set(CMAKE_ASM_COMPILER "${tools}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_AR "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-ar${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_ASM_COMPILER "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-cc${CMAKE_EXECUTABLE_SUFFIX}") set(CMAKE_C_COMPILER "${c_compiler}") -set(CMAKE_CXX_COMPILER "${tools}/${CheriBSD_SDK_GNU_TARGET}-c++${CMAKE_EXECUTABLE_SUFFIX}") -set(CMAKE_LINKER "${tools}/${CheriBSD_SDK_GNU_TARGET}-ld${CMAKE_EXECUTABLE_SUFFIX}") -set(CMAKE_OBJCOPY "${tools}/${CheriBSD_SDK_GNU_TARGET}-objcopy${CMAKE_EXECUTABLE_SUFFIX}") -set(CMAKE_RANLIB "${tools}/${CheriBSD_SDK_GNU_TARGET}-ranlib${CMAKE_EXECUTABLE_SUFFIX}") -set(CMAKE_STRIP "${tools}/${CheriBSD_SDK_GNU_TARGET}-strip${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_CXX_COMPILER "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-c++${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_LINKER "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-ld${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_OBJCOPY "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-objcopy${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_RANLIB "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-ranlib${CMAKE_EXECUTABLE_SUFFIX}") +set(CMAKE_STRIP "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-strip${CMAKE_EXECUTABLE_SUFFIX}") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CheriBSD_c_flags}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CheriBSD_cxx_flags}") # Without this flag CMake is not able to pass test compilation check set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "NEVER") +set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE) + +# PKG_CONFIG_LIBDIR overrides PKG_CONFIG_PATH +set(PKG_CONFIG_LIBDIR "${CheriBSD_pkgconfig_locations}") +set(ENV{PKG_CONFIG_LIBDIR} "${CheriBSD_pkgconfig_locations}") +set(PKG_CONFIG_SYSROOT_DIR ${CheriBSD_rootfs_location}) +set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CheriBSD_rootfs_location}) +set(PKG_CONFIG_PATH "") +set(ENV{PKG_CONFIG_PATH} "") + +# Use -pthread flag https://gitlab.kitware.com/cmake/cmake/issues/16920 +set(THREADS_HAVE_PTHREAD_ARG TRUE) + -# we use custom find_library() commands, so we can't use ONLY -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY "BOTH") -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE "BOTH") +# Ensure we search in the custom install prefix that we install everything to: +set(CMAKE_PREFIX_PATH "@TOOLCHAIN_CMAKE_PREFIX_PATH@;${CMAKE_PREFIX_PATH}") +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# for libraries and headers in the target directories +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) \ No newline at end of file diff --git a/conftest.c b/conftest.c new file mode 100644 index 000000000..d69ab0cd3 --- /dev/null +++ b/conftest.c @@ -0,0 +1,16 @@ +/* confdefs.h */ +#define PACKAGE_NAME "util-linux" +#define PACKAGE_TARNAME "util-linux" +#define PACKAGE_VERSION "UNKNOWN" +#define PACKAGE_STRING "util-linux UNKNOWN" +#define PACKAGE_BUGREPORT "kzak@redhat.com" +#define PACKAGE_URL "http://www.kernel.org/pub/linux/utils/util-linux/" +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} \ No newline at end of file diff --git a/lib/sqlite.cmake b/lib/sqlite.cmake index 1529eb562..607d23a87 100644 --- a/lib/sqlite.cmake +++ b/lib/sqlite.cmake @@ -49,7 +49,7 @@ else() /configure --prefix= "--host=${CMAKE_LIBRARY_ARCHITECTURE}" # use position independent code, even for static lib, in case we want to make shared lib later --with-pic=on ${configure_args} - "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" + "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS}" # need to manually specify PATH, so that make knows where to find cross-compiling GCC BUILD_COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" "${MAKE_COMMAND}" INSTALL_COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" "${MAKE_COMMAND}" install diff --git a/lib/uuid.cmake b/lib/uuid.cmake index 20de1c955..c93e102be 100644 --- a/lib/uuid.cmake +++ b/lib/uuid.cmake @@ -35,7 +35,7 @@ if (BUILD_UUID_LIB AND NOT (BUILD_ONLY_DOCS)) --prefix= "--host=${target_autoconf_triple}" --disable-all-programs --enable-libuuid - "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" + "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS}" INSTALL_DIR "${LIBUUID_INSTALL_DIR}" # need to manually specify PATH, so that make knows where to find GCC BUILD_COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" "${MAKE_COMMAND}" From da18f74ec0dd0328fd706e73e8b278df9c0fd692 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Fri, 9 Dec 2022 10:32:00 +0000 Subject: [PATCH 06/12] chore: cleanup --- CMakeModules/CMakeToolchains/cheri-cross.cmake | 2 +- conftest.c | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 conftest.c diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index cb9770416..b7fbb6533 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -82,4 +82,4 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) \ No newline at end of file +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/conftest.c b/conftest.c deleted file mode 100644 index d69ab0cd3..000000000 --- a/conftest.c +++ /dev/null @@ -1,16 +0,0 @@ -/* confdefs.h */ -#define PACKAGE_NAME "util-linux" -#define PACKAGE_TARNAME "util-linux" -#define PACKAGE_VERSION "UNKNOWN" -#define PACKAGE_STRING "util-linux UNKNOWN" -#define PACKAGE_BUGREPORT "kzak@redhat.com" -#define PACKAGE_URL "http://www.kernel.org/pub/linux/utils/util-linux/" -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} \ No newline at end of file From 252d883e0722bebf36dafd301c386576c2d7ea3d Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Fri, 9 Dec 2022 10:33:59 +0000 Subject: [PATCH 07/12] fix: removed the test preset for cheribsd-cc --- CMakePresets.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 86c0d39ae..2dde9ffc8 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -362,10 +362,6 @@ "name": "cheribsd", "configurePreset": "cheribsd" }, - { - "name": "cheribsd-cc", - "configurePreset": "cheribsd-cc" - }, { "name": "openwrt", "configurePreset": "openwrt", From cbeb718f0d3e9b87f2b473b2bf833cf381c07c93 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Fri, 9 Dec 2022 12:14:13 +0000 Subject: [PATCH 08/12] featr: Added search for ifconfig --- CMakePresets.json | 3 ++- src/runctl.c | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 2dde9ffc8..5b051292e 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -37,7 +37,8 @@ "BUILD_HOSTAPD": false, "USE_CRYPTO_SERVICE": false, "BUILD_OPENSSL_LIB": false, - "BUILD_CMOCKA_LIB": true + "BUILD_CMOCKA_LIB": true, + "BUILD_SQLITE_LIB": false } }, { diff --git a/src/runctl.c b/src/runctl.c index 1547176ef..6b615e2c2 100644 --- a/src/runctl.c +++ b/src/runctl.c @@ -243,7 +243,7 @@ int construct_ap_ctrlif(char *ctrl_interface, char *interface, int init_context(struct app_config *app_config, struct supervisor_context *ctx) { - const char *commands[] = {"ip", "iw", "iptables", "sysctl", NULL}; + const char *commands[] = {"ip", "ifconfig", "iw", "iptables", "sysctl", NULL}; ctx->config_ifinfo_array = NULL; ctx->hmap_bin_paths = NULL; @@ -261,10 +261,12 @@ int init_context(struct app_config *app_config, return -1; } - const char *ipcmd_path = hmap_str_keychar_get(ctx->hmap_bin_paths, "ip"); + char *ipcmd_path = (char *)hmap_str_keychar_get(ctx->hmap_bin_paths, "ip"); if (ipcmd_path == NULL) { - log_error("Couldn't find ip command"); - return -1; + if ((ipcmd_path = (char *)hmap_str_keychar_get(ctx->hmap_bin_paths, "ifconfig")) == NULL) { + log_error("Couldn't find ip/ifconfig commands"); + return -1; + } } utarray_new(ctx->config_ifinfo_array, &config_ifinfo_icd); From 12460edb734bfb648f2bec1566545ec8f37aa606 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Fri, 9 Dec 2022 13:31:22 +0000 Subject: [PATCH 09/12] feat: Added option to build sqlhook --- CMakeLists.txt | 1 + CMakeModules/CMakeToolchains/cheri-cross.cmake | 16 +++++++++++----- src/CMakeLists.txt | 6 ++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b452f457a..791fb8750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ option(BUILD_CMOCKA_LIB "Build cmocka library" OFF) option(BUILD_UUID_LIB "Build uuid library" ON) option(BUILD_PCAP_LIB "Build pcap library" ON) option(BUILD_PROTOBUFC_LIB "Build protobuf-c library" ON) +option(BUILD_SQLHOOK "Build the sqlhook extension library" OFF) option(USE_NETLINK_SERVICE "Use netlink service" OFF) cmake_dependent_option(BUILD_MNL_LIB "Build mnl library" ON USE_NETLINK_SERVICE OFF) diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index b7fbb6533..8d2c52972 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -4,6 +4,7 @@ set(CheriBSD_toolchain_location "${CheriBSD_output_location}/morello-sdk") set(CheriBSD_tools_location "${CheriBSD_toolchain_location}/bin") set(CheriBSD_rootfs_location "${CheriBSD_output_location}/rootfs-morello-purecap") set(CheriBSD_usr_location "${CheriBSD_rootfs_location}/usr") +set(CheriBSD_package_location "${CheriBSD_usr_location}/local/morello-purecap") set(CheriBSD_pkgconfig_locations "${CheriBSD_usr_location}/libdata/pkgconfig") set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/morello-purecap/lib/pkgconfig") set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/morello-purecap/share/pkgconfig") @@ -77,9 +78,14 @@ set(THREADS_HAVE_PTHREAD_ARG TRUE) # Ensure we search in the custom install prefix that we install everything to: -set(CMAKE_PREFIX_PATH "@TOOLCHAIN_CMAKE_PREFIX_PATH@;${CMAKE_PREFIX_PATH}") -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_PREFIX_PATH "${CheriBSD_package_location};${CMAKE_PREFIX_PATH}") + + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + # for libraries and headers in the target directories -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(CMAKE_FIND_DEBUG_MODE TRUE) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cb3b708e4..231a65288 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,9 +19,11 @@ if (USE_MDNS_SERVICE) endif () add_subdirectory(capture) +if (BUILD_SQLHOOK) + add_library(sqlhook SHARED sqlhook.c) + target_link_libraries(sqlhook PRIVATE sockctl os allocs SQLite::SQLite3 LibUTHash::LibUTHash) +endif () -add_library(sqlhook SHARED sqlhook.c) -target_link_libraries(sqlhook PRIVATE sockctl os allocs SQLite::SQLite3 LibUTHash::LibUTHash) add_library(runctl runctl.c) target_include_directories(runctl PRIVATE SQLite::SQLite3) From 8f65db928ace40edda3b8829f822e67cbf60487b Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Fri, 9 Dec 2022 16:59:32 +0000 Subject: [PATCH 10/12] feat: Added preset options --- .../CMakeToolchains/cheri-cross.cmake | 22 +++++++++---------- CMakePresets.json | 6 ++++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index 8d2c52972..ed55abcb4 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -14,16 +14,18 @@ set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr set(CheriBSD_pkgconfig_locations "${CheriBSD_pkgconfig_locations}:${CheriBSD_usr_location}/local/libdata/pkgconfig") set(CheriBSD_SDK_GNU_TARGET "aarch64-unknown-freebsd") -set(CheriBSD_c_flags "-target aarch64-unknown-freebsd13 --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") -set(CheriBSD_cxx_flags "-target aarch64-unknown-freebsd13 --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") +set(CheriBSD_c_flags "-target ${CheriBSD_SDK_GNU_TARGET} --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") +set(CheriBSD_cxx_flags "-target ${CheriBSD_SDK_GNU_TARGET} --sysroot=${CheriBSD_rootfs_location} -B${CheriBSD_tools_location} -mcpu=rainier -march=morello+c64 -mabi=purecap -Xclang -morello-vararg=new") if (NOT IS_DIRECTORY "${CheriBSD_tools_location}") message(FATAL_ERROR "CheriBSD SDK toolchain directory TOOLCHAIN_DIR=${CheriBSD_tools_location} is not found") endif() -# make sure we skip downloading the toolchain again for sub-CMake processes -# Setting cheribsd_toolchain_location should work for all sub-CMake processes -set(ENV{cheribsd_toolchain_location} "${cheribsd_toolchain_location}") +set(ENV{STAGING_DIR} "${CMAKE_STAGING_PREFIX}") + +# need to add toolchain prefix to path, as dependencies use autoconf ./configure to find compilers +set(ENV{PATH} "$ENV{PATH}:${CheriBSD_tools_location}") + # setting CMAKE_REQUIRED_DEFINITIONS should be better for `check_include_file()` list(APPEND CMAKE_REQUIRED_DEFINITIONS "-Dcheribsd_toolchain_location=${cheribsd_toolchain_location}") set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") @@ -33,11 +35,6 @@ set(CMAKE_SYSROOT "${CheriBSD_rootfs_location}") # where is the target environment set(CMAKE_FIND_ROOT_PATH "${CheriBSD_rootfs_location}") -set(ENV{STAGING_DIR} "${CMAKE_STAGING_PREFIX}") - -# need to add toolchain prefix to path, as dependencies use autoconf ./configure to find compilers -set(ENV{PATH} "$ENV{PATH}:${CheriBSD_tools_location}") - set(CMAKE_SYSTEM_NAME FreeBSD) # FreeBSD set(CMAKE_LIBRARY_ARCHITECTURE "${CheriBSD_SDK_GNU_TARGET}") set(CROSS_COMPILE_PREFIX "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-") # used by lib/openssl.cmake only @@ -76,11 +73,11 @@ set(ENV{PKG_CONFIG_PATH} "") # Use -pthread flag https://gitlab.kitware.com/cmake/cmake/issues/16920 set(THREADS_HAVE_PTHREAD_ARG TRUE) - # Ensure we search in the custom install prefix that we install everything to: set(CMAKE_PREFIX_PATH "${CheriBSD_package_location};${CMAKE_PREFIX_PATH}") +# Standard propgrams like flex, etc set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories @@ -88,4 +85,5 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) -set(CMAKE_FIND_DEBUG_MODE TRUE) \ No newline at end of file +# Debug mode +# set(CMAKE_FIND_DEBUG_MODE TRUE) \ No newline at end of file diff --git a/CMakePresets.json b/CMakePresets.json index 5b051292e..24809ec90 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -38,7 +38,11 @@ "USE_CRYPTO_SERVICE": false, "BUILD_OPENSSL_LIB": false, "BUILD_CMOCKA_LIB": true, - "BUILD_SQLITE_LIB": false + "BUILD_SQLITE_LIB": false, + "USE_PROTOBUF_MIDDLEWARE": true, + "USE_CAPTURE_SERVICE": true, + "BUILD_UUID_LIB": true, + "BUILD_PCAP_LIB": true } }, { From 19b0ab99dd2db004af48ff26af63ef5e77936498 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Mon, 12 Dec 2022 13:23:56 +0000 Subject: [PATCH 11/12] Update CMakeModules/CMakeToolchains/cheri-cross.cmake Co-authored-by: Alois Klink --- CMakeModules/CMakeToolchains/cheri-cross.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index ed55abcb4..a46503bb9 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -36,7 +36,9 @@ set(CMAKE_SYSROOT "${CheriBSD_rootfs_location}") set(CMAKE_FIND_ROOT_PATH "${CheriBSD_rootfs_location}") set(CMAKE_SYSTEM_NAME FreeBSD) # FreeBSD -set(CMAKE_LIBRARY_ARCHITECTURE "${CheriBSD_SDK_GNU_TARGET}") +set(CMAKE_ASM_COMPILER_TARGET "${CheriBSD_SDK_GNU_TARGET}") +set(CMAKE_C_COMPILER_TARGET "${CheriBSD_SDK_GNU_TARGET}") +set(CMAKE_CXX_COMPILER_TARGET "${CheriBSD_SDK_GNU_TARGET}") set(CROSS_COMPILE_PREFIX "${CheriBSD_tools_location}/${CheriBSD_SDK_GNU_TARGET}-") # used by lib/openssl.cmake only #set(CMAKE_SYSTEM_PROCESSOR "${CheriBSD_SDK_SYSTEM_PROCESSOR}") From 4854e609099adf9cb9f374e1234fb741b507d864 Mon Sep 17 00:00:00 2001 From: Alexandru Mereacre Date: Mon, 12 Dec 2022 13:56:48 +0000 Subject: [PATCH 12/12] chore: pre-commit --- CMakeModules/CMakeToolchains/cheri-cross.cmake | 2 +- src/runctl.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeModules/CMakeToolchains/cheri-cross.cmake b/CMakeModules/CMakeToolchains/cheri-cross.cmake index a46503bb9..64198156c 100644 --- a/CMakeModules/CMakeToolchains/cheri-cross.cmake +++ b/CMakeModules/CMakeToolchains/cheri-cross.cmake @@ -88,4 +88,4 @@ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # Debug mode -# set(CMAKE_FIND_DEBUG_MODE TRUE) \ No newline at end of file +# set(CMAKE_FIND_DEBUG_MODE TRUE) diff --git a/src/runctl.c b/src/runctl.c index 6b615e2c2..24b3511bd 100644 --- a/src/runctl.c +++ b/src/runctl.c @@ -263,7 +263,8 @@ int init_context(struct app_config *app_config, char *ipcmd_path = (char *)hmap_str_keychar_get(ctx->hmap_bin_paths, "ip"); if (ipcmd_path == NULL) { - if ((ipcmd_path = (char *)hmap_str_keychar_get(ctx->hmap_bin_paths, "ifconfig")) == NULL) { + if ((ipcmd_path = (char *)hmap_str_keychar_get(ctx->hmap_bin_paths, + "ifconfig")) == NULL) { log_error("Couldn't find ip/ifconfig commands"); return -1; }