# Defines LIBC_TARGET_ARCHITECTURE and associated macros.
include(LLVMLibCArchitectures)
+# Flags to pass down to the compiler while building the libc functions.
+set(LIBC_COMPILE_OPTIONS_DEFAULT "" CACHE STRING "Architecture to tell clang to optimize for (e.g. -march=... or -mcpu=...)")
+
# Check --print-resource-dir to find the compiler resource dir if this flag
# is supported by the compiler.
execute_process(
STATIC
${objects}
)
- set_target_properties(
- ${target_name}
- PROPERTIES
- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- )
+ set_target_properties(${target_name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endfunction(add_entrypoint_library)
# Rule to build a shared library of redirector objects.
SHARED
${obj_files}
)
- set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-
- target_link_libraries(
- ${target_name}
- -nostdlib -lc -lm
- )
-
- set_target_properties(
- ${target_name}
- PROPERTIES
- LINKER_LANGUAGE "C"
- )
+ set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ target_link_libraries(${target_name} -nostdlib -lc -lm)
+ set_target_properties(${target_name} PROPERTIES LINKER_LANGUAGE "C")
endfunction(add_redirector_library)
set(HDR_LIBRARY_TARGET_TYPE "HDR_LIBRARY")
set(OBJECT_LIBRARY_TARGET_TYPE "OBJECT_LIBRARY")
+function(_get_common_compile_options output_var)
+ set(${output_var} -fpie ${LLVM_CXX_STD_default} -ffreestanding ${LIBC_COMPILE_OPTIONS_DEFAULT} ${ARGN} PARENT_SCOPE)
+endfunction()
+
# Rule which is essentially a wrapper over add_library to compile a set of
# sources to object files.
# Usage:
${LIBC_SOURCE_DIR}
${LIBC_BUILD_DIR}
)
- if(ADD_OBJECT_COMPILE_OPTIONS)
- target_compile_options(
- ${fq_target_name}
- PRIVATE ${ADD_OBJECT_COMPILE_OPTIONS}
- )
- endif()
+ _get_common_compile_options(compile_options ${ADD_OBJECT_COMPILE_OPTIONS})
+ target_compile_options(${fq_target_name} PRIVATE ${compile_options})
get_fq_deps_list(fq_deps_list ${ADD_OBJECT_DEPENDS})
if(fq_deps_list)
message(FATAL_ERROR "`add_entrypoint_object` rule requires HDRS to be specified.")
endif()
- set(common_compile_options -fpie ${LLVM_CXX_STD_default} -ffreestanding ${ADD_ENTRYPOINT_OBJ_COMPILE_OPTIONS})
+ _get_common_compile_options(common_compile_options ${ADD_ENTRYPOINT_OBJ_COMPILE_OPTIONS})
set(internal_target_name ${fq_target_name}.__internal__)
set(include_dirs ${LIBC_BUILD_DIR}/include ${LIBC_SOURCE_DIR} ${LIBC_BUILD_DIR})
get_fq_deps_list(fq_deps_list ${ADD_ENTRYPOINT_OBJ_DEPENDS})
${ADD_ENTRYPOINT_OBJ_SRCS}
${ADD_ENTRYPOINT_OBJ_HDRS}
)
- target_compile_options(
- ${fq_target_name} BEFORE PRIVATE ${common_compile_options} -DLLVM_LIBC_PUBLIC_PACKAGING
- )
+ target_compile_options(${fq_target_name} BEFORE PRIVATE ${common_compile_options} -DLLVM_LIBC_PUBLIC_PACKAGING)
target_include_directories(${fq_target_name} PRIVATE ${include_dirs})
add_dependencies(${fq_target_name} ${full_deps_list})
)
target_compile_options(
${target_name}
- BEFORE PRIVATE -fPIC
+ BEFORE PRIVATE -fPIC ${LIBC_COMPILE_OPTIONS_DEFAULT}
)
endfunction(add_redirector_object)