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
|
||||
*.order
|
||||
.tmp_versions
|
||||
|
||||
elfboot/elfboot
|
||||
elfboot/elfboot_test
|
||||
linux/executer/mcexec
|
||||
linux/mod_test*
|
||||
linux/target
|
||||
old_timestamp
|
||||
CMakeFiles
|
||||
CMakeCache.txt
|
||||
Makefile
|
||||
Kbuild
|
||||
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/
|
||||
cd ~/src/ihk+mckernel/
|
||||
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/
|
||||
cd ~/src/ihk+mckernel/ihk/
|
||||
./configure --with-target=smp-x86 --prefix=${TOP}
|
||||
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
|
||||
mkdir -p build && cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/ihk+mckernel $HOME/src/mckernel
|
||||
make -j install
|
||||
~~~~
|
||||
|
||||
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");
|
||||
return 0;
|
||||
}
|
||||
kprintf("Enable McK mapping vDSO.\n");
|
||||
|
||||
if (memcmp(&vdso_start, "\177ELF", 4)) {
|
||||
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;
|
||||
panic("Only support host mapping vDSO");
|
||||
}
|
||||
|
||||
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"
|
||||
SBINDIR="${prefix}/sbin"
|
||||
ETCDIR=@ETCDIR@
|
||||
KMODDIR="${prefix}/kmod"
|
||||
KERNDIR="${prefix}/@TARGET@/kernel"
|
||||
KMODDIR="@KMODDIR@"
|
||||
KERNDIR="@MCKERNELDIR@"
|
||||
ENABLE_MCOVERLAYFS="@ENABLE_MCOVERLAYFS@"
|
||||
MCK_BUILDID=@BUILDID@
|
||||
|
||||
@ -138,32 +138,32 @@ error_exit() {
|
||||
fi
|
||||
;&
|
||||
mcos_sys_mounted)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
umount /tmp/mcos/mcos0_sys
|
||||
fi
|
||||
;&
|
||||
mcos_proc_mounted)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
umount /tmp/mcos/mcos0_proc
|
||||
fi
|
||||
;&
|
||||
mcoverlayfs_loaded)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
rmmod mcoverlay 2>/dev/null
|
||||
fi
|
||||
;&
|
||||
linux_proc_bind_mounted)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
umount /tmp/mcos/linux_proc
|
||||
fi
|
||||
;&
|
||||
tmp_mcos_mounted)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
umount /tmp/mcos
|
||||
fi
|
||||
;&
|
||||
tmp_mcos_created)
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
rm -rf /tmp/mcos
|
||||
fi
|
||||
;&
|
||||
@ -255,7 +255,7 @@ if [ "$cpus" == "" ]; then
|
||||
fi
|
||||
|
||||
# Remove mcoverlay if loaded
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
${SBINDIR}/mcoverlay-destroy.sh
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
@ -462,7 +462,7 @@ if ! chown ${chown_option} /dev/mcd* /dev/mcos*; then
|
||||
fi
|
||||
|
||||
# Overlay /proc, /sys with McKernel specific contents
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
|
||||
if [ "$ENABLE_MCOVERLAYFS" == "ON" ]; then
|
||||
${SBINDIR}/mcoverlay-create.sh
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
|
||||
@ -100,15 +100,6 @@ if grep mcctrl /proc/modules &>/dev/null; then
|
||||
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
|
||||
if grep ihk_smp_@ARCH@ /proc/modules &>/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. */
|
||||
|
||||
/* Path of install directory for binary */
|
||||
#undef BINDIR
|
||||
|
||||
/* 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 */
|
||||
#undef ENABLE_MCOVERLAYFS
|
||||
#cmakedefine ENABLE_MCOVERLAYFS 1
|
||||
|
||||
/* whether memdump feature is enabled */
|
||||
#undef ENABLE_MEMDUMP
|
||||
#cmakedefine ENABLE_MEMDUMP 1
|
||||
|
||||
/* whether perf is enabled */
|
||||
#undef ENABLE_PERF
|
||||
#cmakedefine ENABLE_PERF 1
|
||||
|
||||
/* whether qlmpi is enabled */
|
||||
#undef ENABLE_QLMPI
|
||||
#cmakedefine ENABLE_QLMPI 1
|
||||
|
||||
/* whether rusage is enabled */
|
||||
#undef ENABLE_RUSAGE
|
||||
#cmakedefine ENABLE_RUSAGE 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* 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
|
||||
/* whether UTI is enabled */
|
||||
#cmakedefine ENABLE_UTI 1
|
||||
|
||||
/* 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 */
|
||||
#undef 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
|
||||
#cmakedefine SBINDIR "${SBINDIR}"
|
||||
|
||||
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/kallsyms.h>
|
||||
#include <asm/vdso.h>
|
||||
#include "../../../config.h"
|
||||
#include "config.h"
|
||||
#include "../../mcctrl.h"
|
||||
|
||||
//#define SC_DEBUG
|
||||
|
||||
@ -1 +0,0 @@
|
||||
ccflags-y += -mno-red-zone -mcmodel=kernel
|
||||
@ -2,7 +2,7 @@
|
||||
#include <linux/version.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include "../../../config.h"
|
||||
#include "config.h"
|
||||
#include "../../mcctrl.h"
|
||||
|
||||
//#define SC_DEBUG
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/delay.h>
|
||||
#include <asm/io.h>
|
||||
#include "../../../config.h"
|
||||
#include "config.h"
|
||||
#include "mcctrl.h"
|
||||
#include <linux/version.h>
|
||||
#include <archdeps.h>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/version.h>
|
||||
#include "../../../config.h"
|
||||
#include "config.h"
|
||||
#include "mcctrl.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
|
||||
*/
|
||||
|
||||
#include "../config.h"
|
||||
#include "config.h"
|
||||
#include <bfd.h>
|
||||
#include <fcntl.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
#ifndef HEADER_USER_COMMON_ECLAIR_H
|
||||
#define HEADER_USER_COMMON_ECLAIR_H
|
||||
|
||||
#include "../config.h"
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <arch-eclair.h>
|
||||
|
||||
@ -2001,7 +2001,7 @@ static void ld_preload_init()
|
||||
memset(envbuf, 0, PATH_MAX);
|
||||
|
||||
if (enable_uti) {
|
||||
LD_PRELOAD_PREPARE("syscall_intercept.so");
|
||||
LD_PRELOAD_PREPARE("libmck_syscall_intercept.so");
|
||||
LD_PRELOAD_APPEND;
|
||||
}
|
||||
|
||||
@ -2249,7 +2249,7 @@ int main(int argc, char **argv)
|
||||
if (opendev() == -1)
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
#ifndef WITH_SYSCALL_INTERCEPT
|
||||
#ifndef ENABLE_UTI
|
||||
if (enable_uti) {
|
||||
__eprintf("ERROR: uti is not available when not configured with --with-syscall_intercept=<path>\n");
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
#include "../../config.h"
|
||||
#include "config.h"
|
||||
|
||||
#include "../include/qlmpi.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.*)
|
||||
} :data
|
||||
|
||||
.vdso : ALIGN(0x1000) {
|
||||
vdso_page = .;
|
||||
|
||||
. = vdso_page + 0x0000;
|
||||
*(.vdso.data)
|
||||
|
||||
. = vdso_page + 0x1000;
|
||||
*(.vdso.text)
|
||||
|
||||
. = ALIGN(0x1000);
|
||||
} : data = 0xf4
|
||||
/* force build-id position somewhere not at start... */
|
||||
.note.gnu.build-id : {
|
||||
}
|
||||
|
||||
.bss : {
|
||||
*(.bss .bss.*)
|
||||
|
||||
@ -26,17 +26,9 @@ SECTIONS
|
||||
*(.rodata .rodata.*)
|
||||
} :data
|
||||
|
||||
.vdso : ALIGN(0x1000) {
|
||||
vdso_page = .;
|
||||
|
||||
. = vdso_page + 0x0000;
|
||||
*(.vdso.data)
|
||||
|
||||
. = vdso_page + 0x1000;
|
||||
*(.vdso.text)
|
||||
|
||||
. = ALIGN(0x1000);
|
||||
} : data = 0xf4
|
||||
/* force build-id position somewhere not at start... */
|
||||
.note.gnu.build-id : {
|
||||
}
|
||||
|
||||
.bss : {
|
||||
*(.bss .bss.*)
|
||||
|
||||
@ -26,17 +26,9 @@ SECTIONS
|
||||
*(.rodata .rodata.*)
|
||||
} :data
|
||||
|
||||
.vdso : ALIGN(0x10000) {
|
||||
vdso_page = .;
|
||||
|
||||
. = vdso_page + 0x00000;
|
||||
*(.vdso.data)
|
||||
|
||||
. = vdso_page + 0x10000;
|
||||
*(.vdso.text)
|
||||
|
||||
. = ALIGN(0x10000);
|
||||
} : data = 0xf4
|
||||
/* force build-id position somewhere not at start... */
|
||||
.note.gnu.build-id : {
|
||||
}
|
||||
|
||||
.bss : {
|
||||
*(.bss .bss.*)
|
||||
|
||||
@ -26,17 +26,9 @@ SECTIONS
|
||||
*(.rodata .rodata.*)
|
||||
} :data
|
||||
|
||||
.vdso : ALIGN(0x10000) {
|
||||
vdso_page = .;
|
||||
|
||||
. = vdso_page + 0x00000;
|
||||
*(.vdso.data)
|
||||
|
||||
. = vdso_page + 0x10000;
|
||||
*(.vdso.text)
|
||||
|
||||
. = ALIGN(0x10000);
|
||||
} : data = 0xf4
|
||||
/* force build-id position somewhere not at start... */
|
||||
.note.gnu.build-id : {
|
||||
}
|
||||
|
||||
.bss : {
|
||||
*(.bss .bss.*)
|
||||
|
||||
@ -25,6 +25,10 @@ SECTIONS
|
||||
*(.rodata .rodata.*)
|
||||
} :data
|
||||
|
||||
/* force build-id position somewhere not at start... */
|
||||
.note.gnu.build-id : {
|
||||
}
|
||||
|
||||
.vsyscall : ALIGN(0x1000) {
|
||||
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