Skip to content

Commit

Permalink
Version 1.1 release
Browse files Browse the repository at this point in the history
Co-authored-by: Angelina Lee <angelee@gmail.com>
  • Loading branch information
neboat and angelee committed Oct 22, 2021
1 parent c50197a commit 832aeeb
Show file tree
Hide file tree
Showing 107 changed files with 5,471 additions and 14,279 deletions.
153 changes: 59 additions & 94 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

cmake_minimum_required(VERSION 3.9)

if(POLICY CMP0068)
cmake_policy(SET CMP0068 NEW)
set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
endif()

# Add path for custom cheetah modules.
set(CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
Expand All @@ -17,15 +12,13 @@ set(CMAKE_MODULE_PATH
# Check if cheetah is built as a standalone project.
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR CHEETAH_STANDALONE_BUILD)
project(Cheetah CXX C)
set(CHEETAH_STANDALONE_BUILD TRUE)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set(PACKAGE_NAME Cheetah)
set(PACKAGE_VERSION 10.0.1)
set(PACKAGE_VERSION 12.0.0)
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "bugs@opencilk.org")

# Find the LLVM sources and simulate LLVM CMake options.
include(HandleOutOfTreeLLVM)
endif()

# Require out of source build.
Expand All @@ -35,6 +28,18 @@ MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there."
)

# Option to build cheetah into separate directories per target.
# Defaults to true.
option(CHEETAH_DIRECTORY_PER_TARGET "Build cheetah into a separate directory per target." ON)
if (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
set(CHEETAH_ENABLE_PER_TARGET_RUNTIME_DIR ${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR})
else()
set(CHEETAH_ENABLE_PER_TARGET_RUNTIME_DIR ${CHEETAH_DIRECTORY_PER_TARGET})
endif()

include(base-config-ix)
include(CheetahUtils)

#===============================================================================
# Setup CMake Options
#===============================================================================
Expand All @@ -47,26 +52,11 @@ option(CHEETAH_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
option(CHEETAH_USE_COMPILER_RT "Use compiler-rt instead of libgcc" OFF)

option(CHEETAH_INCLUDE_TESTS "Generate build targets for the cheetah unit tests." ${LLVM_INCLUDE_TESTS})
set(CHEETAH_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING
"Define suffix of library directory name (32/64)")
option(CHEETAH_INSTALL_LIBRARY "Install the cheetah library." ON)
set(CHEETAH_TARGET_TRIPLE "" CACHE STRING "Target triple for cross compiling.")
set(CHEETAH_GCC_TOOLCHAIN "" CACHE PATH "GCC toolchain for cross compiling.")
set(CHEETAH_SYSROOT "" CACHE PATH "Sysroot for cross compiling.")

option(CHEETAH_ENABLE_SHARED "Build cheetah as a shared library." ON)
option(CHEETAH_ENABLE_STATIC "Build cheetah as a static library." ON)
option(CHEETAH_ENABLE_BITCODE_ABI "Build cheetah ABI as LLVM bitcode." ON)

cmake_dependent_option(CHEETAH_INSTALL_STATIC_LIBRARY
"Install the static cheetah library." ON
"CHEETAH_ENABLE_STATIC;CHEETAH_INSTALL_LIBRARY" OFF)
cmake_dependent_option(CHEETAH_INSTALL_SHARED_LIBRARY
"Install the shared cheetah library." ON
"CHEETAH_ENABLE_SHARED;CHEETAH_INSTALL_LIBRARY" OFF)
cmake_dependent_option(CHEETAH_INSTALL_BITCODE_ABI
"Install the cheetah ABI LLVM bitcode." ON
"CHEETAH_ENABLE_BITCODE_ABI;CHEETAH_INSTALL_LIBRARY" OFF)
option(CHEETAH_ENABLE_ASAN "Build cheetah with ASan support." ON)

set(CHEETAH_ABI_VERSION "1" CACHE STRING "ABI version of cheetah. Defaults to 1.")

Expand All @@ -78,67 +68,65 @@ endif()

# Default minimum OSX version to support, if
# CMAKE_OSX_DEPLOYMENT_TARGET is not specified
set(CHEETAH_MIN_OSX_VERSION 10.14)
set(DEFAULT_CHEETAH_MIN_OSX_VERSION 10.14)

#===============================================================================
# Configure System
#===============================================================================

set(CHEETAH_COMPILER ${CMAKE_CXX_COMPILER})
set(CHEETAH_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(CHEETAH_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})

if (LLVM_LIBRARY_OUTPUT_INTDIR AND PACKAGE_VERSION)
string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
${PACKAGE_VERSION})
# Setup the paths where cheetah runtime and headers should be stored.
set(CHEETAH_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION})
set(CHEETAH_INSTALL_PREFIX lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION})

