build system switch to cmake
Remove old build system at the same time Change-Id: Ifdffe1fcd4cfece05f036d8de6e7cb74aca65f62
This commit is contained in:
30
.gitignore
vendored
30
.gitignore
vendored
@ -9,9 +9,27 @@
|
|||||||
Module.symvers
|
Module.symvers
|
||||||
*.order
|
*.order
|
||||||
.tmp_versions
|
.tmp_versions
|
||||||
|
old_timestamp
|
||||||
elfboot/elfboot
|
CMakeFiles
|
||||||
elfboot/elfboot_test
|
CMakeCache.txt
|
||||||
linux/executer/mcexec
|
Makefile
|
||||||
linux/mod_test*
|
Kbuild
|
||||||
linux/target
|
cmake_install.cmake
|
||||||
|
config.h
|
||||||
|
mcstop+release.sh
|
||||||
|
mcreboot.sh
|
||||||
|
mcreboot.1
|
||||||
|
mcoverlay-destroy.sh
|
||||||
|
mcoverlay-create.sh
|
||||||
|
kernel/mckernel.img
|
||||||
|
kernel/include/swapfmt.h
|
||||||
|
executer/user/vmcore2mckdump
|
||||||
|
executer/user/ql_talker
|
||||||
|
executer/user/mcexec.1
|
||||||
|
executer/user/mcexec
|
||||||
|
executer/user/libsched_yield.so.1.0.0
|
||||||
|
executer/user/libsched_yield.so
|
||||||
|
executer/user/libmcexec.a
|
||||||
|
executer/user/libldump2mcdump.so
|
||||||
|
executer/user/eclair
|
||||||
|
tools/mcstat/mcstat
|
||||||
|
|||||||
190
CMakeLists.txt
Normal file
190
CMakeLists.txt
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
|
||||||
|
if (NOT CMAKE_BUILD_TYPE)
|
||||||
|
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type: Debug Release..." FORCE)
|
||||||
|
endif (NOT CMAKE_BUILD_TYPE)
|
||||||
|
|
||||||
|
enable_language(C ASM)
|
||||||
|
|
||||||
|
project(mckernel C ASM)
|
||||||
|
set(MCKERNEL_VERSION "1.6.0")
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||||
|
# for rpmbuild
|
||||||
|
if(DEFINED SYSCONF_INSTALL_DIR)
|
||||||
|
set(CMAKE_INSTALL_SYSCONFDIR "${SYSCONF_INSTALL_DIR}")
|
||||||
|
endif()
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
include(Kbuild)
|
||||||
|
include(Ksym)
|
||||||
|
include(CheckCCompilerFlag)
|
||||||
|
|
||||||
|
set(CFLAGS_WARNINGS "-Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-unused-function")
|
||||||
|
CHECK_C_COMPILER_FLAG(-Wno-implicit-fallthrough IMPLICIT_FALLTHROUGH)
|
||||||
|
if(IMPLICIT_FALLTHROUGH)
|
||||||
|
set(CFLAGS_WARNINGS "${CFLAGS_WARNINGS} -Wno-implicit-fallthrough")
|
||||||
|
endif(IMPLICIT_FALLTHROUGH)
|
||||||
|
|
||||||
|
# C flags need to be set before enabling language?
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "-g ${CFLAGS_WARNINGS}" CACHE STRING "Debug compiler flags")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CFLAGS_WARNINGS}" CACHE STRING "Release compiler flags")
|
||||||
|
|
||||||
|
# build options
|
||||||
|
option(ENABLE_WERROR "Enable -Werror" OFF)
|
||||||
|
if (ENABLE_WERROR)
|
||||||
|
add_compile_options("-Werror")
|
||||||
|
endif(ENABLE_WERROR)
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||||
|
set(BUILD_TARGET "smp-x86" CACHE STRING "Build target: smp-x86 | smp-arm64")
|
||||||
|
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
||||||
|
set(BUILD_TARGET "smp-arm64" CACHE STRING "Build target: smp-x86 | smp-arm64")
|
||||||
|
endif()
|
||||||
|
if (BUILD_TARGET STREQUAL "smp-x86")
|
||||||
|
set(ARCH "x86_64")
|
||||||
|
elseif (BUILD_TARGET STREQUAL "smp-arm64")
|
||||||
|
set(ARCH "arm64")
|
||||||
|
foreach(i RANGE 1 120)
|
||||||
|
add_definitions(-DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i})
|
||||||
|
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DPOSTK_DEBUG_ARCH_DEP_${i} -DPOSTK_DEBUG_TEMP_FIX_${i}")
|
||||||
|
endforeach()
|
||||||
|
add_definitions(-DCONFIG_ARM64_64K_PAGES -DCONFIG_ARM64_VA_BITS=48)
|
||||||
|
endif()
|
||||||
|
set_property(CACHE BUILD_TARGET PROPERTY STRINGS smp-x86 smp-arm64)
|
||||||
|
|
||||||
|
set(ENABLE_MEMDUMP ON)
|
||||||
|
option(ENABLE_PERF "Enable perf support" ON)
|
||||||
|
option(ENABLE_RUSAGE "Enable rusage support" ON)
|
||||||
|
option(ENABLE_MCOVERLAYFS "Enable overlay filesystem" OFF)
|
||||||
|
option(ENABLE_QLMPI "Enable qlmpi programs" OFF)
|
||||||
|
option(ENABLE_UTI "Enable uti support" OFF)
|
||||||
|
|
||||||
|
find_library(LIBRT rt)
|
||||||
|
find_library(LIBNUMA numa)
|
||||||
|
find_library(LIBBFD bfd)
|
||||||
|
find_library(LIBIBERTY iberty)
|
||||||
|
|
||||||
|
if (ENABLE_QLMPI)
|
||||||
|
find_package(MPI REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_UTI)
|
||||||
|
find_library(LIBSYSCALL_INTERCEPT syscall_intercept)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-([0-9]+)(.*))?" "\\1;\\2;\\3;\\5;\\6" LINUX_VERSION ${UNAME_R})
|
||||||
|
list(GET LINUX_VERSION 0 LINUX_VERSION_MAJOR)
|
||||||
|
list(GET LINUX_VERSION 1 LINUX_VERSION_MINOR)
|
||||||
|
list(GET LINUX_VERSION 2 LINUX_VERSION_PATCH)
|
||||||
|
list(GET LINUX_VERSION 3 LINUX_VERSION_RELEASE)
|
||||||
|
math(EXPR LINUX_VERSION_CODE "${LINUX_VERSION_MAJOR} * 65536 + ${LINUX_VERSION_MINOR} * 256 + ${LINUX_VERSION_PATCH}")
|
||||||
|
|
||||||
|
ksym(sys_mount PREFIX MCCTRL_)
|
||||||
|
ksym(sys_umount PREFIX MCCTRL_)
|
||||||
|
ksym(sys_unshare PREFIX MCCTRL_)
|
||||||
|
ksym(zap_page_range PREFIX MCCTRL_)
|
||||||
|
ksym(vdso_image_64 PREFIX MCCTRL_)
|
||||||
|
ksym(vdso_start PREFIX MCCTRL_)
|
||||||
|
ksym(vdso_end PREFIX MCCTRL_)
|
||||||
|
ksym(vdso_pages PREFIX MCCTRL_)
|
||||||
|
ksym(__vvar_page PREFIX MCCTRL_)
|
||||||
|
ksym(hpet_address PREFIX MCCTRL_)
|
||||||
|
# POSTK_DEBUG_ARCH_DEP_50, add:find kernel symbol.
|
||||||
|
ksym(vdso_spec PREFIX MCCTRL_)
|
||||||
|
ksym(hv_clock PREFIX MCCTRL_)
|
||||||
|
ksym(sys_readlink PREFIX MCCTRL_)
|
||||||
|
ksym(walk_page_range PREFIX MCCTRL_)
|
||||||
|
|
||||||
|
|
||||||
|
# compat with various install paths
|
||||||
|
set(MCKERNEL_LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
set(BINDIR ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
|
set(SBINDIR ${CMAKE_INSTALL_FULL_SBINDIR})
|
||||||
|
set(ETCDIR ${CMAKE_INSTALL_FULL_SYSCONFDIR})
|
||||||
|
set(ROOTFSDIR "${CMAKE_INSTALL_PREFIX}/rootfs")
|
||||||
|
if (CMAKE_INSTALL_PREFIX STREQUAL "/usr")
|
||||||
|
set(KMODDIR "/lib/modules/${UNAME_R}/extra/mckernel")
|
||||||
|
set(MCKERNELDIR "${CMAKE_INSTALL_FULL_DATADIR}/mckernel/${BUILD_TARGET}")
|
||||||
|
else()
|
||||||
|
set(KMODDIR "${CMAKE_INSTALL_PREFIX}/kmod")
|
||||||
|
set(MCKERNELDIR "${CMAKE_INSTALL_PREFIX}/${BUILD_TARGET}/kernel")
|
||||||
|
endif()
|
||||||
|
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
|
# set rpath for everyone
|
||||||
|
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
|
||||||
|
# ihk: ultimately should support extrnal build, but add as subproject for now
|
||||||
|
if (EXISTS ${PROJECT_SOURCE_DIR}/ihk/CMakeLists.txt)
|
||||||
|
set(IHK_SOURCE_DIR "ihk" CACHE STRINGS "path to ihk source directory from mckernel sources")
|
||||||
|
elseif (EXISTS ${PROJECT_SOURCE_DIR}/../ihk/CMakeLists.txt)
|
||||||
|
set(IHK_SOURCE_DIR "../ihk" CACHE STRINGS "path to ihk source directory from mckernel sources")
|
||||||
|
else()
|
||||||
|
set(IHK_SOURCE_DIR "ihk" CACHE STRINGS "path to ihk source directory from mckernel sources")
|
||||||
|
endif()
|
||||||
|
if (EXISTS ${PROJECT_SOURCE_DIR}/${IHK_SOURCE_DIR}/CMakeLists.txt)
|
||||||
|
set(IHK_FULL_SOURCE_DIR ${PROJECT_SOURCE_DIR}/${IHK_SOURCE_DIR})
|
||||||
|
elseif (EXISTS /${IHK_SOURCE_DIR}/CMakeLists.txt)
|
||||||
|
set(IHK_FULL_SOURCE_DIR /${IHK_SOURCE_DIR})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Could not find ihk dir, or it does not contain CMakeLists.txt, either clone ihk or run git submodule update --init")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(${IHK_SOURCE_DIR} ihk)
|
||||||
|
|
||||||
|
configure_file(config.h.in config.h)
|
||||||
|
|
||||||
|
# actual build section - just subdirs
|
||||||
|
add_subdirectory(executer/kernel/mcctrl)
|
||||||
|
if (ENABLE_MCOVERLAYFS)
|
||||||
|
add_subdirectory(executer/kernel/mcoverlayfs)
|
||||||
|
endif()
|
||||||
|
add_subdirectory(executer/user)
|
||||||
|
add_subdirectory(kernel)
|
||||||
|
add_subdirectory(tools/mcstat)
|
||||||
|
|
||||||
|
configure_file(arch/x86_64/tools/mcreboot-smp-x86.sh.in mcreboot.sh @ONLY)
|
||||||
|
configure_file(arch/x86_64/tools/mcstop+release-smp-x86.sh.in mcstop+release.sh @ONLY)
|
||||||
|
configure_file(arch/x86_64/tools/mcreboot.1in mcreboot.1 @ONLY)
|
||||||
|
install(PROGRAMS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/mcreboot.sh"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/mcstop+release.sh"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_SBINDIR}")
|
||||||
|
install(FILES
|
||||||
|
"arch/x86_64/tools/irqbalance_mck.service"
|
||||||
|
"arch/x86_64/tools/irqbalance_mck.in"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}")
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mcreboot.1"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
|
||||||
|
|
||||||
|
|
||||||
|
configure_file(scripts/mckernel.spec.in scripts/mckernel.spec @ONLY)
|
||||||
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${MCKERNEL_VERSION}")
|
||||||
|
set(CPACK_SOURCE_IGNORE_FILES "/.git$")
|
||||||
|
set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR};/;${IHK_FULL_SOURCE_DIR};/ihk;${CMAKE_BINARY_DIR}/scripts;/scripts")
|
||||||
|
set(CPACK_SOURCE_GENERATOR "TGZ")
|
||||||
|
include(CPack)
|
||||||
|
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
|
||||||
|
|
||||||
|
|
||||||
|
# config report
|
||||||
|
message("-------------------------------")
|
||||||
|
message("Option summary")
|
||||||
|
message("-------------------------------")
|
||||||
|
message("Build type: ${CMAKE_BUILD_TYPE}")
|
||||||
|
message("Build target: ${BUILD_TARGET}")
|
||||||
|
message("IHK_SOURCE_DIR: ${IHK_SOURCE_DIR} (relative to mckernel source tree)")
|
||||||
|
message("UNAME_R: ${UNAME_R}")
|
||||||
|
message("KERNEL_DIR: ${KERNEL_DIR}")
|
||||||
|
message("SYSTEM_MAP: ${SYSTEM_MAP}")
|
||||||
|
message("VMLINUX: ${VMLINUX}")
|
||||||
|
message("KBUILD_C_FLAGS: ${KBUILD_C_FLAGS}")
|
||||||
|
message("ENABLE_MEMDUMP: ${ENABLE_MEMDUMP}")
|
||||||
|
message("ENABLE_PERF: ${ENABLE_PERF}")
|
||||||
|
message("ENABLE_RUSAGE: ${ENABLE_RUSAGE}")
|
||||||
|
message("ENABLE_MCOVERLAYFS: ${ENABLE_MCOVERLAYFS}")
|
||||||
|
message("ENABLE_QLMPI: ${ENABLE_QLMPI}")
|
||||||
|
message("ENABLE_UTI: ${ENABLE_UTI}")
|
||||||
|
message("ENABLE_WERROR: ${ENABLE_WERROR}")
|
||||||
|
message("-------------------------------")
|
||||||
82
Makefile.in
82
Makefile.in
@ -1,82 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2013-2018
|
|
||||||
TARGET = @TARGET@
|
|
||||||
SBINDIR = @SBINDIR@
|
|
||||||
INCDIR = @INCDIR@
|
|
||||||
ETCDIR = @ETCDIR@
|
|
||||||
MANDIR = @MANDIR@
|
|
||||||
|
|
||||||
all: executer-mcctrl executer-mcoverlayfs executer-user mckernel mck-tools
|
|
||||||
|
|
||||||
executer-mcctrl:
|
|
||||||
+@(cd executer/kernel/mcctrl; $(MAKE) modules)
|
|
||||||
|
|
||||||
executer-mcoverlayfs:
|
|
||||||
+@(cd executer/kernel/mcoverlayfs; $(MAKE) modules)
|
|
||||||
|
|
||||||
executer-user:
|
|
||||||
+@(cd executer/user; $(MAKE))
|
|
||||||
|
|
||||||
mckernel:
|
|
||||||
+@case "$(TARGET)" in \
|
|
||||||
attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
|
|
||||||
(cd kernel; $(MAKE)) \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
echo "unknown target $(TARGET)" >&2 \
|
|
||||||
exit 1 \
|
|
||||||
;; \
|
|
||||||
esac
|
|
||||||
|
|
||||||
mck-tools:
|
|
||||||
+@(cd tools/mcstat; $(MAKE))
|
|
||||||
|
|
||||||
install:
|
|
||||||
@(cd executer/kernel/mcctrl; $(MAKE) install)
|
|
||||||
@(cd executer/kernel/mcoverlayfs; $(MAKE) install)
|
|
||||||
@(cd executer/user; $(MAKE) install)
|
|
||||||
@case "$(TARGET)" in \
|
|
||||||
attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
|
|
||||||
(cd kernel; $(MAKE) install) \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
echo "unknown target $(TARGET)" >&2 \
|
|
||||||
exit 1 \
|
|
||||||
;; \
|
|
||||||
esac
|
|
||||||
@case "$(TARGET)" in \
|
|
||||||
smp-x86 | smp-arm64) \
|
|
||||||
mkdir -p -m 755 $(SBINDIR); \
|
|
||||||
install -m 755 arch/x86_64/tools/mcreboot-smp-x86.sh $(SBINDIR)/mcreboot.sh; \
|
|
||||||
install -m 755 arch/x86_64/tools/mcstop+release-smp-x86.sh $(SBINDIR)/mcstop+release.sh; \
|
|
||||||
install -m 755 arch/x86_64/tools/mcoverlay-destroy-smp-x86.sh $(SBINDIR)/mcoverlay-destroy.sh; \
|
|
||||||
install -m 755 arch/x86_64/tools/mcoverlay-create-smp-x86.sh $(SBINDIR)/mcoverlay-create.sh; \
|
|
||||||
install -m 755 arch/x86_64/tools/eclair-dump-backtrace.exp $(SBINDIR)/eclair-dump-backtrace.exp;\
|
|
||||||
mkdir -p -m 755 $(ETCDIR); \
|
|
||||||
install -m 644 arch/x86_64/tools/irqbalance_mck.service $(ETCDIR)/irqbalance_mck.service; \
|
|
||||||
install -m 644 arch/x86_64/tools/irqbalance_mck.in $(ETCDIR)/irqbalance_mck.in; \
|
|
||||||
mkdir -p -m 755 $(INCDIR); \
|
|
||||||
install -m 644 kernel/include/swapfmt.h $(INCDIR); \
|
|
||||||
mkdir -p -m 755 $(MANDIR)/man1; \
|
|
||||||
install -m 644 arch/x86_64/tools/mcreboot.1 $(MANDIR)/man1/mcreboot.1; \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
echo "unknown target $(TARGET)" >&2 \
|
|
||||||
exit 1 \
|
|
||||||
;; \
|
|
||||||
esac
|
|
||||||
@(cd tools/mcstat/; $(MAKE) install)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@(cd executer/kernel/mcctrl; $(MAKE) clean)
|
|
||||||
@(cd executer/kernel/mcoverlayfs; $(MAKE) clean)
|
|
||||||
@(cd executer/user; $(MAKE) clean)
|
|
||||||
@case "$(TARGET)" in \
|
|
||||||
attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
|
|
||||||
(cd kernel; $(MAKE) clean) \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
echo "unknown target $(TARGET)" >&2 \
|
|
||||||
exit 1 \
|
|
||||||
;; \
|
|
||||||
esac
|
|
||||||
@(cd tools/mcstat; $(MAKE) clean)
|
|
||||||
@ -102,21 +102,14 @@ Clone the source code and set up ihk symlink (this is currently required):
|
|||||||
mkdir -p ~/src/ihk+mckernel/
|
mkdir -p ~/src/ihk+mckernel/
|
||||||
cd ~/src/ihk+mckernel/
|
cd ~/src/ihk+mckernel/
|
||||||
git clone -r git@github.com:RIKEN-SysSoft/mckernel.git
|
git clone -r git@github.com:RIKEN-SysSoft/mckernel.git
|
||||||
ln -s mckernel/ihk ihk
|
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
Configure and compile (for x86 architecture):
|
Configure and compile:
|
||||||
|
|
||||||
~~~~
|
~~~~
|
||||||
export TOP=${HOME}/ihk+mckernel/
|
mkdir -p build && cd build
|
||||||
cd ~/src/ihk+mckernel/ihk/
|
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel $HOME/src/mckernel
|
||||||
./configure --with-target=smp-x86 --prefix=${TOP}
|
make -j install
|
||||||
cd ~/src/ihk+mckernel/mckernel/
|
|
||||||
./configure --with-target=smp-x86 --prefix=${TOP}
|
|
||||||
cd ~/src/ihk+mckernel/ihk/
|
|
||||||
make && make install
|
|
||||||
cd ~/src/ihk+mckernel/mckernel/
|
|
||||||
make && make install
|
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
The IHK kernel modules and McKernel kernel image should be installed under the **ihk+mckernel** folder in your home directory.
|
The IHK kernel modules and McKernel kernel image should be installed under the **ihk+mckernel** folder in your home directory.
|
||||||
@ -88,26 +88,8 @@ int arch_setup_vdso(void)
|
|||||||
kprintf("Enable Host mapping vDSO.\n");
|
kprintf("Enable Host mapping vDSO.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
kprintf("Enable McK mapping vDSO.\n");
|
|
||||||
|
|
||||||
if (memcmp(&vdso_start, "\177ELF", 4)) {
|
panic("Only support host mapping vDSO");
|
||||||
panic("vDSO is not a valid ELF object!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
vdso.vdso_npages = (&vdso_end - &vdso_start) >> PAGE_SHIFT;
|
|
||||||
dkprintf("vdso: %ld pages (%ld code @ %p, %ld data @ %p)\n",
|
|
||||||
vdso.vdso_npages + 1, vdso.vdso_npages, &vdso_start, 1L, &tod_data);
|
|
||||||
if (vdso.vdso_npages != 1) {
|
|
||||||
panic("vDSO is not a valid number of pages!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
vdso.vvar_phys = virt_to_phys((void *)&tod_data);
|
|
||||||
vdso.vdso_physlist[0] = virt_to_phys((void *)&vdso_start);
|
|
||||||
|
|
||||||
vdso.lbase = VDSO_LBASE;
|
|
||||||
vdso.offset_sigtramp = vdso_offset_sigtramp;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_free_area(struct process_vm *vm, size_t len, intptr_t hint,
|
static int get_free_area(struct process_vm *vm, size_t len, intptr_t hint,
|
||||||
|
|||||||
@ -1,33 +0,0 @@
|
|||||||
/* vdso.so.S COPYRIGHT FUJITSU LIMITED 2016 */
|
|
||||||
/* @ref.impl arch/arm64/kernel/vdso/vdso.S */
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 ARM Limited
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Will Deacon <will.deacon@arm.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <arch-memory.h>
|
|
||||||
#include <vdso-so-path.h>
|
|
||||||
|
|
||||||
.section ".vdso.txet", "aw"
|
|
||||||
|
|
||||||
.globl vdso_start, vdso_end
|
|
||||||
.balign PAGE_SIZE
|
|
||||||
vdso_start:
|
|
||||||
.incbin VDSO_SO_PATH
|
|
||||||
.balign PAGE_SIZE
|
|
||||||
vdso_end:
|
|
||||||
|
|
||||||
.previous
|
|
||||||
@ -1,137 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2016-2018
|
|
||||||
# @ref.impl arch/arm64/kernel/vdso/Makefile
|
|
||||||
# Building a vDSO image for AArch64.
|
|
||||||
|
|
||||||
RMDIR=rmdir
|
|
||||||
|
|
||||||
HOST_DIR=@KDIR@
|
|
||||||
HOST_CONFIG=$(HOST_DIR)/.config
|
|
||||||
HOST_KERNEL_CONFIG_ARM64_4K_PAGES=$(shell grep -E "^CONFIG_ARM64_4K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_4K_PAGES=||g')
|
|
||||||
HOST_KERNEL_CONFIG_ARM64_16K_PAGES=$(shell grep -E "^CONFIG_ARM64_16K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_16K_PAGES=||g')
|
|
||||||
HOST_KERNEL_CONFIG_ARM64_64K_PAGES=$(shell grep -E "^CONFIG_ARM64_64K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_64K_PAGES=||g')
|
|
||||||
|
|
||||||
VDSOSRC = @abs_srcdir@
|
|
||||||
VDSOBUILD = @abs_builddir@
|
|
||||||
ECHO_SUFFIX = [VDSO]
|
|
||||||
|
|
||||||
VDSOOBJS := gettimeofday.o
|
|
||||||
DESTOBJS = $(addprefix $(VDSOBUILD)/, $(VDSOOBJS))
|
|
||||||
|
|
||||||
VDSOASMOBJS := note.o sigreturn.o
|
|
||||||
DESTASMOBJS = $(addprefix $(VDSOBUILD)/, $(VDSOASMOBJS))
|
|
||||||
|
|
||||||
$(if $(VDSOSRC),,$(error IHK output directory is not specified))
|
|
||||||
$(if $(TARGET),,$(error Target is not specified))
|
|
||||||
|
|
||||||
#CFLAGS := -nostdinc -mlittle-endian -Wall -mabi=lp64 -Wa,-gdwarf-2
|
|
||||||
CFLAGS += -nostdinc -mlittle-endian -Wall -Wa,-gdwarf-2
|
|
||||||
CFLAGS += -I$(SRC)/include -I$(SRC)/../lib/include -I$(VDSOSRC)/../include
|
|
||||||
CFLAGS += -I$(IHKBASE)/$(TARGETDIR)/include -Wno-unused-function -I$(IHKBASE)/../ikc/include -I$(IHKBASE)/../linux/include
|
|
||||||
CFLAGS += -DIHK_OS_MANYCORE -D__KERNEL__
|
|
||||||
CFLAGS += $(foreach i, $(shell seq 6 120), $(addprefix -DPOSTK_DEBUG_ARCH_DEP_, $(i)))
|
|
||||||
CFLAGS += $(foreach i, $(shell seq 6 110), $(addprefix -DPOSTK_DEBUG_TEMP_FIX_, $(i)))
|
|
||||||
|
|
||||||
LDFLAGS := -nostdinc -mlittle-endian -Wall -Wundef -Wstrict-prototypes
|
|
||||||
LDFLAGS += -Wno-trigraphs -fno-strict-aliasing -fno-common
|
|
||||||
LDFLAGS += -Werror-implicit-function-declaration -Wno-format-security
|
|
||||||
#LDFLAGS += -std=gnu89 -mgeneral-regs-only -mabi=lp64 -O2
|
|
||||||
LDFLAGS += -std=gnu89 -mgeneral-regs-only -O2
|
|
||||||
LDFLAGS += -Wframe-larger-than=2048 -fno-stack-protector
|
|
||||||
LDFLAGS += -fno-delete-null-pointer-checks -Wno-unused-but-set-variable
|
|
||||||
LDFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
|
||||||
LDFLAGS += -fno-var-tracking-assignments -g -Wdeclaration-after-statement
|
|
||||||
LDFLAGS += -Wno-pointer-sign -fno-strict-overflow -fconserve-stack
|
|
||||||
LDFLAGS += -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time
|
|
||||||
LDFLAGS += -shared -fno-common -fno-builtin -nostdlib
|
|
||||||
LDFLAGS += -Wl,-soname=linux-vdso.so.1 -Wl,--hash-style=sysv -Wl,-n -Wl,-T
|
|
||||||
LDFLAGS += --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO
|
|
||||||
LDFLAGS += -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vdso.so)"
|
|
||||||
LDFLAGS += -D"KBUILD_MODNAME=KBUILD_STR(vdso.so)" -D__KERNEL__
|
|
||||||
|
|
||||||
DEPSRCS = $(wildcard $(VDSOSRC)/*.c $(VDSOSRC)/*.S)
|
|
||||||
|
|
||||||
CFLAGS_lds := -E -P -C -U$(ARCH)
|
|
||||||
CFLAGS_lds += -nostdinc
|
|
||||||
CFLAGS_lds += -mlittle-endian
|
|
||||||
CFLAGS_lds += -D__KERNEL__
|
|
||||||
CFLAGS_lds += -D__ASSEMBLY__
|
|
||||||
CFLAGS_lds += -DLINKER_SCRIPT
|
|
||||||
CFLAGS_lds += -DVDSO_LBASE=0
|
|
||||||
ifeq ($(HOST_KERNEL_CONFIG_ARM64_4K_PAGES), y)
|
|
||||||
CFLAGS_lds += -DPAGE_SIZE=0x1000
|
|
||||||
endif
|
|
||||||
ifeq ($(HOST_KERNEL_CONFIG_ARM64_16K_PAGES), y)
|
|
||||||
CFLAGS_lds += -DPAGE_SIZE=0x4000
|
|
||||||
endif
|
|
||||||
ifeq ($(HOST_KERNEL_CONFIG_ARM64_64K_PAGES), y)
|
|
||||||
CFLAGS_lds += -DPAGE_SIZE=0x10000
|
|
||||||
endif
|
|
||||||
|
|
||||||
#load mckernel config (append CPPFLAGS)
|
|
||||||
#include @abs_top_builddir@/../ihk/cokernel/Makefile.common
|
|
||||||
include @abs_top_builddir@/../ihk/cokernel/$(TARGETDIR)/Makefile.predefines
|
|
||||||
|
|
||||||
default: all
|
|
||||||
|
|
||||||
.PHONY: all clean depend prepare
|
|
||||||
|
|
||||||
all: depend $(VDSOBUILD)/vdso.so $(VDSOBUILD)/../include/vdso-offsets.h $(VDSOBUILD)/../include/vdso-so-path.h
|
|
||||||
|
|
||||||
# Strip rule for the .so file
|
|
||||||
$(VDSOBUILD)/vdso.so: OBJCOPYFLAGS := -S
|
|
||||||
$(VDSOBUILD)/vdso.so: $(VDSOBUILD)/vdso.so.dbg
|
|
||||||
$(objcopy_cmd)
|
|
||||||
|
|
||||||
# Generate VDSO offsets using helper script
|
|
||||||
$(VDSOBUILD)/../include/vdso-offsets.h: $(VDSOBUILD)/vdso.so.dbg
|
|
||||||
$(call echo_cmd,VDSOSYM,$<)
|
|
||||||
@mkdir -p $(VDSOBUILD)/../include
|
|
||||||
@nm $< | sh $(VDSOSRC)/gen_vdso_offsets.sh | LC_ALL=C sort > $@
|
|
||||||
|
|
||||||
$(VDSOBUILD)/../include/vdso-so-path.h:
|
|
||||||
@echo "#define VDSO_SO_PATH \"@abs_builddir@/vdso.so\"" > $@
|
|
||||||
|
|
||||||
# Link rule for the .so file, .lds has to be first
|
|
||||||
$(VDSOBUILD)/vdso.so.dbg: $(VDSOBUILD)/vdso.lds $(DESTOBJS) $(DESTASMOBJS)
|
|
||||||
$(ld_cmd)
|
|
||||||
|
|
||||||
$(VDSOBUILD)/vdso.lds: $(VDSOSRC)/vdso.lds.S
|
|
||||||
$(lds_cmd)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(rm_cmd) -f $(DESTOBJS) $(DESTASMOBJS) $(VDSOBUILD)/Makefile.dep $(VDSOBUILD)/vdso.lds
|
|
||||||
$(rm_cmd) -f $(VDSOBUILD)/vdso.so* $(VDSOBUILD)/../include/vdso-offsets.h $(VDSOBUILD)/../include/vdso-so-path.h
|
|
||||||
$(rmdir_cmd) --ignore-fail-on-non-empty $(VDSOBUILD)/../include
|
|
||||||
|
|
||||||
depend: $(VDSOBUILD)/Makefile.dep
|
|
||||||
|
|
||||||
$(VDSOBUILD)/Makefile.dep:
|
|
||||||
$(call dep_cmd,$(DEPSRCS))
|
|
||||||
|
|
||||||
prepare:
|
|
||||||
@$(RM) $(VDSOBUILD)/Makefile.dep
|
|
||||||
|
|
||||||
-include $(VDSOBUILD)/Makefile.dep
|
|
||||||
|
|
||||||
# Actual build commands
|
|
||||||
ifeq ($(V),1)
|
|
||||||
echo_cmd =
|
|
||||||
submake = make
|
|
||||||
else
|
|
||||||
echo_cmd = @echo ' ($(TARGET))' $1 $(ECHO_SUFFIX) $2;
|
|
||||||
submake = make --no-print-directory
|
|
||||||
endif
|
|
||||||
|
|
||||||
cc_cmd = $(call echo_cmd,CC,$<)$(CC) $(CFLAGS) -c -o $@
|
|
||||||
ld_cmd = $(call echo_cmd,LD,$@)$(CC) $(LDFLAGS) $^ -o $@
|
|
||||||
dep_cmd = $(call echo_cmd,DEPEND,)$(CC) $(CFLAGS) -MM $1 > $@
|
|
||||||
rm_cmd = $(call echo_cmd,CLEAN,)$(RM)
|
|
||||||
rmdir_cmd = $(call echo_cmd,CLEAN,)$(RMDIR)
|
|
||||||
objcopy_cmd = $(call echo_cmd,OBJCOPY,$<)$(OBJCOPY) $(OBJCOPYFLAGS) $< $@
|
|
||||||
lds_cmd = $(call echo_cmd,LDS,$<)$(CC) $(CFLAGS_lds) -c -o $@ $<
|
|
||||||
|
|
||||||
$(DESTOBJS):
|
|
||||||
$(cc_cmd) $(addprefix $(VDSOSRC)/, $(notdir $(@:.o=.c)))
|
|
||||||
$(DESTASMOBJS):
|
|
||||||
$(cc_cmd) $(addprefix $(VDSOSRC)/, $(notdir $(@:.o=.S))) -D__ASSEMBLY__
|
|
||||||
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
/* asm_syscall.h COPYRIGHT FUJITSU LIMITED 2016 */
|
|
||||||
#ifndef __HEADER_ARM64_VDSO_SYSCALL_H
|
|
||||||
#define __HEADER_ARM64_VDSO_SYSCALL_H
|
|
||||||
|
|
||||||
#define DECLARATOR(number,name) .equ __NR_##name, number
|
|
||||||
#define SYSCALL_HANDLED(number,name) DECLARATOR(number,name)
|
|
||||||
#define SYSCALL_DELEGATED(number,name) DECLARATOR(number,name)
|
|
||||||
|
|
||||||
#include <syscall_list.h>
|
|
||||||
|
|
||||||
#undef DECLARATOR
|
|
||||||
#undef SYSCALL_HANDLED
|
|
||||||
#undef SYSCALL_DELEGATED
|
|
||||||
|
|
||||||
#endif /* !__HEADER_ARM64_VDSO_SYSCALL_H */
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# gen_vdso_offsets.sh COPYRIGHT FUJITSU LIMITED 2016
|
|
||||||
# @ref.impl arch/arm64/kernel/vdso/gen_vdso_offsets.sh
|
|
||||||
#
|
|
||||||
# Match symbols in the DSO that look like VDSO_*; produce a header file
|
|
||||||
# of constant offsets into the shared object.
|
|
||||||
#
|
|
||||||
# Doing this inside the Makefile will break the $(filter-out) function,
|
|
||||||
# causing Kbuild to rebuild the vdso-offsets header file every time.
|
|
||||||
#
|
|
||||||
# Author: Will Deacon <will.deacon@arm.com
|
|
||||||
#
|
|
||||||
|
|
||||||
LC_ALL=C
|
|
||||||
sed -n -e 's/^00*/0/' -e \
|
|
||||||
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p'
|
|
||||||
@ -1,196 +0,0 @@
|
|||||||
/* gettimeofday.c COPYRIGHT FUJITSU LIMITED 2016-2018 */
|
|
||||||
#include <time.h>
|
|
||||||
#include <memory.h>
|
|
||||||
#include <affinity.h>
|
|
||||||
#include <syscall.h>
|
|
||||||
#include <registers.h>
|
|
||||||
#include <ihk/atomic.h>
|
|
||||||
|
|
||||||
#define UNUSED(x) ((void)(x))
|
|
||||||
void vdso_gettimeofday_unused_funcs(void)
|
|
||||||
{
|
|
||||||
UNUSED(xgetbv);
|
|
||||||
UNUSED(xsetbv);
|
|
||||||
UNUSED(rdpmc);
|
|
||||||
UNUSED(rdmsr);
|
|
||||||
UNUSED(set_perfctl);
|
|
||||||
UNUSED(start_perfctr);
|
|
||||||
UNUSED(stop_perfctr);
|
|
||||||
UNUSED(clear_perfctl);
|
|
||||||
UNUSED(set_perfctr);
|
|
||||||
UNUSED(read_perfctr);
|
|
||||||
UNUSED(xos_is_tchip);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int __kernel_gettimeofday(struct timeval *tv, void *tz);
|
|
||||||
|
|
||||||
static inline void cpu_pause_for_vsyscall(void)
|
|
||||||
{
|
|
||||||
asm volatile ("yield" ::: "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void vdso_calculate_time_from_tsc(struct timespec *ts,
|
|
||||||
struct tod_data_s *tod_data)
|
|
||||||
{
|
|
||||||
UNUSED(xgetbv);
|
|
||||||
UNUSED(xsetbv);
|
|
||||||
UNUSED(rdpmc);
|
|
||||||
UNUSED(rdmsr);
|
|
||||||
UNUSED(set_perfctl);
|
|
||||||
UNUSED(start_perfctr);
|
|
||||||
UNUSED(stop_perfctr);
|
|
||||||
UNUSED(clear_perfctl);
|
|
||||||
UNUSED(set_perfctr);
|
|
||||||
UNUSED(read_perfctr);
|
|
||||||
UNUSED(xos_is_tchip);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct tod_data_s *get_tod_data_addr(void)
|
|
||||||
{
|
|
||||||
unsigned long addr;
|
|
||||||
|
|
||||||
asm volatile("adr %0, _tod_data\n"
|
|
||||||
: "=r" (addr)
|
|
||||||
:
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
return (struct tod_data_s *)addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
int __kernel_gettimeofday(struct timeval *tv, void *tz)
|
|
||||||
{
|
|
||||||
long ret;
|
|
||||||
struct tod_data_s *tod_data;
|
|
||||||
struct timespec ats;
|
|
||||||
|
|
||||||
if(!tv && !tz) {
|
|
||||||
/* nothing to do */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
tod_data = get_tod_data_addr();
|
|
||||||
|
|
||||||
/* DO it locally if supported */
|
|
||||||
if (!tz && tod_data->do_local) {
|
|
||||||
vdso_calculate_time_from_tsc(&ats, tod_data);
|
|
||||||
|
|
||||||
tv->tv_sec = ats.tv_sec;
|
|
||||||
tv->tv_usec = ats.tv_nsec / 1000;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Otherwize syscall */
|
|
||||||
asm volatile("mov w8, %w1\n"
|
|
||||||
"mov x0, %2\n"
|
|
||||||
"mov x1, %3\n"
|
|
||||||
"svc #0\n"
|
|
||||||
"mov %0, x0\n"
|
|
||||||
: "=r" (ret)
|
|
||||||
: "r" (__NR_gettimeofday), "r"(tv), "r"(tz)
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
*(int *)0 = 0; /* i.e. raise(SIGSEGV) */
|
|
||||||
}
|
|
||||||
return (int)ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The IDs of the various system clocks (for POSIX.1b interval timers):
|
|
||||||
* @ref.impl include/uapi/linux/time.h
|
|
||||||
*/
|
|
||||||
// #define CLOCK_REALTIME 0
|
|
||||||
// #define CLOCK_MONOTONIC 1
|
|
||||||
// #define CLOCK_PROCESS_CPUTIME_ID 2
|
|
||||||
// #define CLOCK_THREAD_CPUTIME_ID 3
|
|
||||||
#define CLOCK_MONOTONIC_RAW 4
|
|
||||||
#define CLOCK_REALTIME_COARSE 5
|
|
||||||
#define CLOCK_MONOTONIC_COARSE 6
|
|
||||||
#define CLOCK_BOOTTIME 7
|
|
||||||
#define CLOCK_REALTIME_ALARM 8
|
|
||||||
#define CLOCK_BOOTTIME_ALARM 9
|
|
||||||
#define CLOCK_SGI_CYCLE 10 /* Hardware specific */
|
|
||||||
#define CLOCK_TAI 11
|
|
||||||
|
|
||||||
#define HIGH_RES_NSEC 1 /* nsec. */
|
|
||||||
#define CLOCK_REALTIME_RES HIGH_RES_NSEC
|
|
||||||
|
|
||||||
#define CLOCK_COARSE_RES ((NS_PER_SEC+CONFIG_HZ/2)/CONFIG_HZ) /* 10,000,000 nsec*/
|
|
||||||
|
|
||||||
typedef int clockid_t;
|
|
||||||
|
|
||||||
int __kernel_clock_gettime(clockid_t clk_id, struct timespec *tp)
|
|
||||||
{
|
|
||||||
long ret;
|
|
||||||
struct tod_data_s *tod_data;
|
|
||||||
struct timespec ats;
|
|
||||||
|
|
||||||
if (!tp) {
|
|
||||||
/* nothing to do */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
tod_data = get_tod_data_addr();
|
|
||||||
|
|
||||||
/* DO it locally if supported */
|
|
||||||
if (tod_data->do_local && clk_id == CLOCK_REALTIME) {
|
|
||||||
vdso_calculate_time_from_tsc(&ats, tod_data);
|
|
||||||
|
|
||||||
tp->tv_sec = ats.tv_sec;
|
|
||||||
tp->tv_nsec = ats.tv_nsec;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Otherwize syscall */
|
|
||||||
asm volatile("mov w8, %w1\n"
|
|
||||||
"mov x0, %2\n"
|
|
||||||
"mov x1, %3\n"
|
|
||||||
"svc #0\n"
|
|
||||||
"mov %0, x0\n"
|
|
||||||
: "=r" (ret)
|
|
||||||
: "r" (__NR_clock_gettime), "r"(clk_id), "r"(tp)
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
return (int)ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int __kernel_clock_getres(clockid_t clk_id, struct timespec *res)
|
|
||||||
{
|
|
||||||
long ret;
|
|
||||||
|
|
||||||
if (!res) {
|
|
||||||
/* nothing to do */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (clk_id) {
|
|
||||||
case CLOCK_REALTIME:
|
|
||||||
case CLOCK_MONOTONIC:
|
|
||||||
res->tv_sec = 0;
|
|
||||||
res->tv_nsec = CLOCK_REALTIME_RES;
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
case CLOCK_REALTIME_COARSE:
|
|
||||||
case CLOCK_MONOTONIC_COARSE:
|
|
||||||
res->tv_sec = 0;
|
|
||||||
res->tv_nsec = CLOCK_COARSE_RES;
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Otherwise syscall */
|
|
||||||
asm volatile("mov w8, %w1\n"
|
|
||||||
"mov x0, %2\n"
|
|
||||||
"mov x1, %3\n"
|
|
||||||
"svc #0\n"
|
|
||||||
"mov %0, x0\n"
|
|
||||||
: "=r" (ret)
|
|
||||||
: "r" (__NR_clock_getres), "r"(clk_id), "r"(res)
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
return (int)ret;
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
/* note.S COPYRIGHT FUJITSU LIMITED 2016 */
|
|
||||||
/* @ref.impl arch/arm64/kernel/vdso/note.S */
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 ARM Limited
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Will Deacon <will.deacon@arm.com>
|
|
||||||
*
|
|
||||||
* This supplies .note.* sections to go into the PT_NOTE inside the vDSO text.
|
|
||||||
* Here we can supply some information useful to userland.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <elfnote.h>
|
|
||||||
|
|
||||||
ELFNOTE_START(McKernel, 0, "a")
|
|
||||||
.long 0x10000 /* MCKERNEL_VERSION_CODE */
|
|
||||||
ELFNOTE_END
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
/* sigreturn.S COPYRIGHT FUJITSU LIMITED 2016 */
|
|
||||||
/* @ref.impl arch/arm64/kernel/vdso/sigreturn.S */
|
|
||||||
/*
|
|
||||||
* Sigreturn trampoline for returning from a signal when the SA_RESTORER
|
|
||||||
* flag is not set.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 ARM Limited
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Will Deacon <will.deacon@arm.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linkage.h>
|
|
||||||
#include <asm-syscall.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
nop
|
|
||||||
ENTRY(__kernel_rt_sigreturn)
|
|
||||||
.cfi_startproc
|
|
||||||
.cfi_signal_frame
|
|
||||||
.cfi_def_cfa x29, 0
|
|
||||||
.cfi_offset x29, 0 * 8
|
|
||||||
.cfi_offset x30, 1 * 8
|
|
||||||
mov x8, #__NR_rt_sigreturn
|
|
||||||
svc #0
|
|
||||||
.cfi_endproc
|
|
||||||
ENDPROC(__kernel_rt_sigreturn)
|
|
||||||
@ -1,96 +0,0 @@
|
|||||||
/* vdso.lds.S COPYRIGHT FUJITSU LIMITED 2016 */
|
|
||||||
/* @ref.impl arch/arm64/kernel/vdso/vdso.lds.S */
|
|
||||||
/*
|
|
||||||
* GNU linker script for the VDSO library.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 ARM Limited
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Author: Will Deacon <will.deacon@arm.com>
|
|
||||||
* Heavily based on the vDSO linker scripts for other archs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64")
|
|
||||||
OUTPUT_ARCH(aarch64)
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
PROVIDE(_tod_data = . - PAGE_SIZE);
|
|
||||||
. = VDSO_LBASE + SIZEOF_HEADERS;
|
|
||||||
|
|
||||||
.hash : { *(.hash) } :text
|
|
||||||
.gnu.hash : { *(.gnu.hash) }
|
|
||||||
.dynsym : { *(.dynsym) }
|
|
||||||
.dynstr : { *(.dynstr) }
|
|
||||||
.gnu.version : { *(.gnu.version) }
|
|
||||||
.gnu.version_d : { *(.gnu.version_d) }
|
|
||||||
.gnu.version_r : { *(.gnu.version_r) }
|
|
||||||
|
|
||||||
.note : { *(.note.*) } :text :note
|
|
||||||
|
|
||||||
. = ALIGN(16);
|
|
||||||
|
|
||||||
.text : { *(.text*) } :text =0xd503201f
|
|
||||||
PROVIDE (__etext = .);
|
|
||||||
PROVIDE (_etext = .);
|
|
||||||
PROVIDE (etext = .);
|
|
||||||
|
|
||||||
.eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr
|
|
||||||
.eh_frame : { KEEP (*(.eh_frame)) } :text
|
|
||||||
|
|
||||||
.dynamic : { *(.dynamic) } :text :dynamic
|
|
||||||
|
|
||||||
.rodata : { *(.rodata*) } :text
|
|
||||||
|
|
||||||
_end = .;
|
|
||||||
PROVIDE(end = .);
|
|
||||||
|
|
||||||
/DISCARD/ : {
|
|
||||||
*(.note.GNU-stack)
|
|
||||||
*(.data .data.* .gnu.linkonce.d.* .sdata*)
|
|
||||||
*(.bss .sbss .dynbss .dynsbss)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We must supply the ELF program headers explicitly to get just one
|
|
||||||
* PT_LOAD segment, and set the flags explicitly to make segments read-only.
|
|
||||||
*/
|
|
||||||
PHDRS
|
|
||||||
{
|
|
||||||
text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
|
|
||||||
dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
|
|
||||||
note PT_NOTE FLAGS(4); /* PF_R */
|
|
||||||
eh_frame_hdr PT_GNU_EH_FRAME;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This controls what symbols we export from the DSO.
|
|
||||||
*/
|
|
||||||
VERSION
|
|
||||||
{
|
|
||||||
LINUX_2.6.39 {
|
|
||||||
global:
|
|
||||||
__kernel_rt_sigreturn;
|
|
||||||
__kernel_gettimeofday;
|
|
||||||
__kernel_clock_gettime;
|
|
||||||
__kernel_clock_getres;
|
|
||||||
local: *;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make the sigreturn code visible to the kernel.
|
|
||||||
*/
|
|
||||||
VDSO_sigtramp = __kernel_rt_sigreturn;
|
|
||||||
@ -18,8 +18,8 @@ prefix="@prefix@"
|
|||||||
BINDIR="${prefix}/bin"
|
BINDIR="${prefix}/bin"
|
||||||
SBINDIR="${prefix}/sbin"
|
SBINDIR="${prefix}/sbin"
|
||||||
ETCDIR=@ETCDIR@
|
ETCDIR=@ETCDIR@
|
||||||
KMODDIR="${prefix}/kmod"
|
KMODDIR="@KMODDIR@"
|
||||||
KERNDIR="${prefix}/@TARGET@/kernel"
|
KERNDIR="@MCKERNELDIR@"
|
||||||
ENABLE_MCOVERLAYFS="@ENABLE_MCOVERLAYFS@"
|
ENABLE_MCOVERLAYFS="@ENABLE_MCOVERLAYFS@"
|
||||||
MCK_BUILDID=@BUILDID@
|
MCK_BUILDID=@BUILDID@
|
||||||
|
|
||||||
@ -138,32 +138,32 @@ error_exit() {
|
|||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
mcos_sys_mounted)
|
mcos_sys_mounted)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
umount /tmp/mcos/mcos0_sys
|
umount /tmp/mcos/mcos0_sys
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
mcos_proc_mounted)
|
mcos_proc_mounted)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
umount /tmp/mcos/mcos0_proc
|
umount /tmp/mcos/mcos0_proc
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
mcoverlayfs_loaded)
|
mcoverlayfs_loaded)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
rmmod mcoverlay 2>/dev/null
|
rmmod mcoverlay 2>/dev/null
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
linux_proc_bind_mounted)
|
linux_proc_bind_mounted)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
umount /tmp/mcos/linux_proc
|
umount /tmp/mcos/linux_proc
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
tmp_mcos_mounted)
|
tmp_mcos_mounted)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
umount /tmp/mcos
|
umount /tmp/mcos
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
tmp_mcos_created)
|
tmp_mcos_created)
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
rm -rf /tmp/mcos
|
rm -rf /tmp/mcos
|
||||||
fi
|
fi
|
||||||
;&
|
;&
|
||||||
@ -255,7 +255,7 @@ if [ "$cpus" == "" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove mcoverlay if loaded
|
# Remove mcoverlay if loaded
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
${SBINDIR}/mcoverlay-destroy.sh
|
${SBINDIR}/mcoverlay-destroy.sh
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]; then
|
if [ $ret -ne 0 ]; then
|
||||||
@ -462,7 +462,7 @@ if ! chown ${chown_option} /dev/mcd* /dev/mcos*; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Overlay /proc, /sys with McKernel specific contents
|
# Overlay /proc, /sys with McKernel specific contents
|
||||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||||
${SBINDIR}/mcoverlay-create.sh
|
${SBINDIR}/mcoverlay-create.sh
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]; then
|
if [ $ret -ne 0 ]; then
|
||||||
|
|||||||
@ -100,15 +100,6 @@ if grep mcctrl /proc/modules &>/dev/null; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove mcoverlay if loaded
|
|
||||||
${SBINDIR}/mcoverlay-destroy.sh
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]; then
|
|
||||||
echo "error: mcoverlay-destroy.sh" >&2
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Remove SMP module
|
# Remove SMP module
|
||||||
if grep ihk_smp_@ARCH@ /proc/modules &>/dev/null; then
|
if grep ihk_smp_@ARCH@ /proc/modules &>/dev/null; then
|
||||||
if ! rmmod ihk_smp_@ARCH@ 2>/dev/null; then
|
if ! rmmod ihk_smp_@ARCH@ 2>/dev/null; then
|
||||||
|
|||||||
46
cmake/README.cross_compilation
Normal file
46
cmake/README.cross_compilation
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Cross compilation:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The standard way of cross compiling with cmake is to give cmake a "toolchain
|
||||||
|
file" that describes the compiler prefix and where it can find libraries for
|
||||||
|
the target system, we provide an example in cmake/cross-aarch64.cmake.
|
||||||
|
|
||||||
|
This obviously requires installing a toolchain and a rootfs with target
|
||||||
|
libraries to link against.
|
||||||
|
|
||||||
|
In addition, mckernel borrows the Kbuild system from linux kernel, which also
|
||||||
|
makes the assumption that you can run generated executables (Kbuild uses various
|
||||||
|
scripts around module building and does not make the distinction between build
|
||||||
|
target and host target); you can get this working by setting up qemu-user on your
|
||||||
|
machine which the kernel will transparently use through binfmt magic when trying
|
||||||
|
to execute other arch binaries.
|
||||||
|
|
||||||
|
# yum install gcc-aarch64-linux-gnu qemu-user
|
||||||
|
(dnf brings in --forcearch, we use this to setup the sysroot ; there are other
|
||||||
|
ways of building one. It is available on el7 in extras.)
|
||||||
|
# yum install dnf dnf-plugins-core
|
||||||
|
(install these separately because most scripts cannot be run, and dependency hell means we need them first)
|
||||||
|
# dnf download --releasever=7 --forcearch=aarch64 filesystem centos-release
|
||||||
|
# rpm --root /usr/aarch64-linux-gnu/sys-root --ignorearch --nodeps -ivh filesystem-*.rpm
|
||||||
|
# rpm --root /usr/aarch64-linux-gnu/sys-root --ignorearch --nodeps -ivh centos-release-*.rpm
|
||||||
|
# rpm --root /usr/aarch64-linux-gnu/sys-root --import /usr/aarch64-linux-gnu/sys-root/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
|
||||||
|
# rpm --root /usr/aarch64-linux-gnu/sys-root --import /usr/aarch64-linux-gnu/sys-root/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7-aarch64
|
||||||
|
# dnf install --releasever=7 --forcearch=aarch64 --installroot=/usr/aarch64-linux-gnu/sys-root/ --setopt=tsflags=noscripts glibc-devel kernel-devel numactl-devel systemd-devel binutils-devel
|
||||||
|
|
||||||
|
(el7 lacks a binfmt for aarch64... fix this)
|
||||||
|
# echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64:' > /etc/binfmt.d/qemu-aarch64-dynamic.conf
|
||||||
|
# systemctl restart systemd-binfmt
|
||||||
|
|
||||||
|
(optional) test your setup
|
||||||
|
# gcc -xc - <<<'#include <stdio.h>'$'\n''int main() { printf("ok\n"); return 0; }'
|
||||||
|
# export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/sys-root
|
||||||
|
# file a.out
|
||||||
|
a.out: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.7.0, BuildID[sha1]=5ff445d3353cad2dae0a22550fe4cc572287dd90, not stripped
|
||||||
|
# ./a.out
|
||||||
|
ok
|
||||||
|
|
||||||
|
finally, build mckernel!
|
||||||
|
# mkdir build; cd build
|
||||||
|
# export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/sys-root
|
||||||
|
# cmake -DCMAKE_INSTALL_PREFIX=/tmp/install-aarch64 -DCMAKE_TOOLCHAIN_FILE=../cmake/cross-aarch64.cmake -DUNAME_R=4.14.0-115.2.2.el7a.aarch64 -DKERNEL_DIR=/usr/aarch64-linux-gnu/sys-root/usr/src/kernels/4.14.0-115.2.2.el7a.aarch64/ -DBUILD_TARGET=smp-arm64 ..
|
||||||
|
# make -j
|
||||||
10
cmake/cross-aarch64.cmake
Normal file
10
cmake/cross-aarch64.cmake
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
SET(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
SET(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
|
||||||
|
SET(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
|
||||||
|
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu/sys-root)
|
||||||
|
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
100
cmake/modules/Kbuild.cmake
Normal file
100
cmake/modules/Kbuild.cmake
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# Interface to kbuild
|
||||||
|
#
|
||||||
|
# Generate Kbuild file as appropriate and call make to the kernel build system
|
||||||
|
# Original goal was to be simple, but correctness is difficult...
|
||||||
|
|
||||||
|
set(UNAME_R ${CMAKE_SYSTEM_VERSION} CACHE STRING "Kernel version to build against")
|
||||||
|
set(KERNEL_DIR "/lib/modules/${UNAME_R}/build" CACHE STRING "kernel build directory")
|
||||||
|
|
||||||
|
set(KBUILD_C_FLAGS "" CACHE STRING "Compiler flags to give to Kbuild.")
|
||||||
|
set(KBUILD_MAKE_FLAGS "" CACHE STRING "Extra make arguments for Kbuild.")
|
||||||
|
|
||||||
|
mark_as_advanced(
|
||||||
|
KBUILD_C_FLAGS
|
||||||
|
KBUILD_MAKE_FLAGS
|
||||||
|
)
|
||||||
|
|
||||||
|
function(kmod MODULE_NAME)
|
||||||
|
cmake_parse_arguments(KMOD "" "INSTALL_DEST" "C_FLAGS;SOURCES;EXTRA_SYMBOLS;DEPENDS" ${ARGN})
|
||||||
|
|
||||||
|
add_custom_target(${MODULE_NAME}_ko ALL
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.ko"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/Module.symvers")
|
||||||
|
|
||||||
|
string(REGEX REPLACE "\\.c(;|$)" ".o\\1" KMOD_OBJECTS "${KMOD_SOURCES}")
|
||||||
|
string(REPLACE ";" " " OBJECTS "${KMOD_OBJECTS}")
|
||||||
|
string(REPLACE ";" " " C_FLAGS "${KMOD_C_FLAGS}")
|
||||||
|
string(REPLACE ";" " " EXTRA_SYMBOLS "${KMOD_EXTRA_SYMBOLS}")
|
||||||
|
if(ENABLE_WERROR)
|
||||||
|
set(ccflags "${KBUILD_C_FLAGS} ${C_FLAGS} -Werror")
|
||||||
|
else(ENABLE_WERROR)
|
||||||
|
set(ccflags "${KBUILD_C_FLAGS} ${C_FLAGS}")
|
||||||
|
endif(ENABLE_WERROR)
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/Kbuild.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/Kbuild)
|
||||||
|
|
||||||
|
if (${CMAKE_GENERATOR} STREQUAL Ninja)
|
||||||
|
set(MAKE "make")
|
||||||
|
list(APPEND KBUILD_MAKE_FLAGS "-j")
|
||||||
|
else ()
|
||||||
|
set(MAKE "$(MAKE)")
|
||||||
|
endif ()
|
||||||
|
if (NOT "${ARCH}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||||
|
string(REGEX REPLACE "ld$" "" CROSS_COMPILE "${CMAKE_LINKER}")
|
||||||
|
list(APPEND KBUILD_MAKE_FLAGS "ARCH=${ARCH};CROSS_COMPILE=${CROSS_COMPILE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REGEX REPLACE "\\.c(;|$)" ".o.cmd\\1" KMOD_O_CMD "${KMOD_SOURCES}")
|
||||||
|
string(REGEX REPLACE "[^/;]+(;|$)" ".\\0" KMOD_O_CMD "${KMOD_O_CMD}")
|
||||||
|
|
||||||
|
|
||||||
|
# This custom command has two uses:
|
||||||
|
# - first is to list kbuild output files, so make clean does something
|
||||||
|
# (cmake does not let us add a custom command to make clean)
|
||||||
|
# - this alone could have been added to the other command, but cmake insists
|
||||||
|
# on messing with timestamps with touch_nocreate after the command runs,
|
||||||
|
# so it would incorrectly make intermediary outputs newer than the .ko
|
||||||
|
# and force kbuild to relink needlessly
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT
|
||||||
|
old_timestamp
|
||||||
|
${KMOD_OBJECTS}
|
||||||
|
${KMOD_O_CMD}
|
||||||
|
"${MODULE_NAME}.o"
|
||||||
|
".${MODULE_NAME}.o.cmd"
|
||||||
|
"${MODULE_NAME}.mod.c"
|
||||||
|
"${MODULE_NAME}.mod.o"
|
||||||
|
".${MODULE_NAME}.mod.o.cmd"
|
||||||
|
".${MODULE_NAME}.ko.cmd"
|
||||||
|
".tmp_versions/${MODULE_NAME}.mod"
|
||||||
|
".tmp_versions"
|
||||||
|
"modules.order"
|
||||||
|
COMMAND touch old_timestamp
|
||||||
|
)
|
||||||
|
|
||||||
|
# This custom command forces cmake to rebuild the module, so kbuild's dependencies
|
||||||
|
# (including header files modifications) kick in everytime.
|
||||||
|
# Ideally, should later be replaced by something parsing the .xxx.cmd files to have
|
||||||
|
# the native build system do these checks, if possible at all...
|
||||||
|
add_custom_command(OUTPUT kmod_always_rebuild COMMAND touch kmod_always_rebuild)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${MODULE_NAME}.ko"
|
||||||
|
"Module.symvers"
|
||||||
|
COMMAND ${MAKE} ${KBUILD_MAKE_FLAGS} -C ${KERNEL_DIR}
|
||||||
|
M=${CMAKE_CURRENT_BINARY_DIR} modules
|
||||||
|
COMMAND rm -f kmod_always_rebuild
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/Kbuild"
|
||||||
|
${KMOD_DEPENDS}
|
||||||
|
kmod_always_rebuild
|
||||||
|
old_timestamp
|
||||||
|
COMMENT "Building kmod ${MODULE_NAME}"
|
||||||
|
)
|
||||||
|
|
||||||
|
if (KMOD_INSTALL_DEST)
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.ko"
|
||||||
|
DESTINATION "${KMOD_INSTALL_DEST}")
|
||||||
|
endif (KMOD_INSTALL_DEST)
|
||||||
|
|
||||||
|
message("Defined module ${MODULE_NAME}")
|
||||||
|
endfunction(kmod)
|
||||||
7
cmake/modules/Kbuild.in
Normal file
7
cmake/modules/Kbuild.in
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
ccflags-y := @ccflags@
|
||||||
|
src := @CMAKE_CURRENT_SOURCE_DIR@
|
||||||
|
|
||||||
|
KBUILD_EXTRA_SYMBOLS := @EXTRA_SYMBOLS@
|
||||||
|
|
||||||
|
obj-m := @MODULE_NAME@.o
|
||||||
|
@MODULE_NAME@-y := @OBJECTS@
|
||||||
43
cmake/modules/Ksym.cmake
Normal file
43
cmake/modules/Ksym.cmake
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Lookup symbol addresses from Ksymbol file
|
||||||
|
|
||||||
|
set(SYSTEM_MAP "${KERNEL_DIR}/System.map" CACHE STRING "System map to look for symbols")
|
||||||
|
set(VMLINUX "${KERNEL_DIR}/vmlinux" CACHE STRING "kernel object file")
|
||||||
|
|
||||||
|
|
||||||
|
function(ksym SYMBOL)
|
||||||
|
cmake_parse_arguments(KSYM "" "PREFIX;SOURCE_FILE;SUFFIX" "" ${ARGN})
|
||||||
|
|
||||||
|
execute_process(COMMAND awk "/ ${SYMBOL}$/ { print $1 }" ${SYSTEM_MAP}
|
||||||
|
OUTPUT_VARIABLE ADDRESS_CANDIDATES OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if (NOT ADDRESS_CANDIDATES)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# listify and get first element
|
||||||
|
string(REPLACE "\n" ";" ADDRESS_CANDIDATES "${ADDRESS_CANDIDATES}")
|
||||||
|
list(GET ADDRESS_CANDIDATES 0 ADDRESS)
|
||||||
|
|
||||||
|
if (SOURCE_FILE)
|
||||||
|
foreach(ADDRESS IN LISTS ADDRESS_CANDIDATES)
|
||||||
|
execute_process(COMMAND addr2line -e ${VMLINUX} ${ADDRESS}
|
||||||
|
OUTPUT_VARIABLE LINE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(LINE MATCHES ".*${SOURCE_FILE}:.*")
|
||||||
|
set(FOUND ADDRESS)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach(ADDRESS)
|
||||||
|
if(NOT FOUND)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ?! why only if source_file?...
|
||||||
|
execute_process(COMMAND "awk '/ __ksymtab_${SYMBOL}$/ { print $1 }'"
|
||||||
|
OUTPUT_VARIABLE SYMBOL_EXPORTED OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if (SYMBOL_EXPORTED)
|
||||||
|
set(ADDRESS 0)
|
||||||
|
endif(SYMBOL_EXPORTED)
|
||||||
|
endif(SOURCE_FILE)
|
||||||
|
|
||||||
|
set(${KSYM_PREFIX}KSYM_${SYMBOL}${KSYM_SUFFIX} "0x${ADDRESS}" CACHE INTERNAL "symbol")
|
||||||
|
endfunction(ksym)
|
||||||
98
config.h.in
98
config.h.in
@ -1,97 +1,37 @@
|
|||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* Path of install directory for binary */
|
|
||||||
#undef BINDIR
|
|
||||||
|
|
||||||
/* IHK build-id to confirm IHK and McKernel built at the same time are used */
|
/* IHK build-id to confirm IHK and McKernel built at the same time are used */
|
||||||
#undef BUILDID
|
#define BUILDID "${BUILDID}"
|
||||||
|
|
||||||
|
/* version number */
|
||||||
|
#define MCKERNEL_VERSION "${MCKERNEL_VERSION}"
|
||||||
|
|
||||||
/* whether mcoverlayfs is enabled */
|
/* whether mcoverlayfs is enabled */
|
||||||
#undef ENABLE_MCOVERLAYFS
|
#cmakedefine ENABLE_MCOVERLAYFS 1
|
||||||
|
|
||||||
/* whether memdump feature is enabled */
|
/* whether memdump feature is enabled */
|
||||||
#undef ENABLE_MEMDUMP
|
#cmakedefine ENABLE_MEMDUMP 1
|
||||||
|
|
||||||
/* whether perf is enabled */
|
/* whether perf is enabled */
|
||||||
#undef ENABLE_PERF
|
#cmakedefine ENABLE_PERF 1
|
||||||
|
|
||||||
/* whether qlmpi is enabled */
|
/* whether qlmpi is enabled */
|
||||||
#undef ENABLE_QLMPI
|
#cmakedefine ENABLE_QLMPI 1
|
||||||
|
|
||||||
/* whether rusage is enabled */
|
/* whether rusage is enabled */
|
||||||
#undef ENABLE_RUSAGE
|
#cmakedefine ENABLE_RUSAGE 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* whether UTI is enabled */
|
||||||
#undef HAVE_INTTYPES_H
|
#cmakedefine ENABLE_UTI 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `bfd' library (-lbfd). */
|
|
||||||
#undef HAVE_LIBBFD
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `iberty' library (-liberty). */
|
|
||||||
#undef HAVE_LIBIBERTY
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
#undef HAVE_MEMORY_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
#undef HAVE_STDINT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
#undef HAVE_STDLIB_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
#undef HAVE_STRINGS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
#undef HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
#undef HAVE_SYS_STAT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#undef HAVE_SYS_TYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
#undef HAVE_UNISTD_H
|
|
||||||
|
|
||||||
/* IHK version string */
|
|
||||||
#undef IHK_VERSION
|
|
||||||
|
|
||||||
/* McKernel specific headers */
|
|
||||||
#undef MCKERNEL_INCDIR
|
|
||||||
|
|
||||||
/* McKernel specific libraries */
|
|
||||||
#undef MCKERNEL_LIBDIR
|
|
||||||
|
|
||||||
/* McKernel version string */
|
|
||||||
#undef MCKERNEL_VERSION
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#undef PACKAGE_BUGREPORT
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#undef PACKAGE_NAME
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#undef PACKAGE_STRING
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#undef PACKAGE_TARNAME
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#undef PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#undef PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Path of bind-mount source directory */
|
/* Path of bind-mount source directory */
|
||||||
#undef ROOTFSDIR
|
#cmakedefine ROOTFSDIR "${ROOTFSDIR}"
|
||||||
|
|
||||||
|
/* Path of install directory for libraries */
|
||||||
|
#cmakedefine MCKERNEL_LIBDIR "${MCKERNEL_LIBDIR}"
|
||||||
|
|
||||||
|
/* Path of install directory for binary */
|
||||||
|
#cmakedefine BINDIR "${BINDIR}"
|
||||||
|
|
||||||
/* Path of install directory for system binary */
|
/* Path of install directory for system binary */
|
||||||
#undef SBINDIR
|
#cmakedefine SBINDIR "${SBINDIR}"
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
#undef STDC_HEADERS
|
|
||||||
|
|
||||||
/* whether or not syscall_intercept library is linked */
|
|
||||||
#undef WITH_SYSCALL_INTERCEPT
|
|
||||||
|
|||||||
649
configure.ac
649
configure.ac
@ -1,649 +0,0 @@
|
|||||||
# configure.ac COPYRIGHT FUJITSU LIMITED 2015-2018
|
|
||||||
AC_PREREQ(2.63)
|
|
||||||
m4_define([IHK_VERSION_m4],[1.5.0])dnl
|
|
||||||
m4_define([MCKERNEL_VERSION_m4],[1.5.0])dnl
|
|
||||||
m4_define([IHK_RELEASE_DATE_m4],[2018-04-05])dnl
|
|
||||||
m4_define([MCKERNEL_RELEASE_DATE_m4],[2018-04-05])dnl
|
|
||||||
|
|
||||||
AC_INIT([mckernel], MCKERNEL_VERSION_m4)
|
|
||||||
|
|
||||||
dnl *** PAC_APPEND_FLAG is copied from aclocal_util.m4 of mpich-3.3a2 ***
|
|
||||||
dnl Usage: PAC_APPEND_FLAG([-02], [CFLAGS])
|
|
||||||
dnl appends the given argument to the specified shell variable unless the
|
|
||||||
dnl argument is already present in the variable
|
|
||||||
AC_DEFUN([PAC_APPEND_FLAG],[
|
|
||||||
AC_REQUIRE([AC_PROG_FGREP])
|
|
||||||
AS_IF(
|
|
||||||
[echo "$$2" | $FGREP -e "\<$1\>" >/dev/null 2>&1],
|
|
||||||
[echo "$2(='$$2') contains '$1', not appending" >&AS_MESSAGE_LOG_FD],
|
|
||||||
[echo "$2(='$$2') does not contain '$1', appending" >&AS_MESSAGE_LOG_FD
|
|
||||||
$2="$$2 $1"]
|
|
||||||
)
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl *** PAC_SET_HEADER_LIB_PATH is copied from aclocal_libs.m4 of mpich-3.3a2 ***
|
|
||||||
dnl PAC_SET_HEADER_LIB_PATH(with_option,[default_path])
|
|
||||||
dnl This macro looks for the --with-xxx=, --with-xxx-include and --with-xxx-lib=
|
|
||||||
dnl options and sets the library and include paths.
|
|
||||||
dnl
|
|
||||||
dnl TODO as written, this macro cannot handle a "with_option" arg that has "-"
|
|
||||||
dnl characters in it. Use AS_TR_SH (and possibly AS_VAR_* macros) to handle
|
|
||||||
dnl this case if it ever arises.
|
|
||||||
AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
|
|
||||||
AC_ARG_WITH([$1],
|
|
||||||
[AC_HELP_STRING([--with-$1=PATH],
|
|
||||||
[specify path where $1 include directory and lib directory can be found])],
|
|
||||||
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1=PATH expects a valid PATH])
|
|
||||||
with_$1=""])],
|
|
||||||
[with_$1=$2])
|
|
||||||
AC_ARG_WITH([$1-include],
|
|
||||||
[AC_HELP_STRING([--with-$1-include=PATH],
|
|
||||||
[specify path where $1 include directory can be found])],
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1-include=PATH expects a valid PATH])
|
|
||||||
with_$1_include=""])],
|
|
||||||
[])
|
|
||||||
AC_ARG_WITH([$1-lib],
|
|
||||||
[AC_HELP_STRING([--with-$1-lib=PATH],
|
|
||||||
[specify path where $1 lib directory can be found])],
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1-lib=PATH expects a valid PATH])
|
|
||||||
with_$1_lib=""])],
|
|
||||||
[])
|
|
||||||
|
|
||||||
# The args have been sanitized into empty/non-empty values above.
|
|
||||||
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
|
|
||||||
# taking priority
|
|
||||||
|
|
||||||
AS_IF([test -n "${with_$1_include}"],
|
|
||||||
[PAC_APPEND_FLAG([-I${with_$1_include}],[CPPFLAGS])],
|
|
||||||
[AS_IF([test -n "${with_$1}"],
|
|
||||||
[PAC_APPEND_FLAG([-I${with_$1}/include],[CPPFLAGS])])])
|
|
||||||
|
|
||||||
AS_IF([test -n "${with_$1_lib}"],
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1_lib}],[LDFLAGS])],
|
|
||||||
[AS_IF([test -n "${with_$1}"],
|
|
||||||
dnl is adding lib64 by default really the right thing to do? What if
|
|
||||||
dnl we are on a 32-bit host that happens to have both lib dirs available?
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
|
|
||||||
AS_IF([test -d "${with_$1}/lib64"],
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([PAC_SET_HEADER_LIB_PATH_SYSCALL_INTERCEPT],[
|
|
||||||
AC_ARG_WITH([$1],
|
|
||||||
[AC_HELP_STRING([--with-$1=PATH],
|
|
||||||
[specify path where $1 include directory and lib directory can be found])],
|
|
||||||
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1=PATH expects a valid PATH])
|
|
||||||
with_$1=""])],
|
|
||||||
[with_$1=$2])
|
|
||||||
AC_ARG_WITH([$1-include],
|
|
||||||
[AC_HELP_STRING([--with-$1-include=PATH],
|
|
||||||
[specify path where $1 include directory can be found])],
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1-include=PATH expects a valid PATH])
|
|
||||||
with_$1_include=""])],
|
|
||||||
[])
|
|
||||||
AC_ARG_WITH([$1-lib],
|
|
||||||
[AC_HELP_STRING([--with-$1-lib=PATH],
|
|
||||||
[specify path where $1 lib directory can be found])],
|
|
||||||
[AS_CASE(["$withval"],
|
|
||||||
[yes|no|''],
|
|
||||||
[AC_MSG_WARN([--with[out]-$1-lib=PATH expects a valid PATH])
|
|
||||||
with_$1_lib=""])],
|
|
||||||
[])
|
|
||||||
|
|
||||||
# The args have been sanitized into empty/non-empty values above.
|
|
||||||
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
|
|
||||||
# taking priority
|
|
||||||
|
|
||||||
AS_IF([test -n "${with_$1_include}"],
|
|
||||||
[PAC_APPEND_FLAG([-I${with_$1_include}],[CPPFLAGS_SYSCALL_INTERCEPT])],
|
|
||||||
[AS_IF([test -n "${with_$1}"],
|
|
||||||
[PAC_APPEND_FLAG([-I${with_$1}/include],[CPPFLAGS_SYSCALL_INTERCEPT])])])
|
|
||||||
|
|
||||||
AS_IF([test -n "${with_$1_lib}"],
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1_lib} -Wl,-rpath,${with_$1_lib}],[LDFLAGS_SYSCALL_INTERCEPT])],
|
|
||||||
[AS_IF([test -n "${with_$1}"],
|
|
||||||
dnl is adding lib64 by default really the right thing to do? What if
|
|
||||||
dnl we are on a 32-bit host that happens to have both lib dirs available?
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1}/lib -Wl,-rpath,${with_$1}/lib],[LDFLAGS_SYSCALL_INTERCEPT])
|
|
||||||
AS_IF([test -d "${with_$1}/lib64"],
|
|
||||||
[PAC_APPEND_FLAG([-L${with_$1}/lib64 -Wl,-rpath,${with_$1}/lib64],[LDFLAGS_SYSCALL_INTERCEPT])])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AS_IF([test -n "${with_$1}" || test -n "${with_$1_include}" || test -n "${with_$1_lib}"],
|
|
||||||
[WITH_SYSCALL_INTERCEPT=yes],
|
|
||||||
[WITH_SYSCALL_INTERCEPT=no])
|
|
||||||
])
|
|
||||||
|
|
||||||
IHK_VERSION=IHK_VERSION_m4
|
|
||||||
MCKERNEL_VERSION=MCKERNEL_VERSION_m4
|
|
||||||
DCFA_VERSION=DCFA_VERSION_m4
|
|
||||||
IHK_RELEASE_DATE=IHK_RELEASE_DATE_m4
|
|
||||||
MCKERNEL_RELEASE_DATE=MCKERNEL_RELEASE_DATE_m4
|
|
||||||
DCFA_RELEASE_DATE=DCFA_RELEASE_DATE_m4
|
|
||||||
|
|
||||||
AC_PREFIX_DEFAULT([/opt/ppos])
|
|
||||||
|
|
||||||
AC_CHECK_HEADER([numa.h],[numa_header_found=yes])
|
|
||||||
AS_IF([test "x$numa_header_found" != "xyes"],
|
|
||||||
[AC_MSG_ERROR([Unable to find numa.h header file, missing numactl-devel?])])
|
|
||||||
AC_CHECK_LIB([numa],[numa_run_on_node],[numa_lib_found=yes])
|
|
||||||
AS_IF([test "x$numa_lib_found" != "xyes"],
|
|
||||||
[AC_MSG_ERROR([Unable to find NUMA library, missing numactl-devel?])])
|
|
||||||
|
|
||||||
PAC_SET_HEADER_LIB_PATH([mpi])
|
|
||||||
|
|
||||||
PAC_SET_HEADER_LIB_PATH_SYSCALL_INTERCEPT([syscall_intercept])
|
|
||||||
|
|
||||||
if test "x$WITH_SYSCALL_INTERCEPT" == "xno" ; then
|
|
||||||
AC_CHECK_LIB([syscall_intercept],[syscall_no_intercept],[syscall_intercept_lib_found=yes],[syscall_intercept_lib_found=no],[-lcapstone -ldl])
|
|
||||||
AS_IF([test "x$syscall_intercept_lib_found" != "xyes"],
|
|
||||||
[AC_MSG_NOTICE([libsyscall_intercept.so not found])])
|
|
||||||
|
|
||||||
AC_CHECK_HEADER([libsyscall_intercept_hook_point.h],[syscall_intercept_header_found=yes],[syscall_intercept_header_found=no])
|
|
||||||
AS_IF([test "x$syscall_intercept_header_found" != "xyes"],
|
|
||||||
[AC_MSG_NOTICE([libsyscall_intercept_hook_point.h not found])])
|
|
||||||
|
|
||||||
AS_IF([test "x$syscall_intercept_lib_found" == "xyes" && test "x$syscall_intercept_header_found" == "xyes"],
|
|
||||||
[WITH_SYSCALL_INTERCEPT=yes],
|
|
||||||
[WITH_SYSCALL_INTERCEPT=no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
AC_ARG_WITH([kernelsrc],
|
|
||||||
AC_HELP_STRING(
|
|
||||||
[--with-kernelsrc=path],[Path to 'kernel src', default is /lib/modules/uname_r/build]),
|
|
||||||
[WITH_KERNELSRC=$withval],[WITH_KERNELSRC=yes])
|
|
||||||
|
|
||||||
AC_ARG_WITH([target],
|
|
||||||
AC_HELP_STRING(
|
|
||||||
[--with-target={attached-mic | builtin-mic | builtin-x86 | smp-x86}],[target, default is attached-mic]),
|
|
||||||
[WITH_TARGET=$withval],[WITH_TARGET=yes])
|
|
||||||
|
|
||||||
AC_ARG_WITH([system_map],
|
|
||||||
AS_HELP_STRING(
|
|
||||||
[--with-system_map=path],[Path to 'System.map file', default is /boot/System.map-uname_r]),
|
|
||||||
[WITH_SYSTEM_MAP=$withval],[WITH_SYSTEM_MAP=yes])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([dcfa],
|
|
||||||
[AS_HELP_STRING(
|
|
||||||
[--enable-dcfa],[Enable DCFA modules])],[],[enable_dcfa=no])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([memdump],
|
|
||||||
AC_HELP_STRING([--enable-memdump],
|
|
||||||
[enable dumping memory and analyzing a dump]),
|
|
||||||
[ENABLE_MEMDUMP=$enableval],
|
|
||||||
[ENABLE_MEMDUMP=default])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([mcoverlayfs],
|
|
||||||
AC_HELP_STRING([--enable-mcoverlayfs],
|
|
||||||
[enable mcoverlayfs implementation]),
|
|
||||||
[ENABLE_MCOVERLAYFS=$enableval],
|
|
||||||
[ENABLE_MCOVERLAYFS=no])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([rusage],
|
|
||||||
AC_HELP_STRING([--enable-rusage],
|
|
||||||
[enable rusage implementation]),
|
|
||||||
[ENABLE_RUSAGE=$enableval],
|
|
||||||
[ENABLE_RUSAGE=yes])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([perf],
|
|
||||||
AC_HELP_STRING([--enable-perf],
|
|
||||||
[enable perf_event implementation]),
|
|
||||||
[ENABLE_PERF=$enableval],
|
|
||||||
[ENABLE_PERF=yes])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([qlmpi],
|
|
||||||
AC_HELP_STRING([--enable-qlmpi],
|
|
||||||
[enable qlmpi implementation]),
|
|
||||||
[ENABLE_QLMPI=$enableval],
|
|
||||||
[ENABLE_QLMPI=no])
|
|
||||||
|
|
||||||
AC_ARG_WITH([uname_r],
|
|
||||||
AC_HELP_STRING(
|
|
||||||
[--with-uname_r=uname_r],[Value of '`uname -r`' on the target platform, default is local value]),
|
|
||||||
[WITH_UNAME_R=$withval],[WITH_UNAME_R=yes])
|
|
||||||
|
|
||||||
case "X$WITH_UNAME_R" in
|
|
||||||
Xyes | Xno | X)
|
|
||||||
WITH_UNAME_R="`uname -r`"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "X$WITH_KERNELSRC" in
|
|
||||||
Xyes | Xno | X)
|
|
||||||
WITH_KERNELSRC="/lib/modules/`uname -r`/build"
|
|
||||||
;;
|
|
||||||
X/*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
WITH_KERNELSRC="`pwd`/$WITH_KERNELSRC"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test "X$WITH_TARGET" = Xyes -o "X$WITH_TARGET" = Xno; then
|
|
||||||
WITH_TARGET=attached-mic
|
|
||||||
fi
|
|
||||||
|
|
||||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
|
||||||
AC_DEFINE_UNQUOTED(ROOTFSDIR,"$prefix/rootfs",[Path of bind-mount source directory])
|
|
||||||
|
|
||||||
case $WITH_TARGET in
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_30, Expansion of the branch.
|
|
||||||
# attached-mic|builtin-x86|smp-x86)
|
|
||||||
# ARCH=`uname -m`
|
|
||||||
# AC_PROG_CC
|
|
||||||
# XCC=$CC
|
|
||||||
# ;;
|
|
||||||
attached-mic|builtin-x86|smp-*)
|
|
||||||
case $WITH_TARGET in
|
|
||||||
attached-mic|builtin-x86|smp-x86)
|
|
||||||
ARCH=`uname -m`
|
|
||||||
;;
|
|
||||||
smp-arm64)
|
|
||||||
ARCH=arm64
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AC_PROG_CC
|
|
||||||
XCC=$CC
|
|
||||||
CFLAGS="$CFLAGS -ffreestanding -fno-tree-loop-distribute-patterns"
|
|
||||||
;;
|
|
||||||
builtin-mic)
|
|
||||||
ARCH=k1om
|
|
||||||
AC_CHECK_PROG(XCC,
|
|
||||||
[x86_64-$ARCH-linux-gcc],
|
|
||||||
[x86_64-$ARCH-linux-gcc],
|
|
||||||
[no])
|
|
||||||
CC=$XCC
|
|
||||||
;;
|
|
||||||
smp-arm64)
|
|
||||||
ARCH=arm64
|
|
||||||
AC_CHECK_PROG(XCC,
|
|
||||||
[${CROSS_COMPILE}gcc],
|
|
||||||
[${CROSS_COMPILE}gcc],
|
|
||||||
[no])
|
|
||||||
CC=$XCC
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([target $WITH_TARGET is unknwon])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $WITH_TARGET in
|
|
||||||
attached-mic)
|
|
||||||
if test "X$KERNDIR" = X; then
|
|
||||||
KERNDIR="$prefix/attached/kernel"
|
|
||||||
fi
|
|
||||||
if test "X$BINDIR" = X; then
|
|
||||||
BINDIR="$prefix/bin"
|
|
||||||
fi
|
|
||||||
if test "X$SBINDIR" = X; then
|
|
||||||
SBINDIR="$prefix/sbin"
|
|
||||||
fi
|
|
||||||
if test "X$KMODDIR" = X; then
|
|
||||||
KMODDIR="$prefix/kmod"
|
|
||||||
fi
|
|
||||||
if test "X$MANDIR" = X; then
|
|
||||||
MANDIR="$prefix/share/man"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
builtin-mic)
|
|
||||||
if test "X$KERNDIR" = X; then
|
|
||||||
KERNDIR="$prefix/attached/kernel"
|
|
||||||
fi
|
|
||||||
if test "X$BINDIR" = X; then
|
|
||||||
BINDIR="$prefix/attached/bin"
|
|
||||||
fi
|
|
||||||
if test "X$SBINDIR" = X; then
|
|
||||||
SBINDIR="$prefix/attached/sbin"
|
|
||||||
fi
|
|
||||||
if test "X$KMODDIR" = X; then
|
|
||||||
KMODDIR="$prefix/attached/kmod"
|
|
||||||
fi
|
|
||||||
if test "X$MANDIR" = X; then
|
|
||||||
MANDIR="$prefix/share/man"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
builtin-x86)
|
|
||||||
if test "X$KERNDIR" = X; then
|
|
||||||
KERNDIR="$prefix/attached/kernel"
|
|
||||||
fi
|
|
||||||
if test "X$BINDIR" = X; then
|
|
||||||
BINDIR="$prefix/bin"
|
|
||||||
fi
|
|
||||||
if test "X$SBINDIR" = X; then
|
|
||||||
SBINDIR="$prefix/sbin"
|
|
||||||
fi
|
|
||||||
if test "X$KMODDIR" = X; then
|
|
||||||
KMODDIR="$prefix/kmod"
|
|
||||||
fi
|
|
||||||
if test "X$MANDIR" = X; then
|
|
||||||
MANDIR="$prefix/share/man"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
smp-x86)
|
|
||||||
if test "X$KERNDIR" = X; then
|
|
||||||
KERNDIR="$prefix/smp-x86/kernel"
|
|
||||||
fi
|
|
||||||
if test "X$BINDIR" = X; then
|
|
||||||
BINDIR="$prefix/bin"
|
|
||||||
fi
|
|
||||||
if test "X$SBINDIR" = X; then
|
|
||||||
SBINDIR="$prefix/sbin"
|
|
||||||
fi
|
|
||||||
if test "X$MCKERNEL_INCDIR" = X; then
|
|
||||||
MCKERNEL_INCDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$MCKERNEL_LIBDIR" = X; then
|
|
||||||
MCKERNEL_LIBDIR="$prefix/lib"
|
|
||||||
fi
|
|
||||||
if test "X$INCDIR" = X; then
|
|
||||||
INCDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$ETCDIR" = X; then
|
|
||||||
ETCDIR="$prefix/etc"
|
|
||||||
fi
|
|
||||||
if test "X$INCLUDEDIR" = X; then
|
|
||||||
INCLUDEDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$KMODDIR" = X; then
|
|
||||||
KMODDIR="$prefix/kmod"
|
|
||||||
fi
|
|
||||||
if test "X$MANDIR" = X; then
|
|
||||||
MANDIR="$prefix/share/man"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
smp-arm64)
|
|
||||||
if test "X$KERNDIR" = X; then
|
|
||||||
KERNDIR="$prefix/smp-arm64/kernel"
|
|
||||||
fi
|
|
||||||
if test "X$BINDIR" = X; then
|
|
||||||
BINDIR="$prefix/bin"
|
|
||||||
fi
|
|
||||||
if test "X$SBINDIR" = X; then
|
|
||||||
SBINDIR="$prefix/sbin"
|
|
||||||
fi
|
|
||||||
if test "X$MCKERNEL_INCDIR" = X; then
|
|
||||||
MCKERNEL_INCDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$MCKERNEL_LIBDIR" = X; then
|
|
||||||
MCKERNEL_LIBDIR="$prefix/lib"
|
|
||||||
fi
|
|
||||||
if test "X$INCDIR" = X; then
|
|
||||||
INCDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$ETCDIR" = X; then
|
|
||||||
ETCDIR="$prefix/etc"
|
|
||||||
fi
|
|
||||||
if test "X$INCLUDEDIR" = X; then
|
|
||||||
INCLUDEDIR="$prefix/include"
|
|
||||||
fi
|
|
||||||
if test "X$KMODDIR" = X; then
|
|
||||||
KMODDIR="$prefix/kmod"
|
|
||||||
fi
|
|
||||||
if test "X$MANDIR" = X; then
|
|
||||||
MANDIR="$prefix/share/man"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([target $WITH_TARGET is unknwon])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
KDIR="$WITH_KERNELSRC"
|
|
||||||
UNAME_R="$WITH_UNAME_R"
|
|
||||||
TARGET="$WITH_TARGET"
|
|
||||||
|
|
||||||
case $ENABLE_MEMDUMP in
|
|
||||||
yes|no|auto)
|
|
||||||
;;
|
|
||||||
default)
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_30, Expansion of the branch.
|
|
||||||
# if test "x$WITH_TARGET" = "xsmp-x86" ; then
|
|
||||||
if test "x$WITH_TARGET" = "xsmp-x86" -o "x$WITH_TARGET" = "xsmp-arm64" ; then
|
|
||||||
ENABLE_MEMDUMP=auto
|
|
||||||
else
|
|
||||||
ENABLE_MEMDUMP=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([unknown memdump argument: $ENABLE_MEMDUMP])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test "x$ENABLE_MEMDUMP" != "xno" ; then
|
|
||||||
enableval=yes
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_32, AC_CHECK_LIB for libiberty
|
|
||||||
AC_CHECK_LIB([iberty],[hex_init],[],[enableval=no])
|
|
||||||
AC_CHECK_LIB([bfd],[bfd_init],[],[enableval=no])
|
|
||||||
AC_CHECK_HEADER([bfd.h],[],[enableval=no])
|
|
||||||
|
|
||||||
if test "x$ENABLE_MEMDUMP" = "xyes" -a "x$enableval" = "xno" ; then
|
|
||||||
AC_MSG_ERROR([memdump feature needs bfd.h and libbfd a.k.a bunutils-devel])
|
|
||||||
fi
|
|
||||||
ENABLE_MEMDUMP=$enableval
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$ENABLE_MEMDUMP" = "xyes" ; then
|
|
||||||
AC_MSG_NOTICE([memdump feature is enabled])
|
|
||||||
AC_DEFINE([ENABLE_MEMDUMP],[1],[whether memdump feature is enabled])
|
|
||||||
uncomment_if_ENABLE_MEMDUMP=''
|
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([memdump feature is disabled])
|
|
||||||
uncomment_if_ENABLE_MEMDUMP='#'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$ENABLE_MCOVERLAYFS" = "xyes" ; then
|
|
||||||
AC_DEFINE([ENABLE_MCOVERLAYFS],[1],[whether mcoverlayfs is enabled])
|
|
||||||
AC_MSG_NOTICE([mcoverlayfs is enabled])
|
|
||||||
|
|
||||||
IFS=. read LINUX_VERSION_MAJOR LINUX_VERSION_MINOR LINUX_VERSION_PATCH _ <<EOF
|
|
||||||
${UNAME_R%%-*}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
LINUX_VERSION_CODE=$(( LINUX_VERSION_MAJOR * 65536 + LINUX_VERSION_MINOR * 256 + LINUX_VERSION_PATCH ))
|
|
||||||
# rhel
|
|
||||||
if test x"${UNAME_R}" != x"${UNAME_R//.el[[0-9]]}" ; then
|
|
||||||
RHEL_RELEASE="${UNAME_R#*-}"
|
|
||||||
RHEL_RELEASE="${RHEL_RELEASE%%.*}"
|
|
||||||
case "$LINUX_VERSION_CODE" in
|
|
||||||
199168) # 3.10.0
|
|
||||||
MCOVERLAYFS_MODULE=linux-3.10.0-327.36.1.el7;;
|
|
||||||
262144) # 4.0.0
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.0.9;;
|
|
||||||
265728) # 4.14.0
|
|
||||||
#MCOVERLAYFS_MODULE=linux-4.14.0-115.2.2.el7a;;
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.18.14;;
|
|
||||||
266752) # 4.18.0
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.18.14;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([Your RHEL/centos version has no known mcoverlayfs module]);;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
case "1" in
|
|
||||||
# 4.0.0-4.1.0
|
|
||||||
$((LINUX_VERSION_CODE >= 262144 && LINUX_VERSION_CODE < 262400)))
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.0.9;;
|
|
||||||
# 4.6.0-4.7.0
|
|
||||||
$((LINUX_VERSION_CODE >= 263680 && LINUX_VERSION_CODE < 263936)))
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.6.7;;
|
|
||||||
# 4.18.0-4.20.0
|
|
||||||
$((LINUX_VERSION_CODE >= 266752 && LINUX_VERSION_CODE < 267264)))
|
|
||||||
MCOVERLAYFS_MODULE=linux-4.18.14;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([Your kernel version has no known mcoverlayfs module]);;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_WARN([mcoverlayfs is disabled. You will not be able to run anything.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$ENABLE_QLMPI" = "xyes" ; then
|
|
||||||
AC_DEFINE([ENABLE_QLMPI],[1],[whether qlmpi is enabled])
|
|
||||||
AC_MSG_NOTICE([qlmpi is enabled])
|
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([qlmpi is disabled])
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $ENABLE_RUSAGE in
|
|
||||||
yes|no)
|
|
||||||
;;
|
|
||||||
default)
|
|
||||||
ENABLE_RUSAGE=yes
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([unknown rusage argument: $ENABLE_RUSAGE])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test "x$ENABLE_RUSAGE" = "xyes" ; then
|
|
||||||
AC_MSG_NOTICE([rusage is enabled])
|
|
||||||
AC_DEFINE([ENABLE_RUSAGE],[1],[whether rusage is enabled])
|
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([rusage is disabled])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$ENABLE_PERF" = "xyes" ; then
|
|
||||||
AC_DEFINE([ENABLE_PERF],[1],[whether perf is enabled])
|
|
||||||
AC_MSG_NOTICE([perf is enabled])
|
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([perf is disabled])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$WITH_SYSCALL_INTERCEPT" = "xyes" ; then
|
|
||||||
AC_DEFINE([WITH_SYSCALL_INTERCEPT],[1],[whether or not syscall_intercept library is linked])
|
|
||||||
AC_MSG_NOTICE([syscall_intercept library is linked])
|
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([syscall_intercept library isn't linked])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$MCKERNEL_INCDIR" != "x" ; then
|
|
||||||
AC_DEFINE_UNQUOTED(MCKERNEL_INCDIR,"$MCKERNEL_INCDIR",[McKernel specific headers])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$MCKERNEL_LIBDIR" != "x" ; then
|
|
||||||
AC_DEFINE_UNQUOTED(MCKERNEL_LIBDIR,"$MCKERNEL_LIBDIR",[McKernel specific libraries])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(BINDIR,"$BINDIR",[Path of install directory for binary])
|
|
||||||
AC_DEFINE_UNQUOTED(SBINDIR,"$SBINDIR",[Path of install directory for system binary])
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(IHK_VERSION,"$IHK_VERSION",[IHK version string])
|
|
||||||
AC_DEFINE_UNQUOTED(MCKERNEL_VERSION,"$MCKERNEL_VERSION",[McKernel version string])
|
|
||||||
|
|
||||||
ABS_SRCDIR=$( cd $( dirname $0 ); pwd )
|
|
||||||
IHK_ABS_SRCDIR=${ABS_SRCDIR}/../ihk
|
|
||||||
BUILDID=$( git --git-dir=$IHK_ABS_SRCDIR/.git rev-parse --short HEAD 2>/dev/null || echo $IHK_VERSION )
|
|
||||||
AC_MSG_NOTICE([BUILDID=$BUILDID])
|
|
||||||
if test "x$BUILDID" != "x" ; then
|
|
||||||
AC_DEFINE_UNQUOTED(BUILDID,"$BUILDID",[IHK build-id to confirm IHK and McKernel built at the same time are used])
|
|
||||||
fi
|
|
||||||
AC_SUBST(BUILDID)
|
|
||||||
|
|
||||||
AC_SUBST(CC)
|
|
||||||
AC_SUBST(XCC)
|
|
||||||
AC_SUBST(ARCH)
|
|
||||||
AC_SUBST(KDIR)
|
|
||||||
AC_SUBST(UNAME_R)
|
|
||||||
AC_SUBST(TARGET)
|
|
||||||
AC_SUBST(BINDIR)
|
|
||||||
AC_SUBST(SBINDIR)
|
|
||||||
AC_SUBST(MCKERNEL_INCDIR)
|
|
||||||
AC_SUBST(MCKERNEL_LIBDIR)
|
|
||||||
AC_SUBST(INCDIR)
|
|
||||||
AC_SUBST(ETCDIR)
|
|
||||||
AC_SUBST(INCLUDEDIR)
|
|
||||||
AC_SUBST(KMODDIR)
|
|
||||||
AC_SUBST(KERNDIR)
|
|
||||||
AC_SUBST(MANDIR)
|
|
||||||
AC_SUBST(CFLAGS)
|
|
||||||
AC_SUBST(CPPFLAGS_SYSCALL_INTERCEPT)
|
|
||||||
AC_SUBST(LDFLAGS_SYSCALL_INTERCEPT)
|
|
||||||
AC_SUBST(ENABLE_MCOVERLAYFS)
|
|
||||||
AC_SUBST(MCOVERLAYFS_MODULE)
|
|
||||||
AC_SUBST(ENABLE_RUSAGE)
|
|
||||||
AC_SUBST(ENABLE_QLMPI)
|
|
||||||
AC_SUBST(WITH_SYSCALL_INTERCEPT)
|
|
||||||
|
|
||||||
AC_SUBST(IHK_VERSION)
|
|
||||||
AC_SUBST(MCKERNEL_VERSION)
|
|
||||||
AC_SUBST(DCFA_VERSION)
|
|
||||||
AC_SUBST(IHK_RELEASE_DATE)
|
|
||||||
AC_SUBST(MCKERNEL_RELEASE_DATE)
|
|
||||||
AC_SUBST(DCFA_RESEASE_DATE)
|
|
||||||
AC_SUBST(uncomment_if_ENABLE_MEMDUMP)
|
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_37
|
|
||||||
# AC_CONFIG_FILES arch dependfiles separate
|
|
||||||
AC_CONFIG_FILES([
|
|
||||||
Makefile
|
|
||||||
executer/user/Makefile
|
|
||||||
executer/user/mcexec.1:executer/user/mcexec.1in
|
|
||||||
executer/user/vmcore2mckdump
|
|
||||||
executer/user/arch/$ARCH/Makefile
|
|
||||||
executer/kernel/mcctrl/Makefile
|
|
||||||
executer/kernel/mcctrl/arch/$ARCH/Makefile
|
|
||||||
executer/kernel/mcoverlayfs/Makefile
|
|
||||||
executer/kernel/mcoverlayfs/linux-3.10.0-327.36.1.el7/Makefile
|
|
||||||
executer/kernel/mcoverlayfs/linux-4.0.9/Makefile
|
|
||||||
executer/kernel/mcoverlayfs/linux-4.6.7/Makefile
|
|
||||||
executer/kernel/mcoverlayfs/linux-4.18.14/Makefile
|
|
||||||
executer/include/qlmpilib.h
|
|
||||||
kernel/Makefile
|
|
||||||
kernel/Makefile.build
|
|
||||||
kernel/include/swapfmt.h
|
|
||||||
arch/x86_64/tools/mcreboot-attached-mic.sh
|
|
||||||
arch/x86_64/tools/mcshutdown-attached-mic.sh
|
|
||||||
arch/x86_64/tools/mcreboot-builtin-x86.sh
|
|
||||||
arch/x86_64/tools/mcreboot-smp-x86.sh
|
|
||||||
arch/x86_64/tools/mcstop+release-smp-x86.sh
|
|
||||||
arch/x86_64/tools/mcoverlay-destroy-smp-x86.sh
|
|
||||||
arch/x86_64/tools/mcoverlay-create-smp-x86.sh
|
|
||||||
arch/x86_64/tools/eclair-dump-backtrace.exp
|
|
||||||
arch/x86_64/tools/mcshutdown-builtin-x86.sh
|
|
||||||
arch/x86_64/tools/mcreboot.1:arch/x86_64/tools/mcreboot.1in
|
|
||||||
arch/x86_64/tools/irqbalance_mck.service
|
|
||||||
arch/x86_64/tools/irqbalance_mck.in
|
|
||||||
tools/mcstat/mcstat.1:tools/mcstat/mcstat.1in
|
|
||||||
tools/mcstat/Makefile
|
|
||||||
])
|
|
||||||
|
|
||||||
if test -e "${ABS_SRCDIR}/test"; then
|
|
||||||
AC_CONFIG_FILES([
|
|
||||||
mck_test_config.sample:test/mck_test_config.sample.in
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$TARGET" = "smp-x86"; then
|
|
||||||
AC_CONFIG_FILES([
|
|
||||||
arch/x86_64/kernel/Makefile.arch
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$TARGET" = "smp-arm64"; then
|
|
||||||
AC_CONFIG_FILES([
|
|
||||||
kernel/config/config.smp-arm64
|
|
||||||
arch/arm64/kernel/vdso/Makefile
|
|
||||||
arch/arm64/kernel/Makefile.arch
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AS_IF([test "x$enable_dcfa" = xyes], [
|
|
||||||
AC_CONFIG_FILES([kernel/Makefile.dcfa])])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
|
||||||
30
executer/kernel/mcctrl/CMakeLists.txt
Normal file
30
executer/kernel/mcctrl/CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/arch/${ARCH})
|
||||||
|
|
||||||
|
if(ARCH STREQUAL "x86_64")
|
||||||
|
set(ARCH_C_FLAGS "-mno-red-zone -mcmodel=kernel")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
kmod(mcctrl
|
||||||
|
C_FLAGS
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/linux/include
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/linux/include/ihk/arch/${ARCH}
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/ikc/include
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/ikc/include/ikc/arch/${ARCH}
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/include
|
||||||
|
-I${IHK_FULL_SOURCE_DIR}/include/arch/${ARCH}
|
||||||
|
-I${PROJECT_SOURCE_DIR}/executer/include
|
||||||
|
-I${CMAKE_CURRENT_SOURCE_DIR}/arch/${ARCH}/include
|
||||||
|
-I${PROJECT_BINARY_DIR}
|
||||||
|
-I${PROJECT_SOURCE_DIR}/kernel/include
|
||||||
|
-DMCEXEC_PATH=\\"${CMAKE_INSTALL_FULL_BINDIR}/mcexec\\"
|
||||||
|
${ARCH_C_FLAGS}
|
||||||
|
SOURCES
|
||||||
|
driver.c control.c ikc.c syscall.c procfs.c binfmt_mcexec.c
|
||||||
|
sysfs.c sysfs_files.c arch/${ARCH}/archdeps.c
|
||||||
|
EXTRA_SYMBOLS
|
||||||
|
${PROJECT_BINARY_DIR}/ihk/linux/core/Module.symvers
|
||||||
|
DEPENDS
|
||||||
|
ihk_ko
|
||||||
|
INSTALL_DEST
|
||||||
|
${KMODDIR}
|
||||||
|
)
|
||||||
@ -1,50 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2016
|
|
||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
src = @abs_srcdir@
|
|
||||||
KMODDIR=@KMODDIR@
|
|
||||||
BINDIR=@BINDIR@
|
|
||||||
INCLUDEDIR=@INCLUDEDIR@
|
|
||||||
IHK_BASE=$(src)/../../../../ihk
|
|
||||||
|
|
||||||
obj-m += mcctrl.o
|
|
||||||
|
|
||||||
ccflags-y := -I$(IHK_BASE)/linux/include \
|
|
||||||
-I$(IHK_BASE)/linux/include/ihk/arch/$(ARCH) \
|
|
||||||
-I$(IHK_BASE)/ikc/include \
|
|
||||||
-I$(IHK_BASE)/ikc/include/ikc/arch/$(ARCH) \
|
|
||||||
-I$(IHK_BASE)/include \
|
|
||||||
-I$(IHK_BASE)/include/arch/$(ARCH) \
|
|
||||||
-I$(src)/../../include \
|
|
||||||
-I$(src)/arch/$(ARCH)/include \
|
|
||||||
-I@abs_builddir@ \
|
|
||||||
-I@abs_builddir@/../../../ \
|
|
||||||
-I$(src)/../../../kernel/include \
|
|
||||||
-DMCEXEC_PATH=\"$(BINDIR)/mcexec\"
|
|
||||||
|
|
||||||
# depending arch
|
|
||||||
include @abs_builddir@/arch/$(ARCH)/Makefile
|
|
||||||
|
|
||||||
mcctrl-y := driver.o control.o ikc.o syscall.o procfs.o binfmt_mcexec.o
|
|
||||||
mcctrl-y += sysfs.o sysfs_files.o arch/$(ARCH)/archdeps.o
|
|
||||||
|
|
||||||
KBUILD_EXTRA_SYMBOLS = @abs_builddir@/../../../../ihk/linux/core/Module.symvers
|
|
||||||
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
EXTRA_CFLAGS += $(foreach i, $(shell seq 6 120), $(addprefix -DPOSTK_DEBUG_ARCH_DEP_, $(i)))
|
|
||||||
EXTRA_CFLAGS += $(foreach i, $(shell seq 6 110), $(addprefix -DPOSTK_DEBUG_TEMP_FIX_, $(i)))
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
$(MAKE) -C $(KDIR) M=$(PWD) SUBDIRS=$(PWD) ARCH=$(ARCH) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) .*.cmd *.mod.c *.o *.ko* Module.symvers modules.order -r .tmp*
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KMODDIR)
|
|
||||||
install -m 644 mcctrl.ko $(KMODDIR)
|
|
||||||
mkdir -p -m 755 $(INCLUDEDIR)/mckernel
|
|
||||||
install -m 644 $(src)/../../include/ihklib_rusage.h $(INCLUDEDIR)/mckernel/ihklib_rusage.h
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2016
|
|
||||||
# dummy file
|
|
||||||
@ -3,7 +3,7 @@
|
|||||||
#include <linux/mm_types.h>
|
#include <linux/mm_types.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <asm/vdso.h>
|
#include <asm/vdso.h>
|
||||||
#include "../../../config.h"
|
#include "config.h"
|
||||||
#include "../../mcctrl.h"
|
#include "../../mcctrl.h"
|
||||||
|
|
||||||
//#define SC_DEBUG
|
//#define SC_DEBUG
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
ccflags-y += -mno-red-zone -mcmodel=kernel
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include "../../../config.h"
|
#include "config.h"
|
||||||
#include "../../mcctrl.h"
|
#include "../../mcctrl.h"
|
||||||
|
|
||||||
//#define SC_DEBUG
|
//#define SC_DEBUG
|
||||||
|
|||||||
@ -46,7 +46,7 @@
|
|||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include "../../../config.h"
|
#include "config.h"
|
||||||
#include "mcctrl.h"
|
#include "mcctrl.h"
|
||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
#include <archdeps.h>
|
#include <archdeps.h>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
#include "../../../config.h"
|
#include "config.h"
|
||||||
#include "mcctrl.h"
|
#include "mcctrl.h"
|
||||||
#include "sysfs_msg.h"
|
#include "sysfs_msg.h"
|
||||||
|
|
||||||
|
|||||||
14
executer/kernel/mcoverlayfs/CMakeLists.txt
Normal file
14
executer/kernel/mcoverlayfs/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# LESS/GREATER_EQUAL appears somewhere in 3.7... meh compat until we stop caring about 2.x
|
||||||
|
# ...apparently can't define macros ot use inside if, so unfold manually
|
||||||
|
|
||||||
|
if(NOT (LINUX_VERSION_CODE LESS 262144) AND NOT (LINUX_VERSION_CODE GREATER 262400))
|
||||||
|
add_subdirectory("linux-4.0.9")
|
||||||
|
elseif(NOT (LINUX_VERSION_CODE LESS 263680) AND NOT (LINUX_VERSION_CODE GREATER 263936))
|
||||||
|
add_subdirectory("linux-4.6.7")
|
||||||
|
elseif(LINUX_VERSION_CODE EQUAL 199168)
|
||||||
|
add_subdirectory("linux-3.10.0-327.36.1.el7")
|
||||||
|
else()
|
||||||
|
#add_subdirectory("linux-3.10.0-327.36.1.el7")
|
||||||
|
add_subdirectory("linux-4.18.14")
|
||||||
|
#message(FATAL_ERROR "mcoverlayfs enabled but kernel version not compatible")
|
||||||
|
endif()
|
||||||
@ -1,21 +0,0 @@
|
|||||||
ENABLE_MCOVERLAYFS=@ENABLE_MCOVERLAYFS@
|
|
||||||
MCOVERLAYFS_MODULE=@MCOVERLAYFS_MODULE@
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
ifeq ($(ENABLE_MCOVERLAYFS),yes)
|
|
||||||
+@(cd $(MCOVERLAYFS_MODULE) && make modules)
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@(cd linux-3.10.0-327.36.1.el7 && make clean)
|
|
||||||
@(cd linux-4.0.9 && make clean)
|
|
||||||
@(cd linux-4.6.7 && make clean)
|
|
||||||
@(cd linux-4.18.14 && make clean)
|
|
||||||
|
|
||||||
install:
|
|
||||||
ifeq ($(ENABLE_MCOVERLAYFS),yes)
|
|
||||||
@(cd $(MCOVERLAYFS_MODULE) && make install)
|
|
||||||
endif
|
|
||||||
|
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
kmod(mcoverlay
|
||||||
|
SOURCES
|
||||||
|
copy_up.c dir.c inode.c readdir.c super.c
|
||||||
|
INSTALL_DEST
|
||||||
|
${KMODDIR}
|
||||||
|
)
|
||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
KMODDIR = @KMODDIR@
|
|
||||||
src = @abs_srcdir@
|
|
||||||
|
|
||||||
obj-m += mcoverlay.o
|
|
||||||
|
|
||||||
mcoverlay-y := copy_up.o dir.o inode.o readdir.o super.o
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
$(MAKE) -C $(KDIR) M=$(PWD) SUBDIRS=$(PWD) ARCH=$(ARCH) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) .*.cmd *.mod.c *.o *.ko* Module.symvers modules.order -r .tmp*
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KMODDIR)
|
|
||||||
install -m 644 mcoverlay.ko $(KMODDIR)
|
|
||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
KMODDIR = @KMODDIR@
|
|
||||||
src = @abs_srcdir@
|
|
||||||
|
|
||||||
obj-m += mcoverlay.o
|
|
||||||
|
|
||||||
mcoverlay-y := copy_up.o dir.o inode.o readdir.o super.o
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
$(MAKE) -C $(KDIR) M=$(PWD) SUBDIRS=$(PWD) ARCH=$(ARCH) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) .*.cmd *.mod.c *.o *.ko* Module.symvers modules.order -r .tmp*
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KMODDIR)
|
|
||||||
install -m 644 mcoverlay.ko $(KMODDIR)
|
|
||||||
|
|
||||||
7
executer/kernel/mcoverlayfs/linux-4.18.14/CMakeLists.txt
Normal file
7
executer/kernel/mcoverlayfs/linux-4.18.14/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
kmod(mcoverlay
|
||||||
|
SOURCES
|
||||||
|
copy_up.c dir.c inode.c readdir.c super.c namei.c util.c export.c
|
||||||
|
INSTALL_DEST
|
||||||
|
${KMODDIR}
|
||||||
|
)
|
||||||
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_105 make install DESTDIR enable.
|
|
||||||
# KMODDIR = @KMODDIR@
|
|
||||||
DESTDIR ?= @DESTDIR@
|
|
||||||
KMODDIR = $(DESTDIR)/@KMODDIR@
|
|
||||||
src = @abs_srcdir@
|
|
||||||
|
|
||||||
obj-m += mcoverlay.o
|
|
||||||
|
|
||||||
mcoverlay-y := copy_up.o dir.o inode.o readdir.o super.o export.o namei.o util.o
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
$(MAKE) -C $(KDIR) M=$(PWD) SUBDIRS=$(PWD) ARCH=$(ARCH) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) .*.cmd *.mod.c *.o *.ko* Module.symvers modules.order -r .tmp*
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KMODDIR)
|
|
||||||
install -m 644 mcoverlay.ko $(KMODDIR)
|
|
||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
KMODDIR = @KMODDIR@
|
|
||||||
src = @abs_srcdir@
|
|
||||||
|
|
||||||
obj-m += mcoverlay.o
|
|
||||||
|
|
||||||
mcoverlay-y := copy_up.o dir.o inode.o readdir.o super.o
|
|
||||||
|
|
||||||
.PHONY: clean install modules
|
|
||||||
|
|
||||||
modules:
|
|
||||||
$(MAKE) -C $(KDIR) M=$(PWD) SUBDIRS=$(PWD) ARCH=$(ARCH) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) .*.cmd *.mod.c *.o *.ko* Module.symvers modules.order -r .tmp*
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KMODDIR)
|
|
||||||
install -m 644 mcoverlay.ko $(KMODDIR)
|
|
||||||
|
|
||||||
83
executer/user/CMakeLists.txt
Normal file
83
executer/user/CMakeLists.txt
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
include_directories(
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
"${PROJECT_BINARY_DIR}"
|
||||||
|
"${IHK_FULL_SOURCE_DIR}/linux/include"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/arch/${ARCH}/include"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/arch/${ARCH}"
|
||||||
|
"${PROJECT_BINARY_DIR}/ihk/linux/include"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_library(libmcexec STATIC arch/${ARCH}/archdep.S)
|
||||||
|
SET_TARGET_PROPERTIES(libmcexec PROPERTIES OUTPUT_NAME mcexec)
|
||||||
|
set_property(TARGET libmcexec PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
add_executable(mcexec mcexec.c)
|
||||||
|
target_link_libraries(mcexec
|
||||||
|
libmcexec ihklib ${LIBRT} ${LIBNUMA} $<$<BOOL:ENABLE_QLMPI>:${LIBMPI}> pthread)
|
||||||
|
target_include_directories(mcexec PUBLIC "${KERNEL_DIR}")
|
||||||
|
set_property(TARGET mcexec PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||||
|
set_property(TARGET mcexec PROPERTY LINK_FLAGS "-fPIE -pie")
|
||||||
|
|
||||||
|
add_executable(eclair eclair.c arch/${ARCH}/arch-eclair.c)
|
||||||
|
target_link_libraries(eclair ${LIBBFD})
|
||||||
|
|
||||||
|
add_library(sched_yield SHARED libsched_yield.c)
|
||||||
|
target_link_libraries(sched_yield dl)
|
||||||
|
set_property(TARGET sched_yield PROPERTY VERSION 1.0.0)
|
||||||
|
|
||||||
|
if (ENABLE_QLMPI)
|
||||||
|
target_link_libraries(mcexec ${MPI_C_LIBRARIES})
|
||||||
|
target_include_directories(mcexec PRIVATE ${MPI_INCLUDE_PATH})
|
||||||
|
|
||||||
|
add_library(qlmpi qlmpilib.c)
|
||||||
|
target_link_libraries(qlmpi ${MPI_C_LIBRARIES})
|
||||||
|
target_include_directories(qlmpi PRIVATE ${MPI_INCLUDE_PATH})
|
||||||
|
|
||||||
|
add_library(qlfort libqlfort.c)
|
||||||
|
target_link_libraries(qlfort dl ${MPI_C_LIBRARIES})
|
||||||
|
target_include_directories(qlfort PRIVATE ${MPI_INCLUDE_PATH})
|
||||||
|
|
||||||
|
add_executable(ql_server ql_server.c)
|
||||||
|
add_executable(ql_talker ql_talker.c)
|
||||||
|
|
||||||
|
add_executable(ql_mpiexec_start ql_mpiexec_start.c md5.c)
|
||||||
|
target_link_libraries(ql_mpiexec_start pthread)
|
||||||
|
|
||||||
|
add_executable(ql_mpiexec_finalize ql_mpiexec_start.c md5.c)
|
||||||
|
set_target_properties(ql_mpiexec_finalize PROPERTIES COMPILE_DEFINITIONS
|
||||||
|
QL_MPIEXEC_FINALIZE)
|
||||||
|
target_link_libraries(ql_mpiexec_finalize pthread)
|
||||||
|
|
||||||
|
install(TARGETS ql_server ql_talker ql_mpiexec_start ql_mpiexec_finalize
|
||||||
|
DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||||
|
install(TARGETS qlmpi qlfort
|
||||||
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_UTI)
|
||||||
|
add_library(mck_syscall_intercept SHARED arch/${ARCH}/archdep_c.c)
|
||||||
|
target_link_libraries(mck_syscall_intercept ${LIBSYSCALL_INTERCEPT})
|
||||||
|
set_target_properties(mck_syscall_intercept PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
|
|
||||||
|
install(TARGETS mck_syscall_intercept
|
||||||
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(ldump2mcdump SHARED ldump2mcdump.c)
|
||||||
|
|
||||||
|
configure_file(vmcore2mckdump.in vmcore2mckdump @ONLY)
|
||||||
|
|
||||||
|
configure_file(mcexec.1in mcexec.1 @ONLY)
|
||||||
|
|
||||||
|
install(TARGETS mcexec eclair
|
||||||
|
DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||||
|
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/vmcore2mckdump"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||||
|
install(TARGETS sched_yield ldump2mcdump
|
||||||
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
install(FILES "../include/ihklib_rusage.h"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mckernel")
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mcexec.1"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
|
||||||
@ -1,133 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2015-2018
|
|
||||||
CC=@CC@
|
|
||||||
MCC=mpicc
|
|
||||||
BINDIR=@BINDIR@
|
|
||||||
SBINDIR=@SBINDIR@
|
|
||||||
prefix=@prefix@
|
|
||||||
exec_prefix=@exec_prefix@
|
|
||||||
LIBDIR=@libdir@
|
|
||||||
MANDIR=@MANDIR@
|
|
||||||
MCKERNEL_INCDIR=@MCKERNEL_INCDIR@
|
|
||||||
MCKERNEL_LIBDIR=@MCKERNEL_LIBDIR@
|
|
||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH=@ARCH@
|
|
||||||
CFLAGS=-Wall -O -I. -I$(VPATH)/arch/${ARCH} -I${IHKDIR} -I@abs_builddir@/../../../ihk/linux/include -I$(VPATH)/arch/${ARCH}/include
|
|
||||||
LDFLAGS=@LDFLAGS@
|
|
||||||
CPPFLAGS_SYSCALL_INTERCEPT=@CPPFLAGS_SYSCALL_INTERCEPT@
|
|
||||||
LDFLAGS_SYSCALL_INTERCEPT=@LDFLAGS_SYSCALL_INTERCEPT@
|
|
||||||
RPATH=$(shell echo $(LDFLAGS)|awk '{for(i=1;i<=NF;i++){if($$i~/^-L/){w=$$i;sub(/^-L/,"-Wl,-rpath,",w);print w}}}')
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
TARGET=mcexec libsched_yield ldump2mcdump.so
|
|
||||||
@uncomment_if_ENABLE_MEMDUMP@TARGET+=eclair
|
|
||||||
LIBS=@LIBS@
|
|
||||||
IHKDIR ?= $(VPATH)/../../../ihk/linux/include/
|
|
||||||
MCEXEC_LIBS=-lmcexec -lrt -lnuma -pthread -L@abs_builddir@/../../../ihk/linux/user -lihk -Wl,-rpath,$(MCKERNEL_LIBDIR)
|
|
||||||
ENABLE_QLMPI=@ENABLE_QLMPI@
|
|
||||||
WITH_SYSCALL_INTERCEPT=@WITH_SYSCALL_INTERCEPT@
|
|
||||||
|
|
||||||
ifeq ($(ENABLE_QLMPI),yes)
|
|
||||||
MCEXEC_LIBS += -lmpi
|
|
||||||
TARGET+= libqlmpi.so ql_server ql_mpiexec_start ql_mpiexec_finalize ql_talker libqlfort.so
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(WITH_SYSCALL_INTERCEPT),yes)
|
|
||||||
TARGET += syscall_intercept.so
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
CFLAGS += $(foreach i, $(shell seq 6 120), $(addprefix -DPOSTK_DEBUG_ARCH_DEP_, $(i)))
|
|
||||||
CFLAGS += $(foreach i, $(shell seq 6 110), $(addprefix -DPOSTK_DEBUG_TEMP_FIX_, $(i)))
|
|
||||||
|
|
||||||
# get HOST-kernel memory settings
|
|
||||||
HOST_DIR=@KDIR@
|
|
||||||
HOST_CONFIG=$(HOST_DIR)/.config
|
|
||||||
HOST_KERNEL_64K_PAGES=$(shell grep -E "^CONFIG_ARM64_64K_PAGES=y" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_64K_PAGES=||g')
|
|
||||||
HOST_KERNEL_VA_BITS=$(shell grep -E "^CONFIG_ARM64_VA_BITS=" $(HOST_CONFIG) | sed 's|CONFIG_ARM64_VA_BITS=||g')
|
|
||||||
|
|
||||||
ifeq ($(HOST_KERNEL_64K_PAGES), y)
|
|
||||||
CFLAGS += -DCONFIG_ARM64_64K_PAGES
|
|
||||||
endif
|
|
||||||
CFLAGS += -DCONFIG_ARM64_VA_BITS=$(HOST_KERNEL_VA_BITS)
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
all: $(TARGET)
|
|
||||||
|
|
||||||
mcexec: mcexec.c libmcexec.a
|
|
||||||
$(CC) -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -DLIBDIR=\"$(LIBDIR)\" -fPIE -pie -L. $(MCEXEC_LIBS) -o $@ $^ $(EXTRA_OBJS) $(RPATH)
|
|
||||||
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_34, eclair arch depend separate.
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
eclair: eclair.c arch/$(ARCH)/arch-eclair.c
|
|
||||||
$(CC) -I.. -I. -I./arch/$(ARCH)/include -I$(VPATH)/.. -I$(VPATH) $(CFLAGS) -o $@ $^ $(LIBS) -ldl -lz
|
|
||||||
else
|
|
||||||
eclair: eclair.c arch/$(ARCH)/arch-eclair.c
|
|
||||||
$(CC) -I.. -I$(VPATH) -I$(VPATH)/arch/$(ARCH)/include $(CFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ldump2mcdump.so: ldump2mcdump.c
|
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $<
|
|
||||||
|
|
||||||
libsched_yield: libsched_yield.c
|
|
||||||
$(CC) -shared -fPIC -Wl,-soname,sched_yield.so.1 -o libsched_yield.so.1.0.0 $^ -lc -ldl
|
|
||||||
|
|
||||||
syscall_intercept.so: syscall_intercept.c libsyscall_intercept_arch.a
|
|
||||||
$(CC) $(CPPFLAGS_SYSCALL_INTERCEPT) -g -O2 $(LDFLAGS_SYSCALL_INTERCEPT) -lsyscall_intercept -fpic -shared -L. -lsyscall_intercept_arch $^ -o $@
|
|
||||||
|
|
||||||
libsyscall_intercept_arch.a::
|
|
||||||
+(cd arch/${ARCH}; $(MAKE))
|
|
||||||
|
|
||||||
libmcexec.a::
|
|
||||||
+(cd arch/${ARCH}; $(MAKE))
|
|
||||||
|
|
||||||
libqlmpi.so: qlmpilib.c
|
|
||||||
$(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $<
|
|
||||||
|
|
||||||
libqlfort.so: libqlfort.c
|
|
||||||
$(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< -ldl
|
|
||||||
|
|
||||||
ql_server: ql_server.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
ql_mpiexec_start: ql_mpiexec_start.o md5.o
|
|
||||||
$(CC) $^ $(CFLAGS) -pthread -o $@
|
|
||||||
|
|
||||||
ql_mpiexec_finalize.o: ql_mpiexec_start.c
|
|
||||||
$(CC) $(CFLAGS) -DQL_MPIEXEC_FINALIZE -c -o $@ $<
|
|
||||||
|
|
||||||
ql_mpiexec_finalize: ql_mpiexec_finalize.o md5.o
|
|
||||||
$(CC) $^ $(CFLAGS) -pthread -o $@
|
|
||||||
|
|
||||||
ql_talker: ql_talker.o
|
|
||||||
$(CC) $^ $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
clean::
|
|
||||||
(cd arch/${ARCH}; $(MAKE) clean)
|
|
||||||
$(RM) $(TARGET) *.o
|
|
||||||
|
|
||||||
.PHONY: all clean install
|
|
||||||
|
|
||||||
install::
|
|
||||||
(cd arch/${ARCH}; $(MAKE) install)
|
|
||||||
mkdir -p -m 755 $(BINDIR)
|
|
||||||
install -m 755 mcexec $(BINDIR)
|
|
||||||
mkdir -p -m 755 $(MCKERNEL_LIBDIR)
|
|
||||||
install -m 755 ldump2mcdump.so $(MCKERNEL_LIBDIR)
|
|
||||||
install -m 755 libsched_yield.so.1.0.0 $(MCKERNEL_LIBDIR)
|
|
||||||
mkdir -p -m 755 $(MANDIR)/man1
|
|
||||||
install -m 644 mcexec.1 $(MANDIR)/man1/mcexec.1
|
|
||||||
ifeq ($(ENABLE_QLMPI),yes)
|
|
||||||
install -m 644 ../include/qlmpilib.h $(MCKERNEL_INCDIR)
|
|
||||||
install -m 755 libqlmpi.so $(MCKERNEL_LIBDIR)
|
|
||||||
install -m 755 libqlfort.so $(MCKERNEL_LIBDIR)
|
|
||||||
install -m 755 ql_server $(SBINDIR)
|
|
||||||
install -m 755 ql_mpiexec_start $(BINDIR)
|
|
||||||
install -m 755 ql_mpiexec_finalize $(BINDIR)
|
|
||||||
install -m 755 ql_talker $(SBINDIR)
|
|
||||||
endif
|
|
||||||
ifeq ($(WITH_SYSCALL_INTERCEPT),yes)
|
|
||||||
install -m 755 syscall_intercept.so $(MCKERNEL_LIBDIR)
|
|
||||||
endif
|
|
||||||
@uncomment_if_ENABLE_MEMDUMP@install -m 755 eclair $(BINDIR)
|
|
||||||
@uncomment_if_ENABLE_MEMDUMP@install -m 755 vmcore2mckdump $(BINDIR)
|
|
||||||
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2017-2018
|
|
||||||
CC=@CC@
|
|
||||||
AR=ar
|
|
||||||
BINDIR=@BINDIR@
|
|
||||||
KDIR ?= @KDIR@
|
|
||||||
CFLAGS=-Wall -O -I.
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
TARGET=../../libmcexec.a
|
|
||||||
LIBS=@LIBS@
|
|
||||||
|
|
||||||
all: $(TARGET)
|
|
||||||
|
|
||||||
../../libmcexec.a: archdep.o
|
|
||||||
$(AR) cr ../../libmcexec.a archdep.o
|
|
||||||
|
|
||||||
archdep.o: archdep.c archdep.S
|
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $^
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) $(TARGET) *.o
|
|
||||||
|
|
||||||
.PHONY: all clean install
|
|
||||||
|
|
||||||
install:
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2017-2018
|
|
||||||
CC=@CC@
|
|
||||||
AR=ar
|
|
||||||
BINDIR=@BINDIR@
|
|
||||||
KDIR ?= @KDIR@
|
|
||||||
CFLAGS=-Wall -O -I.
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
TARGET=../../libmcexec.a ../../libsyscall_intercept_arch.a
|
|
||||||
LIBS=@LIBS@
|
|
||||||
|
|
||||||
all: $(TARGET)
|
|
||||||
|
|
||||||
../../libmcexec.a: archdep.o
|
|
||||||
$(AR) cr ../../libmcexec.a archdep.o
|
|
||||||
|
|
||||||
archdep.o: archdep.S
|
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
|
||||||
|
|
||||||
../../libsyscall_intercept_arch.a: archdep_c.o
|
|
||||||
$(AR) cr ../../libsyscall_intercept_arch.a archdep_c.o
|
|
||||||
|
|
||||||
archdep_c.o: archdep_c.c
|
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) $(TARGET) *.o
|
|
||||||
|
|
||||||
.PHONY: all clean install
|
|
||||||
|
|
||||||
install:
|
|
||||||
@ -8,7 +8,7 @@
|
|||||||
* Copyright (C) 2015 RIKEN AICS
|
* Copyright (C) 2015 RIKEN AICS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../config.h"
|
#include "config.h"
|
||||||
#include <bfd.h>
|
#include <bfd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
#ifndef HEADER_USER_COMMON_ECLAIR_H
|
#ifndef HEADER_USER_COMMON_ECLAIR_H
|
||||||
#define HEADER_USER_COMMON_ECLAIR_H
|
#define HEADER_USER_COMMON_ECLAIR_H
|
||||||
|
|
||||||
#include "../config.h"
|
#include "config.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <arch-eclair.h>
|
#include <arch-eclair.h>
|
||||||
|
|||||||
@ -2001,7 +2001,7 @@ static void ld_preload_init()
|
|||||||
memset(envbuf, 0, PATH_MAX);
|
memset(envbuf, 0, PATH_MAX);
|
||||||
|
|
||||||
if (enable_uti) {
|
if (enable_uti) {
|
||||||
LD_PRELOAD_PREPARE("syscall_intercept.so");
|
LD_PRELOAD_PREPARE("libmck_syscall_intercept.so");
|
||||||
LD_PRELOAD_APPEND;
|
LD_PRELOAD_APPEND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2249,7 +2249,7 @@ int main(int argc, char **argv)
|
|||||||
if (opendev() == -1)
|
if (opendev() == -1)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
#ifndef WITH_SYSCALL_INTERCEPT
|
#ifndef ENABLE_UTI
|
||||||
if (enable_uti) {
|
if (enable_uti) {
|
||||||
__eprintf("ERROR: uti is not available when not configured with --with-syscall_intercept=<path>\n");
|
__eprintf("ERROR: uti is not available when not configured with --with-syscall_intercept=<path>\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include "../../config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "../include/qlmpi.h"
|
#include "../include/qlmpi.h"
|
||||||
#include "../include/md5.h"
|
#include "../include/md5.h"
|
||||||
|
|||||||
2
ihk
2
ihk
Submodule ihk updated: 83d5ec53cb...f4c2dbbb0f
171
kernel/CMakeLists.txt
Normal file
171
kernel/CMakeLists.txt
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
|
||||||
|
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||||
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -D__ASSEMBLY__")
|
||||||
|
|
||||||
|
configure_file(include/swapfmt.h.in include/swapfmt.h)
|
||||||
|
|
||||||
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=include
|
||||||
|
OUTPUT_VARIABLE SYSTEM_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
add_definitions(-D__KERNEL__ -DIHK_OS_MANYCORE)
|
||||||
|
add_compile_options(-ffreestanding -O2 -nostdinc -isystem ${SYSTEM_INCLUDE} -fno-omit-frame-pointer)
|
||||||
|
include_directories(
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/include"
|
||||||
|
"include"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
"${PROJECT_BINARY_DIR}"
|
||||||
|
"${IHK_FULL_SOURCE_DIR}/cokernel/smp/${ARCH}/include"
|
||||||
|
"${IHK_FULL_SOURCE_DIR}/ikc/include"
|
||||||
|
"${IHK_FULL_SOURCE_DIR}/linux/include"
|
||||||
|
"${PROJECT_SOURCE_DIR}/lib/include"
|
||||||
|
"${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/include"
|
||||||
|
)
|
||||||
|
if (${ARCH} STREQUAL "x86_64")
|
||||||
|
add_compile_options(-mcmodel=large -mno-red-zone -mno-sse)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(MCKERNEL_SRCS
|
||||||
|
init.c mem.c debug.c mikc.c listeners.c ap.c syscall.c cls.c host.c process.c
|
||||||
|
copy.c waitq.c futex.c timer.c plist.c fileobj.c shmobj.c zeroobj.c
|
||||||
|
procfs.c devobj.c sysfs.c xpmem.c profile.c freeze.c rbtree.c pager.c
|
||||||
|
gencore.c hugefileobj.c
|
||||||
|
|
||||||
|
${IHK_FULL_SOURCE_DIR}/ikc/manycore.c
|
||||||
|
${IHK_FULL_SOURCE_DIR}/ikc/master.c
|
||||||
|
${IHK_FULL_SOURCE_DIR}/ikc/queue.c
|
||||||
|
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/abort.c
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/bitmap.c
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/bitops.c
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/page_alloc.c
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/string.c
|
||||||
|
${PROJECT_SOURCE_DIR}/lib/vsprintf.c
|
||||||
|
|
||||||
|
${IHK_FULL_SOURCE_DIR}/cokernel/smp/${ARCH}/dma.c
|
||||||
|
${IHK_FULL_SOURCE_DIR}/cokernel/smp/${ARCH}/ikc.c
|
||||||
|
${IHK_FULL_SOURCE_DIR}/cokernel/smp/${ARCH}/setup.c
|
||||||
|
)
|
||||||
|
|
||||||
|
if (BUILD_TARGET STREQUAL "smp-x86")
|
||||||
|
list(APPEND MCKERNEL_SRCS
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/context.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/coredump.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/cpu.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/interrupt.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/local.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/memory.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/mikc.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/perfctr.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/syscall.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/trampoline.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/vsyscall.c
|
||||||
|
|
||||||
|
)
|
||||||
|
set(LINKER_SCRIPT "smp-x86.lds")
|
||||||
|
elseif (BUILD_TARGET STREQUAL "smp-arm64")
|
||||||
|
|
||||||
|
configure_file(${KERNEL_DIR}/include/generated/vdso-offsets.h include/vdso-offsets.h)
|
||||||
|
|
||||||
|
list(APPEND MCKERNEL_SRCS
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/assert.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/cache.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/context.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/coredump.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/cpu.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/cpufeature.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/cputable.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/debug-monitors.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/entry-fpsimd.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/entry.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/fault.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/fpsimd.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/head.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/hw_breakpoint.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/hyp-stub.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/imp-sysreg.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/irq-gic-v2.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/irq-gic-v3.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/local.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/memcpy.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/memory.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/memset.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/mikc.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/perfctr.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/perfctr_armv8pmu.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/proc-macros.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/proc.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/psci.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/ptrace.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/smp.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/syscall.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/timer.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/trampoline.S
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/traps.c
|
||||||
|
${PROJECT_SOURCE_DIR}/arch/${ARCH}/kernel/vdso.c
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_NR_CPUS\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_NR_CPUS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM_ARCH_TIMER_EVTSTREAM\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_ARM_ARCH_TIMER_EVTSTREAM OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_HZ\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_HZ OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM64_VHE\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_ARM64_VHE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM_GIC_V3\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_ARM_GIC_V3 OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM64_64K_PAGES\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_ARM64_64K_PAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND awk -F= "$1 == \"CONFIG_ARM64_VA_BITS\" { print $2; exit; }" "${KERNEL_DIR}/.config"
|
||||||
|
OUTPUT_VARIABLE CONFIG_ARM64_VA_BITS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
message("Host kernel CONFIG_NR_CPUS=${CONFIG_NR_CPUS}")
|
||||||
|
message("Host kernel CONFIG_HZ=${CONFIG_HZ}")
|
||||||
|
message("Host kernel CONFIG_ARM64_64K_PAGES=${CONFIG_ARM64_64K_PAGES}")
|
||||||
|
message("Host kernel CONFIG_ARM64_VA_BITS=${CONFIG_ARM64_VA_BITS}")
|
||||||
|
|
||||||
|
if(CONFIG_ARM64_64K_PAGES STREQUAL "y")
|
||||||
|
if(CONFIG_ARM64_VA_BITS STREQUAL 42)
|
||||||
|
add_definitions(-DCONFIG_ARM64_PGTABLE_LEVELS=2 -DCONFIG_ARM64_VA_BITS=42 -DCONFIG_ARM64_64K_PAGES)
|
||||||
|
set(LINKER_SCRIPT "smp-arm64_type3.lds")
|
||||||
|
elseif(CONFIG_ARM64_VA_BITS STREQUAL 48)
|
||||||
|
add_definitions(-DCONFIG_ARM64_PGTABLE_LEVELS=3 -DCONFIG_ARM64_VA_BITS=48 -DCONFIG_ARM64_64K_PAGES)
|
||||||
|
set(LINKER_SCRIPT "smp-arm64_type4.lds")
|
||||||
|
endif()
|
||||||
|
else(CONFIG_ARM64_64K_PAGES STREQUAL "y")
|
||||||
|
if(CONFIG_ARM64_VA_BITS STREQUAL 39)
|
||||||
|
add_definitions(-DCONFIG_ARM64_PGTABLE_LEVELS=3 -DCONFIG_ARM64_VA_BITS=39)
|
||||||
|
set(linker_script "smp-arm64_type1.lds")
|
||||||
|
elseif(CONFIG_ARM64_VA_BITS STREQUAL 48)
|
||||||
|
add_definitions(-DCONFIG_ARM64_PGTABLE_LEVELS=4 -DCONFIG_ARM64_VA_BITS=48)
|
||||||
|
set(linker_script "smp-arm64_type2.lds")
|
||||||
|
endif()
|
||||||
|
endif(CONFIG_ARM64_64K_PAGES STREQUAL "y")
|
||||||
|
if(CONFIG_ARM_GIC_V3 STREQUAL "y")
|
||||||
|
add_definitions(-DCONFIG_ARM_GIC_V3=y)
|
||||||
|
#add_definitions(-DCONFIG_HAS_NMI=y)
|
||||||
|
else(CONFIG_ARM_GIC_V3 STREQUAL "y")
|
||||||
|
message(FATAL_ERROR "Host kernel must have GIC v3 enabled")
|
||||||
|
endif(CONFIG_ARM_GIC_V3 STREQUAL "y")
|
||||||
|
if(CONFIG_ARM64_VHE STREQUAL "y")
|
||||||
|
add_definitions(-DCONFIG_ARM64_VHE)
|
||||||
|
endif(CONFIG_ARM64_VHE STREQUAL "y")
|
||||||
|
if(CONFIG_ARM_ARCH_TIMER_EVTSTREAM STREQUAL "y")
|
||||||
|
add_definitions(-DCONFIG_ARM_ARCH_TIMER_EVTSTREAM)
|
||||||
|
endif(CONFIG_ARM_ARCH_TIMER_EVTSTREAM STREQUAL "y")
|
||||||
|
add_definitions(-DNR_CPUS=${CONFIG_NR_CPUS} -DCONFIG_HZ=${CONFIG_HZ})
|
||||||
|
# Seems to have been hardcoded to 512 in old makefiles
|
||||||
|
add_definitions(-DCONFIG_SMP_MAX_CORES=512)
|
||||||
|
# Always turned on as well
|
||||||
|
add_definitions(-DCONFIG_ARM64_SVE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
add_executable(mckernel.img ${MCKERNEL_SRCS})
|
||||||
|
|
||||||
|
set_target_properties(mckernel.img PROPERTIES INSTALL_RPATH "")
|
||||||
|
set_target_properties(mckernel.img PROPERTIES LINK_FLAGS
|
||||||
|
"-e arch_start -T ${CMAKE_CURRENT_SOURCE_DIR}/config/${LINKER_SCRIPT} --build-id")
|
||||||
|
|
||||||
|
install(TARGETS "mckernel.img"
|
||||||
|
DESTINATION "${MCKERNELDIR}")
|
||||||
@ -1,75 +0,0 @@
|
|||||||
# Makefile.build.in COPYRIGHT FUJITSU LIMITED 2015-2018
|
|
||||||
ARCH = @ARCH@
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
SRC=$(VPATH)
|
|
||||||
IHKDIR=$(IHKBASE)/$(TARGETDIR)
|
|
||||||
OBJS = init.o mem.o debug.o mikc.o listeners.o ap.o syscall.o cls.o host.o
|
|
||||||
OBJS += process.o copy.o waitq.o futex.o timer.o plist.o fileobj.o shmobj.o
|
|
||||||
OBJS += zeroobj.o procfs.o devobj.o sysfs.o xpmem.o profile.o freeze.o
|
|
||||||
OBJS += rbtree.o hugefileobj.o
|
|
||||||
OBJS += pager.o gencore.o
|
|
||||||
DEPSRCS=$(wildcard $(SRC)/*.c)
|
|
||||||
|
|
||||||
CFLAGS += -I$(SRC)/include -I@abs_builddir@/../ -I@abs_builddir@/include -D__KERNEL__ -g -fno-omit-frame-pointer -fno-inline -fno-inline-small-functions
|
|
||||||
ifneq ($(ARCH), arm64)
|
|
||||||
CFLAGS += -mcmodel=large -mno-red-zone -mno-sse
|
|
||||||
endif
|
|
||||||
LDFLAGS += -e arch_start
|
|
||||||
IHKOBJ = ihk/ihk.o
|
|
||||||
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_24
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
default: all
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
include @abs_builddir@/config/config.$(TARGET)
|
|
||||||
else
|
|
||||||
include $(SRC)/config/config.$(TARGET)
|
|
||||||
endif
|
|
||||||
include @abs_builddir@/../../ihk/cokernel/Makefile.common
|
|
||||||
|
|
||||||
# CFLAGS += -I$(SRC)/../arch/$(IHKARCH)/kernel/include -I$(SRC)/../lib/include
|
|
||||||
|
|
||||||
OBJDUMP ?= objdump
|
|
||||||
OBJCOPY ?= objcopy
|
|
||||||
|
|
||||||
# POSTK_DEBUG_ARCH_DEP_26
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
SUBCMD_OPTS = TARGET=$(TARGET) O=$(CURDIR)/ihk CC=$(CC) LD=$(LD) OBJCOPY=$(OBJCOPY) SRC=$(SRC) ARCH=$(ARCH)
|
|
||||||
else
|
|
||||||
SUBCMD_OPTS = TARGET=$(TARGET) O=$(CURDIR)/ihk CC=$(CC) LD=$(LD) SRC=$(SRC)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ld_kern_cmd_base = $(LD) $(LDFLAGS) -o $@.elf $^
|
|
||||||
mkimage_cmd_base = [ -f $(SRC)/script/mkimage.$(TARGET) ] && CC=$(CC) LD=$(LD) LDFLAGS="$(LDFLAGS_MKIMAGE)" OBJDUMP=$(OBJDUMP) OBJCOPY=$(OBJCOPY) sh $(SRC)/script/mkimage.$(TARGET) '$@.elf' '$@' '$(SRC)' || cp $@.elf $@
|
|
||||||
|
|
||||||
ld_kern_cmd = $(call echo_cmd,LDKERN,$@)$(ld_kern_cmd_base)
|
|
||||||
mkimage_cmd = $(call echo_cmd,MKIMAGE,$@)$(mkimage_cmd_base)
|
|
||||||
|
|
||||||
all: depend kernel.img
|
|
||||||
|
|
||||||
kernel.img: $(OBJS) $(IHKOBJ)
|
|
||||||
$(ld_kern_cmd)
|
|
||||||
$(mkimage_cmd)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(rm_cmd) $(OBJS) kernel.img kernel.img.elf Makefile.dep
|
|
||||||
@$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) clean
|
|
||||||
|
|
||||||
depend: Makefile.dep
|
|
||||||
|
|
||||||
Makefile.dep:
|
|
||||||
$(call dep_cmd,$(DEPSRCS))
|
|
||||||
|
|
||||||
$(IHKOBJ): FORCE
|
|
||||||
@mkdir -p $(dir $(IHKOBJ))
|
|
||||||
+$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) prepare
|
|
||||||
+$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS)
|
|
||||||
|
|
||||||
%.o: $(SRC)/%.c
|
|
||||||
$(cc_cmd)
|
|
||||||
|
|
||||||
FORCE:
|
|
||||||
|
|
||||||
-include Makefile.dep
|
|
||||||
@ -1,97 +0,0 @@
|
|||||||
# Makefile.dcfa.in COPYRIGHT FUJITSU LIMITED 2013-2018
|
|
||||||
BUILD_TARGET ?= @TARGET@
|
|
||||||
INSTALL_KL_DIR ?= @KERNDIR@
|
|
||||||
SRC = $(CURDIR)
|
|
||||||
|
|
||||||
DCFA_MODE ?= umod
|
|
||||||
IHKBASE ?= $(SRC)/../../ihk/cokernel
|
|
||||||
O ?= $(CURDIR)/build
|
|
||||||
V ?= $(VERBOSE)
|
|
||||||
|
|
||||||
N ?= kernel_obj.o
|
|
||||||
EXTRA_OBJS ?=
|
|
||||||
|
|
||||||
## compile items
|
|
||||||
|
|
||||||
KERNEL = kernel.img
|
|
||||||
KERNELS = $(addsuffix /$(KERNEL),$(addprefix $(O)/,$(BUILD_TARGET)))
|
|
||||||
|
|
||||||
KERNEL_OBJ = $(addsuffix /$(N),$(addprefix $(O)/,$(BUILD_TARGET)))
|
|
||||||
KERNEL_MAKEFILE = $(addsuffix /Makefile,$(addprefix $(O)/,$(BUILD_TARGET)))
|
|
||||||
|
|
||||||
## install items
|
|
||||||
|
|
||||||
ifeq ("$(DCFA_MODE)", "kmod")
|
|
||||||
KERNEL_OBJ_PUB = $(INSTALL_KL_DIR)/$(N)
|
|
||||||
KERNEL_MAKEFILE_PUB = $(INSTALL_KL_DIR)/Makefile
|
|
||||||
else
|
|
||||||
KERNELS_PUB = $(INSTALL_KL_DIR)/$(KERNEL)
|
|
||||||
KERNEL_MAKEFILE_PUB = $(INSTALL_KL_DIR)/Makefile
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBCMD_OPTS = V='$(V)'
|
|
||||||
|
|
||||||
$(if $(O),,$(error Specify the compilation target directory))
|
|
||||||
#$(if $(shell ls $(IHKBASE)/Makefile),,\
|
|
||||||
# $(error IHK is not found in $(IHKBASE)))
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all kmod umod clean depend
|
|
||||||
.SECONDARY: $(KERNEL_MAKEFILE) $(KERNEL_MAKEFILE_PUB)
|
|
||||||
|
|
||||||
all: $(DCFA_MODE)
|
|
||||||
|
|
||||||
install: $(DCFA_MODE)_install
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(O)
|
|
||||||
|
|
||||||
kmod: $(KERNEL_OBJ)
|
|
||||||
|
|
||||||
umod: $(KERNELS)
|
|
||||||
|
|
||||||
umod_install:
|
|
||||||
@echo install $(KERNELS_PUB)
|
|
||||||
@rm -f $(KERNELS_PUB)
|
|
||||||
@mkdir -p $(dir $(KERNELS_PUB))
|
|
||||||
@cp $(KERNELS) $(KERNELS_PUB)
|
|
||||||
|
|
||||||
kmod_install: $(KERNEL_MAKEFILE_PUB)
|
|
||||||
@echo install $(KERNEL_OBJ_PUB)
|
|
||||||
@rm -f $(KERNEL_OBJ_PUB)
|
|
||||||
@cp $(KERNEL_OBJ) $(KERNEL_OBJ_PUB)
|
|
||||||
|
|
||||||
%/kernel.img: %/Makefile
|
|
||||||
@echo 'Building for' $(dir $@)
|
|
||||||
@make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS)
|
|
||||||
|
|
||||||
%/$(N): %/Makefile
|
|
||||||
@echo 'Building for' $(dir $@)
|
|
||||||
@make kobj --no-print-directory -C $(dir $@) $(SUBCMD_OPTS)
|
|
||||||
|
|
||||||
$(KERNEL_MAKEFILE): Makefile.build.dcfa
|
|
||||||
rm -f $@
|
|
||||||
@mkdir -p $(dir $@)
|
|
||||||
@echo 'SRC = $(SRC)' > $@
|
|
||||||
@echo 'IHKBASE = $(IHKBASE)' >> $@
|
|
||||||
@echo 'TARGET = $(notdir $(patsubst %/,%,$(dir $@)))' >> $@
|
|
||||||
@echo 'TARGETDIR = $$(shell echo $$(TARGET) | sed "s/-/\//")' >> $@
|
|
||||||
@echo 'DCFA_MODE = $(DCFA_MODE)' >> $@
|
|
||||||
@echo 'KERNEL_OBJ = $(KERNEL_OBJ)' >> $@
|
|
||||||
@echo 'EXTRA_OBJS = $(EXTRA_OBJS)' >> $@
|
|
||||||
@echo 'EXTRA_CFLAGS = $(EXTRA_CFLAGS)' >> $@
|
|
||||||
@cat $^ >> $@
|
|
||||||
# @rm -f $(dir $@)/Makefile.dep
|
|
||||||
|
|
||||||
$(KERNEL_MAKEFILE_PUB): Makefile.build.dcfa.public
|
|
||||||
@echo install $@
|
|
||||||
@rm -f $@
|
|
||||||
@mkdir -p $(dir $@)
|
|
||||||
@echo 'SRC = $(SRC)' > $@
|
|
||||||
@echo 'IHKBASE = $(IHKBASE)' >> $@
|
|
||||||
@echo 'TARGET = $(BUILD_TARGET)' >> $@
|
|
||||||
@echo 'TARGETDIR = $$(shell echo $$(TARGET) | sed "s/-/\//")' >> $@
|
|
||||||
@echo 'KERNEL_OBJ = $(KERNEL_OBJ_PUB)' >> $@
|
|
||||||
@cat $^ >> $@
|
|
||||||
|
|
||||||
FORCE:
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
# Makefile.in COPYRIGHT FUJITSU LIMITED 2013-2018
|
|
||||||
BUILD_TARGET ?= @TARGET@
|
|
||||||
KERNDIR=@KERNDIR@
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
ARCH ?= @ARCH@
|
|
||||||
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
vdsodir=@abs_builddir@/../arch/$(ARCH)/kernel/vdso
|
|
||||||
endif
|
|
||||||
|
|
||||||
IHKBASE ?= $(VPATH)/../../ihk/cokernel
|
|
||||||
O ?= $(CURDIR)/build
|
|
||||||
V ?= $(VERBOSE)
|
|
||||||
|
|
||||||
KERNEL = kernel.img
|
|
||||||
KERNELS = $(addsuffix /$(KERNEL),$(addprefix $(O)/,$(BUILD_TARGET)))
|
|
||||||
|
|
||||||
SUBCMD_OPTS = V='$(V)' BUILD_IHK_COKERNEL=@abs_builddir@/../../ihk/cokernel
|
|
||||||
|
|
||||||
$(if $(O),,$(error Specify the compilation target directory))
|
|
||||||
#$(if $(shell ls $(IHKBASE)/Makefile),,\
|
|
||||||
# $(error IHK is not found in $(IHKBASE)))
|
|
||||||
|
|
||||||
.PHONY: all clean depend install
|
|
||||||
|
|
||||||
all: $(O) $(KERNELS)
|
|
||||||
|
|
||||||
$(O):
|
|
||||||
mkdir -p $(O)
|
|
||||||
|
|
||||||
%/kernel.img: %/Makefile $(KERNELS)
|
|
||||||
@echo 'Building for' $(dir $@)
|
|
||||||
+@make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS)
|
|
||||||
|
|
||||||
%/Makefile: Makefile.build FORCE
|
|
||||||
@mkdir -p $(dir $@)
|
|
||||||
@echo 'SRC = $(SRC)' > $@
|
|
||||||
@echo 'IHKBASE = $(IHKBASE)' >> $@
|
|
||||||
@echo 'TARGET = $(notdir $(patsubst %/,%,$(dir $@)))' >> $@
|
|
||||||
@echo 'TARGETDIR = smp/$(ARCH)' >> $@
|
|
||||||
@cat Makefile.build >> $@
|
|
||||||
@rm -f $(dir $@)/Makefile.dep
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(O)
|
|
||||||
ifeq ($(ARCH), arm64)
|
|
||||||
@rm -f $(vdsodir)/*.o $(vdsodir)/vdso.lds $(vdsodir)/vdso.so* $(vdsodir)/Makefile.dep
|
|
||||||
@rm -f $(vdsodir)/../include/vdso-offsets.h $(vdsodir)/../include/vdso-so-path.h
|
|
||||||
@if [ -d $(vdsodir)/../include ]; then rmdir --ignore-fail-on-non-empty $(vdsodir)/../include; fi
|
|
||||||
endif
|
|
||||||
|
|
||||||
install:
|
|
||||||
mkdir -p -m 755 $(KERNDIR)
|
|
||||||
install -m 755 $(O)/$(BUILD_TARGET)/kernel.img $(KERNDIR)/mckernel.img
|
|
||||||
|
|
||||||
FORCE:
|
|
||||||
@ -26,17 +26,9 @@ SECTIONS
|
|||||||
*(.rodata .rodata.*)
|
*(.rodata .rodata.*)
|
||||||
} :data
|
} :data
|
||||||
|
|
||||||
.vdso : ALIGN(0x1000) {
|
/* force build-id position somewhere not at start... */
|
||||||
vdso_page = .;
|
.note.gnu.build-id : {
|
||||||
|
}
|
||||||
. = vdso_page + 0x0000;
|
|
||||||
*(.vdso.data)
|
|
||||||
|
|
||||||
. = vdso_page + 0x1000;
|
|
||||||
*(.vdso.text)
|
|
||||||
|
|
||||||
. = ALIGN(0x1000);
|
|
||||||
} : data = 0xf4
|
|
||||||
|
|
||||||
.bss : {
|
.bss : {
|
||||||
*(.bss .bss.*)
|
*(.bss .bss.*)
|
||||||
|
|||||||
@ -26,17 +26,9 @@ SECTIONS
|
|||||||
*(.rodata .rodata.*)
|
*(.rodata .rodata.*)
|
||||||
} :data
|
} :data
|
||||||
|
|
||||||
.vdso : ALIGN(0x1000) {
|
/* force build-id position somewhere not at start... */
|
||||||
vdso_page = .;
|
.note.gnu.build-id : {
|
||||||
|
}
|
||||||
. = vdso_page + 0x0000;
|
|
||||||
*(.vdso.data)
|
|
||||||
|
|
||||||
. = vdso_page + 0x1000;
|
|
||||||
*(.vdso.text)
|
|
||||||
|
|
||||||
. = ALIGN(0x1000);
|
|
||||||
} : data = 0xf4
|
|
||||||
|
|
||||||
.bss : {
|
.bss : {
|
||||||
*(.bss .bss.*)
|
*(.bss .bss.*)
|
||||||
|
|||||||
@ -26,17 +26,9 @@ SECTIONS
|
|||||||
*(.rodata .rodata.*)
|
*(.rodata .rodata.*)
|
||||||
} :data
|
} :data
|
||||||
|
|
||||||
.vdso : ALIGN(0x10000) {
|
/* force build-id position somewhere not at start... */
|
||||||
vdso_page = .;
|
.note.gnu.build-id : {
|
||||||
|
}
|
||||||
. = vdso_page + 0x00000;
|
|
||||||
*(.vdso.data)
|
|
||||||
|
|
||||||
. = vdso_page + 0x10000;
|
|
||||||
*(.vdso.text)
|
|
||||||
|
|
||||||
. = ALIGN(0x10000);
|
|
||||||
} : data = 0xf4
|
|
||||||
|
|
||||||
.bss : {
|
.bss : {
|
||||||
*(.bss .bss.*)
|
*(.bss .bss.*)
|
||||||
|
|||||||
@ -26,17 +26,9 @@ SECTIONS
|
|||||||
*(.rodata .rodata.*)
|
*(.rodata .rodata.*)
|
||||||
} :data
|
} :data
|
||||||
|
|
||||||
.vdso : ALIGN(0x10000) {
|
/* force build-id position somewhere not at start... */
|
||||||
vdso_page = .;
|
.note.gnu.build-id : {
|
||||||
|
}
|
||||||
. = vdso_page + 0x00000;
|
|
||||||
*(.vdso.data)
|
|
||||||
|
|
||||||
. = vdso_page + 0x10000;
|
|
||||||
*(.vdso.text)
|
|
||||||
|
|
||||||
. = ALIGN(0x10000);
|
|
||||||
} : data = 0xf4
|
|
||||||
|
|
||||||
.bss : {
|
.bss : {
|
||||||
*(.bss .bss.*)
|
*(.bss .bss.*)
|
||||||
|
|||||||
@ -25,6 +25,10 @@ SECTIONS
|
|||||||
*(.rodata .rodata.*)
|
*(.rodata .rodata.*)
|
||||||
} :data
|
} :data
|
||||||
|
|
||||||
|
/* force build-id position somewhere not at start... */
|
||||||
|
.note.gnu.build-id : {
|
||||||
|
}
|
||||||
|
|
||||||
.vsyscall : ALIGN(0x1000) {
|
.vsyscall : ALIGN(0x1000) {
|
||||||
vsyscall_page = .;
|
vsyscall_page = .;
|
||||||
|
|
||||||
|
|||||||
138
scripts/mckernel.spec.in
Normal file
138
scripts/mckernel.spec.in
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
# mckernel spec file usage:
|
||||||
|
# cmake /path/to/mckernel && make dist
|
||||||
|
# rpmbuild -ta mckernel-@MCKERNEL_VERSION@.tar.gz
|
||||||
|
#
|
||||||
|
# for cross compilation also pass the following to rpmbuild:
|
||||||
|
# --target aarch64 -D 'kernel_version <target kernel>'
|
||||||
|
# you will need to install the target's kernel-devel package (rpm -i --ignorearch)
|
||||||
|
# and have your environment setup as per cmake/README.cross_compilation
|
||||||
|
|
||||||
|
|
||||||
|
%{!?kernel_version: %define kernel_version @UNAME_R@}
|
||||||
|
%define krequires %(echo %{kernel_version} | sed "s/.%{_target_cpu}$//")
|
||||||
|
%define ktag %(echo %{krequires} | tr '-' '_' | sed -e 's/\.el[0-9]*$//' | sed -e 's/\.\([a-zA-Z]\)/_\1/')
|
||||||
|
|
||||||
|
Name: mckernel
|
||||||
|
Version: @MCKERNEL_VERSION@
|
||||||
|
Release: 0_%{ktag}%{?dist}
|
||||||
|
Summary: IHK/McKernel
|
||||||
|
License: GPLv2
|
||||||
|
Source0: mckernel-%{version}.tar.gz
|
||||||
|
|
||||||
|
BuildRequires: systemd-devel numactl-devel binutils-devel kernel-devel
|
||||||
|
BuildRequires: %kernel_module_package_buildreqs = %{krequires}
|
||||||
|
|
||||||
|
# kernel_module_package macro does not handle cross build...
|
||||||
|
%if "%{?_host_cpu}" == "x86_64" && "%{?_target_cpu}" == "aarch64"
|
||||||
|
%define cross_compile 1
|
||||||
|
Requires: kernel = %{krequires}
|
||||||
|
Requires(post): /usr/sbin/depmod
|
||||||
|
Requires(postun): /usr/sbin/depmod
|
||||||
|
%else
|
||||||
|
%kernel_module_package %{?kmod_flavors}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%description
|
||||||
|
Interface for Heterogeneous Kernels and McKernel.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
%if 0%{?cross_compile}
|
||||||
|
%{!?toolchain_file: %define toolchain_file cmake/cross-aarch64.cmake}
|
||||||
|
%{!?build_target: %define build_target smp-arm64}
|
||||||
|
%{!?cmake_libdir: %define cmake_libdir /usr/lib64}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# We need to remove ld flags like relro for the final mckernel.img link, as well as remove cflags for mckernel
|
||||||
|
# ideally mckernel should use different environment variables for the user tools and the kernel tools altogether...
|
||||||
|
%define __global_ldflags ""
|
||||||
|
%define optflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -grecord-gcc-switches -mtune=generic
|
||||||
|
|
||||||
|
%cmake -DCMAKE_BUILD_TYPE=Release \
|
||||||
|
%{?kernel_version:-DUNAME_R=%{kernel_version}} \
|
||||||
|
%{?kernel_version:-DKERNEL_DIR=/usr/src/kernels/%{kernel_version}} \
|
||||||
|
%{?cmake_libdir:-DCMAKE_INSTALL_LIBDIR=%{cmake_libdir}} \
|
||||||
|
%{?build_target:-DBUILD_TARGET=%{build_target}} \
|
||||||
|
%{?toolchain_file:-DCMAKE_TOOLCHAIN_FILE=%{toolchain_file}} \
|
||||||
|
.
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install
|
||||||
|
|
||||||
|
%files
|
||||||
|
%ifarch x86_64
|
||||||
|
%{_datadir}/mckernel/smp-x86/mckernel.img
|
||||||
|
%endif
|
||||||
|
%ifarch aarch64
|
||||||
|
%{_datadir}/mckernel/smp-arm64/mckernel.img
|
||||||
|
%endif
|
||||||
|
%{_sbindir}/mcreboot.sh
|
||||||
|
%{_sbindir}/mcstop+release.sh
|
||||||
|
%{_sbindir}/ihkconfig
|
||||||
|
%{_sbindir}/ihkosctl
|
||||||
|
%{_sbindir}/ihkmond
|
||||||
|
%{_bindir}/mcexec
|
||||||
|
%{_bindir}/eclair
|
||||||
|
%{_bindir}/vmcore2mckdump
|
||||||
|
%{_bindir}/mcstat
|
||||||
|
%{_libdir}/libihk.so
|
||||||
|
%{_libdir}/libsched_yield.so.1.0.0
|
||||||
|
%{_libdir}/libsched_yield.so
|
||||||
|
%{_libdir}/libldump2mcdump.so
|
||||||
|
%{_includedir}/ihklib.h
|
||||||
|
%{_includedir}/ihk/affinity.h
|
||||||
|
%{_includedir}/mckernel/ihklib_rusage.h
|
||||||
|
%{_sysconfdir}/irqbalance_mck.in
|
||||||
|
%{_sysconfdir}/irqbalance_mck.service
|
||||||
|
%{_mandir}/man1/mcreboot.1.gz
|
||||||
|
%{_mandir}/man1/ihkconfig.1.gz
|
||||||
|
%{_mandir}/man1/ihkosctl.1.gz
|
||||||
|
%{_mandir}/man1/mcexec.1.gz
|
||||||
|
|
||||||
|
%if 0%{?cross_compile}
|
||||||
|
/lib/modules/%{kernel_version}/extra/mckernel/ihk.ko
|
||||||
|
/lib/modules/%{kernel_version}/extra/mckernel/mcctrl.ko
|
||||||
|
%ifarch x86_64
|
||||||
|
/lib/modules/%{kernel_version}/extra/mckernel/ihk-smp-x86_64.ko
|
||||||
|
%endif
|
||||||
|
%ifarch aarch64
|
||||||
|
/lib/modules/%{kernel_version}/extra/mckernel/ihk-smp-arm64.ko
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
%if 0%{?cross_compile}
|
||||||
|
# scripts from /usr/lib/rpm/redhat/kmodtool (kernel_module_package) as well
|
||||||
|
%post
|
||||||
|
if [ -e "/boot/System.map-%{kernel_version}" ]; then
|
||||||
|
/usr/sbin/depmod -aeF "/boot/System.map-%{kernel_version}" "%{kernel_version}" > /dev/null || :
|
||||||
|
fi
|
||||||
|
|
||||||
|
modules=( $(find /lib/modules/%{kernel_version}/extra/%{name} | grep '\.ko$') )
|
||||||
|
if [ -x "/sbin/weak-modules" ]; then
|
||||||
|
printf '%s\n' "${modules[@]}" \
|
||||||
|
| /sbin/weak-modules --add-modules
|
||||||
|
fi
|
||||||
|
|
||||||
|
%preun
|
||||||
|
rpm -ql %{name}-%{version} | grep '\.ko$' > /var/run/rpm-kmod-%{name}-modules
|
||||||
|
|
||||||
|
%postun
|
||||||
|
if [ -e "/boot/System.map-%{kernel_version}" ]; then
|
||||||
|
/usr/sbin/depmod -aeF "/boot/System.map-%{kernel_version}" "%{kernel_version}" > /dev/null || :
|
||||||
|
fi
|
||||||
|
|
||||||
|
modules=( $(cat /var/run/rpm-kmod-%{name}-modules) )
|
||||||
|
rm /var/run/rpm-kmod-%{name}-modules
|
||||||
|
if [ -x "/sbin/weak-modules" ]; then
|
||||||
|
printf '%s\n' "${modules[@]}" \
|
||||||
|
| /sbin/weak-modules --remove-modules
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue Feb 12 2019 Dominique Martinet <dominique.martinet@cea.fr> - 1.6.0-0
|
||||||
|
- Initial package
|
||||||
15
tools/mcstat/CMakeLists.txt
Normal file
15
tools/mcstat/CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
include_directories(
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
"${PROJECT_BINARY_DIR}"
|
||||||
|
"${PROJECT_BINARY_DIR}/ihk/linux/include/ihk"
|
||||||
|
"${IHK_FULL_SOURCE_DIR}/linux/include"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/../../executer/include"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_executable(mcstat mcstat.c)
|
||||||
|
target_link_libraries(mcstat ihklib)
|
||||||
|
|
||||||
|
install(TARGETS mcstat
|
||||||
|
DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||||
@ -1,30 +0,0 @@
|
|||||||
CC=@CC@
|
|
||||||
MCC=mpicc
|
|
||||||
BINDIR=@BINDIR@
|
|
||||||
SBINDIR=@SBINDIR@
|
|
||||||
prefix=@prefix@
|
|
||||||
exec_prefix=@exec_prefix@
|
|
||||||
LIBDIR=@libdir@
|
|
||||||
MANDIR=@MANDIR@
|
|
||||||
KDIR ?= @KDIR@
|
|
||||||
ARCH=@ARCH@
|
|
||||||
VPATH=@abs_srcdir@
|
|
||||||
IHKDIR ?= $(VPATH)/../../../ihk/linux/include/
|
|
||||||
CFLAGS=-Wall -O -I. -I${IHKDIR} -I@abs_srcdir@/../../executer/include -I@abs_builddir@/../../../ihk/linux/include/ihk
|
|
||||||
LDFLAGS=-L@abs_builddir@/../../../ihk/linux/user -lihk -Wl,-rpath -Wl,$(prefix)/lib @LDFLAGS@
|
|
||||||
TARGET=mcstat
|
|
||||||
|
|
||||||
.PHONY: all clean install
|
|
||||||
|
|
||||||
all: $(TARGET)
|
|
||||||
|
|
||||||
mcstat: mcstat.c
|
|
||||||
$(CC) -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
clean::
|
|
||||||
$(RM) $(TARGET) *.o
|
|
||||||
|
|
||||||
install::
|
|
||||||
install -m 755 -d $(MANDIR)/man1
|
|
||||||
install -m 644 mcstat.1 $(MANDIR)/man1/mcstat.1
|
|
||||||
install -m 755 mcstat $(BINDIR)
|
|
||||||
Reference in New Issue
Block a user