diff --git a/.bintray_descriptor.json b/.bintray_descriptor.json index d29ba7ff9..7afd423d9 100644 --- a/.bintray_descriptor.json +++ b/.bintray_descriptor.json @@ -19,13 +19,17 @@ }, "files": - [{ - "includePattern": "../(libhermit[^/]*deb$)", "uploadPattern": "$1", + [ + { + "includePattern": "build/(libhermit[^/]*deb$)", "uploadPattern": "$1", "matrixParams": { "deb_distribution": "vivid", "deb_component": "main", "deb_architecture": "amd64", - "override": 1} - }], + "override": 1} + }, + {"includePattern": "build/(libhermit[^/]*rpm$)", "uploadPattern": "$1", "override": 1} + {"includePattern": "build/(libhermit[^/]*tar.bz2$)", "uploadPattern": "$1", "override": 1} + ], "publish": true } diff --git a/.gitignore b/.gitignore index 8d7c64cb6..fabe22240 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,12 @@ -config.log -config.status -autom4te.cache -/Makefile *.pcap *.config *.creator -*.creator.user +*.user *.files *.includes *.pyc *.callgrind *.xray -*.o -*.a -*.dep -*~ -*.elf -*.elf32 -*.sym -*.bin +**/build/* +.idea/* qemu-vlan0.pcap -autom4te.cache -documentation/html/ -include/hermit/config.inc -include/hermit/config.h -tools/proxy -usr/tests/hello -usr/tests/hello++ -usr/tests/hellof -usr/tests/jacobi -usr/tests/thr_hello -usr/tests/pi -usr/tests/RCCE_minimum -usr/tests/signals -usr/tests/server -usr/benchmarks/RCCE_pingping -usr/benchmarks/RCCE_pingpong -usr/benchmarks/stream -usr/benchmarks/hg -usr/benchmarks/netio -usr/benchmarks/basic -usr/openmpbench/schedbench -usr/openmpbench/syncbench -usr/openmpbench/taskbench -usr/tmp/ -usr/binutils/ -usr/gcc/ -usr/newlib/ -usr/pte/ -tools/Makefile -usr/ircce/Makefile -usr/xray/Makefile -arch/x86/kernel/boot.h -usr/binutils/ -usr/gcc/ -usr/newlib/ -usr/pte/ diff --git a/.travis.yml b/.travis.yml index 4900fa8e4..ffcf780fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,26 +1,22 @@ sudo: required dist: trusty git: - submodules: false + submodules: true language: c compiler: gcc before_install: - echo "deb https://dl.bintray.com/rwth-os/hermitcore vivid main" | sudo tee -a /etc/apt/sources.list - travis_retry sudo apt-get -qq update - - travis_retry sudo apt-get install -y curl qemu-system-x86 nasm texinfo libmpfr-dev libmpc-dev libgmp-dev libisl-dev flex bison packaging-dev - #- sudo apt-get install -y --force-yes binutils-hermit gcc-hermit-bootstrap + - travis_retry sudo apt-get install -y curl wget qemu-system-x86 nasm texinfo libmpfr-dev libmpc-dev libgmp-dev libisl-dev flex bison packaging-dev rpm - travis_retry sudo apt-get install -y --force-yes binutils-hermit libhermit newlib-hermit pthread-embedded-hermit gcc-hermit - git submodule update --init lwip usr/libomp script: - - cd .. - - mv HermitCore libhermit-0.1 - - tar -czf libhermit_0.1.orig.tar.gz libhermit-0.1 --exclude=.git - - cd libhermit-0.1 - - debuild -e PATH -e CFLAGS_FOR_TARGET -e GOFLAGS_FOR_TARGET -e FCFLAGS_FOR_TARGET -e FFLAGS_FOR_TARGET -e CXXFLAGS_FOR_TARGET -us -uc -j2 - - sudo dpkg -i ../libhermit*_amd64.deb - - make -j2 examples - - make test + - source cmake/local-cmake.sh + - mkdir build + - cd build + - cmake .. + - make -j1 package deploy: on: master @@ -30,16 +26,3 @@ deploy: secure: wo0yLY7xhGZYDqdB05UE+IOXXgYhAwj+zvtZh3ET2253hy35y74cDKMBNGfynH0aauPk8EFmN/LJoYaV/T9QF6pc1bilbqSg1/LJuL7hjAVVFaBSjwlE/Wbbb+EHNX5CR3qmC42SUvbrU+0WNvRu7WJBpZIoH9EtPv2Cj7uRV9+7Mtp/O3Ykl3E5LgkF5iA6Lo03TN+bZ1Vog5MbuJagDTpNa18vJ3jVYaed5gqOkghYYDpc5U9yxN3debS7/8MCl3u9V9uanMAyjc6wtbvJLotVkUwdXK8u9FohuWQ4pTEQ/QspLDDBuxaS3kLNWtzBMNQn6rcYIOWWKyD3uqvIhqjcErX7WChf3oGS1XPFfTHebNrHyV4KGvzkMAJUR/1qC5f4nZCsvgPv/35d702nky3Di2/WZsjD5zUR9g3+vPO8mnM3z8eA6ShVJcxezZ73Co3p0ZnBaF3J438bAKiT4nlrbIVpRzZzo/5nYTx//SefXSAmYCILr/y7xTYBqjfjMQHQZEMZSvJYRPbtP7eVCfWGEa2tG4rQndegUtwS+n1r8atcESL9eeUUM6sa1QzZYDYVseOc9GWcB7SIJzPOm8QTuTlkISHMGJ8FY+KHorP15VkVlr0EZ5c7KY0cBIbWoZGNQTg9+nSgChyf7ElNbAxPiCZsR0zafjMDhfcnzco= key: secure: JfsqEUO3Z60yGfuK5RSzwMoWZtaYflZtW7QE6R1DVMPEQ+CytzEdV2JaTpY14xz4yz1YpBBuQ0P3Q3e2rf/ORp8N8j7/5m3gfiDi8bRH3gX10r6vCQaUBilj0pz3amWUacxwBUEYR/f1029OnJ1qug30f4ARk7DWyuAePt0OboDXZ3j4JOi8xfXKTzofyKGugU4EuzhmKAbpHaBoX97g8z+gETC+wsBEYio8iD2h0ZOe/qZ0S+JGYkphIKcxpQazKdi3YrmWm0BUZsQRtkgoH7KUZm8vqfOUyVOrK+UGOTz4vXqCWHZ+wG1QRrGPUv8ehLrB26y2o02mmaDWQhM+I3RtllL06JDvDw40xjRImYtzg6xr7Mvl0OTQHprXrkN8gw2IbIivV8v31O46Ov+KIaN3CCx1IncnllBWjEXAIs4zPtvNj2Ad338JTkI/opHmPG0DI0DKE36r8wPZYTs/pHVpc3xEzwKYDklJkICjMLUakUGKppS7eKzKGRMjWvbT0vM/U7hHUcz0lA+BUoXedNmJQ1wBT85Ud8uobuKS4C8QmlgIuF1PI2+6LJr5LsCGZRvg7Pl1SPc3ZQLPHX4ggoLAnZZJiV/0ZPCn7XCLiUS1qws37l0uZT1zJQMFLsw9MGuP58tpT7WDuYYAwma/pL+OKC/JKoDhuJwM1I7wB4s= -env: - global: - - PATH=$PATH:/opt/hermit/bin/ - - HERMIT_ISLE=qemu - - HERMIT_CPUS=1 - - HERMIT_MEM="512M" - - HERMIT_KVM="0" - - HERMIT_VERBOSE="1" - - CFLAGS_FOR_TARGET="-m64 -O3 -ftree-vectorize" - - GOFLAGS_FOR_TARGET"=-m64 -O3 -ftree-vectorize" - - FCFLAGS_FOR_TARGET"=-m64 -O3 -ftree-vectorize" - - FFLAGS_FOR_TARGET="-m64 -O3 -ftree-vectorize" - - CXXFLAGS_FOR_TARGET="-m64 -O3 -ftree-vectorize" diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..e69e14459 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,196 @@ +cmake_minimum_required(VERSION 3.7) + +include(ExternalProject) +include(cmake/HermitCore.cmake) + +project (HermitCore) + +### Kernel + +# generate config files +add_subdirectory(include/hermit) + +add_kernel_module_sources("kernel" "kernel/*.c") +add_kernel_module_sources("libkern" "libkern/*.c") +add_kernel_module_sources("mm" "mm/*.c") +add_kernel_module_sources("drivers" "drivers/net/*.c") + +set(LWIP_SRC lwip/src) +add_kernel_module_sources("lwip" "${LWIP_SRC}/api/*.c") +add_kernel_module_sources("lwip" "${LWIP_SRC}/arch/*.c") +add_kernel_module_sources("lwip" "${LWIP_SRC}/core/*.c") +add_kernel_module_sources("lwip" "${LWIP_SRC}/core/ipv4/*.c") +add_kernel_module_sources("lwip" "${LWIP_SRC}/core/ipv6/*.c") +add_kernel_module_sources("lwip" "${LWIP_SRC}/netif/*.c") + +get_kernel_modules(KERNEL_MODULES) +foreach(MODULE ${KERNEL_MODULES}) + get_kernel_module_sources(SOURCES ${MODULE}) + + # maintain list of all objects that will end up in libhermit.a + list(APPEND KERNEL_OBJECTS $) + + add_library(${MODULE} OBJECT ${SOURCES}) + + # this is kernel code + target_compile_definitions(${MODULE} + PRIVATE -D__KERNEL__) + + target_compile_options(${MODULE} + PRIVATE ${HERMIT_KERNEL_FLAGS}) + + target_include_directories(${MODULE} + PUBLIC ${HERMIT_KERNEL_INCLUDES}) + + # suppress all LwIP compiler warnings. Not our code, so we cannot fix + if("${MODULE}" STREQUAL "lwip") + target_compile_options(${MODULE} + PRIVATE -w) + endif() + +endforeach() + +# add arch/x86 and its objects +# TODO: make this conditional when new architectures are implemented +add_subdirectory(arch/x86) +list(APPEND KERNEL_OBJECTS + $ + $) + +# finally build libhermit.a +add_library(hermit STATIC ${KERNEL_OBJECTS}) + +# after compiling ASM sources, we need to post-process them. Adding this +# dependency makes sure that this is done before hermit is linked +add_dependencies(hermit ${X86_KERNEL_TARGET}) + +add_custom_command( + TARGET + hermit POST_BUILD + # rename sections in final library + COMMAND + ${CMAKE_OBJCOPY} --rename-section .bss=.kbss + --rename-section .text=.ktext + --rename-section .data=.kdata + $ + + # copy libhermit.a into local prefix directory so that all subsequent + # targets can link against the freshly built version (as opposed to + # linking against the one supplied by the toolchain) + COMMAND + ${CMAKE_COMMAND} -E make_directory ${LOCAL_PREFIX_ARCH_LIB_DIR} + COMMAND + ${CMAKE_COMMAND} -E copy_if_different + $ + ${LOCAL_PREFIX_ARCH_LIB_DIR}/ + + # and also copy headers into local prefix + COMMAND + ${CMAKE_COMMAND} -E make_directory ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}/hermit + COMMAND + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_BINARY_DIR}/include/hermit/*.h + ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}/hermit/ + COMMAND + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_BINARY_DIR}/include/hermit/*.asm + ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}/hermit/) + +# deploy libhermit.a and headers for package creation +install(TARGETS hermit + DESTINATION ${TARGET_ARCH}/lib) +install(DIRECTORY include/hermit + DESTINATION ${TARGET_ARCH}/include/) + + +### External projects +# +# Build projects externally and deploy into temporary common prefix, will later +# be relocated for installation + +## HermitCore's own tools such as Qemu/KVM proxy +build_external(tools ${HERMIT_ROOT}/tools "") +build_external(arch_x86_loader ${HERMIT_ROOT}/arch/x86/loader "") + +## Intel's OpenMP runtime for x86 (libomp) +build_external(libiomp ${HERMIT_ROOT}/usr/libomp "" + -DHERMIT=1 + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/${TARGET_ARCH}) + +# libomp is part of HermitCore's runtime and should be available before any +# application will link +add_dependencies(hermit libiomp) + +## iRCCE +build_external(ircce ${HERMIT_ROOT}/usr/ircce "") +add_dependencies(hermit ircce) + +## XRay profiler +build_external(xray ${HERMIT_ROOT}/usr/xray "") +add_dependencies(hermit xray) + +## Tests and benchmarks +build_external(tests ${HERMIT_ROOT}/usr/tests hermit) +build_external(benchmarks ${HERMIT_ROOT}/usr/benchmarks hermit) +build_external(openmpbench ${HERMIT_ROOT}/usr/openmpbench hermit) + +## relocate the local prefix to our install destination +install(DIRECTORY ${LOCAL_PREFIX_DIR}/ + DESTINATION ${CMAKE_INSTALL_PREFIX}/ + USE_SOURCE_PERMISSIONS) + + +### QEmu +# Start HermitCore as multi-kernel in a QEmu VM + +add_custom_target(qemu + COMMAND + qemu-system-x86_64 + -machine accel=kvm -cpu host + -smp 10 -m 8G -numa node,nodeid=0,cpus=0-4 -numa node,nodeid=1,cpus=5-9 + -kernel ${HERMIT_ROOT}/config/bzImage + -append "root=/dev/ram0 rootfstype=ramfs init=init console=ttyS0" + -net nic,model=rtl8139 -net user -net dump + -nographic -monitor telnet:127.0.0.1:1235,server,nowait + -fsdev local,security_model=none,id=fsdev0,path=${LOCAL_PREFIX_DIR} + -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hermit + -s + USES_TERMINAL VERBATIM) + +# create a QEmu target that depends on everything +get_property(_TARGETS + DIRECTORY . + PROPERTY BUILDSYSTEM_TARGETS) + +add_custom_target(qemu-dep + DEPENDS + ${_TARGETS} qemu) + + +### Packaging + +set(CPACK_PACKAGE_NAME libhermit) +set(CPACK_SYSTEM_NAME all) + +set(CPACK_PACKAGE_VERSION_MAJOR 0) +set(CPACK_PACKAGE_VERSION_MINOR 1) +set(CPACK_PACKAGE_VERSION_PATCH 0) + +set(CPACK_PACKAGE_CONTACT "Daniel Krebs ") + +# build .deb, .rpm and .tar.bz2 packages +set(CPACK_GENERATOR DEB;RPM;TBZ2) + +# needed in order for tests and bechmark to use correct install prefix +set(CPACK_SET_DESTDIR on) + +## Debian specific +# not dependent on Debian system architecture +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE all) + +## RPM specific +# libhermit is currently not relocatable +set(CPACK_PACKAGE_RELOCATABLE FALSE) + +include(CPack) diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index e33c86974..000000000 --- a/Makefile.in +++ /dev/null @@ -1,278 +0,0 @@ -TERM = xterm -TOPDIR := $(shell pwd) -ARCH = x86 -NAME = libhermit.a -DRIVERDIRS = drivers/net -LWIPDIRS = lwip/src/arch lwip/src/api lwip/src/core lwip/src/core/ipv4 lwip/src/core/ipv6 lwip/src/netif -KERNDIRS = kernel mm libkern arch/$(ARCH)/kernel arch/$(ARCH)/libkern arch/$(ARCH)/mm $(LWIPDIRS) $(DRIVERDIRS) -SUBDIRS = $(KERNDIRS) -TODAY := $(shell date +'%Y%m%d') -QEMU = @QEMU@ -machine accel=kvm -cpu host -CROSSDIR = @prefix@/bin -JOBS = $(shell nproc) -ARCH_OPT = @ARCH_OPT@ -TOOLCHAIN = @TOOLCHAIN@ -ifeq ($(TOOLCHAIN),0) -BUILD_BOOTSTRAP = -BUILD_TOOLCHAIN = -INSTALL_LIBHERMIT = -else -BUILD_BOOTSTRAP = bootstrap -BUILD_TOOLCHAIN = toolchain -INSTALL_LIBHERMIT = install_libhermit -endif - -prefix = @prefix@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ - -# add path to the cross toolchain -PATH:=$(PATH):$(CROSSDIR) - -# Set your own cross compiler tool chain prefix here -CROSSCOMPREFIX = x86_64-hermit -STACKPROT = -fno-stack-protector - -FC_FOR_TARGET = $(CROSSCOMPREFIX)-gfortran -CC_FOR_TARGET = $(CROSSCOMPREFIX)-gcc -GO_FOR_TARGET = $(CROSSCOMPREFIX)-gccgo -CXX_FOR_TARGET = $(CROSSCOMPREFIX)-g++ -GCC_FOR_TARGET = $(CROSSCOMPREFIX)-gcc -CPP_FOR_TARGET = $(CROSSCOMPREFIX)-cpp -AR_FOR_TARGET = $(CROSSCOMPREFIX)-ar -AS_FOR_TARGET = $(CROSSCOMPREFIX)-as -LD_FOR_TARGET = $(CROSSCOMPREFIX)-ld -NM_FOR_TARGET = $(CROSSCOMPREFIX)-nm -OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)-objdump -OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)-objcopy -RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)-ranlib -STRIP_FOR_TARGET = $(CROSSCOMPREFIX)-strip -READELF_FOR_TARGET = $(CROSSCOMPREFIX)-readelf -ELFEDIT_FOR_TARGET = $(CROSSCOMPREFIX)-elfedit - -MAKE = make -NASM = nasm -NASMFLAGS = -felf64 -g -i$(TOPDIR)/include/hermit/ - -INCLUDE = -I$(TOPDIR)/include -I$(TOPDIR)/arch/$(ARCH)/include -I$(TOPDIR)/lwip/src/include -I$(TOPDIR)/drivers -CFLAGS = -g -m64 -Wall -O2 -mno-red-zone -fno-var-tracking-assignments -fstrength-reduce -fomit-frame-pointer -finline-functions -ffreestanding -nostdinc -fno-stack-protector -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -fno-common -Wframe-larger-than=1024 -fno-strict-aliasing -fno-asynchronous-unwind-tables -fno-strict-overflow -maccumulate-outgoing-args $(INCLUDE) -AR = ar -ARFLAGS = rsv -RM = rm -rf -OUTPUT_FORMAT = -O elf64-x86-64-hermit - -# Additional flags for profiling using Xray -PROFILING_LDFLAGS = -PROFILING_CFLAGS = - -ifdef PROFILING - PROFILING_LDFLAGS = -lxray - - PROFILING_CFLAGS = -falign-functions=32 -finstrument-functions - PROFILING_CFLAGS += -finstrument-functions-exclude-function-list=_mm_pause,_mm_setcsr,_mm_getcsr # we need this for libiomp to work - PROFILING_CFLAGS += -DXRAY -DXRAY_DISABLE_BROWSER_INTEGRATION -DXRAY_NO_DEMANGLE - PROFILING_CFLAGS += -DXRAY_ANNOTATE -endif - -CFLAGS_FOR_NEWLIB = -m64 -O3 -ftree-vectorize $(ARCH_OPT) #$(STACKPROT) -GOFLAGS_FOR_NEWLIB = -m64 -O3 -ftree-vectorize $(ARCH_OPT) -FCFLAGS_FOR_NEWLIB = -m64 -O3 -ftree-vectorize $(ARCH_OPT) -FFLAGS_FOR_NEWLIB = -m64 -O3 -ftree-vectorize $(ARCH_OPT) -CXXFLAGS_FOR_NEWLIB = -m64 -O3 -ftree-vectorize $(ARCH_OPT) -LDFLAGS_FOR_NEWLIB = -NASMFLAGS_FOR_NEWLIB = -felf64 -CFLAGS_FOR_TOOLS = -O2 -Wall -std=gnu99 -LDFLAGS_FOR_TOOLS = - -# Prettify output -V = 0 -ifeq ($V,0) - Q = @ - P = > /dev/null -endif - - -default: all - -all: arch/x86/kernel/boot.h $(BUILD_BOOTSTRAP) $(NAME) $(BUILD_TOOLCHAIN) tools loader - -toolchain: $(INSTALL_LIBHERMIT) - $Q$(MAKE) ARCH=$(ARCH) PREFIX=$(prefix) \ - LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_NEWLIB)" \ - GOFLAGS_FOR_TARGET="$(GOFLAGS_FOR_NEWLIB)" \ - CFLAGS_FOR_TARGET="$(CFLAGS_FOR_NEWLIB)" \ - FFLAGS_FOR_TARGET="$(FFLAGS_FOR_NEWLIB)" \ - FCFLAGS_FOR_TARGET="$(FCFLAGS_FOR_NEWLIB)" \ - FCFLAGS="$(FCFLAGS_FOR_NEWLIB)" \ - CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_NEWLIB)" \ - NASMFLAGS="$(NASMFLAGS_FOR_NEWLIB)" \ - CC_FOR_TARGET=$(CC_FOR_TARGET) \ - GO_FOR_TARGET=$(GO_FOR_TARGET) \ - FC_FOR_TARGET=$(FC_FOR_TARGET) \ - CXX_FOR_TARGET=$(CXX_FOR_TARGET) \ - GCC_FOR_TARGET=$(GCC_FOR_TARGET) \ - AR_FOR_TARGET=$(AR_FOR_TARGET) \ - AS_FOR_TARGET=$(AS_FOR_TARGET) \ - LD_FOR_TARGET=$(LD_FOR_TARGET) \ - NM_FOR_TARGET=$(NM_FOR_TARGET) \ - OBJDUMP_FOR_TARGET=$(OBJDUMP_FOR_TARGET) \ - OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) \ - RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET) \ - STRIP_FOR_TARGET=$(STRIP_FOR_TARGET) \ - ELFEDIT_FOR_TARGET=$(ELFEDIT_FOR_TARGET) \ - READELF_FOR_TARGET=$(READELF_FOR_TARGET) \ - PROFILING_CFLAGS="$(PROFILING_CFLAGS)" \ - PROFILING_LDFLAGS="$(PROFILING_LDFLAGS)" -C usr toolchain - -libs: - $Q$(MAKE) ARCH=$(ARCH) PREFIX=$(prefix) \ - LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_NEWLIB)" \ - GOFLAGS_FOR_TARGET="$(GOFLAGS_FOR_NEWLIB)" \ - CFLAGS_FOR_TARGET="$(CFLAGS_FOR_NEWLIB)" \ - FFLAGS_FOR_TARGET="$(FFLAGS_FOR_NEWLIB)" \ - FCFLAGS_FOR_TARGET="$(FCFLAGS_FOR_NEWLIB)" \ - FCFLAGS="$(FCFLAGS_FOR_NEWLIB)" \ - CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_NEWLIB)" \ - NASMFLAGS="$(NASMFLAGS_FOR_NEWLIB)" \ - CC_FOR_TARGET=$(CC_FOR_TARGET) \ - GO_FOR_TARGET=$(GO_FOR_TARGET) \ - FC_FOR_TARGET=$(FC_FOR_TARGET) \ - CXX_FOR_TARGET=$(CXX_FOR_TARGET) \ - GCC_FOR_TARGET=$(GCC_FOR_TARGET) \ - AR_FOR_TARGET=$(AR_FOR_TARGET) \ - AS_FOR_TARGET=$(AS_FOR_TARGET) \ - LD_FOR_TARGET=$(LD_FOR_TARGET) \ - NM_FOR_TARGET=$(NM_FOR_TARGET) \ - OBJDUMP_FOR_TARGET=$(OBJDUMP_FOR_TARGET) \ - OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) \ - RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET) \ - STRIP_FOR_TARGET=$(STRIP_FOR_TARGET) \ - ELFEDIT_FOR_TARGET=$(ELFEDIT_FOR_TARGET) \ - READELF_FOR_TARGET=$(READELF_FOR_TARGET) \ - PROFILING_CFLAGS="$(PROFILING_CFLAGS)" \ - PROFILING_LDFLAGS="$(PROFILING_LDFLAGS)" -C usr libs - -bootstrap: - $Q$(MAKE) ARCH=$(ARCH) PREFIX=$(prefix) CFLAGS="" LDFLAGS="" -C usr bootstrap - -tools: - $Q$(MAKE) ARCH=$(ARCH) PREFIX=$(prefix) CFLAGS="$(CFLAGS_FOR_TOOLS)" LDFLAGS="$(LDFLAGS_FOR_TOOLS)" -C tools - -loader: - $Q$(MAKE) -C arch/$(ARCH)/loader - -$(NAME): - @echo [AR] $(NAME) - $Q$(AR_FOR_TARGET) $(ARFLAGS) -o $(NAME) $^ - $Q$(OBJCOPY_FOR_TARGET) --rename-section .bss=.kbss --rename-section .text=.ktext --rename-section .data=.kdata $(NAME) - -examples: - $Q$(MAKE) ARCH=$(ARCH) PREFIX=$(prefix) \ - LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_NEWLIB)" \ - GOFLAGS_FOR_TARGET="$(GOFLAGS_FOR_NEWLIB)" \ - CFLAGS_FOR_TARGET="$(CFLAGS_FOR_NEWLIB)" \ - FFLAGS_FOR_TARGET="$(FFLAGS_FOR_NEWLIB)" \ - FCFLAGS_FOR_TARGET="$(FCFLAGS_FOR_NEWLIB)" \ - FCFLAGS="$(FCFLAGS_FOR_NEWLIB)" \ - CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_NEWLIB)" \ - NASMFLAGS="$(NASMFLAGS_FOR_NEWLIB)" \ - CC_FOR_TARGET=$(CC_FOR_TARGET) \ - GO_FOR_TARGET=$(GO_FOR_TARGET) \ - FC_FOR_TARGET=$(FC_FOR_TARGET) \ - CXX_FOR_TARGET=$(CXX_FOR_TARGET) \ - GCC_FOR_TARGET=$(GCC_FOR_TARGET) \ - AR_FOR_TARGET=$(AR_FOR_TARGET) \ - AS_FOR_TARGET=$(AS_FOR_TARGET) \ - LD_FOR_TARGET=$(LD_FOR_TARGET) \ - NM_FOR_TARGET=$(NM_FOR_TARGET) \ - OBJDUMP_FOR_TARGET=$(OBJDUMP_FOR_TARGET) \ - OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) \ - RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET) \ - STRIP_FOR_TARGET=$(STRIP_FOR_TARGET) \ - ELFEDIT_FOR_TARGET=$(ELFEDIT_FOR_TARGET) \ - READELF_FOR_TARGET=$(READELF_FOR_TARGET) \ - PROFILING_CFLAGS="$(PROFILING_CFLAGS)" \ - PROFILING_LDFLAGS="$(PROFILING_LDFLAGS)" -C usr examples - -test: - . ./test.sh - -qemu: - $(QEMU) -smp 10 -m 8G -numa node,nodeid=0,cpus=0-4 -numa node,nodeid=1,cpus=5-9 \ - -kernel config/bzImage \ - -append "root=/dev/ram0 rootfstype=ramfs init=init console=ttyS0" \ - -net nic,model=rtl8139 -net user -net dump \ - -nographic -monitor telnet:127.0.0.1:1235,server,nowait \ - -fsdev local,security_model=none,id=fsdev0,path=$(shell realpath .) \ - -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hermit \ - -s - -install_libhermit: - $Q$(INSTALL_PROGRAM) -d $(prefix)/$(CROSSCOMPREFIX)/lib/ - $Q$(INSTALL_DATA) $(NAME) $(prefix)/$(CROSSCOMPREFIX)/lib/ - $Q$(INSTALL_PROGRAM) -d $(prefix)/$(CROSSCOMPREFIX)/include/hermit/ - $Q$(INSTALL_DATA) include/hermit/* $(prefix)/$(CROSSCOMPREFIX)/include/hermit/ - -install: install_libhermit - $Q$(MAKE) PREFIX=$(prefix) -C usr install - $Q$(MAKE) PREFIX=$(prefix) -C tools install - -clean: - $Q$(RM) $(NAME) $(NAME).sym $(NAME).bin *~ - $Q$(MAKE) -C tools clean - $Q$(MAKE) -C usr clean - $Q$(MAKE) -C arch/$(ARCH)/loader clean - @echo Cleaned. - -veryclean: clean - $Q$(RM) qemu-vlan0.pcap include/hermit/config.inc - $Q$(MAKE) -C tools veryclean - $Q$(MAKE) -C usr veryclean - $Q$(MAKE) -C arch/$(ARCH)/loader veryclean - @echo Very cleaned - -doc: - @echo Create documentation... - @doxygen - -%.o : %.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c -D__KERNEL__ $(CFLAGS) -o $@ $< - @echo [DEP] $*.dep - $Q$(CC_FOR_TARGET) -MF $*.dep -MT $*.o -MM $(CFLAGS) $< - -arch/x86/kernel/boot.bin: arch/x86/kernel/boot.asm - @echo " NASM $@" - $Q$(NASM) -fbin -o $@ $< - -arch/x86/kernel/boot.h: arch/x86/kernel/boot.bin - @echo " HEXDUMP $@" - $Qecho "static const uint8_t boot_code[] = { \ - $(shell hexdump -v -e '"0x" 1/1 "%02X" ", "' $<) \ - };" > $@ - -include/hermit/config.inc: include/hermit/config.h - @echo "; This file is generated automatically from the config.h file." > include/hermit/config.inc - @echo "; Before editing this, you should consider editing config.h." >> include/hermit/config.inc - @awk '/^#define MAX_CORES/{ print "%define MAX_CORES", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define KERNEL_STACK_SIZE/{ print "%define KERNEL_STACK_SIZE", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define VIDEO_MEM_ADDR/{ print "%define VIDEO_MEM_ADDR", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define CONFIG_VGA/{ print "%define CONFIG_VGA", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define DYNAMIC_TICKS/{ print "%define DYNAMIC_TICKS", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define SAVE_FPU/{ print "%define SAVE_FPU", $$3 }' include/hermit/config.h >> include/hermit/config.inc - -%.o : %.asm include/hermit/config.inc - @echo [ASM] $@ - $Q$(NASM) $(NASMFLAGS) -o $@ $< - $Q$(ELFEDIT_FOR_TARGET) --output-osabi HermitCore $@ - #$Q$(OBJCOPY_FOR_TARGET) $(OUTPUT_FORMAT) $@ - -%.o : %.S - @echo [GCC-ASM] $@ - $Q$(CC_FOR_TARGET) $(CFLAGS) -c -o $@ $< - -.PHONY: default all clean qemu gdb usr test toolchain tools examples libs - -include $(addsuffix /Makefile,$(SUBDIRS)) diff --git a/Makefile.inc b/Makefile.inc deleted file mode 100644 index c0e214dc9..000000000 --- a/Makefile.inc +++ /dev/null @@ -1,20 +0,0 @@ -C_source-$(MODULE) := $(addprefix $(subst _,/,$(MODULE))/,$(filter %.c,$(C_source))) -ASM_source-$(MODULE) := $(addprefix $(subst _,/,$(MODULE))/,$(filter %.asm,$(ASM_source))) -C_source := -ASM_source := - -OBJS-$(MODULE) := $(C_source-$(MODULE):.c=.o) -OBJS-$(MODULE) += $(ASM_source-$(MODULE):.asm=.o) - -$(MODULE): $(OBJS-$(MODULE)) - -$(NAME): $(OBJS-$(MODULE)) - -clean: clean-$(MODULE) -clean-$(MODULE): clean-% : - @echo Cleaning $(subst _,/,$*) - $Q$(RM) $(OBJS-$*) $(C_source-$*:.c=.dep) - -.PHONY: clean-$(MODULE) $(MODULE) - --include $(C_source-$(MODULE):.c=.dep) diff --git a/README.md b/README.md index d52a25ce0..ddc3a629a 100644 --- a/README.md +++ b/README.md @@ -1,91 +1,268 @@ # HermitCore - A lightweight unikernel for a scalable and predictable runtime behavior -The project [HermitCore](http://www.hermitcore.org) is new [unikernel](http://unikernel.org) targeting at a scalable and predictable runtime for high-performance and cloud computing. -HermitCore extends the multi-kernel approach (like [McKernel](http://www-sys-aics.riken.jp/ResearchTopics/os/mckernel.html)) with unikernel features for a better programmability and scalability for hierarchical systems. -On the startup of HermitCore applications, cores are isolated from the Linux system enabling the bare-metal of the applications on these cores. -This approach achieves lower OS jitter and a better scalability compared to full-weight kernels. -Inter-kernel communication between HermitCore applications and the Linux system is realized by means of an IP interface. +The project [HermitCore]( http://www.hermitcore.org ) is a new +[unikernel](http://unikernel.org) targeting a scalable and predictable runtime +for high-performance and cloud computing. HermitCore extends the multi-kernel +approach (like +[McKernel](http://www-sys-aics.riken.jp/ResearchTopics/os/mckernel.html)) with +unikernel features for a better programmability and scalability for hierarchical +systems. + + +On the startup of HermitCore applications, cores are isolated from the Linux +system enabling bare-metal execution of on these cores. This approach achieves +lower OS jitter and a better scalability compared to full-weight kernels. +Inter-kernel communication between HermitCore applications and the Linux system +is realized by means of an IP interface. + +In addition to the multi-kernel approach described above, HermitCore can be used +as a classical standalone unikernel as well. In this case, HermitCore runs a +single-kernel exclusively on the hardware or within a virtual machine. This +reduces the resource demand and loweres the boot time which is critical for +cloud computing applications. It is the result of a research project at RWTH +Aachen University and is currently an experimental approach, i.e., not +production ready. Please use it with caution. -In addition to the multi-kernel approach described above, HermitCore can be used as classical standalone unikernel as well. -In this case HermitCore runs a single-kernel exclusively on the hardware or within a virtual machine. -This reduces the resource demand and improves the boot time which is critical for cloud computing applications. -It is the result of a research project at RWTH Aachen University and is currently an experimental approach, i.e., not production ready. -Please use it with caution. ## Requirements -The build process works currently only on **x86-based Linux** systems. The following software packets are required to build HermitCore on a Linux system: +The build process works currently only on **x86-based Linux** systems. To build +the HermitCore kernel and applications you need: -* Netwide Assembler (NASM) -* GNU Make, GNU Binutils -* Tools and libraries to build *linux*, *binutils* and *gcc* (e.g. flex, bison, MPFR library, GMP library, MPC library, ISL library) -* texinfo -* Qemu + * CMake + * Netwide Assember (NASM) + * recent host compiler such as GCC + * HermitCore cross-toolchain, i.e. Binutils, GCC, newlib, pthreads-embedded -On Debian-based systems the packets can be installed by executing: -``` - sudo apt-get install qemu-system-x86 nasm texinfo libmpfr-dev libmpc-dev libgmp-dev libisl-dev flex bison + +### HermitCore cross-toolchain + +We provide prebuilt packages (currently Debian-based only) of the HermitCore +toolchain, which can be installed as follows: + +```bash +$ echo "deb [trusted=yes] https://dl.bintray.com/rwth-os/hermitcore vivid main" | sudo tee -a /etc/apt/sources.list +$ sudo apt-get -qq update +$ sudo apt-get install binutils-hermit newlib-hermit pthread-embedded-hermit gcc-hermit libhermit ``` -## Installing HermitCore with by using debian packets +If you want to build the toolchain yourself, have a look at the following +repositories, especially at `debian/rules` in each repository: -We provide binary packets for debian-based systems containing the complete HermitCore toolchain including a cross-compiler. -To install the packets you have to execute the following commands: + * [GCC](https://github.com/RWTH-OS/gcc) + * [Binutils](https://github.com/RWTH-OS/binutils) + * [Newlib](https://github.com/RWTH-OS/newlib) + * [Pthread-embedded](https://github.com/RWTH-OS/pthread-embedded) + +Depending on how you want to use HermitCore, you might need additional packages +such as: + + * QEMU (`apt-get install qemu-system-x86`) + + +## CMake requirements + +We require a fairly recent version of CMake (`3.7`) which is not yet present in +most Linux distributions. We therefore provide a helper script that fetches the +required CMake binaries from the upstream project and stores them locally, so +you only need to download it once. + +```bash +$ . cmake/local-cmake.sh +-- Downloading CMake +--2017-03-28 16:13:37-- https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz +Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' +Resolving cmake.org... 66.194.253.19 +Connecting to cmake.org|66.194.253.19|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 30681434 (29M) [application/x-gzip] +Saving to: ‘cmake-3.7.2-Linux-x86_64.tar.gz’ + +cmake-3.7.2-Linux-x86_64.tar.gz 100%[===================>] 29,26M 3,74MB/s in 12s + +2017-03-28 16:13:50 (2,48 MB/s) - ‘cmake-3.7.2-Linux-x86_64.tar.gz’ saved [30681434/30681434] + +-- Unpacking CMake +-- Local CMake v3.7.2 installed to cmake/cmake-3.7.2-Linux-x86_64 +-- Next time you source this script, no download will be neccessary ``` -echo "deb [trusted=yes] https://dl.bintray.com/rwth-os/hermitcore vivid main" | sudo tee -a /etc/apt/sources.list -sudo apt-get -qq update -sudo apt-get install binutils-hermit newlib-hermit pthread-embedded-hermit gcc-hermit libhermit + +So before you build HermitCore you have to source the `local-cmake.sh` script +everytime you open a new terminal. + + +## Building HermitCore + +```bash +$ mkdir build +$ cd build +$ cmake .. +$ make ``` -This toolchain is able to build applications for [classical unikernel](#building-and-testing-hermitcore-as-classical-standalone-unikernel) environments within virtual machines or bare-metal in a multi-kernel environment. -For the latter, you have to install the modified Linux kernel. -An introduction to this execution mode is provided in section [Building and testing HermitCore as multi-kernel on a real machine](#building-and-testing-hermitcore-as-multi-kernel-on a-real-machine). -## Building and testing HermitCore as multi-kernel within a virtual machine +If your toolchain is not located in `/opt/hermit/bin` then you have to supply +its location to the `cmake` command above like so: -1. Please make sure that you cloned this repository and all its submodules. -2. To configure the system, run the *configure* script in the directory, which contains this *README*. - With the flag `--with-toolchain`, the HermitCore's complete cross toolchain (cross compiler, binutils, etc.) will be downloaded and built. - **NOTE**: This requires write access to the installation directory, which is specified by the flag `--prefix`. - At the end of this *README* in section *Tips* you find hints to enable optimization for the target. -3. The command `make all` build the the HermitCore kernel and depending on the configuration flags the cross toolchain. -4. Install the kernel with `make install`. -5. Build all example applications with `make examples`. -6. To start a virtual machine and to boot a small Linux version use the command `make qemu`. - Per default, the virtual machine has 10 cores, 2 NUMA nodes, and 8 GiB RAM. - To increase or to decrease the machine size, the label `qemu` in the Makefile has to be modified accordingly. -7. Inside the VM runs a small Linux system, which already includes the patches for HermitCore. - Per NUMA node (= HermitCore isle) there is a directory called `isleX` under `/sys/hermit` , where `X` represents the NUMA node ID. - The demo applications are located in the directories `/hermit/usr/{tests,benchmarks}`. - A HermitCore loader is already registered. - By starting a HermitCore application, a proxy will be executed on the Linux system, while the HermitCore binary will be started on isle 0 with cpu 1. - To change the default behavior, the environment variable `HERMIT_ISLE` is used to specify the (memory) location of the isle, while the environment variable `HERMIT_CPUS` is used to specify the cores. - For instance, `HERMIT_ISLE=1 HERMIT_CPUS="3-5" /hermit/usr/tests/hello` starts a HelloWorld demo on the HermitCore isle 1, which uses the cores 3 to 5. - The output messages are forwarded to the Linux proxy and printed on the Linux system. -8. HermitCore's kernel messages of `isleX` are available via `cat /sys/hermit/isleX/log`. -9. There is a virtual IP device for the communication between the HermitCore isles and the Linux system (see output of `ifconfig`). - Per default, the Linux system has the IP address `192.168.28.1`. - The HermitCore isles starts with the IP address `192.168.28.2` for isle 0 and is increased by one for every isle. -10. More HermitCore applications are available at `/hermit/usr/{tests,benchmarks}` which is a shared directory between the host and QEmu. +```bash +$ cmake -DTOOLCHAIN_BIN_DIR=/home/user/hermit/bin +``` -## Building and testing HermitCore as multi-kernel on a real machine +assuming that binaries like `x86_64-hermit-gcc` and friends are located in that +directory. + + +## Testing + +### As multi-kernel within a virtual machine + +```bash +$ cd build +$ make qemu +$ # or 'make qemu-dep' to build HermitCore dependencies before +``` + +Within the QEMU session you can start HermitCore application just the same as +traditional Linux programs: + +```bash +(QEMU) $ /hermit/extra/tests/hello +smpboot: CPU 1 is now offline +Hello World!!! +argv[0] = /hermit/extra/tests/hello +Receive signal with number 30 +Hostname: hermit.localdomain +x86: Booting SMP configuration: +smpboot: Booting Node 0 Processor 1 APIC 0x1 +``` + +Per default, the virtual machine has 10 cores, 2 NUMA nodes, and 8 GiB RAM. +Inside the VM runs a small Linux system, which already includes the patches for +HermitCore. Per NUMA node (= HermitCore isle) there is a directory called +`isleX` under `/sys/hermit` , where `X` represents the NUMA node ID. + +The demo applications are located in the directories +`/hermit/extra/{tests,benchmarks}`. A HermitCore loader is already registered. +By starting a HermitCore application, a proxy will be executed on the Linux +system, while the HermitCore binary will be started on isle 0 with cpu 1. To +change the default behavior, the environment variable `HERMIT_ISLE` is used to +specify the (memory) location of the isle, while the environment variable +`HERMIT_CPUS` is used to specify the cores. + +For instance, `HERMIT_ISLE=1 HERMIT_CPUS="3-5" /hermit/extra/tests/hello` starts +a HelloWorld demo on the HermitCore isle 1, which uses the cores 3 to 5. The +output messages are forwarded to the Linux proxy and printed on the Linux +system. + +HermitCore's kernel messages of `isleX` are available via `cat +/sys/hermit/isleX/log`. + +There is a virtual IP device for the communication between the HermitCore isles +and the Linux system (see output of `ifconfig`). Per default, the Linux system +has the IP address `192.168.28.1`. The HermitCore isles starts with the IP +address `192.168.28.2` for isle 0 and is increased by one for every isle. + +More HermitCore applications are available at `/hermit/usr/{tests,benchmarks}` +which is a shared directory between the host and QEMU. + + +### As classical standalone unikernel within a virtual machine + +HermitCore applications can be directly started as standalone kernel within a +virtual machine. In this case, +[iRCCE](http://www.lfbs.rwth-aachen.de/publications/files/iRCCE.pdf ) is not +supported. + +```bash +$ cd build +$ make install DESTDIR=~/hermit-build +$ cd ~/hermit-build/opt/hermit +$ # using QEMU +$ HERMIT_ISLE=qemu bin/proxy extra/tests/hello +$ # using uHyve +$ HERMIT_ISLE=uhyve bin/proxy extra/tests/hello +``` + +With `HERMIT_ISLE=qemu`, the application will be started within a QEMU VM. +Please note that the loader requires QEMU and uses per default *KVM*. +Furthermore, it expects that the executable is called `qemu-system-x86_64`. + +With `HERMIT_ISLE=hyve`, the application will be started within a thin +hypervisor powered by Linux's KVM API and therefore requires *KVM* support. +uHyve has a considerably smaller startup time than QEMU, but lacks some features +such as GDB debugging. + +In this context, the environment variable `HERMIT_CPUS` specifies the number of +cpus (and no longer a range of core ids). Furthermore, the variable `HERMIT_MEM` +defines the memory size of the virtual machine. The suffix of *M* or *G* can be +used to specify a value in megabytes or gigabytes respectively. Per default, the +loader initializes a system with one core and 2 GiB RAM. + +The virtual machine opens two TCP/IP ports. One is used for the communication +between HermitCore application and its proxy. The second port is used to create +a connection via telnet to QEMU's system monitor. With the environment variable +`HERMIT_PORT`, the default port (18766) can be changed for the communication +between the HermitCore application and its proxy. The connection to the system +monitor used automatically `HERMIT_PORT+1`, i.e., the default port is 18767. + +The following command starts the stream benchmark in a virtual machine, which +has 4 cores and 6GB memory. + +```bash +$ HERMIT_ISLE=qemu HERMIT_CPUS=4 HERMIT_MEM=6G bin/proxy extra/benchmarks/stream +``` + + +### As multi-kernel on a real machine *Note*: to launch HermitCore applications, root privileges are required. -1. In principle you have to follow the tutorial above. - After the configuration, building of the cross-compilers and all example application (Step 5 in the [above tutorial](#building-and-testing-hermitcore-within-a-virtual-machine)), a modified Linux kernel has to be installed. - Please clone the repository with the [modified Linux kernel](https://github.com/RWTH-OS/linux). - Afterwards switch to the branch `hermit` for a relative new vanilla kernel or to `centos`, which is compatible to the current CentOS 7 kernel. - Configure the kernel with `make menuconfig` for your system. - Be sure, that the option `CONFIG_HERMIT_CORE` in `Processor type and features` is enabled. -2. Install the Linux kernel and its initial ramdisk on your system (see descriptions of your Linux distribution). - We recommend to disable Linux NO_HZ feature by setting the kernel parameter `nohz=off`. -3. After a reboot of the system, register the HermitCore loader at your system with following command: `sudo -c sh 'echo ":hermit:M:7:\\x42::/path2proyxy/proxy:" > /proc/sys/fs/binfmt_misc/register'`, in which `path2proxy` defines the path to the loader. - You find the loader `proxy` after building the HermiCore sources in the subdirectory `tools` of the directory, which contains this *README*. -4. The IP device between HermitCore and Linux currently does not support IPv6. - Consequently, disable IPv6 by adding following line to `/etc/sysctl.conf`: `net.ipv6.conf.mmnif.disable_ipv6 = 1`. -5. Per default, the IP device uses a static IP address range. - Linux has to use `162.168.28.1`, where HermitCore isles start with `192.168.28.2` (isle 0). - The network manager must be configured accordingly and therefore the file `/etc/sysconfig/network-scripts/ifcfg-mmnif` must be created with the following content: +A [modified Linux kernel](https://github.com/RWTH-OS/linux) has to be installed. +Afterwards switch to the branch `hermit` for a relative new vanilla kernel or to +`centos`, which is compatible to the current CentOS 7 kernel. Configure the +kernel with `make menuconfig` for your system. Be sure, that the option +`CONFIG_HERMIT_CORE` in `Processor type and features` is enabled. + +```bash +$ git clone https://github.com/RWTH-OS/linux +$ cd linux +$ # see comments above +$ git checkout hermit +$ make menuconfig +$ make +``` + +Install the Linux kernel and its initial ramdisk on your system (see +descriptions of your Linux distribution). We recommend to disable Linux NO_HZ +feature by setting the kernel parameter `nohz=off`. + +Install HermitCore to your system (by default to `/opt/hermit`): + +```bash +$ cd build +$ sudo make install +$ ls -l /opt/hermit +``` + +After a reboot of the system, register the HermitCore loader at your system with +following command: + +```bash +$ sudo -c sh 'echo ":hermit:M:7:\\x42::/opt/hermit/bin/proxy:" > /proc/sys/fs/binfmt_misc/register' +``` + +The IP device between HermitCore and Linux currently does not support IPv6. +Consequently, disable it (might be slightly different on your distribution): + +```bash +$ echo 'net.ipv6.conf.mmnif.disable_ipv6 = 1' | sudo tee /etc/sysctl.conf +``` + +Per default, the IP device uses a static IP address range. Linux has to use +`162.168.28.1`, where HermitCore isles start with `192.168.28.2` (isle 0). The +interface is `mmnif`. + +Please configure your network accordingly. For CentOS, you have to create the +file `/etc/sysconfig/network-scripts/ifcfg-mmnif`: ``` DEVICE=mmnif @@ -96,66 +273,72 @@ NETMASK=255.255.255.0 IPADDR=192.168.28.1 NM_CONTROLLED=yes ``` -Finally, follow the [above tutorial](#building-and-testing-hermitcore-within-a-virtual-machine) from Step 5. -The demo applications are located in their subdirectories `usr/{tests,benchmarks}`. -## Building and testing HermitCore as classical standalone unikernel +You can now start applications the same way as from within a virtual machine +(see description above). -HermitCore applications can be directly started as standalone kernel within a virtual machine. -In this case, [iRCCE](http://www.lfbs.rwth-aachen.de/publications/files/iRCCE.pdf) is not supported. -Please build HermitCore and register the loader in the same way as done for the multi-kernel version (see [Building and testing HermitCore on a real machine](#building-and-testing-hermitcore-on-a-real-machine)). -If the environment variable `HERMIT_ISLE` is set to `qemu`, the application will be started within a VM. -Please note that the loader requires QEMU and uses per default *KVM*. -Furthermore, it expects that the executable is called `qemu-system-x86_64`. -You can adapt the name by setting the environment variable `HERMIT_QEMU`. -In this context, the environment variable `HERMIT_CPUS` specifies the number of cpus (and no longer a range of core ids). -Furthermore, the variable `HERMIT_MEM` defines the memory size of the virtual machine. -The suffix of *M* or *G* can be used to specify a value in megabytes or gigabytes respectively. -Per default, the loader initializes a system with one core and 2 GiB RAM. +## Building your own HermitCore applications -The virtual machine opens two TCP/IP ports. -One is used for the communication between HermitCore application and its proxy. -The second port is used to create a connection via telnet to QEMU's system monitor. -With the environment variable `HERMIT_PORT`, the default port (18766) can be changed for the communication between the HermitCore application and its proxy. -The connection to the system monitor used automatically `HERMIT_PORT+1`, i.e., the default port is 18767. +You can take `usr/tests` as a starting point to build your own applications. All +that is required is that you include +`[...]/HermitCore/cmake/HermitCore-Application.cmake` in your application's +`CMakeLists.txt`. It doesn't have to reside inside the HermitCore repository. +Other than that, it should behave like normal CMake. + + +## Profiling + +We provide profiling support via the XRay profiler. See `usr/xray/README.md` for +more information on how to use it. + + +## Debugging + +If the application is started via `make qemu`, debugging via GDB is enabled by +default on port 1234. When run via proxy (`HERMIT_ISLE=qemu`), set +`HERMIT_DEBUG=1`. -The following example starts the stream benchmark in a virtual machine, which has 4 cores and 6GB memory. ``` -HERMIT_ISLE=qemu HERMIT_CPUS=4 HERMIT_MEM=6G usr/benchmarks/stream +$ gdb extra/tests/hello +(gdb) target extended-remote :1234 +Remote debugging using :1234 +0xffffffff8100b542 in ?? () ``` -## Building HermitCore applications - -After successful building of HermitCore and its demo applications (see above), HermitCore’s cross toolchain (*gcc*, *g++*, *gfortran*, *gccgo*, *objdump*, etc.) is located at the subdiretory `usr/x86` of the directory, which contains this *README*. -To use these tools, add `usr/x86/bin` to your environment variable `PATH`. -As with any other cross toolchain, the tool names begin with the target architecture (*x86_64*) and the name of the operating system (*hermit*). -For instance, `x86_64-hermit-gcc` stands for the GNU C compiler, which is able to build HermitCore applications. - -All tools can be used as the well-known GNU tools. Only the Go compiler works different to the typical workflow. -Instead of building Go application like -``` -go build main.go -``` -you have to use the compiler as follows -``` -x86_64-hermit-gccgo -pthread -Wall -o main main.go -``` -For network support, you have to link the Go application with the flag `-lnetgo`. ## Tips -1. The configuration flag `--with-mtune=name` specifies the name of the target processor for which GCC should tune the performance of the code. - You can use any architecture name, which is supported by GCC. - For instance, `--with-mtune=native` optimzes the code for the host system. - Please note, if the applications is started within a VM, the hypervisor has to support the specified architecture name. - Per default the system will be accelerated by KVM and the host architecture will be used as target processor. -2. If Qemu is started by our proxy and the environment variable `HERMIT_KVM` is set to `0`, the virtual machine will be not accelerated by KVM. - In this case, the configuration flag `--with-mtune=name` should be avoided. - With the environment variable `HERMIT_APP_PORT`, an additional port can be open to establish an TCP/IP connection with your application. -3. By setting the environment variable `HERMIT_VERBOSE` to `1`, the proxy prints at termination the kernel log messages onto the screen. -4. If `HERMIT_DEBUG` is set to `1`, Qemu will establish an gdbserver, which will be listen port 1234. - Afterwards you are able debug HermitCore applications remotely. -5. By setting the environment variable `HERMIT_CAPTURE_NET` to `1` and `HERMIT_ISLE` to `qemu`, Qemu captures the network traffic and - creates the trace file *qemu-vlan0.pcap*. For instance with [Wireshark](https://www.wireshark.org) you are able to analyze the file. -6. If `HERMIT_MONITOR` is set to `1` and `HERMIT_ISLE` to `qemu`, Qemu establishes a monitor which is available via telnet at port 18767. +### Optimization + +You can configure the `-mtune=name` compiler flag by adding `-DMTUNE=name` to +the `cmake` command when configuring the project. + +Please note, if the applications is started within a VM, the hypervisor has to +support the specified architecture name. + +If QEMU is started by our proxy and the environment variable `HERMIT_KVM` is set +to `0`, the virtual machine will be not accelerated by KVM. In this case, the +`-mtune` flag should be avoided. + +### TCP connections + +With the environment variable `HERMIT_APP_PORT`, an additional port can be open +to establish an TCP/IP connection with your application. + +### Dumping the kernel log + +By setting the environment variable `HERMIT_VERBOSE` to `1`, the proxy prints at +termination the kernel log messages onto the screen. + +### Network tracing + +By setting the environment variable `HERMIT_CAPTURE_NET` to `1` and +`HERMIT_ISLE` to `qemu`, QEMU captures the network traffic and creates the trace +file *qemu-vlan0.pcap*. For instance with [Wireshark](https://www.wireshark.org) +you are able to analyze the file. + +### Monitor + +If `HERMIT_MONITOR` is set to `1` and `HERMIT_ISLE` to `qemu`, QEMU establishes +a monitor which is available via telnet at port 18767. diff --git a/arch/x86/CMakeLists.txt b/arch/x86/CMakeLists.txt new file mode 100644 index 000000000..cb88ba498 --- /dev/null +++ b/arch/x86/CMakeLists.txt @@ -0,0 +1,88 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore.cmake) + +project(arch_x86_kernel C ASM_NASM) + +set_parent(X86_KERNEL_TARGET ${PROJECT_NAME}) +set_parent(X86_KERNEL_ASM_TARGET ${X86_KERNEL_TARGET}_asm) +set_parent(X86_KERNEL_C_TARGET ${X86_KERNEL_TARGET}_c) + +add_custom_target(${X86_KERNEL_TARGET}) + +# compiling kernel code here +add_definitions(-D__KERNEL__) + + +### ASM sources ### + +add_library(${X86_KERNEL_ASM_TARGET} OBJECT + kernel/entry.asm + libkern/string.asm) + +# HACK: We need to post-process the objects by running elfedit on them, but +# there is currently no way to get the list of objects out of CMake +# except for $, which only works with add_library() +# and add_executable(). +# So predict path to objects and add custom commands that depend on +# the asm target. +# +# Upstream issue: https://gitlab.kitware.com/cmake/cmake/issues/15226 +# +set(_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}") +set(_BUILD_DIR "${_BUILD_DIR}/${X86_KERNEL_ASM_TARGET}.dir") + +get_target_property(ASM_SOURCES ${X86_KERNEL_ASM_TARGET} SOURCES) +foreach(SOURCE ${ASM_SOURCES}) + set(OBJECT "${SOURCE}.obj") + set(OBJECT_PATH "${_BUILD_DIR}/${OBJECT}") + + # slash (/) not allowed in target names + string(REPLACE "/" "-" + OBJECT_TARGET_NAME + "${OBJECT}") + + add_custom_target("${OBJECT_TARGET_NAME}" + COMMAND + ${CMAKE_ELFEDIT} --output-osabi HermitCore ${OBJECT_PATH} + DEPENDS + ${X86_KERNEL_ASM_TARGET}) + + # make main target depend on this + add_dependencies(${PROJECT_NAME} ${OBJECT_TARGET_NAME}) +endforeach() + + +### C sources ### + +file(GLOB KERNEL_SOURCES "kernel/*.c") +file(GLOB MM_SOURCES "mm/*.c") + +# add boot.h as source to mark dependency boot.asm -> boot.h -> apic.c +add_library(${X86_KERNEL_C_TARGET} OBJECT + ${KERNEL_SOURCES} ${MM_SOURCES} + ${GENERATED_CONFIG_DIR}/hermit/boot.h) + +target_include_directories(${X86_KERNEL_C_TARGET} BEFORE + PUBLIC ${HERMIT_KERNEL_INCLUDES} + PRIVATE ${GENERATED_CONFIG_DIR}) + +target_compile_options(${X86_KERNEL_C_TARGET} + PRIVATE ${HERMIT_KERNEL_FLAGS}) + +# assemble boot.asm and dump to C-array in boot.h +add_custom_command( + OUTPUT + ${GENERATED_CONFIG_DIR}/hermit/boot.h + DEPENDS + kernel/boot.asm + COMMAND + echo "static const uint8_t boot_code[] = {" > boot.h + COMMAND + nasm -f bin -o boot.bin ${CMAKE_CURRENT_LIST_DIR}/kernel/boot.asm + COMMAND + hexdump -v -e "7/1 \"0x%02X, \" 1/1 \" 0x%02X,\\n\"" boot.bin >> boot.h + COMMAND + echo "};" >> boot.h + WORKING_DIRECTORY + ${GENERATED_CONFIG_DIR}/hermit/ + VERBATIM USES_TERMINAL) diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile deleted file mode 100644 index b50382f0b..000000000 --- a/arch/x86/kernel/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -C_source := irq.c idt.c isrs.c gdt.c processor.c timer.c tasks.c apic.c pci.c uart.c syscall.c signal.c -ASM_source := entry.asm -MODULE := arch_x86_kernel - -include $(TOPDIR)/Makefile.inc diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 98a796514..a9d9557b3 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c @@ -42,7 +42,7 @@ #include #include #include -#include "boot.h" +#include /* * Note that linker symbols are not variables, they have no memory allocated for diff --git a/arch/x86/kernel/entry.asm b/arch/x86/kernel/entry.asm index 8da727220..028ed9799 100644 --- a/arch/x86/kernel/entry.asm +++ b/arch/x86/kernel/entry.asm @@ -28,7 +28,7 @@ ; perhaps setting up the GDT and segments. Please note that interrupts ; are disabled at this point: More on interrupts later! -%include "config.inc" +%include "hermit/config.asm" [BITS 64] @@ -600,7 +600,7 @@ common_switch: call get_current_stack ; get new rsp mov rsp, rax -%ifdef SAVE_FPU +%ifidn SAVE_FPU,ON ; set task switched flag mov rax, cr0 or rax, 8 diff --git a/arch/x86/libkern/string.asm b/arch/x86/libkern/string.asm index a289375ae..06affde19 100644 --- a/arch/x86/libkern/string.asm +++ b/arch/x86/libkern/string.asm @@ -8,7 +8,7 @@ ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; -%include "config.inc" +%include "hermit/config.asm" %ifdef CONFIG_X86_32 [BITS 32] diff --git a/arch/x86/loader/CMakeLists.txt b/arch/x86/loader/CMakeLists.txt new file mode 100644 index 000000000..0d142c166 --- /dev/null +++ b/arch/x86/loader/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.7) + +project(arch_x86_loader C ASM_NASM) + +## ASM sources + +file(GLOB ASM_SOURCES *.asm) +add_library(arch_x86_loader_asm STATIC ${ASM_SOURCES}) + +## C sources + +file(GLOB C_SOURCES *.c) +add_executable(arch_x86_loader ${C_SOURCES}) + +target_include_directories(arch_x86_loader + PRIVATE include/) + +target_compile_options(arch_x86_loader + PRIVATE -O2 -Wall -m64 -std=gnu99 -ffreestanding -mno-red-zone + -fstrength-reduce -fomit-frame-pointer -finline-functions) + +target_link_libraries(arch_x86_loader + arch_x86_loader_asm + "-T ${CMAKE_CURRENT_LIST_DIR}/link.ld" + "-z max-page-size=4096" + -Wl,--build-id=none # required because CMake links with gcc, not ld + -nostdlib) + +# tools/proxy looks for `ldhermit.elf` +set_target_properties(arch_x86_loader PROPERTIES + OUTPUT_NAME ldhermit.elf) + +add_custom_command( + TARGET arch_x86_loader POST_BUILD + # Split debug symbols into seperate file + COMMAND + ${CMAKE_OBJCOPY} --only-keep-debug + $ + $.sym + # Qemu requires 32-bit ELF + COMMAND + ${CMAKE_OBJCOPY} -O elf32-i386 --strip-debug + $) + +install(TARGETS arch_x86_loader + DESTINATION bin) + +# Show include files in IDE +file(GLOB_RECURSE ARCH_X86_LOADER_INCLUDES "include/*") +add_custom_target(arch_x86_loader_includes_ide SOURCES ${ARCH_X86_LOADER_INCLUDES}) diff --git a/arch/x86/loader/include/vga.h b/arch/x86/loader/include/vga.h deleted file mode 100644 index ff85ff996..000000000 --- a/arch/x86/loader/include/vga.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2010, Stefan Lankes, RWTH Aachen University - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __VGA_H__ -#define __VGA_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @brief Initialize VGA output and clear the screen */ -void vga_init(void); - -/** @brief Simple string output on screen. - * - * If you want a new line you will have to "\\n". - * - * @return Length of output in bytes - */ -int vga_puts(const char *text); - -/** @brief Simple character output on screen. - * - * @return The original input character casted to int - */ -int vga_putchar(unsigned char c); - -/** @brief Clear the screen */ -void vga_cls(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile deleted file mode 100644 index 984f3ec83..000000000 --- a/arch/x86/mm/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_source := memory.c vma.c page.c hbmemory.c -MODULE := arch_x86_mm - -include $(TOPDIR)/Makefile.inc diff --git a/cmake/HermitCore-Application.cmake b/cmake/HermitCore-Application.cmake new file mode 100644 index 000000000..a971c1cf4 --- /dev/null +++ b/cmake/HermitCore-Application.cmake @@ -0,0 +1,9 @@ +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore.cmake) +include_guard() + +add_compile_options(${HERMIT_APP_FLAGS}) + +# link against and include locally built libraries instead of the ones +# supplied with the toolchain, if built from top-level +link_directories(${LOCAL_PREFIX_ARCH_LIB_DIR}) +include_directories(BEFORE ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}) diff --git a/cmake/HermitCore-Configuration.cmake b/cmake/HermitCore-Configuration.cmake new file mode 100644 index 000000000..827222e0a --- /dev/null +++ b/cmake/HermitCore-Configuration.cmake @@ -0,0 +1,29 @@ +set(PACKAGE_VERSION "0.1" CACHE STRING + "HermitCore current version") + +set(MAX_CORES "512" CACHE STRING + "Maximum number of cores that can be managed") + +set(MAX_TASKS "((MAX_CORES * 2) + 2)" CACHE STRING + "Maximum number of tasks") + +set(MAX_ISLE "8" CACHE STRING + "Maximum number of NUMA isles") + +set(KERNEL_STACK_SIZE 8192 CACHE STRING + "Kernel stack size in bytes") + +set(DEFAULT_STACK_SIZE 262144 CACHE STRING + "Task stack size in bytes") + +option(DYNAMIC_TICKS + "Don't use a periodic timer event to keep track of time" ON) + +option(SAVE_FPU + "Save FPU registers on context switch" ON) + +option(HAVE_ARCH_MEMSET "Use machine specific version of memset" OFF) +option(HAVE_ARCH_MEMCPY "Use machine specific version of memcpy" OFF) +option(HAVE_ARCH_STRLEN "Use machine specific version of strlen" OFF) +option(HAVE_ARCH_STRCPY "Use machine specific version of strcpy" OFF) +option(HAVE_ARCH_STRNCPY "Use machine specific version of strncpy" OFF) diff --git a/cmake/HermitCore-Paths.cmake b/cmake/HermitCore-Paths.cmake new file mode 100644 index 000000000..da860e929 --- /dev/null +++ b/cmake/HermitCore-Paths.cmake @@ -0,0 +1,35 @@ +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Utils.cmake) +# no include guard here because we have to include this file twice to correctly +# set CMAKE_INSTALL_PREFIX + +# root of HermitCore project +set(HERMIT_ROOT ${CMAKE_CURRENT_LIST_DIR}/..) + +# set default install prefix if user doesn't specify one +if(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) + # See CMake docs for reference: + # https://cmake.org/cmake/help/v3.7/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.html + set(CMAKE_INSTALL_PREFIX /opt/hermit CACHE PATH "..." FORCE) +endif() + +# we install 3rd party libraries to an intermediate directory and relocate +# them here later when installing the whole project +if(NOT LOCAL_PREFIX_BASE_DIR) + # will be injected into external project because CMAKE_BINARY_DIR will be + # different there + set(LOCAL_PREFIX_BASE_DIR ${CMAKE_BINARY_DIR}/local_prefix) +endif() + +# during build process libraries and external projects will be deployed into +# this directory structure +set(LOCAL_PREFIX_DIR ${LOCAL_PREFIX_BASE_DIR}/${CMAKE_INSTALL_PREFIX}) +set(LOCAL_PREFIX_ARCH_DIR ${LOCAL_PREFIX_DIR}/${TARGET_ARCH}) +set(LOCAL_PREFIX_ARCH_INCLUDE_DIR ${LOCAL_PREFIX_ARCH_DIR}/include) + +# when building applications within the HermitCore project (tests, ...) they +# will link prefarably against libraries in this directory in order to test +# changes in the kernel +set(LOCAL_PREFIX_ARCH_LIB_DIR ${LOCAL_PREFIX_ARCH_DIR}/lib) + +# generated configs will be put here +set(GENERATED_CONFIG_DIR ${CMAKE_BINARY_DIR}/include) diff --git a/cmake/HermitCore-Toolchain-x86.cmake b/cmake/HermitCore-Toolchain-x86.cmake new file mode 100644 index 000000000..573ddd5c4 --- /dev/null +++ b/cmake/HermitCore-Toolchain-x86.cmake @@ -0,0 +1,25 @@ +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Utils.cmake) +include_guard() + +# let user provide a different path to the toolchain +set_default(TOOLCHAIN_BIN_DIR /opt/hermit/bin) + +set(TARGET_ARCH x86_64-hermit) + +set(CMAKE_SYSTEM_NAME Generic) + +# point CMake to our toolchain, it will auto detect C++ compiler +set(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_ARCH}-gcc) +set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_ARCH}-gfortran) +set(CMAKE_Go_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_ARCH}-gccgo) + +# hinting the prefix and location is needed in order to correctly detect +# binutils +set(_CMAKE_TOOLCHAIN_PREFIX "${TARGET_ARCH}-") +set(_CMAKE_TOOLCHAIN_LOCATION ${TOOLCHAIN_BIN_DIR}) + +option(HAVE_ARCH_MEMSET "Use machine specific version of memset" ON) +option(HAVE_ARCH_MEMCPY "Use machine specific version of memcpy" ON) +option(HAVE_ARCH_STRLEN "Use machine specific version of strlen" ON) +option(HAVE_ARCH_STRCPY "Use machine specific version of strcpy" ON) +option(HAVE_ARCH_STRNCPY "Use machine specific version of strncpy" ON) diff --git a/cmake/HermitCore-Utils.cmake b/cmake/HermitCore-Utils.cmake new file mode 100644 index 000000000..e2a590b2d --- /dev/null +++ b/cmake/HermitCore-Utils.cmake @@ -0,0 +1,142 @@ +macro(include_guard) + if(DEFINED "_INCLUDE_GUARD_${CMAKE_CURRENT_LIST_FILE}") + return() + endif() + set("_INCLUDE_GUARD_${CMAKE_CURRENT_LIST_FILE}" INCLUDED) +endmacro(include_guard) + +macro(add_kernel_module_sources MODULE SOURCE_GLOB) + file(GLOB SOURCES "${SOURCE_GLOB}") + + if("${SOURCES}" STREQUAL "") + message(FATAL_ERROR "Module '${MODULE}' has no sources") + endif() + + # make sure modules are unique, this is needed of multiple sources + # are added to the same module + list(APPEND _KERNEL_MODULES "${MODULE}") + list(REMOVE_DUPLICATES _KERNEL_MODULES) + + # append sources for module + list(APPEND "_KERNEL_SOURCES_${MODULE}" "${SOURCES}") +endmacro(add_kernel_module_sources) + + +macro(get_kernel_module_sources VAR MODULE) + set(${VAR} ${_KERNEL_SOURCES_${MODULE}}) +endmacro(get_kernel_module_sources) + + +macro(get_kernel_modules VAR) + set(${VAR} ${_KERNEL_MODULES}) +endmacro(get_kernel_modules) + + +# find program in /toolchain/dir/prefix-NAME, only supply NAME +function(find_toolchain_program NAME) + + string(TOUPPER "${NAME}" NAME_UPPER) + string(TOLOWER "${NAME}" NAME_LOWER) + + set(VARNAME "CMAKE_${NAME_UPPER}") + + find_program(${VARNAME} + NAMES ${_CMAKE_TOOLCHAIN_PREFIX}${NAME_LOWER} + HINTS ${TOOLCHAIN_BIN_DIR}) + + if(NOT ${VARNAME}) + message(FATAL_ERROR + "Cannot find ${_CMAKE_TOOLCHAIN_PREFIX}${NAME_LOWER}") + endif() +endfunction(find_toolchain_program) + + +macro(set_parent VAR VALUE) + set(${VAR} ${VALUE} PARENT_SCOPE) + set(${VAR} ${VALUE}) +endmacro(set_parent) + +function(get_cmd_variables VAR) + set(_OUTPUT "") + + get_cmake_property(vs VARIABLES) + + foreach(v ${vs}) + get_property(_HELPSTRING + CACHE ${v} + PROPERTY HELPSTRING) + if("${_HELPSTRING}" STREQUAL "No help, variable specified on the command line.") + list(APPEND _OUTPUT "${v}") + endif() + endforeach() + + set(${VAR} ${_OUTPUT} PARENT_SCOPE) +endfunction(get_cmd_variables) + +# any additional parameters will be handed over to the cmake command that the +# external project is invoked with +function(build_external NAME PATH DEPENDS) + if("${NAME}" IN_LIST PROFILE_APPS) + set(DO_PROFILING "-DPROFILING=true") + endif() + + # pass through all command line variables + get_cmd_variables(CMD_VAR_NAMES) + foreach(var ${CMD_VAR_NAMES}) + set(CMD_VARS ${CMD_VARS} -D${var}=${${var}}) + endforeach() + + ExternalProject_Add(${NAME} + SOURCE_DIR ${PATH} + BUILD_ALWAYS 1 + DEPENDS ${DEPENDS} + INSTALL_COMMAND + ${CMAKE_COMMAND} --build + --target install -- + DESTDIR=${LOCAL_PREFIX_BASE_DIR} + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -DLOCAL_PREFIX_BASE_DIR=${LOCAL_PREFIX_BASE_DIR} + -DCMAKE_INSTALL_MESSAGE=NEVER + --no-warn-unused-cli + ${DO_PROFILING} + ${CMD_VARS} + ${ARGN}) + + ExternalProject_Add_Step(${NAME} relink + COMMAND find . -maxdepth 1 -type f -executable -exec rm {} "\\\;" + DEPENDEES configure + DEPENDERS build + WORKING_DIRECTORY ) + + ExternalProject_Add_StepDependencies(${NAME} relink ${DEPENDS}) +endfunction(build_external) + + +# additional arguments are be treated as targets that will be excluded +function(install_local_targets PATH) + get_property(_TARGETS + DIRECTORY . + PROPERTY BUILDSYSTEM_TARGETS) + + if(NOT "${ARGN}" STREQUAL "") + list(REMOVE_ITEM _TARGETS ${ARGN}) + endif() + + install(TARGETS ${_TARGETS} + DESTINATION ${PATH}) + + # if there are any .map files for profiling, install them too + foreach(TARGET ${_TARGETS}) + install(FILES $.map + DESTINATION ${PATH} + OPTIONAL) + endforeach() +endfunction(install_local_targets) + +# set variable if not yet set +macro(set_default VARNAME) + if(NOT ${VARNAME}) + set(${VARNAME} ${ARGN}) + endif() +endmacro(set_default) diff --git a/cmake/HermitCore.cmake b/cmake/HermitCore.cmake new file mode 100644 index 000000000..babff2689 --- /dev/null +++ b/cmake/HermitCore.cmake @@ -0,0 +1,84 @@ +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Utils.cmake) +include_guard() + +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Paths.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Configuration.cmake) + +# scripts to detect HermitCore Go compiler +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/golang/) + +if(NOT HERMIT_ARCH) + set(HERMIT_ARCH x86) +endif() + +if(PROFILING) + # link everything against XRay + link_libraries(-lxray) + + # generate symbol map file for XRay to resolve function names + link_libraries(-Wl,-Map=$.map) + + # enable profiling with XRay + add_compile_options(-falign-functions=32 -finstrument-functions + -finstrument-functions-exclude-function-list=_mm_pause,_mm_setcsr,_mm_getcsr) + add_definitions(-DXRAY -DXRAY_DISABLE_BROWSER_INTEGRATION + -DXRAY_NO_DEMANGLE -DXRAY_ANNOTATE) +endif() + +# use default toolchain if not specified by user +if(NOT CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/HermitCore-Toolchain-${HERMIT_ARCH}.cmake) +endif() + +# NASM detection will change binary format depending on host system, but +# we only want to generate elf64 for HermitCore +# Note: Has to be set *before* ASM_NASM is enabled +set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64) + +enable_language(ASM_NASM) + +# NASM hack, because it requires include paths to have a trailing /, whereas +# CMake explicitly will remove it when adding includes the usual way +# Note: Has to be set *after* ASM_NASM is enabled +set(CMAKE_ASM_NASM_FLAGS + "${CMAKE_ASM_NASM_FLAGS} -I ${CMAKE_BINARY_DIR}/include/") + +set(HERMIT_KERNEL_FLAGS + -m64 -Wall -O2 -mno-red-zone + -fno-var-tracking-assignments -fstrength-reduce + -fomit-frame-pointer -finline-functions -ffreestanding + -nostdinc -fno-stack-protector -mno-sse -mno-mmx + -mno-sse2 -mno-3dnow -mno-avx + -fno-delete-null-pointer-checks + -falign-jumps=1 -falign-loops=1 + -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup + -fno-common -Wframe-larger-than=1024 + -fno-strict-aliasing -fno-asynchronous-unwind-tables + -fno-strict-overflow -maccumulate-outgoing-args) + +set(HERMIT_APP_FLAGS + -m64 -mtls-direct-seg-refs -O3 -ftree-vectorize) + +if(MTUNE) + set(HERMIT_KERNEL_FLAGS ${HERMIT_KERNEL_FLAGS} -mtune=${MTUNE}) + set(HERMIT_APP_FLAGS ${HERMIT_APP_FLAGS} -mtune=${MTUNE}) +endif() + +set(HERMIT_KERNEL_INCLUDES + ${CMAKE_BINARY_DIR}/include + ${HERMIT_ROOT}/include + ${HERMIT_ROOT}/arch/${HERMIT_ARCH}/include + ${HERMIT_ROOT}/lwip/src/include + ${HERMIT_ROOT}/drivers) + +# HACK: when CMake detects compilers it taints CMAKE_INSTALL_PREFIX, so in +# order to rely on that variable (we redefine it), enable all languages +# here and source pathes again. +# +# Furthermore this will produce a sensible error message if the toolchain cannot +# be found. +enable_language(C CXX Fortran Go) +include(${CMAKE_CURRENT_LIST_DIR}/HermitCore-Paths.cmake) + +# find elfedit, CMake doesn't use this program, so we have to find it ourself +find_toolchain_program(elfedit) diff --git a/cmake/README.md b/cmake/README.md new file mode 100644 index 000000000..361a24f9c --- /dev/null +++ b/cmake/README.md @@ -0,0 +1,67 @@ +HermitCore CMake build system +============================= + +HermitCore requires at least CMake version `3.7`, which (at the time of +introduction) is not yet available on most Linux distributions. We therefore +provide a script `cmake/local-cmake.sh` that fetches precompiled binaries from +the CMake project and installs them locally in `cmake/cmake-3.7*`. Only when +sourced for the first time it will download CMake, on further runs it detects +the existing download and adds it to `PATH` automatically. + +```bash +$ . cmake/local-cmake.sh +-- Downloading CMake +cmake-3.7.2-Linux-x 100%[=================>] 29,26M 837KB/s in 19s +-- Unpacking CMake +-- Local CMake v3.7.2 installed to cmake/cmake-3.7.2-Linux-x86_64 +-- Next time you source this script, no download will be neccessary +$ which cmake +/home/[...]/HermitCore/cmake/cmake-3.7.2-Linux-x86_64/bin/cmake +``` + +## Directory structure + +``` +cmake/ +├── golang +│   ├── CMakeDetermineGoCompiler.cmake +│   ├── CMakeGoCompiler.cmake.in +│   ├── CMakeGoInformation.cmake +│   └── CMakeTestGoCompiler.cmake +├── HermitCore-Application.cmake +├── HermitCore.cmake +├── HermitCore-Paths.cmake +├── HermitCore-Toolchain-x86.cmake +├── HermitCore-Utils.cmake +├── local-cmake.sh +└── README.md +``` + +## Additional language support + +Currently, HermitCore supports `C, C++, Fortran, Go` through Cmake. While the +former are supported and detected by CMake out-of-the-box, Go support has been +added manually for HermitCore. + +Adding a new language requires you to provide CMake hints where to find the +toolchain and then how to compile and link binaries. The Go support in +`cmake/golang` may serve as an example on how to add a new language. + +To finally enable the language it has to be added to CMake's module path in +`cmake/HermitCore.cmake`: + +``` +# scripts to detect HermitCore Go compiler +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/golang/) + +# scripts to detect new language +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/new-language/) +``` + + +## User applications + +You just have to include `HermitCore-Application.cmake` before the `project()` +command in your `CMakeLists.txt` in order to build applications for HermitCore. +For configuration parameters of the project, please consult the `README.md` in +the root of this repository. diff --git a/cmake/golang/CMakeDetermineGoCompiler.cmake b/cmake/golang/CMakeDetermineGoCompiler.cmake new file mode 100644 index 000000000..ae5591881 --- /dev/null +++ b/cmake/golang/CMakeDetermineGoCompiler.cmake @@ -0,0 +1,43 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +# determine the compiler to use for Go programs +# NOTE, a generator may set CMAKE_Go_COMPILER before +# loading this file to force a compiler. + +if(NOT CMAKE_Go_COMPILER) + # prefer the environment variable CC + if(NOT $ENV{GO_COMPILER} STREQUAL "") + get_filename_component(CMAKE_Go_COMPILER_INIT $ENV{GO_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Go_FLAGS_ENV_INIT) + if(CMAKE_Go_FLAGS_ENV_INIT) + set(CMAKE_Go_COMPILER_ARG1 "${CMAKE_Go_FLAGS_ENV_INIT}" CACHE STRING "First argument to Go compiler") + endif() + if(NOT EXISTS ${CMAKE_Go_COMPILER_INIT}) + message(SEND_ERROR "Could not find compiler set in environment variable GO_COMPILER:\n$ENV{GO_COMPILER}.") + endif() + endif() + + set(Go_BIN_PATH + $ENV{GOPATH} + $ENV{GOROOT} + $ENV{GOROOT}/../bin + $ENV{GO_COMPILER} + /usr/bin + /usr/local/bin + ) + # if no compiler has been specified yet, then look for one + if(CMAKE_Go_COMPILER_INIT) + set(CMAKE_Go_COMPILER ${CMAKE_Go_COMPILER_INIT} CACHE PATH "Go Compiler") + else() + find_program(CMAKE_Go_COMPILER + NAMES go + PATHS ${Go_BIN_PATH} + ) + endif() +endif() +mark_as_advanced(CMAKE_Go_COMPILER) + +# configure variables set in this file for fast reload later on +configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeGoCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeGoCompiler.cmake @ONLY) +set(CMAKE_Go_COMPILER_ENV_VAR "GO_COMPILER") diff --git a/cmake/golang/CMakeGoCompiler.cmake.in b/cmake/golang/CMakeGoCompiler.cmake.in new file mode 100644 index 000000000..ece6be798 --- /dev/null +++ b/cmake/golang/CMakeGoCompiler.cmake.in @@ -0,0 +1,11 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +set(CMAKE_Go_COMPILER "@CMAKE_Go_COMPILER@") +set(CMAKE_Go_COMPILER_LOADED 1) + +set(CMAKE_Go_SOURCE_FILE_EXTENSIONS go) +set(CMAKE_Go_LINKER_PREFERENCE 40) +set(CMAKE_Go_OUTPUT_EXTENSION .6) +set(CMAKE_Go_OUTPUT_EXTENSION_REPLACE 1) +set(CMAKE_Go_COMPILER_ENV_VAR "GO_COMPILER") diff --git a/cmake/golang/CMakeGoInformation.cmake b/cmake/golang/CMakeGoInformation.cmake new file mode 100644 index 000000000..e53558fa7 --- /dev/null +++ b/cmake/golang/CMakeGoInformation.cmake @@ -0,0 +1,30 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +if(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +endif() + +if(CMAKE_USER_MAKE_RULES_OVERRIDE_Go) + # Save the full path of the file so try_compile can use it. + include(${CMAKE_USER_MAKE_RULES_OVERRIDE_Go} RESULT_VARIABLE _override) + set(CMAKE_USER_MAKE_RULES_OVERRIDE_Go "${_override}") +endif() + +# refer: /usr/share/cmake-3.7/Modules/CMakeCInformation.cmake + +if(NOT CMAKE_Go_COMPILE_OBJECT) + set(CMAKE_Go_COMPILE_OBJECT " -o -c ") +endif() + +if(NOT CMAKE_Go_LINK_EXECUTABLE) + set(CMAKE_Go_LINK_EXECUTABLE " -pthread -o ") +endif() diff --git a/cmake/golang/CMakeTestGoCompiler.cmake b/cmake/golang/CMakeTestGoCompiler.cmake new file mode 100644 index 000000000..d23b8b537 --- /dev/null +++ b/cmake/golang/CMakeTestGoCompiler.cmake @@ -0,0 +1,4 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +set(CMAKE_Go_COMPILER_WORKS 1 CACHE INTERNAL "") diff --git a/cmake/local-cmake.sh b/cmake/local-cmake.sh new file mode 100644 index 000000000..4dee60c2f --- /dev/null +++ b/cmake/local-cmake.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# which version to fetch +MAJOR="3.7" +MINOR="2" +PLATFORM="Linux-x86_64" + +# assemble url for desired version +URL="https://cmake.org/files/v${MAJOR}/cmake-${MAJOR}.${MINOR}-${PLATFORM}.tar.gz" + +ARCHIVE="$(basename ${URL})" +DIR="$(basename ${ARCHIVE} .tar.gz)" + + +relpath() { + # workaround because Ubuntu seems to use an ancient realpath version + # https://stackoverflow.com/questions/2564634/convert-absolute-path-into-relative-path-given-a-current-directory-using-bash#comment12808306_7305217 + python -c "import os.path; print(os.path.relpath('${2:-$PWD}','$1'))"; +} + +HERMIT_TOP="$(git rev-parse --show-toplevel)" +HERMIT_CMAKE="${HERMIT_TOP}/cmake" +CMAKE_DIR="${HERMIT_CMAKE}/${DIR}" +CMAKE_DIR_REL="$(relpath ${HERMIT_TOP} ${CMAKE_DIR})" + +# make sure we're sourced, not executed +if [ "$0" = "$BASH_SOURCE" ] +then + echo "You have to source this script:" + echo "\$ . $0" + exit +fi + +# quit if already in path +echo "$PATH" | grep "${CMAKE_DIR_REL}" &>/dev/null && return + +# check if already installed +if which cmake &> /dev/null ; then + if cmake --version | grep "cmake version ${MAJOR}.${MINOR}" &> /dev/null; then + echo "You already have CMake ${MAJOR}.${MINOR}" + return + fi +fi + +if [ ! -d "${CMAKE_DIR}" ] +then + echo "-- Downloading CMake" + wget "${URL}" -O "${ARCHIVE}" || + (echo "Cannot download CMake"; return) + + echo "-- Unpacking CMake" + tar -C "${HERMIT_CMAKE}" -xf "${ARCHIVE}" || + (echo "Cannot unpack CMake archive"; return) + + # delete temporary archive again + rm -f "${ARCHIVE}" + + # add cmake dir to gitignore + GITIGNORE="${HERMIT_TOP}/.gitignore" + if ! grep "${CMAKE_DIR_REL}" "${GITIGNORE}" &>/dev/null + then + echo "${CMAKE_DIR_REL}/*" >> "${GITIGNORE}" + fi + + echo "-- Local CMake v${MAJOR}.${MINOR} installed to ${CMAKE_DIR_REL}" + echo "-- Next time you source this script, no download will be neccessary" +fi + +export PATH="${CMAKE_DIR}/bin:${PATH}" diff --git a/configure b/configure deleted file mode 100755 index 012420ca5..000000000 --- a/configure +++ /dev/null @@ -1,4131 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for HermitCore 0.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: slankes@eonerc.rwth-aachen.de about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='HermitCore' -PACKAGE_TARNAME='HermitCore' -PACKAGE_VERSION='0.1' -PACKAGE_STRING='HermitCore 0.1' -PACKAGE_BUGREPORT='slankes@eonerc.rwth-aachen.de' -PACKAGE_URL='http://www.hermitcore.org' - -ac_unique_file="kernel/main.c" -ac_subst_vars='LTLIBOBJS -LIBOBJS -TOOLCHAIN -ARCH_OPT -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -QEMU -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_mtune -with_toolchain -with_max_cores -with_max_tasks -with_kernel_stack_size -with_default_stack_size -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures HermitCore 0.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/HermitCore] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of HermitCore 0.1:";; - esac - cat <<\_ACEOF - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-mtune=ARCH enable tuning for a specific architecture - --with-toolchain build also the whole HermitCore toolchain - --with-max-cores=N specify the maximum number of cores - --with-max-tasks=N specify the maximum number of running tasks - --with-kernel-stack-size=SIZE - specify the size of the kernel stack - --with-default-stack-size=SIZE - specify the default stack size - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -HermitCore home page: . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -HermitCore configure 0.1 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by HermitCore $as_me 0.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -for ac_prog in qemu-system-x86_64 -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_QEMU+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$QEMU"; then - ac_cv_prog_QEMU="$QEMU" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_QEMU="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -QEMU=$ac_cv_prog_QEMU -if test -n "$QEMU"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QEMU" >&5 -$as_echo "$QEMU" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$QEMU" && break -done - - -ac_config_headers="$ac_config_headers include/hermit/config.h" - - -# Checks for programs. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -# Checks for libraries. - -# Checks for header files. - -# Checks for typedefs, structures, and compiler characteristics. - -# Checks for library functions. - -# define eduOS specific constants - -$as_echo "#define HAVE_ARCH_MEMSET 1" >>confdefs.h - - -$as_echo "#define HAVE_ARCH_MEMCPY 1" >>confdefs.h - - -$as_echo "#define HAVE_ARCH_STRLEN 1" >>confdefs.h - - -$as_echo "#define HAVE_ARCH_STRCPY 1" >>confdefs.h - - -$as_echo "#define HAVE_ARCH_STRNCPY 1" >>confdefs.h - - -$as_echo "#define MAX_ISLE 8" >>confdefs.h - - -$as_echo "#define MAX_FNAME 128" >>confdefs.h - - -$as_echo "#define VIDEO_MEM_ADDR 0xB8000" >>confdefs.h - - -$as_echo "#define DYNAMIC_TICKS 1" >>confdefs.h - -#AC_DEFINE(SAVE_FPU, 1, Set task switched flag during a context switch); - - -# Check whether --with-mtune was given. -if test "${with_mtune+set}" = set; then : - withval=$with_mtune; if test x"$withval" != x ; then - ARCH_OPT="-mtune=$withval -march=$withval" - fi -else - ARCH_OPT= -fi - - - - -# Check whether --with-toolchain was given. -if test "${with_toolchain+set}" = set; then : - withval=$with_toolchain; TOOLCHAIN=1 -else - TOOLCHAIN=0 -fi - - - - -# Check whether --with-max-cores was given. -if test "${with_max_cores+set}" = set; then : - withval=$with_max_cores; -fi - -if test "x$with_max_cores" != x; then - -cat >>confdefs.h <<_ACEOF -#define MAX_CORES $with_max_tasks -_ACEOF - -else - -$as_echo "#define MAX_CORES 512" >>confdefs.h - -fi - - -# Check whether --with-max-tasks was given. -if test "${with_max_tasks+set}" = set; then : - withval=$with_max_tasks; -fi - -if test "x$with_max_tasks" != x; then - -cat >>confdefs.h <<_ACEOF -#define MAX_TASKS $with_max_tasks -_ACEOF - -else - -$as_echo "#define MAX_TASKS (MAX_CORES*2+2)" >>confdefs.h - -fi - - -# Check whether --with-kernel-stack-size was given. -if test "${with_kernel_stack_size+set}" = set; then : - withval=$with_kernel_stack_size; -fi - -if test "x$with_kernel_stack_size" != x; then - -cat >>confdefs.h <<_ACEOF -#define KERNEL_STACK_SIZE $with_stack_size -_ACEOF - -else - -$as_echo "#define KERNEL_STACK_SIZE 8192" >>confdefs.h - -fi - - - -# Check whether --with-default-stack-size was given. -if test "${with_default_stack_size+set}" = set; then : - withval=$with_default_stack_size; -fi - -if test "x$with_default_stack_size" != x; then - -cat >>confdefs.h <<_ACEOF -#define DEFAULT_STACK_SIZE $with_default_stack_size -_ACEOF - -else - -$as_echo "#define DEFAULT_STACK_SIZE 262144" >>confdefs.h - -fi - -ac_config_files="$ac_config_files Makefile tools/Makefile usr/ircce/Makefile usr/xray/Makefile usr/libomp/Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by HermitCore $as_me 0.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to . -HermitCore home page: ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -HermitCore config.status 0.1 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "include/hermit/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/hermit/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; - "usr/ircce/Makefile") CONFIG_FILES="$CONFIG_FILES usr/ircce/Makefile" ;; - "usr/xray/Makefile") CONFIG_FILES="$CONFIG_FILES usr/xray/Makefile" ;; - "usr/libomp/Makefile") CONFIG_FILES="$CONFIG_FILES usr/libomp/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 3ef246cae..000000000 --- a/configure.ac +++ /dev/null @@ -1,76 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.69) -AC_INIT(HermitCore, 0.1, slankes@eonerc.rwth-aachen.de, HermitCore, http://www.hermitcore.org) -AC_CHECK_PROGS(QEMU, qemu-system-x86_64) -AC_CONFIG_SRCDIR(kernel/main.c) -AC_CONFIG_HEADERS(include/hermit/config.h) - -# Checks for programs. -AC_PROG_CC -AC_PROG_INSTALL - -# Checks for libraries. - -# Checks for header files. - -# Checks for typedefs, structures, and compiler characteristics. - -# Checks for library functions. - -# define eduOS specific constants -AC_DEFINE(HAVE_ARCH_MEMSET, 1, Define to use machine specific version of memset) -AC_DEFINE(HAVE_ARCH_MEMCPY, 1, Define to use machine specific version of memcpy) -AC_DEFINE(HAVE_ARCH_STRLEN, 1, Define to use machine specific version of strlen) -AC_DEFINE(HAVE_ARCH_STRCPY, 1, Define to use machine specific version of strcpy) -AC_DEFINE(HAVE_ARCH_STRNCPY, 1, Define to use machine specific version of strncpy) -AC_DEFINE(MAX_ISLE, 8, Define the maximum number of isles / numa nodes) -AC_DEFINE(MAX_FNAME, 128, Define the maximum length of a file name) -AC_DEFINE(VIDEO_MEM_ADDR, 0xB8000, Definition of the VGA address) -AC_DEFINE(DYNAMIC_TICKS, 1, Use a dynamic tick instead of a static) -#AC_DEFINE(SAVE_FPU, 1, Set task switched flag during a context switch); - -AC_ARG_WITH([mtune], - [AS_HELP_STRING([--with-mtune=ARCH], - [enable tuning for a specific architecture])], - [if test x"$withval" != x ; then - ARCH_OPT="-mtune=$withval -march=$withval" - fi], - [ARCH_OPT=]) -AC_SUBST(ARCH_OPT) - -AC_ARG_WITH([toolchain], [AS_HELP_STRING([--with-toolchain], [build also the whole HermitCore toolchain])], [TOOLCHAIN=1], [TOOLCHAIN=0]) -AC_SUBST(TOOLCHAIN) - -AC_ARG_WITH(max-cores, [AS_HELP_STRING([--with-max-cores=N], [specify the maximum number of cores])]) -if test "x$with_max_cores" != x; then -AC_DEFINE_UNQUOTED(MAX_CORES, $with_max_tasks, Define the maximum number of cores) -else -AC_DEFINE(MAX_CORES, 512, Define the maximum number of cores) -fi - -AC_ARG_WITH(max-tasks, [AS_HELP_STRING([--with-max-tasks=N], [specify the maximum number of running tasks])]) -if test "x$with_max_tasks" != x; then -AC_DEFINE_UNQUOTED(MAX_TASKS, $with_max_tasks, Define the maximum number of running tasks) -else -AC_DEFINE(MAX_TASKS, (MAX_CORES*2+2), Define the maximum number of running tasks) -fi - -AC_ARG_WITH(kernel-stack-size, [AS_HELP_STRING([--with-kernel-stack-size=SIZE], [specify the size of the kernel stack])]) -if test "x$with_kernel_stack_size" != x; then -AC_DEFINE_UNQUOTED(KERNEL_STACK_SIZE, $with_stack_size, Define the size of the kernel stack) -else -AC_DEFINE(KERNEL_STACK_SIZE, 8192, Define the size of the kernel stack) -fi - - -AC_ARG_WITH(default-stack-size, [AS_HELP_STRING([--with-default-stack-size=SIZE], [specify the default stack size])]) -if test "x$with_default_stack_size" != x; then -AC_DEFINE_UNQUOTED(DEFAULT_STACK_SIZE, $with_default_stack_size, Define the default stack size) -else -AC_DEFINE(DEFAULT_STACK_SIZE, 262144, Define the default stack size) -fi - -AC_CONFIG_FILES(Makefile tools/Makefile usr/ircce/Makefile usr/xray/Makefile usr/libomp/Makefile) -AC_OUTPUT diff --git a/debian/README.Debian b/debian/README.Debian deleted file mode 100644 index 93b6f3f4f..000000000 --- a/debian/README.Debian +++ /dev/null @@ -1,6 +0,0 @@ -libhermit for Debian -------------------- - - - - -- Stefan Lankes Sun, 08 Jan 2017 19:14:48 +0100 diff --git a/debian/README.source b/debian/README.source deleted file mode 100644 index 16fea0edf..000000000 --- a/debian/README.source +++ /dev/null @@ -1,10 +0,0 @@ -libhermit for Debian -------------------- - - - - - - -- Stefan Lankes Sun, 08 Jan 2017 19:14:48 +0100 - diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index ea118c685..000000000 --- a/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -libhermit (0.1-1) unstable; urgency=medium - - * Initial release (Closes: #nnnn) - - -- Stefan Lankes Sun, 08 Jan 2017 19:14:48 +0100 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index ec635144f..000000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/debian/control b/debian/control deleted file mode 100644 index d53090e2a..000000000 --- a/debian/control +++ /dev/null @@ -1,15 +0,0 @@ -Source: libhermit -Section: devel -Priority: optional -Maintainer: Stefan Lankes -Build-Depends: debhelper (>=9),autotools-dev -Standards-Version: 3.9.6 -Homepage: http://www.hermitcore.org -#Vcs-Git: git://anonscm.debian.org/collab-maint/libhermit.git -#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/libhermit.git - -Package: libhermit -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: A Unikernel for Extreme-Scale Computing - diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 402cae500..000000000 --- a/debian/copyright +++ /dev/null @@ -1,54 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: libhermit -Source: http://www.hermitcore.org - -Files: * -Copyright: 2010-2017 Stefan Lankes -License: Revised BSD License - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# If you want to use GPL v2 or later for the /debian/* files use -# the following clauses, or change it to suit. Delete these two lines -Files: debian/* -Copyright: 2017 Stefan Lankes -License: GPL-2+ - This package is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - . - This package 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 - . - On Debian systems, the complete text of the GNU General - Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". - -# Please also look if there are files or directories which have a -# different copyright/license attached and list them here. -# Please avoid picking licenses with terms that are more restrictive than the -# packaged work, as it may make Debian's contributions unacceptable upstream. diff --git a/debian/init.d.ex b/debian/init.d.ex deleted file mode 100644 index c78626002..000000000 --- a/debian/init.d.ex +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing. -if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then - set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script -fi -### BEGIN INIT INFO -# Provides: libhermit -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: -# Description: -# <...> -# <...> -### END INIT INFO - -# Author: Stefan Lankes - -DESC="libhermit" -DAEMON=/usr/bin/libhermit - -# This is an example to start a single forking daemon capable of writing -# a pid file. To get other behaviors, implement do_start(), do_stop() or -# other functions to override the defaults in /lib/init/init-d-script. -# See also init-d-script(5) diff --git a/debian/libhermit-docs.docs b/debian/libhermit-docs.docs deleted file mode 100644 index efea0a6a2..000000000 --- a/debian/libhermit-docs.docs +++ /dev/null @@ -1,2 +0,0 @@ -README.Debian -README.source diff --git a/debian/libhermit.cron.d.ex b/debian/libhermit.cron.d.ex deleted file mode 100644 index 7b16d8228..000000000 --- a/debian/libhermit.cron.d.ex +++ /dev/null @@ -1,4 +0,0 @@ -# -# Regular cron jobs for the libhermit package -# -0 4 * * * root [ -x /usr/bin/libhermit_maintenance ] && /usr/bin/libhermit_maintenance diff --git a/debian/libhermit.default.ex b/debian/libhermit.default.ex deleted file mode 100644 index 112ad9b7d..000000000 --- a/debian/libhermit.default.ex +++ /dev/null @@ -1,10 +0,0 @@ -# Defaults for libhermit initscript -# sourced by /etc/init.d/libhermit -# installed at /etc/default/libhermit by the maintainer scripts - -# -# This is a POSIX shell fragment -# - -# Additional options that are passed to the Daemon. -DAEMON_OPTS="" diff --git a/debian/libhermit.doc-base.EX b/debian/libhermit.doc-base.EX deleted file mode 100644 index 98a0769f9..000000000 --- a/debian/libhermit.doc-base.EX +++ /dev/null @@ -1,20 +0,0 @@ -Document: libhermit -Title: Debian libhermit Manual -Author: -Abstract: This manual describes what libhermit is - and how it can be used to - manage online manuals on Debian systems. -Section: unknown - -Format: debiandoc-sgml -Files: /usr/share/doc/libhermit/libhermit.sgml.gz - -Format: postscript -Files: /usr/share/doc/libhermit/libhermit.ps.gz - -Format: text -Files: /usr/share/doc/libhermit/libhermit.text.gz - -Format: HTML -Index: /usr/share/doc/libhermit/html/index.html -Files: /usr/share/doc/libhermit/html/*.html diff --git a/debian/manpage.1.ex b/debian/manpage.1.ex deleted file mode 100644 index 9f73ea22f..000000000 --- a/debian/manpage.1.ex +++ /dev/null @@ -1,56 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" (C) Copyright 2017 Stefan Lankes , -.\" -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH Libhermit SECTION "January 8 2017" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -libhermit \- program to do something -.SH SYNOPSIS -.B libhermit -.RI [ options ] " files" ... -.br -.B bar -.RI [ options ] " files" ... -.SH DESCRIPTION -This manual page documents briefly the -.B libhermit -and -.B bar -commands. -.PP -.\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invode bold face and italics, -.\" respectively. -\fBlibhermit\fP is a program that... -.SH OPTIONS -These programs follow the usual GNU command line syntax, with long -options starting with two dashes (`-'). -A summary of options is included below. -For a complete description, see the Info files. -.TP -.B \-h, \-\-help -Show summary of options. -.TP -.B \-v, \-\-version -Show version of program. -.SH SEE ALSO -.BR bar (1), -.BR baz (1). -.br -The programs are documented fully by -.IR "The Rise and Fall of a Fooish Bar" , -available via the Info system. diff --git a/debian/manpage.sgml.ex b/debian/manpage.sgml.ex deleted file mode 100644 index ed5de58e1..000000000 --- a/debian/manpage.sgml.ex +++ /dev/null @@ -1,154 +0,0 @@ - manpage.1'. You may view - the manual page with: `docbook-to-man manpage.sgml | nroff -man | - less'. A typical entry in a Makefile or Makefile.am is: - -manpage.1: manpage.sgml - docbook-to-man $< > $@ - - - The docbook-to-man binary is found in the docbook-to-man package. - Please remember that if you create the nroff version in one of the - debian/rules file targets (such as build), you will need to include - docbook-to-man in your Build-Depends control field. - - --> - - - FIRSTNAME"> - SURNAME"> - - January 8 2017"> - - SECTION"> - slankes@eonerc.rwth-aachen.de"> - - Libhermit"> - - - Debian"> - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2003 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - program to do something - - - - &dhpackage; - - - - - - - - DESCRIPTION - - This manual page documents briefly the - &dhpackage; and bar - commands. - - This manual page was written for the &debian; distribution - because the original program does not have a manual page. - Instead, it has documentation in the &gnu; - Info format; see below. - - &dhpackage; is a program that... - - - - OPTIONS - - These programs follow the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. For a complete description, see the - Info files. - - - - - - - - Show summary of options. - - - - - - - - Show version of program. - - - - - - SEE ALSO - - bar (1), baz (1). - - The programs are documented fully by The Rise and - Fall of a Fooish Bar available via the - Info system. - - - AUTHOR - - This manual page was written by &dhusername; &dhemail; for - the &debian; system (and may be used by others). Permission is - granted to copy, distribute and/or modify this document under - the terms of the &gnu; General Public License, Version 2 any - later version published by the Free Software Foundation. - - - On Debian systems, the complete text of the GNU General Public - License can be found in /usr/share/common-licenses/GPL. - - - -
- - diff --git a/debian/manpage.xml.ex b/debian/manpage.xml.ex deleted file mode 100644 index 5f9bc4015..000000000 --- a/debian/manpage.xml.ex +++ /dev/null @@ -1,291 +0,0 @@ - -.
will be generated. You may view the -manual page with: nroff -man .
| less'. A typical entry -in a Makefile or Makefile.am is: - -DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl -XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" - -manpage.1: manpage.xml - $(XP) $(DB2MAN) $< - -The xsltproc binary is found in the xsltproc package. The XSL files are in -docbook-xsl. A description of the parameters you can use can be found in the -docbook-xsl-doc-* packages. Please remember that if you create the nroff -version in one of the debian/rules file targets (such as build), you will need -to include xsltproc and docbook-xsl in your Build-Depends control field. -Alternatively use the xmlto command/package. That will also automatically -pull in xsltproc and docbook-xsl. - -Notes for using docbook2x: docbook2x-man does not automatically create the -AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as - ... . - -To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections -read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be -found in the docbook-xsl-doc-html package. - -Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` - -General documentation about man-pages and man-page-formatting: -man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ - ---> - - - - - - - - - - - - - -]> - - - - &dhtitle; - &dhpackage; - - - &dhfirstname; - &dhsurname; - Wrote this manpage for the Debian system. -
- &dhemail; -
-
-
- - 2007 - &dhusername; - - - This manual page was written for the Debian system - (and may be used by others). - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU General Public License, - Version 2 or (at your option) any later version published by - the Free Software Foundation. - On Debian systems, the complete text of the GNU General Public - License can be found in - /usr/share/common-licenses/GPL. - -
- - &dhucpackage; - &dhsection; - - - &dhpackage; - program to do something - - - - &dhpackage; - - - - - - - - - this - - - - - - - - this - that - - - - - &dhpackage; - - - - - - - - - - - - - - - - - - - DESCRIPTION - This manual page documents briefly the - &dhpackage; and bar - commands. - This manual page was written for the Debian distribution - because the original program does not have a manual page. - Instead, it has documentation in the GNU - info - 1 - format; see below. - &dhpackage; is a program that... - - - OPTIONS - The program follows the usual GNU command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. For a complete description, see the - - info - 1 - files. - - - - - - - Does this and that. - - - - - - - Show summary of options. - - - - - - - Show version of program. - - - - - - FILES - - - /etc/foo.conf - - The system-wide configuration file to control the - behaviour of &dhpackage;. See - - foo.conf - 5 - for further details. - - - - ${HOME}/.foo.conf - - The per-user configuration file to control the - behaviour of &dhpackage;. See - - foo.conf - 5 - for further details. - - - - - - ENVIRONMENT - - - FOO_CONF - - If used, the defined file is used as configuration - file (see also ). - - - - - - DIAGNOSTICS - The following diagnostics may be issued - on stderr: - - - Bad configuration file. Exiting. - - The configuration file seems to contain a broken configuration - line. Use the option, to get more info. - - - - - &dhpackage; provides some return codes, that can - be used in scripts: - - Code - Diagnostic - - 0 - Program exited successfully. - - - 1 - The configuration file seems to be broken. - - - - - - BUGS - The program is currently limited to only work - with the foobar library. - The upstreams BTS can be found - at . - - - SEE ALSO - - - bar - 1 - , - baz - 1 - , - foo.conf - 5 - - The programs are documented fully by The Rise and - Fall of a Fooish Bar available via the - info - 1 - system. - -
- diff --git a/debian/menu.ex b/debian/menu.ex deleted file mode 100644 index bfe8b672d..000000000 --- a/debian/menu.ex +++ /dev/null @@ -1,2 +0,0 @@ -?package(libhermit):needs="X11|text|vc|wm" section="Applications/see-menu-manual"\ - title="libhermit" command="/usr/bin/libhermit" diff --git a/debian/postinst.ex b/debian/postinst.ex deleted file mode 100644 index 35db68281..000000000 --- a/debian/postinst.ex +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# postinst script for libhermit -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `configure' -# * `abort-upgrade' -# * `abort-remove' `in-favour' -# -# * `abort-remove' -# * `abort-deconfigure' `in-favour' -# `removing' -# -# for details, see https://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - configure) - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - ;; - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/postrm.ex b/debian/postrm.ex deleted file mode 100644 index 9b1da3ff0..000000000 --- a/debian/postrm.ex +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -# postrm script for libhermit -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `remove' -# * `purge' -# * `upgrade' -# * `failed-upgrade' -# * `abort-install' -# * `abort-install' -# * `abort-upgrade' -# * `disappear' -# -# for details, see https://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) - ;; - - *) - echo "postrm called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/preinst.ex b/debian/preinst.ex deleted file mode 100644 index 32decc7b5..000000000 --- a/debian/preinst.ex +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# preinst script for libhermit -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `install' -# * `install' -# * `upgrade' -# * `abort-upgrade' -# for details, see https://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - install|upgrade) - ;; - - abort-upgrade) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/prerm.ex b/debian/prerm.ex deleted file mode 100644 index 3a5533780..000000000 --- a/debian/prerm.ex +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# prerm script for libhermit -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `remove' -# * `upgrade' -# * `failed-upgrade' -# * `remove' `in-favour' -# * `deconfigure' `in-favour' -# `removing' -# -# for details, see https://www.debian.org/doc/debian-policy/ or -# the debian-policy package - - -case "$1" in - remove|upgrade|deconfigure) - ;; - - failed-upgrade) - ;; - - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 9f0e5f692..000000000 --- a/debian/rules +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/make -f -# See debhelper(7) (uncomment to enable) -# output every command that modifies files on the build system. -#export DH_VERBOSE = 1 - -# see FEATURE AREAS in dpkg-buildflags(1) -#export DEB_BUILD_MAINT_OPTIONS = hardening=+all -export DEB_BUILD_OPTS = nocheck - -%: - dh $@ #--parallel - -override_dh_auto_configure: - ./configure --prefix=`pwd`/debian/libhermit/opt/hermit - -override_dh_auto_build: - # this target is somehow not executed by dh_auto_build and thus the build fails - make arch/x86/kernel/boot.h - - dh_auto_build - make libs - -override_dh_auto_test: - @echo "tests are disabled" - -override_dh_auto_install: - #make install_libhermit - make install - - # delete unneded files that would cause conflicts - rm -rf `-pwd`/debian/libhermit/opt/hermit/share/info/dir - -override_dh_strip: - # stripping will incorrectly use system tools for stripping, generating - # wrong binary format, i.e. not for HermitCore - @echo "No stripping" diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 163aaf8d8..000000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/debian/watch.ex b/debian/watch.ex deleted file mode 100644 index 8dac5167c..000000000 --- a/debian/watch.ex +++ /dev/null @@ -1,39 +0,0 @@ -# Example watch control file for uscan -# Rename this file to "watch" and then you can run the "uscan" command -# to check for upstream updates and more. -# See uscan(1) for format - -# Compulsory line, this is a version 4 file -version=4 - -# PGP signature mangle, so foo.tar.gz has foo.tar.gz.sig -#opts="pgpsigurlmangle=s%$%.sig%" - -# HTTP site (basic) -#http://example.com/downloads.html \ -# files/libhermit-([\d\.]+)\.tar\.gz debian uupdate - -# Uncommment to examine a FTP server -#ftp://ftp.example.com/pub/libhermit-(.*)\.tar\.gz debian uupdate - -# SourceForge hosted projects -# http://sf.net/libhermit/ libhermit-(.*)\.tar\.gz debian uupdate - -# GitHub hosted projects -#opts="filenamemangle="s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%-$1.tar.gz%" \ -# https://github.com//libhermit/tags \ -# (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate - -# PyPI -# https://pypi.python.org/packages/source//libhermit/ \ -# libhermit-(.+)\.tar\.gz debian uupdate - -# Direct Git -# opts="mode=git" http://git.example.com/libhermit.git \ -# refs/tags/v([\d\.]+) debian uupdate - - - - -# Uncomment to find new files on GooglePages -# http://example.googlepages.com/foo.html libhermit-(.*)\.tar\.gz diff --git a/drivers/net/Makefile b/drivers/net/Makefile deleted file mode 100644 index e7dbc74a4..000000000 --- a/drivers/net/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_source := mmnif.c util.c e1000.c rtl8139.c -MODULE := drivers_net - -include $(TOPDIR)/Makefile.inc diff --git a/include/hermit/CMakeLists.txt b/include/hermit/CMakeLists.txt new file mode 100644 index 000000000..921ca40f1 --- /dev/null +++ b/include/hermit/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.7) + +configure_file(config.h.in config.h) +configure_file(config.asm.in config.asm) + +# Show include files in IDE +file(GLOB_RECURSE HERMIT_INCLUDES "*") +add_custom_target(hermit_includes_ide SOURCES ${HERMIT_INCLUDES}) diff --git a/include/hermit/config.asm.in b/include/hermit/config.asm.in new file mode 100644 index 000000000..15211359e --- /dev/null +++ b/include/hermit/config.asm.in @@ -0,0 +1,3 @@ +%define MAX_CORES @MAX_CORES@ +%define KERNEL_STACK_SIZE @KERNEL_STACK_SIZE@ +%define SAVE_FPU @SAVE_FPU@ diff --git a/include/hermit/config.h.in b/include/hermit/config.h.in old mode 100755 new mode 100644 index cad09cbbf..60a04870f --- a/include/hermit/config.h.in +++ b/include/hermit/config.h.in @@ -1,50 +1,25 @@ -/* include/hermit/config.h.in. Generated from configure.ac by autoheader. */ +#cmakedefine MAX_CORES (@MAX_CORES@) +#cmakedefine MAX_TASKS (@MAX_TASKS@) +#cmakedefine MAX_ISLE (@MAX_ISLE@) +#cmakedefine KERNEL_STACK_SIZE (@KERNEL_STACK_SIZE@) +#cmakedefine DEFAULT_STACK_SIZE (@DEFAULT_STACK_SIZE@) +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" -#undef MAX_CORES -#undef MAX_TASKS -#undef MAX_ISLE -#undef MAX_FNAME -#undef SAVE_FPU -#undef VIDEO_MEM_ADDR +#cmakedefine SAVE_FPU + +#cmakedefine DYNAMIC_TICKS /* Define to use machine specific version of memcpy */ -#undef HAVE_ARCH_MEMCPY +#cmakedefine HAVE_ARCH_MEMCPY /* Define to use machine specific version of memset */ -#undef HAVE_ARCH_MEMSET +#cmakedefine HAVE_ARCH_MEMSET /* Define to use machine specific version of strcpy */ -#undef HAVE_ARCH_STRCPY +#cmakedefine HAVE_ARCH_STRCPY /* Define to use machine specific version of strlen */ -#undef HAVE_ARCH_STRLEN +#cmakedefine HAVE_ARCH_STRLEN /* Define to use machine specific version of strncpy */ -#undef HAVE_ARCH_STRNCPY - -/* Define the stack size of the idle task */ -#undef KERNEL_STACK_SIZE - -/* Define the default stack size */ -#undef DEFAULT_STACK_SIZE - -/* Define the maximum number of running tasks */ -#undef MAX_TASKS - -/* 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 +#cmakedefine HAVE_ARCH_STRNCPY diff --git a/install-sh b/install-sh deleted file mode 100755 index 0b0fdcbba..000000000 --- a/install-sh +++ /dev/null @@ -1,501 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2013-12-25.23; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -is_target_a_directory=possibly - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - dstdir=`dirname "$dst"` - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - set +f && - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/kernel/Makefile b/kernel/Makefile deleted file mode 100644 index 1082e2f15..000000000 --- a/kernel/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_source := main.c tasks.c syscall.c timer.c -MODULE := kernel - -include $(TOPDIR)/Makefile.inc diff --git a/libkern/Makefile b/libkern/Makefile deleted file mode 100644 index 3e29d4408..000000000 --- a/libkern/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_source := string.c stdio.c printf.c sprintf.c strtol.c strtoul.c strstr.c -MODULE := libkern - -include $(TOPDIR)/Makefile.inc diff --git a/mm/Makefile b/mm/Makefile deleted file mode 100644 index 5d098d310..000000000 --- a/mm/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -C_source := malloc.c vma.c -MODULE := mm - -include $(TOPDIR)/Makefile.inc diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 000000000..0ee275b8e --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.7) +project(hermit_tools) + +include(../cmake/HermitCore-Paths.cmake) + +add_compile_options(-std=c99) + +add_executable(proxy proxy.c uhyve.c) +target_link_libraries(proxy -pthread) + +install(TARGETS proxy + DESTINATION bin) + +install(FILES init.sh + DESTINATION tools) + +# Show include files in IDE +file(GLOB_RECURSE TOOLS_INCLUDES "*.h") +add_custom_target(tools_includes_ide SOURCES ${TOOLS_INCLUDES}) diff --git a/tools/Makefile.in b/tools/Makefile.in deleted file mode 100644 index 14d3fe0cc..000000000 --- a/tools/Makefile.in +++ /dev/null @@ -1,47 +0,0 @@ -MAKE = make -CC = gcc -CP = cp -CFLAGS = -O2 -Wall -std=gnu99 $(ARCH_OPT) -PROXYFILES = proxy init.sh $(shell find ../usr/tests ../usr/benchmarks ../usr/openmpbench -type f -executable) - -prefix = @prefix@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ - -# Prettify output -V = 0 -ifeq ($V,0) - Q = @ - P = > /dev/null -endif - -# other implicit rules -%.o : %.c - @echo [CC] $@ - $Q$(CC) -c $(CFLAGS) -pthread -o $@ $< - -all: proxy - -proxy: proxy.o uhyve.o - @echo [LD] $@ - $Q$(CC) $(CFLAGS) -pthread -o $@ $< uhyve.o - -clean: - @echo Cleaning tools - $Q$(RM) -rf *.o *~ *.bin *.obj - -install: proxy - @echo Install tools - $Q$(INSTALL_PROGRAM) -d $(prefix)/bin - $Q$(INSTALL_PROGRAM) proxy $(prefix)/bin - $Q$(INSTALL_DATA) ../arch/x86/loader/ldhermit.elf $(prefix)/bin - -veryclean: clean - -depend: - $(CC) -MM $(CFLAGS) *.c > Makefile.dep - --include Makefile.dep -# DO NOT DELETE diff --git a/tools/init.sh b/tools/init.sh index 624d4d447..8e2093a64 100755 --- a/tools/init.sh +++ b/tools/init.sh @@ -1,6 +1,6 @@ #!/bin/sh -PROXY=/hermit/tools/proxy +PROXY=/hermit/bin/proxy ELF_OSABI_OFFSET=7 ELF_OSABI="\\x42" diff --git a/usr/benchmarks/CMakeLists.txt b/usr/benchmarks/CMakeLists.txt new file mode 100644 index 000000000..9aae06bcb --- /dev/null +++ b/usr/benchmarks/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore-Application.cmake) + +project(hermit_benchmarks C) + +add_executable(basic basic.c) +target_link_libraries(basic pthread) + +add_executable(hg hg.c hist.c rdtsc.c run.c init.c opt.c report.c setup.c) + +add_executable(netio netio.c) + +add_executable(RCCE_pingpong RCCE_pingpong.c) +target_link_libraries(RCCE_pingpong ircce) + +add_executable(stream stream.c) +target_compile_options(stream PRIVATE -fopenmp) +target_link_libraries(stream -fopenmp) + +# deployment +install_local_targets(extra/benchmarks) diff --git a/usr/benchmarks/Makefile b/usr/benchmarks/Makefile deleted file mode 100644 index 0006125fe..000000000 --- a/usr/benchmarks/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -ARCH = x86 -TARGET=x86_64-hermit -MAKE = make -override STRIP_DEBUG = --strip-debug #--strip-unneeded -KEEP_DEBUG = --only-keep-debug - -# Set your own cross compiler tool chain prefix here -CROSSCOMPREFIX = x86_64-hermit- - -CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++ -GCC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -CPP_FOR_TARGET = $(CROSSCOMPREFIX)cpp -AR_FOR_TARGET = $(CROSSCOMPREFIX)ar -AS_FOR_TARGET = $(CROSSCOMPREFIX)as -LD_FOR_TARGET = $(CROSSCOMPREFIX)ld -NM_FOR_TARGET = $(CROSSCOMPREFIX)nm -OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)objdump -OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)objcopy -RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)ranlib -STRIP_FOR_TARGET = $(CROSSCOMPREFIX)strip -READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf -ELFEDIT_FOR_TARGET = $(CROSSCOMPREFIX)elfedit - -# Prettify output -V = 0 -ifeq ($V,0) - Q = @ - P = > /dev/null -endif - -ICC_EXE = -#ICC_EXE = stream_icc - -# other implicit rules -%.o : %.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -o $@ $< - -%.o: %.cpp - @echo [CXX] $@ - $Q$(CXX_FOR_TARGET) -c $(CXXFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -o $@ $< - -%.o: %.f90 - @echo [F90] $@ - $Q$(FC_FOR_TARGET) -c $(FFLAGS_FOR_TARGET) -o $@ $< - -default: all - -all: stream hg netio RCCE_pingping RCCE_pingpong basic $(ICC_EXE) - -stream.o: stream.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -fopenmp -o $@ $< - -stream: stream.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -fopenmp - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -stream_icc.o: stream.c - @echo [ICC] $@ - icc -m64 -c -o $@ -O3 -xHost -I$(TOPDIR)/hermit/usr/x86/x86_64-hermit/include/ -openmp -ffreestanding $< - $Q$(ELFEDIT_FOR_TARGET) --output-osabi HermitCore $@ - -stream_icc: stream_icc.o - @echo [LD] - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -fopenmp - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -basic.o: basic.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -pthread -o $@ $< - -basic: basic.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -pthread - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -RCCE_pingping: RCCE_pingping.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -lircce - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -RCCE_pingpong: RCCE_pingpong.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -lircce - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -netio: netio.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -hg: hg.o hist.o rdtsc.o run.o init.o opt.o report.o setup.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) hist.o rdtsc.o run.o init.o opt.o report.o setup.o - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -clean: - @echo Cleaning benchmarks - $Q$(RM) stream hg netio RCCE_pingping RCCE_pingpong *.sym *.o *~ - -veryclean: - @echo Propper cleaning benchmarks - $Q$(RM) stream hg RCCE_pingping RCCE_pingpong *.sym *.o *~ - -depend: - $Q$(CC_FOR_TARGET) -MM $(CFLAGS_FOR_TARGET) *.c > Makefile.dep - --include Makefile.dep -# DO NOT DELETE diff --git a/usr/ircce/CMakeLists.txt b/usr/ircce/CMakeLists.txt new file mode 100644 index 000000000..95999a085 --- /dev/null +++ b/usr/ircce/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore.cmake) + +project(hermit_ircce C) + +add_compile_options(${HERMIT_APP_FLAGS}) + +file(GLOB SOURCES *.c) + +add_library(ircce STATIC ${SOURCES}) + +# deployment +install(TARGETS ircce + DESTINATION ${TARGET_ARCH}/lib) +install(FILES + iRCCE.h iRCCE_lib.h RCCE_debug.h RCCE.h RCCE_lib.h rte_memcpy.h + DESTINATION + ${TARGET_ARCH}/include) diff --git a/usr/ircce/Makefile.in b/usr/ircce/Makefile.in deleted file mode 100644 index 321433e84..000000000 --- a/usr/ircce/Makefile.in +++ /dev/null @@ -1,56 +0,0 @@ -CROSSPREFIX = x86_64-hermit -MAKE = make -ARFLAGS_FOR_TARGET = rsv -CP = cp -C_source = $(wildcard *.c) -NAME = libircce.a -OBJS = $(C_source:.c=.o) - -prefix = @prefix@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ - -# -# Prettify output -V = 0 -ifeq ($V,0) - Q = @ - P = > /dev/null -endif - -# other implicit rules -%.o : %.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -o $@ $< - -default: all - -all: $(NAME) - -$(NAME): $(OBJS) - $Q$(AR_FOR_TARGET) $(ARFLAGS_FOR_TARGET) $@ $(OBJS) - -install: - $Q$(INSTALL_DATA) $(NAME) $(prefix)/$(CROSSPREFIX)/lib - $Q$(INSTALL_DATA) iRCCE.h $(prefix)/$(CROSSPREFIX)/include - $Q$(INSTALL_DATA) iRCCE_lib.h $(prefix)/$(CROSSPREFIX)/include - $Q$(INSTALL_DATA) RCCE_debug.h $(prefix)/$(CROSSPREFIX)/include - $Q$(INSTALL_DATA) RCCE.h $(prefix)/$(CROSSPREFIX)/include - $Q$(INSTALL_DATA) RCCE_lib.h $(prefix)/$(CROSSPREFIX)/include - $Q$(INSTALL_DATA) rte_memcpy.h $(prefix)/$(CROSSPREFIX)/include - -clean: - @echo Cleaning examples - $Q$(RM) $(NAME) *.o *~ - -veryclean: - @echo Propper cleaning examples - $Q$(RM) $(NAME) *.o *~ - -depend: - $Q$(CC_FOR_TARGET) -MM $(CFLAGS_FOR_TARGET) *.c > Makefile.dep - --include Makefile.dep -# DO NOT DELETE diff --git a/usr/openmpbench/CMakeLists.txt b/usr/openmpbench/CMakeLists.txt new file mode 100644 index 000000000..1aaa6c39e --- /dev/null +++ b/usr/openmpbench/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore-Application.cmake) + +project(hermit_openmpbench C) + +add_executable(syncbench syncbench.c common.c) +target_link_libraries(syncbench PUBLIC -fopenmp) + +add_executable(taskbench taskbench.c common.c) +target_link_libraries(taskbench PUBLIC -fopenmp) + +add_library(common_sched STATIC common.c) +target_compile_definitions(common_sched PUBLIC -DSCHEDBENCH) +target_compile_options(common_sched PUBLIC -fopenmp) +target_link_libraries(common_sched PUBLIC -fopenmp) + +add_executable(schedbench schedbench.c) +target_link_libraries(schedbench common_sched) + +# deployment: exclude common_sched +install_local_targets(extra/benchmarks common_sched) diff --git a/usr/openmpbench/Makefile b/usr/openmpbench/Makefile deleted file mode 100644 index 937877e2f..000000000 --- a/usr/openmpbench/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -include Makefile.defs - -# If CFLAGS_CRAY is empty set it to CFLAGS -ifeq ($(CFLAGS_CRAY),) -CFLAGS_CRAY = ${CFLAGS} -endif - -.c.o: - ${CC} ${CFLAGS} $(OMPFLAG) -c $*.c - -SYNCOBJS = syncbench.o common.o -SCHEDOBJS = schedbench.o common_sched.o -ARRAYOBJS = arraybench_$(IDA).o common.o -TASKOBJS = taskbench.o common.o -SCHEDFLAGS = -DSCHEDBENCH - -all: syncbench schedbench taskbench - -prog: arraybench_$(IDA) - -# We need to generate a linker map file so that Xray can resolve function names -LDFLAGS += -Wl,-Map=$@.map - -syncbench: $(SYNCOBJS) - $(CC) -o syncbench $(SYNCOBJS) $(LDFLAGS) $(CLOCKOBJS) $(LIBS) -lm - -# Rule to ensure the lower optimisation level is picked up for common.c -# with the Cray compiler -common.o: - ${CC} ${CFLAGS_CRAY} $(OMPFLAG) -c $*.c - -# Separate rule to build common_sched.o as we need to ensure the correct -# DEFAULT_DELAY_TIME is used. -common_sched.o: - ${CC} ${CFLAGS_CRAY} $(SCHEDFLAGS) $(OMPFLAG) -o common_sched.o -c common.c - -schedbench: $(SCHEDOBJS) - $(CC) -o schedbench $(SCHEDOBJS) $(LDFLAGS) $(CLOCKOBJS) $(LIBS) -lm - -# Multiple header files due to multiple array sizes, makes header file arraybench_*.h -arraybench_$(IDA).h: arraybench.h - $(CPP) -DIDA=$(IDA) $(OMPFLAG) -P arraybench.h -o $@ - -# Multiple object files due to multiple array sizes, makes object file arraybench_*.o -arraybench_$(IDA).o: arraybench_$(IDA).h arraybench.c - $(CC) $(CFLAGS) -DIDA=$(IDA) $(OMPFLAG) arraybench.c -c -o $@ - -# Multiple executables due to multiple array sizes, makes exe file arraybench_* -arraybench_$(IDA): $(ARRAYOBJS) $(CLOCKOBJS) arraybench.c - $(CC) -o $@ $(LDFLAGS) $(ARRAYOBJS) $(CLOCKOBJS) $(LIBS) -lm - -taskbench: $(TASKOBJS) - $(CC) -o taskbench $(TASKOBJS) $(LDFLAGS) $(OMPFLAG) $(CLOCKOBJS) $(LIBS) -lm - -clean: - -rm -rf *.o *.xray *.map syncbench schedbench arraybench_* taskbench - -veryclean: clean - -rm -rf OpenMPBench.* *.all diff --git a/usr/openmpbench/Makefile.defs b/usr/openmpbench/Makefile.defs deleted file mode 100644 index e8369b7c6..000000000 --- a/usr/openmpbench/Makefile.defs +++ /dev/null @@ -1,14 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -#OMPFLAG = -DOMPVER2 -DOMPVER3 - -CC = $(CC_FOR_TARGET) -CFLAGS = -fopenmp $(CFLAGS_FOR_TARGET) -lm -LDFLAGS = -fopenmp $(LDFLAGS_FOR_TARGET) -lm -CPP = $(CPP_FOR_TARGET) -ELFEDIT = $(ELFEDIT_FOR_TARGET) -LIBS = - -override STRIP_DEBUG = --strip-debug #--strip-unneeded -KEEP_DEBUG = --only-keep-debug diff --git a/usr/openmpbench/Makefile.defs.hector.cray b/usr/openmpbench/Makefile.defs.hector.cray deleted file mode 100644 index a9c33a592..000000000 --- a/usr/openmpbench/Makefile.defs.hector.cray +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -OMPFLAG = -DOMPVER2 -DOMPVER3 - -CC=cc -CFLAGS = -O1 -lm -LDFLAGS = -O0 -lm -CPP = /usr/bin/cpp -LIBS = diff --git a/usr/openmpbench/Makefile.defs.hector.pgi b/usr/openmpbench/Makefile.defs.hector.pgi deleted file mode 100644 index 346222856..000000000 --- a/usr/openmpbench/Makefile.defs.hector.pgi +++ /dev/null @@ -1,12 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -# Nested tasks don't work on HECToR Phase 3 for the PGI compiler -# and thus are disabled. -OMPFLAG = -DOMPVER2 -DOMPVER3 -DDISABLE_NESTED_TASKS_TESTS - -CC =cc -CFLAGS = -fast -mp=nonuma -lm -LDFLAGS = -fast -mp=nonuma -lm -CPP = /usr/bin/cpp -LIBS = \ No newline at end of file diff --git a/usr/openmpbench/Makefile.defs.magny0.gnu b/usr/openmpbench/Makefile.defs.magny0.gnu deleted file mode 100644 index d9f5c36b1..000000000 --- a/usr/openmpbench/Makefile.defs.magny0.gnu +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -OMPFLAG = -DDISABLE_BARRIER_TEST -DOMPVER2 -DOMPVER3 - -CC = /usr/local/bin/gcc-4.6 -CFLAGS = -fopenmp -O1 -lm -LDFLAGS = -fopenmp -O1 -lm -CPP = /usr/bin/cpp -LIBS = \ No newline at end of file diff --git a/usr/openmpbench/Makefile.defs.magny0.sun b/usr/openmpbench/Makefile.defs.magny0.sun deleted file mode 100644 index 62cbbee68..000000000 --- a/usr/openmpbench/Makefile.defs.magny0.sun +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -OMPFLAG = -DOMPVER2 -DOMPVER3 - -CC = /home/h012/fiona/SolarisStudio12.2-linux-x86-tar-ML/solstudio12.2/bin/suncc -CFLAGS = -xopenmp -xO3 -lm -LDFLAGS = -xopenmp -xO3 -lm -CPP = /usr/bin/cpp -LIBS = diff --git a/usr/openmpbench/Makefile.defs.stokes.gnu b/usr/openmpbench/Makefile.defs.stokes.gnu deleted file mode 100644 index 8b9f0acd1..000000000 --- a/usr/openmpbench/Makefile.defs.stokes.gnu +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -OMPFLAG = -DDISABLE_BARRIER_TEST -DOMPVER2 -DOMPVER3 - -CC = gcc -CFLAGS = -fopenmp -O1 -lm -LDFLAGS = -fopenmp -O1 -lm -CPP = /usr/bin/cpp -LIBS = \ No newline at end of file diff --git a/usr/openmpbench/Makefile.defs.stokes.intel b/usr/openmpbench/Makefile.defs.stokes.intel deleted file mode 100644 index 4d26495b4..000000000 --- a/usr/openmpbench/Makefile.defs.stokes.intel +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the following line to use OpenMP 2.0 features -#OMPFLAG = -DOMPVER2 -# Uncomment the following line to use OpenMP 3.0 features -OMPFLAG = -DDISABLE_BARRIER_TEST -DOMPVER2 -DOMPVER3 - -CC = icc -CFLAGS = -openmp -O1 -lm -LDFLAGS = -openmp -O1 -lm -CPP = /usr/bin/cpp -LIBS = \ No newline at end of file diff --git a/usr/openmpbench/syncbench.c b/usr/openmpbench/syncbench.c index b3f87e093..23fe78610 100644 --- a/usr/openmpbench/syncbench.c +++ b/usr/openmpbench/syncbench.c @@ -45,9 +45,9 @@ int main(int argc, char **argv) { struct XRayTraceCapture* trace = XRayInit( 20, // max. call depth - 32 * 1000 * 1000, // memory for report + 16 * 1000 * 1000, // memory for report 13, // frame count - "/hermit/usr/openmpbench/syncbench.map"); + "syncbench.map"); // Start Paraver tracing #ifdef PARAVERTRACE @@ -128,7 +128,7 @@ int main(int argc, char **argv) { #endif XRaySaveReport(trace, - "/hermit/usr/openmpbench/syncbench.xray", // report file + "syncbench.xray", // report file 0.05f, // Only output funcs that have higher runtime [%] 1000); // Only output funcs that have higher runtime [cycles] XRayShutdown(trace); diff --git a/usr/tests/CMakeLists.txt b/usr/tests/CMakeLists.txt new file mode 100644 index 000000000..a54926f79 --- /dev/null +++ b/usr/tests/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore-Application.cmake) + +project(hermit_tests C CXX Fortran Go) + +add_executable(hello hello.c) +add_executable(jacobi jacobi.c) +add_executable(hello++ hello++.cpp) +add_executable(hellof hellof.f90) +add_executable(pi pi.go) + +add_executable(server server.go) +target_link_libraries(server netgo) + +add_executable(RCCE_minimum RCCE_minimum.c) +target_link_libraries(RCCE_minimum ircce) + +add_executable(thr_hello thr_hello.c) +target_link_libraries(thr_hello pthread) + +add_executable(signals signals.c) +target_link_libraries(signals pthread) + +# deployment +install_local_targets(extra/tests) diff --git a/usr/tests/Makefile b/usr/tests/Makefile deleted file mode 100644 index 4a0ac8c31..000000000 --- a/usr/tests/Makefile +++ /dev/null @@ -1,138 +0,0 @@ -ARCH = x86 -TARGET=x86_64-hermit -MAKE = make -override STRIP_DEBUG = --strip-debug #--strip-unneeded -KEEP_DEBUG = --only-keep-debug - -# Set your own cross compiler tool chain prefix here -CROSSCOMPREFIX = x86_64-hermit- - -CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -GO_FOR_TARGET = $(CROSSCOMPREFIX)gccgo -FC_FOR_TARGET = $(CROSSCOMPREFIX)gfortran -CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++ -GCC_FOR_TARGET = $(CROSSCOMPREFIX)gcc -CPP_FOR_TARGET = $(CROSSCOMPREFIX)cpp -AR_FOR_TARGET = $(CROSSCOMPREFIX)ar -AS_FOR_TARGET = $(CROSSCOMPREFIX)as -LD_FOR_TARGET = $(CROSSCOMPREFIX)ld -NM_FOR_TARGET = $(CROSSCOMPREFIX)nm -OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)objdump -OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)objcopy -RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)ranlib -STRIP_FOR_TARGET = $(CROSSCOMPREFIX)strip -READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf -ELFEDIT_FOR_TARGET = $(CROSSCOMPREFIX)elfedit - -# Prettify output -V = 0 -ifeq ($V,0) - Q = @ - P = > /dev/null -endif - -# other implicit rules -%.o : %.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -o $@ $< - -%.o : %.go - @echo [GO] $@ - $Q$(GO_FOR_TARGET) -c $(GOFLAGS_FOR_TARGET) -o $@ $< - -%.o: %.cpp - @echo [CXX] $@ - $Q$(CXX_FOR_TARGET) -c $(CXXFLAGS_FOR_TARGET) -o $@ $< - -%.o: %.f90 - @echo [F90] $@ - $Q$(FC_FOR_TARGET) -c $(FCLAGS_FOR_TARGET) -o $@ $< - -default: all - -all: hello hello++ thr_hello jacobi hellof RCCE_minimum signals pi server - -hello++: hello++.o - @echo [LD] $@ - $Q$(CXX_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CXXFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -hello: hello.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -hellof: hellof.o - @echo [LD] $@ - $Q$(FC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(FFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -pi: pi.o - @echo [LD] $@ - $Q$(GO_FOR_TARGET) -pthread -o $@ $< $(LDFLAGS_FOR_TARGET) $(GOFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -server: server.o - @echo [LD] $@ - $Q$(GO_FOR_TARGET) -pthread -o $@ $< $(LDFLAGS_FOR_TARGET) $(GOFLAGS_FOR_TARGET) -lnetgo - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -jacobi: jacobi.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -thr_hello.o: thr_hello.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -pthread -o $@ $< - -thr_hello: thr_hello.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -pthread - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -signals.o: signals.c - @echo [CC] $@ - $Q$(CC_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) -pthread -o $@ $< - -signals: signals.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -pthread - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -RCCE_minimum: RCCE_minimum.o - @echo [LD] $@ - $Q$(CC_FOR_TARGET) -o $@ $< $(LDFLAGS_FOR_TARGET) $(CFLAGS_FOR_TARGET) -lircce - $Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $@ $@.sym - $Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $@ - $Qchmod a-x $@.sym - -clean: - @echo Cleaning tests - $Q$(RM) hello hello++ hellof jacobi thr_hello RCCE_minimum signals pi server *.sym *.o *~ - -veryclean: - @echo Propper cleaning tests - $Q$(RM) hello hello++ hellof jacobi thr_hello RCCE_minimum pi server *.sym *.o *~ - -depend: - $Q$(CC_FOR_TARGET) -MM $(CFLAGS_FOR_TARGET) *.c > Makefile.dep - --include Makefile.dep -# DO NOT DELETE diff --git a/usr/xray/CMakeLists.txt b/usr/xray/CMakeLists.txt new file mode 100644 index 000000000..d2ac936c0 --- /dev/null +++ b/usr/xray/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.7) +include(../../cmake/HermitCore.cmake) + +project(hermit_xray C) + +add_compile_options(${HERMIT_APP_FLAGS}) + +file(GLOB SOURCES *.c) + +add_library(xray STATIC ${SOURCES}) + +target_compile_definitions(xray + PUBLIC + -DXRAY -DXRAY_ANNOTATE + -DXRAY_NO_DEMANGLE + -DXRAY_DISABLE_BROWSER_INTEGRATION) + +# deployment +install(TARGETS xray + DESTINATION ${TARGET_ARCH}/lib) +install(FILES libxray.spec + DESTINATION ${TARGET_ARCH}/lib) +install(FILES xray.h + DESTINATION ${TARGET_ARCH}/include) diff --git a/usr/xray/Makefile.in b/usr/xray/Makefile.in deleted file mode 100644 index de709f34a..000000000 --- a/usr/xray/Makefile.in +++ /dev/null @@ -1,33 +0,0 @@ -CROSSPREFIX = x86_64-hermit -CP = cp -NAME = libxray.a - -CC_FOR_TARGET ?= gcc -AR_FOR_TARGET ?= ar - -CFLAGS = -DXRAY -DXRAY_DISABLE_BROWSER_INTEGRATION -DXRAY_NO_DEMANGLE -DXRAY_ANNOTATE - -CFLAGS += ${CFLAGS_FOR_TARGET} - -OBJS = xray.o stringpool.o hashtable.o symtable.o demangle.o parsesymbols.o report.o - -prefix = @prefix@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ - -$(NAME): $(OBJS) - $(AR_FOR_TARGET) rsv $@ $(OBJS) - -install: $(NAME) - $(INSTALL_DATA) $(NAME) $(prefix)/$(CROSSPREFIX)/lib - $(INSTALL_DATA) libxray.spec $(prefix)/$(CROSSPREFIX)/lib - $(INSTALL_DATA) xray.h $(prefix)/$(CROSSPREFIX)/include - -%.o: %.c - @echo [CC] $@ - @$(CC_FOR_TARGET) $(CFLAGS) -c $< -o $@ - -clean: - rm -f *.o $(NAME) diff --git a/usr/xray/README.md b/usr/xray/README.md new file mode 100644 index 000000000..40e655348 --- /dev/null +++ b/usr/xray/README.md @@ -0,0 +1,138 @@ +# Profiling with XRay + +## Introduction + +You can profile your application and parts of the system runtime using the XRay +profiler. It hooks into every function call (using GCC's +`-finstrument-functions` option) to record the execution time and create a call +graph. + +It can generate a text-file report that lists the most expensive function calls +depending on the filtering that is configured. + + +## About XRay + +XRay can divide the profiling into multiple "runs" called frames. In a graphical +application this could correspond to the rendering of a graphics frame, whereas +in a benchmark application a frame might correspond to each individual benchmark +run. + +The profiling information is saved in a statically sized ring buffer so you must +decide on the size of the buffer and the max. number of frames. Those values +might need some fine tuning. If in doubt, increase the buffer size. + +In order for XRay to resolve function names, a linker map file is needed. Using +this file, addresses can be resolved to function names. + + +## Limitations + +If the compiler aggressively (or intendedly) inlines functions you won't see +them in the final report since no enter and exit hooks are inserted. Keep this +is mind if there's some function missing in the call hierarchy. Furthermore, the +name of static functions cannot be resolved because their names are not listed +in the linker file. + + +## Profile your application + +To generate linker map files and inject enter and exit hooks, you have to tell +CMake that you want your application to be profiled: + +```bash +$ cd build +$ cmake .. -DPROFILING=true +``` + +If you want to profile HermitCore internals or one of the example applications, +have a look at `CMakeLists.txt` in the root of the repository. Every target that +is built by `build_external(target_name ...)` can be profiled like this: + +```bash +$ cd build +$ cmake .. -DPROFILE_APPS='openmpbench;tests' +``` + +### Code + +You have to include the XRay header: `#include `. + +Then you must initialize XRay and already do some configuration: + +```c +struct XRayTraceCapture* XRayInit(int stack_size, + int buffer_size, + int frame_count, + const char* mapfilename); + +struct XRayTraceCapture* trace = XRayInit( + 5, // max. call depth in report + 4 * 1000 * 1000, // ring buffer size for profiling information + 10, // frame count + "/path/to/your/application.map"); +``` + +To find the hotspots in your code you might want to start with a relatively +small call depth (maybe 5) and increase it to gain a better understanding of the +detailed call hierarchy. The maximum call depth / stack size is 255. Keep the +buffer size as small as possible and increase on demand. + +Now you can wrap parts of your code into frames: + +```c +XRayStartFrame(trace); +do_work(); +XRayEndFrame(trace); + +XRayStartFrame(trace); +do_even_more_work(); +XRayEndFrame(trace); +``` + +And finally generate the report: + +```c +void XRaySaveReport(struct XRayTraceCapture* capture, + const char* filename, + float percent_cutoff, + int cycle_cutoff); + +XRaySaveReport(trace, + "/path/to/you/report/application.xray", // report file + 10.0f, // Only output funcs that have a higher runtime [%] + 2000); // Only output funcs that have a higher runtime [cycles] +XRayShutdown(trace); +``` + +Here you can do further filtering of the output. For a function call to be added +to the report, it's relative runtime (whole application) has be higher than +`percent_cutoff` and it's absolute runtime must be greater than `cycle_cutoff` +CPU cycles. + + +## Example + +See [usr/openmpbench/syncbench.c](https://github.com/RWTH-OS/HermitCore/blob/master/usr/openmpbench/syncbench.c). + + +## Analysis + +After tracing your code, you may want to analyse the report. While the XRay +report is already human-readable, it's hard to get an overview of the whole +trace. Therefore, it's possible to convert the XRay report to a format that +[kCacheGrind](https://kcachegrind.github.io) can read. You can find the tool +needed for conversion at `usr/xray/tools`. + +```bash +$ ./conv2kcg.py libgomp_trace.xray +INFO:Parsing Header is done. Found 1 frames +INFO:Found frame 'PARALLEL' data +INFO:Frame 'PARALLEL' complete +INFO:Report file 'libgomp_trace.xray' parsed completely. +INFO:Create callgrind file for frame 'PARALLEL' +INFO:Writing to: libgomp_trace_PARALLEL.callgrind +``` + +This will create the file `libgomp_trace_PARALLEL.callgrind` which can be opened +using kCacheGrind (Open dialog: set Filter to 'All Files'). diff --git a/usr/xray/xray.h b/usr/xray/xray.h index 6e0991f0c..aaa0e6c36 100644 --- a/usr/xray/xray.h +++ b/usr/xray/xray.h @@ -28,7 +28,7 @@ extern "C" { #endif #define XRAY_NO_INSTRUMENT __attribute__((no_instrument_function)) -#define XRAY_INLINE __attribute__((always_inline, no_instrument_function)) +#define XRAY_INLINE __attribute__((always_inline, no_instrument_function)) inline #if defined(XRAY)