if (NOT APPLE)
set(CHEETAH_LIBRARY_DIR ${CHEETAH_OUTPUT_DIR}/lib/${LLVM_DEFAULT_TARGET_TRIPLE})
set(CHEETAH_LIBRARY_INSTALL_DIR ${CHEETAH_INSTALL_PREFIX}/lib/${LLVM_DEFAULT_TARGET_TRIPLE})
if (CHEETAH_LIBDIR_SUFFIX)
string(APPEND CHEETAH_LIBRARY_DIR /${CHEETAH_LIBDIR_SUFFIX})
string(APPEND CHEETAH_LIBRARY_INSTALL_DIR /${CHEETAH_LIBDIR_SUFFIX})
endif()
else()
if(NOT DEFINED CHEETAH_OS_DIR)
string(TOLOWER ${CMAKE_SYSTEM_NAME} CHEETAH_OS_DIR)
if (CHEETAH_STANDALONE_BUILD)
load_llvm_config()
if (TARGET intrinsics_gen)
# Loading the llvm config causes this target to be imported so place it
# under the appropriate folder in an IDE.
set_target_properties(intrinsics_gen PROPERTIES FOLDER "Cheetah Misc")
endif()

find_package(Python3 COMPONENTS Interpreter)
if(NOT Python3_Interpreter_FOUND)
message(WARNING "Python3 not found, using python2 as a fallback")
find_package(Python2 COMPONENTS Interpreter REQUIRED)
if(Python2_VERSION VERSION_LESS 2.7)
message(SEND_ERROR "Python 2.7 or newer is required")
endif()
set(CHEETAH_LIBRARY_DIR ${CHEETAH_OUTPUT_DIR}/lib/${CHEETAH_OS_DIR})
set(CHEETAH_LIBRARY_INSTALL_DIR ${CHEETAH_INSTALL_PREFIX}/lib/${CHEETAH_OS_DIR})

# Treat python2 as python3
add_executable(Python3::Interpreter IMPORTED)
set_target_properties(Python3::Interpreter PROPERTIES
IMPORTED_LOCATION ${Python2_EXECUTABLE})
set(Python3_EXECUTABLE ${Python2_EXECUTABLE})
endif()

set(CHEETAH_HEADER_DIR ${CHEETAH_OUTPUT_DIR}/include)
set(CHEETAH_HEADER_INSTALL_DIR ${CHEETAH_INSTALL_PREFIX}/include)
else()
set(CHEETAH_OUTPUT_DIR ${CHEETAH_BINARY_DIR} CACHE PATH
"Path where built cheetah library should be stored.")
set(CHEETAH_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH
"Path where built cheetah library should be installed.")
set(CHEETAH_LIBRARY_DIR ${CHEETAH_OUTPUT_DIR}/lib${CHEETAH_LIBDIR_SUFFIX})
set(CHEETAH_LIBRARY_INSTALL_DIR ${CHEETAH_INSTALL_PREFIX}/lib${CHEETAH_LIBDIR_SUFFIX})

set(CHEETAH_HEADER_DIR ${CHEETAH_OUTPUT_DIR}/include)
set(CHEETAH_HEADER_INSTALL_DIR ${CHEETAH_INSTALL_PREFIX}/include)
# Ensure that fat libraries are built correctly on Darwin
if(APPLE)
include(UseLibtool)
endif()

# Define default arguments to lit.
set(LIT_ARGS_DEFAULT "-sv")
if (MSVC OR XCODE)
set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
endif()
set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
set(LLVM_LIT_OUTPUT_DIR "${CHEETAH_EXEC_OUTPUT_DIR}")
endif()

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CHEETAH_LIBRARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CHEETAH_LIBRARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CHEETAH_LIBRARY_DIR})
construct_cheetah_default_triple()
if ("${CHEETAH_DEFAULT_TARGET_TRIPLE}" MATCHES ".*hf$")
if (${CHEETAH_DEFAULT_TARGET_ARCH} MATCHES "^arm")
set(CHEETAH_DEFAULT_TARGET_ARCH "armhf")
endif()
endif()

set(CHEETAH_C_FLAGS "")
set(CHEETAH_CXX_FLAGS "")
set(CHEETAH_COMPILE_FLAGS "")
set(CHEETAH_COMPILE_DEFS "")
set(CHEETAH_LINK_FLAGS "")
set(CHEETAH_LIBRARIES "")
set(CHEETAH_COMMON_LIBS "")

