diff --git a/.github/workflows/handcomp-tests.yml b/.github/workflows/handcomp-tests.yml index 40ec6c59..0d65f389 100644 --- a/.github/workflows/handcomp-tests.yml +++ b/.github/workflows/handcomp-tests.yml @@ -21,6 +21,7 @@ jobs: image: ${{(startsWith(matrix.os, 'ubuntu') && 'ghcr.io/llvm/ci-ubuntu-22.04:latest') || null}} volumes: - /mnt/:/mnt/ + options: --user root strategy: fail-fast: false matrix: diff --git a/.github/workflows/small-cilkapps.yml b/.github/workflows/small-cilkapps.yml index 2f65e86b..64a6cce7 100644 --- a/.github/workflows/small-cilkapps.yml +++ b/.github/workflows/small-cilkapps.yml @@ -21,6 +21,7 @@ jobs: image: ${{(startsWith(matrix.os, 'ubuntu') && 'ghcr.io/llvm/ci-ubuntu-22.04:latest') || null}} volumes: - /mnt/:/mnt/ + options: --user root strategy: fail-fast: false matrix: diff --git a/CMakeLists.txt b/CMakeLists.txt index 6cc65966..ea6d6843 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # CMake build for Cheetah. -cmake_minimum_required(VERSION 3.13.4) +cmake_minimum_required(VERSION 3.20.0) # Check if cheetah is built as a standalone project. if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR CHEETAH_STANDALONE_BUILD) diff --git a/README.md b/README.md index 7b305045..5b7d8e22 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ +# The OpenCilk runtime system + +This repository contains the source code of the OpenCilk runtime system. This library is intended to be used with the [OpenCilk compiler](https://github.com/OpenCilk/opencilk-project) and can either be built [together with the compiler](https://www.opencilk.org/doc/users-guide/build-opencilk-from-source/) or as a standalone library. + ## Building a standalone copy of the OpenCilk runtime -These instructions assume that you are building the OpenCilk runtime system -using the OpenCilk compiler. +These instructions assume that you are building the OpenCilk runtime system using the OpenCilk compiler. ### Using Makefiles -1. If necessary, update the `COMPILER_BASE` variable in `config.mk` to point - to the directory containing the OpenCilk compiler binaries, e.g., - `/path/to/opencilk-project/build/bin/`. When it executes `clang` and other - OpenCilk compiler binaries, the Makefile prepends this path to those - binaries. +1. If necessary, update the `COMPILER_BASE` variable in `config.mk` to point to the directory containing the OpenCilk compiler binaries, e.g., `/path/to/opencilk-project/build/bin/`. When it executes `clang` and other OpenCilk compiler binaries, the Makefile prepends this path to those binaries. 2. Run `make`. To clean the build, run `make clean`. @@ -17,41 +16,34 @@ To clean the build, run `make clean`. ### Using CMake 1. Make a build directory at the top level and enter it: -``` -$ mkdir build -$ cd build -``` -2. Configure CMake. Make sure to specify `CMAKE_C_COMPILER` and -`LLVM_CMAKE_DIR` to point to the corresponding build or installation -of the OpenCilk compiler binaries. In addition, set -`CMAKE_BUILD_TYPE` to specify the build type, such as, `Debug`, for an -unoptimized build with all assertions enabled; `Release`, for an fully -optimized build with assertions disabled; or `RelWithDebInfo`, to -enable some optimizations and assertions. (The default build type is -`Debug`.) - -Example configuration: -``` -$ cmake -DCMAKE_C_COMPILER=/path/to/opencilk-project/build/bin/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_CMAKE_DIR=/path/to/opencilk-project/build ../ -``` + + ```console + mkdir build + cd build + ``` + +2. Configure CMake. Make sure to specify `CMAKE_C_COMPILER`, `CMAKE_CXX_COMPILER`, and `LLVM_CMAKE_DIR` to point to the corresponding build or installation of the OpenCilk compiler binaries. In addition, set `CMAKE_BUILD_TYPE` to specify the build type, such as: + + - `Debug`, for an unoptimized build with all assertions enabled (default); + - `Release`, for an fully optimized build with assertions disabled; or + - `RelWithDebInfo`, to enable some optimizations and assertions. + + ```console + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/path/to/opencilk-project/build/bin/clang -DCMAKE_CXX_COMPILER=/path/to/opencilk-project/build/bin/clang++ -DLLVM_CMAKE_DIR=/path/to/opencilk-project/build ../ + ``` + 3. Build the runtime: -``` -$ cmake --build . -- -j -``` -To clean the build, run `cmake --build . --target clean` from the build -directory. + ```console + cmake --build . -- -j + ``` -## Linking against a standalone build of the OpenCilk runtime +To clean the build, run `cmake --build . --target clean` from the build directory. -The OpenCilk compiler accepts the flag -`--opencilk-resource-dir=/path/to/cheetah` to specify where to find all -relevant OpenCilk runtime files, including the runtime library, the -bitcode ABI file, and associated header files. This resource directory -should have `include/` and `lib/` as subdirectories. For -example, if you built the standalone OpenCilk runtime using CMake, then -pass the flag `--opencilk-resource-dir=/path/to/cheetah/build` to the -OpenCilk compiler to link against that standalone build, e.g., -``` +## Using a standalone build of the OpenCilk runtime + +The OpenCilk compiler accepts the flag `--opencilk-resource-dir=/path/to/cheetah` to specify where to find all relevant OpenCilk runtime files, including the runtime library, the bitcode ABI file, and associated header files. This resource directory should have `include/` and `lib/` as subdirectories. For example, if you built the standalone OpenCilk runtime using CMake, then pass the flag `--opencilk-resource-dir=/path/to/cheetah/build` to the OpenCilk compiler to link against that standalone build as follows: + +```console /path/to/opencilk-project/build/bin/clang -o fib fib.c -fopencilk -O3 --opencilk-resource-dir=/path/to/cheetah/build ``` diff --git a/cmake/Modules/AddCheetah.cmake b/cmake/Modules/AddCheetah.cmake index 4448a406..479ba524 100644 --- a/cmake/Modules/AddCheetah.cmake +++ b/cmake/Modules/AddCheetah.cmake @@ -358,7 +358,7 @@ function(add_cheetah_runtime name type) if (NEED_EXPLICIT_ADHOC_CODESIGN) add_custom_command(TARGET ${libname} POST_BUILD - COMMAND codesign --sign - $ + COMMAND codesign --sign - -f $ WORKING_DIRECTORY ${CHEETAH_OUTPUT_LIBRARY_DIR} ) endif() diff --git a/config.mk b/config.mk index ed153dfe..533e1fee 100644 --- a/config.mk +++ b/config.mk @@ -8,6 +8,8 @@ CXX=$(COMPILER_BASE)clang++ LINK_CC=$(CC) LLVM_LINK=$(COMPILER_BASE)llvm-link LLVM_CONFIG=$(COMPILER_BASE)llvm-config +AR=ar +#AR=$(COMPILER_BASE)llvm-ar # ABI_DEF?=-DOPENCILK_ABI # If use cheetah @@ -20,7 +22,8 @@ RTS_PEDIGREE_LIB?=libopencilk-pedigrees # All runtime libraries and associated files will be placed in # `/oath/to/cheetah/lib/`, so that the compiler can easily find # all of those files using the flag --opencilk-resource-dir=/path/to/cheetah. -RTS_LIBDIR_NAME?=lib/$(shell $(LLVM_CONFIG) --host-target) +TARGET?=$(shell $(LLVM_CONFIG) --host-target) +RTS_LIBDIR_NAME?=lib/$(TARGET) RESOURCE_DIR?=$(CONFIG_DIR) RTS_LIBDIR?=$(RESOURCE_DIR)/$(RTS_LIBDIR_NAME) RTS_OPT?=-fopencilk --opencilk-resource-dir=$(RESOURCE_DIR) diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 4c2e712e..6ea86d05 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -18,8 +18,6 @@ set(CHEETAH_SOURCES scheduler.c ) -# We assume there is just one source file to compile for the cheetah -# ABI. set(CHEETAH_ABI_SOURCE cilk2c_inlined.c ) @@ -33,7 +31,7 @@ set(CHEETAH_PERSONALITY_C_SOURCES ) set(CHEETAH_PERSONALITY_CPP_SOURCES - personality-cpp.c + personality-cpp.cpp ) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) @@ -100,422 +98,158 @@ else() endif() endif() -if (APPLE) - add_cheetah_bitcode(opencilk-abi - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${CHEETAH_ABI_SOURCE} - CFLAGS ${CHEETAH_BITCODE_ABI_COMPILE_FLAGS} - DEFS ${CHEETAH_BITCODE_ABI_COMPILE_DEFS} - PARENT_TARGET cheetah) - - if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_bitcode(opencilk-asan-abi - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${CHEETAH_ABI_SOURCE} - CFLAGS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_FLAGS} - DEFS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) - endif() - - if (CHEETAH_ENABLE_SHARED) - add_cheetah_runtime(opencilk - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-c - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-cpp - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_runtime(opencilk-asan - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-c - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) +# List of bitcodes and corresponding sources +set(CHEETAH_BITCODES "opencilk-abi") +set(CHEETAH_ASAN_BITCODES "opencilk-asan-abi") +set(CHEETAH_BITCODE_SOURCES "CHEETAH_ABI_SOURCE") +# List of libraries and corresponding sources +set(CHEETAH_LIBRARIES "opencilk" "opencilk-personality-c" "opencilk-personality-cpp" "opencilk-pedigrees") +set(CHEETAH_ASAN_LIBRARIES "opencilk-asan" "opencilk-asan-personality-c" "opencilk-asan-personality-cpp" "opencilk-pedigrees-asan") +set(CHEETAH_LIBRARY_SOURCES "CHEETAH_SOURCES" "CHEETAH_PERSONALITY_C_SOURCES" "CHEETAH_PERSONALITY_CPP_SOURCES" "CHEETAH_PEDIGREE_LIB_SOURCES") - add_cheetah_runtime(opencilk-asan-personality-cpp - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees-asan - SHARED - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - endif() - - endif() - if (CHEETAH_ENABLE_STATIC) - add_cheetah_runtime(opencilk - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-c - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-cpp - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees - STATIC +# Add all bitcode and library variants +if (APPLE) + foreach (bitcode bitcodeasan src IN ZIP_LISTS CHEETAH_BITCODES CHEETAH_ASAN_BITCODES CHEETAH_BITCODE_SOURCES) + add_cheetah_bitcode(${bitcode} OS ${CHEETAH_SUPPORTED_OS} ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_runtime(opencilk-asan - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-c - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-cpp - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees-asan - STATIC - OS ${CHEETAH_SUPPORTED_OS} - ARCHS ${CHEETAH_SUPPORTED_ARCH} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) - endif() - endif() -else() # Not APPLE - foreach (arch ${CHEETAH_SUPPORTED_ARCH}) - add_cheetah_bitcode(opencilk-abi - ARCHS ${arch} - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${CHEETAH_ABI_SOURCE} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${${src}} CFLAGS ${CHEETAH_BITCODE_ABI_COMPILE_FLAGS} DEFS ${CHEETAH_BITCODE_ABI_COMPILE_DEFS} PARENT_TARGET cheetah) - if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_bitcode(opencilk-asan-abi - ARCHS ${arch} - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${CHEETAH_ABI_SOURCE} - CFLAGS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_FLAGS} - DEFS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_DEFS} - PARENT_TARGET cheetah) + add_cheetah_bitcode(${bitcodeasan} + OS ${CHEETAH_SUPPORTED_OS} + ARCHS ${CHEETAH_SUPPORTED_ARCH} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${${src}} + CFLAGS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_FLAGS} + DEFS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_DEFS} + PARENT_TARGET cheetah) endif() - - if (CHEETAH_ENABLE_SHARED) - add_cheetah_runtime(opencilk - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-c - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-cpp - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_runtime(opencilk-asan - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-c - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-cpp - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees-asan - SHARED - ARCHS ${arch} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} - VERSION "${CHEETAH_ABI_VERSION}.0" - SOVERSION ${CHEETAH_ABI_VERSION} - PARENT_TARGET cheetah) - endif() - endif() - if (CHEETAH_ENABLE_STATIC) - add_cheetah_runtime(opencilk - STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-c - STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-personality-cpp - STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees - STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_COMPILE_DEFS} - PARENT_TARGET cheetah) - + endforeach() + if (CHEETAH_ENABLE_SHARED) + foreach (lib libasan src IN ZIP_LISTS CHEETAH_LIBRARIES CHEETAH_ASAN_LIBRARIES CHEETAH_LIBRARY_SOURCES) + add_cheetah_runtime(${lib} + SHARED + OS ${CHEETAH_SUPPORTED_OS} + ARCHS ${CHEETAH_SUPPORTED_ARCH} + SOURCES ${${src}} + CFLAGS ${CHEETAH_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_LINK_FLAGS} + LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} + DEFS ${CHEETAH_COMPILE_DEFS} + VERSION "${CHEETAH_ABI_VERSION}.0" + SOVERSION ${CHEETAH_ABI_VERSION} + PARENT_TARGET cheetah) if (CHEETAH_BUILD_ASAN_VER) - add_cheetah_runtime(opencilk-asan - STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_SOURCES} + add_cheetah_runtime(${libasan} + SHARED + OS ${CHEETAH_SUPPORTED_OS} + ARCHS ${CHEETAH_SUPPORTED_ARCH} + SOURCES ${${src}} CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} + LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} DEFS ${CHEETAH_ASAN_COMPILE_DEFS} + VERSION "${CHEETAH_ABI_VERSION}.0" + SOVERSION ${CHEETAH_ABI_VERSION} PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-c + endif() + endforeach() + endif() + if (CHEETAH_ENABLE_STATIC) + foreach (lib libasan src IN ZIP_LISTS CHEETAH_LIBRARIES CHEETAH_ASAN_LIBRARIES CHEETAH_LIBRARY_SOURCES) + add_cheetah_runtime(${lib} + STATIC + OS ${CHEETAH_SUPPORTED_OS} + ARCHS ${CHEETAH_SUPPORTED_ARCH} + SOURCES ${${src}} + CFLAGS ${CHEETAH_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_LINK_FLAGS} + LINK_LIBS ${CHEETAH_COMMON_LIBS} + DEFS ${CHEETAH_COMPILE_DEFS} + PARENT_TARGET cheetah) + if (CHEETAH_BUILD_ASAN_VER) + add_cheetah_runtime(${libasan} STATIC - ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_C_SOURCES} + OS ${CHEETAH_SUPPORTED_OS} + ARCHS ${CHEETAH_SUPPORTED_ARCH} + SOURCES ${${src}} CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} LINK_LIBS ${CHEETAH_COMMON_LIBS} DEFS ${CHEETAH_ASAN_COMPILE_DEFS} PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-asan-personality-cpp - STATIC + endif() + endforeach() + endif() +else() # Not Apple + foreach (arch ${CHEETAH_SUPPORTED_ARCH}) + foreach (bitcode bitcodeasan src IN ZIP_LISTS CHEETAH_BITCODES CHEETAH_ASAN_BITCODES CHEETAH_BITCODE_SOURCES) + add_cheetah_bitcode(${bitcode} + ARCHS ${arch} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${${src}} + CFLAGS ${CHEETAH_BITCODE_ABI_COMPILE_FLAGS} + DEFS ${CHEETAH_BITCODE_ABI_COMPILE_DEFS} + PARENT_TARGET cheetah) + if (CHEETAH_BUILD_ASAN_VER) + add_cheetah_bitcode(${bitcodeasan} ARCHS ${arch} - SOURCES ${CHEETAH_PERSONALITY_CPP_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${${src}} + CFLAGS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_FLAGS} + DEFS ${CHEETAH_BITCODE_ABI_ASAN_COMPILE_DEFS} PARENT_TARGET cheetah) - - add_cheetah_runtime(opencilk-pedigrees-asan - STATIC + endif() + endforeach() + foreach (lib libasan src IN ZIP_LISTS CHEETAH_LIBRARIES CHEETAH_ASAN_LIBRARIES CHEETAH_LIBRARY_SOURCES) + if (CHEETAH_ENABLE_SHARED) + add_cheetah_runtime(${lib} + SHARED ARCHS ${arch} - SOURCES ${CHEETAH_PEDIGREE_LIB_SOURCES} - CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} - LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} - LINK_LIBS ${CHEETAH_COMMON_LIBS} - DEFS ${CHEETAH_ASAN_COMPILE_DEFS} + SOURCES ${${src}} + CFLAGS ${CHEETAH_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_LINK_FLAGS} + LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} + DEFS ${CHEETAH_COMPILE_DEFS} + VERSION "${CHEETAH_ABI_VERSION}.0" + SOVERSION ${CHEETAH_ABI_VERSION} PARENT_TARGET cheetah) + if (CHEETAH_BUILD_ASAN_VER) + add_cheetah_runtime(${libasan} + SHARED + ARCHS ${arch} + SOURCES ${${src}} + CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} + LINK_LIBS ${CHEETAH_DYNAMIC_LIBS} + DEFS ${CHEETAH_ASAN_COMPILE_DEFS} + VERSION "${CHEETAH_ABI_VERSION}.0" + SOVERSION ${CHEETAH_ABI_VERSION} + PARENT_TARGET cheetah) + endif() endif() - endif() + if (CHEETAH_ENABLE_STATIC) + add_cheetah_runtime(${lib} + STATIC + ARCHS ${arch} + SOURCES ${${src}} + CFLAGS ${CHEETAH_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_LINK_FLAGS} + LINK_LIBS ${CHEETAH_COMMON_LIBS} + DEFS ${CHEETAH_COMPILE_DEFS} + PARENT_TARGET cheetah) + if (CHEETAH_BUILD_ASAN_VER) + add_cheetah_runtime(${libasan} + STATIC + ARCHS ${arch} + SOURCES ${${src}} + CFLAGS ${CHEETAH_ASAN_COMPILE_FLAGS} + LINK_FLAGS ${CHEETAH_ASAN_LINK_FLAGS} + LINK_LIBS ${CHEETAH_COMMON_LIBS} + DEFS ${CHEETAH_ASAN_COMPILE_DEFS} + PARENT_TARGET cheetah) + endif() + endif() + endforeach() endforeach() endif() diff --git a/runtime/Makefile b/runtime/Makefile index 3b9163c4..e5876a1d 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -8,7 +8,7 @@ REDUCER_DEF = -DREDUCER_MODULE RESOURCE_DIR=$(realpath ..) MAIN = $(RTS_LIBDIR)/$(RTS_LIB) BITCODE_ABI = $(MAIN)-abi.bc -SRCS = $(filter-out pedigree_ext.c, $(filter-out $(PEDIGREE_LIB_SRC).c, $(filter-out $(PERSON_C_SRC).c, $(filter-out $(PERSON_CPP_SRC).c, $(wildcard *.c))))) +SRCS = $(filter-out pedigree_ext.c $(PEDIGREE_LIB_SRC).c $(PERSON_C_SRC).c $(PERSON_CPP_SRC).cpp, $(wildcard *.c)) HDRS = $(wildcard *.h) OBJS = $(patsubst %.c,./build/%.o,$(SRCS)) INCLUDES = -I../include/ @@ -27,25 +27,25 @@ PEDIGREE_LIB_SRC = pedigree_lib all: build $(RTS_LIBDIR) $(MAIN).a $(MAIN).so $(PERSON_C).a $(PERSON_C).so $(PERSON_CPP).a $(PERSON_CPP).so $(BITCODE_ABI) $(MAIN).a: $(OBJS) - ar rcs $@ $^ + $(AR) rcs $@ $^ $(MAIN).so: $(OBJS) - $(CC) -shared -o $@ $^ -lpthread + $(CC) -shared -o $@ $^ $(PERSON_C).a: build/$(PERSON_C_SRC).o - ar rcs $@ $^ + $(AR) rcs $@ $^ $(PERSON_C).so: build/$(PERSON_C_SRC).o - $(CC) -shared -o $@ $^ + $(CC) -shared -o $@ $^ -L$(RTS_LIBDIR) -lopencilk $(PERSON_CPP).a: build/$(PERSON_CPP_SRC).o - ar rcs $@ $^ + $(AR) rcs $@ $^ $(PERSON_CPP).so: ./build/$(PERSON_CPP_SRC).o - $(CC) -shared -o $@ $^ + $(CXX) -shared -o $@ $^ -L$(RTS_LIBDIR) -lopencilk $(PEDIGREE_LIB).a: build/$(PEDIGREE_LIB_SRC).o - ar rcs $@ $^ + $(AR) rcs $@ $^ $(PEDIGREE_LIB).so: ./build/$(PEDIGREE_LIB_SRC).o $(CC) -shared -o $@ $^ @@ -59,8 +59,11 @@ $(RTS_LIBDIR): build/%.o: %.c $(HDRS) $(CC) -c $(OPTIONS) -o $@ $< +build/%.o: %.cpp $(HDRS) + $(CXX) -c $(OPTIONS) -o $@ $< + build/cilk2c_inlined.bc: cilk2c_inlined.c $(HDRS) - $(CC) -O3 -DCHEETAH_API="" -DCHEETAH_INTERNAL_NORETURN='__attribute__((noreturn))' -DCHEETAH_INTERNAL="" -DCILK_DEBUG=0 -c -emit-llvm $(INCLUDES) -gdwarf-4 -g -o $@ $< + $(CC) $(OPT) -DCHEETAH_API="" -DCHEETAH_INTERNAL_NORETURN='__attribute__((noreturn))' -DCHEETAH_INTERNAL="" -DCILK_DEBUG=0 -c -emit-llvm $(INCLUDES) -gdwarf-4 -g -o $@ $< $(BITCODE_ABI) : build/cilk2c_inlined.bc cp $< $@ diff --git a/runtime/global.c b/runtime/global.c index 12415c28..45097ae7 100644 --- a/runtime/global.c +++ b/runtime/global.c @@ -118,7 +118,7 @@ static void parse_rts_environment(global_state *g) { if (g->options.nproc == 0) { // use the number of cores online right now int available_cores = 0; -#ifdef CPU_SETSIZE +#if defined(CPU_SETSIZE) && !defined(ANDROID) cpu_set_t process_mask; // get the mask from the parent thread (master thread) int err = pthread_getaffinity_np(pthread_self(), sizeof(process_mask), diff --git a/runtime/personality-cpp.c b/runtime/personality-cpp.cpp similarity index 97% rename from runtime/personality-cpp.c rename to runtime/personality-cpp.cpp index d2b830c8..dfd7b8c3 100644 --- a/runtime/personality-cpp.c +++ b/runtime/personality-cpp.cpp @@ -1,4 +1,4 @@ -#include +#include #include typedef _Unwind_Reason_Code (*__personality_routine)( @@ -6,6 +6,7 @@ typedef _Unwind_Reason_Code (*__personality_routine)( struct _Unwind_Exception *exception_object, struct _Unwind_Context *context); +extern "C" { _Unwind_Reason_Code __gxx_personality_v0(int version, _Unwind_Action actions, uint64_t exception_class, struct _Unwind_Exception *ue_header, @@ -30,3 +31,4 @@ _Unwind_Reason_Code __cilk_personality_v0(int version, _Unwind_Action actions, return __cilk_personality_cpp_v0(version, actions, exception_class, ue_header, context); } +}