if (APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
list(APPEND CHEETAH_COMPILE_FLAGS -mmacosx-version-min=${CHEETAH_MIN_OSX_VERSION})
list(APPEND CHEETAH_LINK_FLAGS -mmacosx-version-min=${CHEETAH_MIN_OSX_VERSION})
endif()
option(CHEETAH_EXTERNALIZE_DEBUGINFO
"Generate dSYM files and strip executables and libraries (Darwin Only)" OFF)

# Include macros for adding and removing cheetah flags.
include(HandleCheetahFlags)
Expand All @@ -147,34 +135,9 @@ include(HandleCheetahFlags)
# Setup Compiler Flags
#===============================================================================

# Configure target flags
if(CHEETAH_TARGET_TRIPLE)
add_target_flags("--target=${CHEETAH_TARGET_TRIPLE}")
elseif(CMAKE_CXX_COMPILER_TARGET)
set(CHEETAH_TARGET_TRIPLE "${CMAKE_CXX_COMPILER_TARGET}")
endif()
if(CHEETAH_SYSROOT)
add_target_flags("--sysroot=${CHEETAH_SYSROOT}")
elseif(CMAKE_SYSROOT)
set(CHEETAH_SYSROOT "${CMAKE_SYSROOT}")
endif()
if(CHEETAH_GCC_TOOLCHAIN)
add_target_flags("--gcc-toolchain=${CHEETAH_GCC_TOOLCHAIN}")
elseif(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
set(CHEETAH_GCC_TOOLCHAIN "${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}")
endif()

if (CHEETAH_TARGET_TRIPLE)
set(TARGET_TRIPLE "${CHEETAH_TARGET_TRIPLE}")
endif()

# Configure compiler.
include(config-ix)

if (APPLE AND CHEETAH_HAS_APP_EXTENSION)
list(APPEND CHEETAH_LINK_FLAGS "-fapplication-extension")
endif()

if (CHEETAH_USE_COMPILER_RT)
list(APPEND CHEETAH_LINK_FLAGS "--rtlib=compiler-rt")
endif()
Expand Down Expand Up @@ -206,6 +169,8 @@ string(REPLACE ";" " " CHEETAH_CXX_FLAGS "${CHEETAH_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CHEETAH_CXX_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CHEETAH_C_FLAGS}")

include(AddCheetah)

#===============================================================================
# Setup Source Code
#===============================================================================
Expand Down
91 changes: 53 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,53 @@
How to build runtime independently from OpenCilk using Makefiles:
- update COMPILER_BASE variable the config.mk to point to the right path
to /path/to/opencilk-project/build/bin (or where its binaries are installed)
- type 'make'

=======================================

How to build runtime independently from OpenCilk using cmake:
- make a build directory at top level and go into it:
> mkdir build
> cd build
- do the cmake configuration step
> cmake -DCMAKE_BUILD_TYPE=Debug ../
- use cmake to build
> cmake --build . -- -j<num of cores>
Note: you can use CMake flags at the configuration step, like
-DCMAKE_C_COMPILER, -DCMAKE_CXX_COMPILER, -DCMAKE_C_FLAGS, etc.

=======================================

How to link with the runtime independently compiled from OpenCilk:
setup your LIBRARY_PATH and LD_LIBRARY_PATH to point to
/path/to/cheetah/runtime

(that's where you can find libopencilkd.a and libopencilk.so)

Alternatively, the compiler by default will look for header files (such as
cilk/cilk.h) in /path/to/opencilk-project/build/lib/clang/9.0.1/include/
and will look for libraries in
/path/to/opencilk-project/build/lib/clang/9.0.1/lib/<something>/
where <something> encodes the architecture and OS

You can copy the necessary header files and compiled libopencilk.*
to these directories where opencilk-project is installed.

## Building a standalone copy of the OpenCilk runtime

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.
2. Run `make`.

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. In particular, make sure to specify `CMAKE_C_COMPILER`
and `LLVM_CONFIG_PATH` to point to the corresponding OpenCilk compiler
binaries. For example:
```
$ cmake -DCMAKE_C_COMPILER=/path/to/opencilk-project/build/bin/clang -DLLVM_CONFIG_PATH=/path/to/opencilk-project/build/bin/llvm-config ../
```
3. Build the runtime:
```
$ cmake --build . -- -j<number of build threads>
```

*Note:* During step 2, you can specify other CMake flags at this step as
well, such as `CMAKE_BUILD_TYPE` or `CMAKE_C_FLAGS`.

To clean the build, run `cmake --build . --target clean` from the build
directory.

## Linking against 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/<target triple>` 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.,
```
/path/to/opencilk-project/build/bin/clang -o fib fib.c -fopencilk -O3 --opencilk-resource-dir=/path/to/cheetah/build
```
Loading

0 comments on commit 832aeeb

Please sign in to comment.