Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1diff --git a/CMakeLists.txt b/CMakeLists.txt 2index 62b857b..d21c7f4 100644 3--- a/CMakeLists.txt 4+++ b/CMakeLists.txt 5@@ -147,8 +147,8 @@ if (UNIX) 6 list(APPEND AMD_COMGR_PUBLIC_LINKER_OPTIONS -pthread) 7 if (NOT APPLE AND COMGR_BUILD_SHARED_LIBS) 8 configure_file( 9- ${CMAKE_CURRENT_SOURCE_DIR}/src/exportmap.in 10- ${CMAKE_CURRENT_BINARY_DIR}/src/exportmap @ONLY) 11+ src/exportmap.in 12+ src/exportmap @ONLY) 13 list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS 14 "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/src/exportmap") 15 # When building a shared library with -fsanitize=address we can't be 16@@ -175,10 +175,6 @@ endif() 17 # the shared header. 18 list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS AMD_COMGR_EXPORT) 19 20-configure_file( 21- ${CMAKE_CURRENT_SOURCE_DIR}/include/amd_comgr.h.in 22- ${CMAKE_CURRENT_BINARY_DIR}/include/amd_comgr.h @ONLY) 23- 24 include(bc2h) 25 include(opencl_pch) 26 include(DeviceLibs) 27@@ -212,10 +208,14 @@ target_include_directories(amd_comgr 28 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> 29 $<INSTALL_INTERFACE:include>) 30 31+configure_file( 32+ include/amd_comgr.h.in 33+ include/amd_comgr.h @ONLY) 34+ 35 set(AMD_COMGR_CONFIG_NAME amd_comgr-config.cmake) 36 set(AMD_COMGR_TARGETS_NAME amd_comgr-targets.cmake) 37 set(AMD_COMGR_VERSION_NAME amd_comgr-config-version.cmake) 38-set(AMD_COMGR_PACKAGE_PREFIX ${CMAKE_INSTALL_LIBDIR}/cmake/amd_comgr) 39+set(AMD_COMGR_PACKAGE_PREFIX cmake/amd_comgr) 40 41 # Generate the build-tree package. 42 set(AMD_COMGR_PREFIX_CODE) 43@@ -226,13 +226,13 @@ if (NOT COMGR_BUILD_SHARED_LIBS) 44 endif() 45 46 set(AMD_COMGR_TARGETS_PATH 47- "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 48+ "${CMAKE_CURRENT_BINARY_DIR}/lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 49 set(AMD_COMGR_VERSION_PATH 50- "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_VERSION_NAME}") 51+ "${CMAKE_CURRENT_BINARY_DIR}/lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_VERSION_NAME}") 52 export(TARGETS amd_comgr 53- FILE "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 54+ FILE "lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 55 configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in" 56- "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_CONFIG_NAME}" 57+ "lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_CONFIG_NAME}" 58 @ONLY) 59 write_basic_package_version_file("${AMD_COMGR_VERSION_PATH}" 60 VERSION "${amd_comgr_VERSION}" 61@@ -266,7 +266,7 @@ install(FILES 62 set(AMD_COMGR_PREFIX_CODE " 63 # Derive absolute install prefix from config file path. 64 get_filename_component(AMD_COMGR_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)") 65-string(REGEX REPLACE "/" ";" count "${AMD_COMGR_PACKAGE_PREFIX}") 66+string(REGEX REPLACE "/" ";" count "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}") 67 foreach(p ${count}) 68 set(AMD_COMGR_PREFIX_CODE "${AMD_COMGR_PREFIX_CODE} 69 get_filename_component(AMD_COMGR_PREFIX \"\${AMD_COMGR_PREFIX}\" PATH)") 70@@ -278,20 +278,20 @@ if (NOT COMGR_BUILD_SHARED_LIBS) 71 string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(LLD REQUIRED)\n") 72 endif() 73 74-set(AMD_COMGR_TARGETS_PATH "\${AMD_COMGR_PREFIX}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 75+set(AMD_COMGR_TARGETS_PATH "\${AMD_COMGR_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 76 configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in" 77- "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}.install" 78+ "${AMD_COMGR_CONFIG_NAME}.install" 79 @ONLY) 80 install(FILES 81 "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}.install" 82- DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}" 83+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}" 84 RENAME "${AMD_COMGR_CONFIG_NAME}") 85 install(EXPORT amd_comgr_export 86- DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}" 87+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}" 88 FILE "${AMD_COMGR_TARGETS_NAME}") 89 install(FILES 90 "${AMD_COMGR_VERSION_PATH}" 91- DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}") 92+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}") 93 94 if(TARGET clangFrontendTool) 95 set(CLANG_LIBS 96diff --git a/cmake/DeviceLibs.cmake b/cmake/DeviceLibs.cmake 97index 27e9546..dfe1b57 100644 98--- a/cmake/DeviceLibs.cmake 99+++ b/cmake/DeviceLibs.cmake 100@@ -1,8 +1,7 @@ 101 set(INC_DIR ${CMAKE_CURRENT_BINARY_DIR}/include) 102 103 set(GEN_LIBRARY_INC_FILE ${INC_DIR}/libraries.inc) 104- 105-file(WRITE ${GEN_LIBRARY_INC_FILE} "// Automatically generated file; DO NOT EDIT.\n") 106+set(GEN_LIBRARY_DEFS_INC_FILE ${INC_DIR}/libraries_defs.inc) 107 108 # cmake does not provide a way to query targets produced by a project, 109 # so we have to make one up. Ordinarily, individual library target 110@@ -23,6 +22,7 @@ if(NOT AMD_DEVICE_LIBS_TARGETS) 111 message(FATAL_ERROR "Could not find list of device libraries") 112 endif() 113 114+set(TARGETS_INCLUDES "") 115 foreach(AMDGCN_LIB_TARGET ${AMD_DEVICE_LIBS_TARGETS}) 116 set(header ${AMDGCN_LIB_TARGET}.inc) 117 118@@ -54,75 +54,52 @@ foreach(AMDGCN_LIB_TARGET ${AMD_DEVICE_LIBS_TARGETS}) 119 add_custom_target(${AMDGCN_LIB_TARGET}_header DEPENDS ${INC_DIR}/${header}) 120 add_dependencies(amd_comgr ${AMDGCN_LIB_TARGET}_header) 121 122- file(APPEND ${GEN_LIBRARY_INC_FILE} "#include \"${header}\"\n") 123+ list(APPEND TARGETS_INCLUDES "#include \"${header}\"") 124+endforeach() 125+ 126+list(JOIN TARGETS_INCLUDES "\n" TARGETS_INCLUDES) 127+file(GENERATE OUTPUT ${GEN_LIBRARY_INC_FILE} CONTENT "${TARGETS_INCLUDES}") 128+ 129+foreach(OPENCL_VERSION 1.2 2.0) 130+ string(REPLACE . _ OPENCL_UNDERSCORE_VERSION ${OPENCL_VERSION}) 131+ add_custom_command(OUTPUT ${INC_DIR}/opencl${OPENCL_VERSION}-c.inc 132+ COMMAND bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl${OPENCL_VERSION}-c.pch 133+ ${INC_DIR}/opencl${OPENCL_VERSION}-c.inc 134+ opencl${OPENCL_UNDERSCORE_VERSION}_c 135+ DEPENDS bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl${OPENCL_VERSION}-c.pch 136+ COMMENT "Generating opencl${OPENCL_VERSION}-c.inc" 137+ ) 138+ set_property(DIRECTORY APPEND PROPERTY 139+ ADDITIONAL_MAKE_CLEAN_FILES ${INC_DIR}/opencl${OPENCL_VERSION}-c.inc) 140+ add_custom_target(opencl${OPENCL_VERSION}-c.inc_target DEPENDS ${INC_DIR}/opencl${OPENCL_VERSION}-c.inc) 141+ add_dependencies(amd_comgr opencl${OPENCL_VERSION}-c.inc_target) 142 endforeach() 143 144-add_custom_command(OUTPUT ${INC_DIR}/opencl1.2-c.inc 145- COMMAND bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.pch 146- ${INC_DIR}/opencl1.2-c.inc 147- opencl1_2_c 148- DEPENDS bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.pch 149- COMMENT "Generating opencl1.2-c.inc" 150-) 151-set_property(DIRECTORY APPEND PROPERTY 152- ADDITIONAL_MAKE_CLEAN_FILES ${INC_DIR}/opencl1.2-c.inc) 153-add_custom_target(opencl1.2-c.inc_target DEPENDS ${INC_DIR}/opencl1.2-c.inc) 154-add_dependencies(amd_comgr opencl1.2-c.inc_target) 155-file(APPEND ${GEN_LIBRARY_INC_FILE} "#include \"opencl1.2-c.inc\"\n") 156- 157-add_custom_command(OUTPUT ${INC_DIR}/opencl2.0-c.inc 158- COMMAND bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.pch 159- ${INC_DIR}/opencl2.0-c.inc 160- opencl2_0_c 161- DEPENDS bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.pch 162- COMMENT "Generating opencl2.0-c.inc" 163-) 164-set_property(DIRECTORY APPEND PROPERTY 165- ADDITIONAL_MAKE_CLEAN_FILES ${INC_DIR}/opencl2.0-c.inc) 166-add_custom_target(opencl2.0-c.inc_target DEPENDS ${INC_DIR}/opencl2.0-c.inc) 167-add_dependencies(amd_comgr opencl2.0-c.inc_target) 168-file(APPEND ${GEN_LIBRARY_INC_FILE} "#include \"opencl2.0-c.inc\"\n") 169- 170-# Generate function to select libraries for a given GFXIP number. 171-file(APPEND ${GEN_LIBRARY_INC_FILE} "#include \"llvm/ADT/StringRef.h\"\n") 172-file(APPEND ${GEN_LIBRARY_INC_FILE} 173- "static std::tuple<const char*, const void*, size_t> get_oclc_isa_version(llvm::StringRef gfxip) {") 174+set(TARGETS_DEFS "") 175+list(APPEND TARGETS_DEFS "#ifndef AMD_DEVICE_LIBS_TARGET\n#define AMD_DEVICE_LIBS_TARGET(t)\n#endif") 176+list(APPEND TARGETS_DEFS "#ifndef AMD_DEVICE_LIBS_GFXIP\n#define AMD_DEVICE_LIBS_GFXIP(t, g)\n#endif") 177+list(APPEND TARGETS_DEFS "#ifndef AMD_DEVICE_LIBS_FUNCTION\n#define AMD_DEVICE_LIBS_FUNCTION(t, f)\n#endif") 178+list(APPEND TARGETS_DEFS "") 179 foreach(AMDGCN_LIB_TARGET ${AMD_DEVICE_LIBS_TARGETS}) 180+ list(APPEND TARGETS_DEFS "AMD_DEVICE_LIBS_TARGET(${AMDGCN_LIB_TARGET})") 181+ # Generate function to select libraries for a given GFXIP number. 182 if (${AMDGCN_LIB_TARGET} MATCHES "^oclc_isa_version_.+$") 183 string(REGEX REPLACE "^oclc_isa_version_(.+)$" "\\1" gfxip ${AMDGCN_LIB_TARGET}) 184- file(APPEND ${GEN_LIBRARY_INC_FILE} 185- "if (gfxip == \"${gfxip}\") return std::make_tuple(\"${AMDGCN_LIB_TARGET}.bc\", ${AMDGCN_LIB_TARGET}_lib, ${AMDGCN_LIB_TARGET}_lib_size);") 186+ list(APPEND TARGETS_DEFS "AMD_DEVICE_LIBS_GFXIP(${AMDGCN_LIB_TARGET}, \"${gfxip}\")") 187 endif() 188-endforeach() 189-file(APPEND ${GEN_LIBRARY_INC_FILE} 190- "return std::make_tuple(nullptr, nullptr, 0); }") 191- 192-# Generate function to select libraries for given feature. 193-foreach(AMDGCN_LIB_TARGET ${AMD_DEVICE_LIBS_TARGETS}) 194+ # Generate function to select libraries for given feature. 195 if (${AMDGCN_LIB_TARGET} MATCHES "^oclc_.*_on$") 196 string(REGEX REPLACE "^oclc_(.*)_on" "\\1" function ${AMDGCN_LIB_TARGET}) 197- file(APPEND ${GEN_LIBRARY_INC_FILE} 198- "static std::tuple<const char*, const void*, size_t> get_oclc_${function}(bool on) { \ 199- return std::make_tuple( \ 200- on ? \"oclc_${function}_on_lib.bc\" : \"oclc_${function}_off_lib.bc\", \ 201- on ? oclc_${function}_on_lib : oclc_${function}_off_lib, \ 202- on ? oclc_${function}_on_lib_size : oclc_${function}_off_lib_size \ 203- ); }") 204+ list(APPEND TARGETS_DEFS "AMD_DEVICE_LIBS_FUNCTION(${AMDGCN_LIB_TARGET}, ${function})") 205 endif() 206 endforeach() 207 208-# Generate function yield all libraries. 209-file(APPEND ${GEN_LIBRARY_INC_FILE} "\n#include \"llvm/ADT/ArrayRef.h\"\n") 210-file(APPEND ${GEN_LIBRARY_INC_FILE} 211- "llvm::ArrayRef<std::tuple<llvm::StringRef, llvm::StringRef>> COMGR::getDeviceLibraries() { \ 212- static std::tuple<llvm::StringRef, llvm::StringRef> DeviceLibs[] = {") 213-foreach(AMDGCN_LIB_TARGET ${AMD_DEVICE_LIBS_TARGETS}) 214- file(APPEND ${GEN_LIBRARY_INC_FILE} 215- "{\"${AMDGCN_LIB_TARGET}.bc\", llvm::StringRef(reinterpret_cast<const char *>(${AMDGCN_LIB_TARGET}_lib), ${AMDGCN_LIB_TARGET}_lib_size)},") 216-endforeach() 217-file(APPEND ${GEN_LIBRARY_INC_FILE} 218- "}; \ 219- return DeviceLibs; \ 220- }") 221+list(APPEND TARGETS_DEFS "") 222+list(APPEND TARGETS_DEFS "#undef AMD_DEVICE_LIBS_TARGET") 223+list(APPEND TARGETS_DEFS "#undef AMD_DEVICE_LIBS_GFXIP") 224+list(APPEND TARGETS_DEFS "#undef AMD_DEVICE_LIBS_FUNCTION") 225+ 226+list(JOIN TARGETS_DEFS "\n" TARGETS_DEFS) 227+file(GENERATE OUTPUT ${GEN_LIBRARY_DEFS_INC_FILE} CONTENT "${TARGETS_DEFS}") 228 229 include_directories(${INC_DIR}) 230diff --git a/cmake/bc2h.cmake b/cmake/bc2h.cmake 231index 146fe2b..9134985 100644 232--- a/cmake/bc2h.cmake 233+++ b/cmake/bc2h.cmake 234@@ -1,40 +1,41 @@ 235-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c 236-"#include <stdio.h>\n" 237-"int main(int argc, char **argv){\n" 238-" FILE *ifp, *ofp;\n" 239-" int c, i, l;\n" 240-" if (argc != 4) return 1;\n" 241-" ifp = fopen(argv[1], \"rb\");\n" 242-" if (!ifp) return 1;\n" 243-" i = fseek(ifp, 0, SEEK_END);\n" 244-" if (i < 0) return 1;\n" 245-" l = ftell(ifp);\n" 246-" if (l < 0) return 1;\n" 247-" i = fseek(ifp, 0, SEEK_SET);\n" 248-" if (i < 0) return 1;\n" 249-" ofp = fopen(argv[2], \"wb+\");\n" 250-" if (!ofp) return 1;\n" 251-" fprintf(ofp, \"#define %s_size %d\\n\\n\"\n" 252-" \"#if defined __GNUC__\\n\"\n" 253-" \"__attribute__((aligned (4096)))\\n\"\n" 254-" \"#elif defined _MSC_VER\\n\"\n" 255-" \"__declspec(align(4096))\\n\"\n" 256-" \"#endif\\n\"\n" 257-" \"static const unsigned char %s[%s_size+1] = {\",\n" 258-" argv[3], l,\n" 259-" argv[3], argv[3]);\n" 260-" i = 0;\n" 261-" while ((c = getc(ifp)) != EOF) {\n" 262-" if (0 == (i&7)) fprintf(ofp, \"\\n \");\n" 263-" fprintf(ofp, \" 0x%02x,\", c);\n" 264-" ++i;\n" 265-" }\n" 266-" fprintf(ofp, \" 0x00\\n};\\n\\n\");\n" 267-" fclose(ifp);\n" 268-" fclose(ofp);\n" 269-" return 0;\n" 270-"}\n" 271-) 272+file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c 273+ CONTENT 274+"#include <stdio.h> 275+int main(int argc, char **argv){ 276+ FILE *ifp, *ofp; 277+ int c, i, l; 278+ if (argc != 4) return 1; 279+ ifp = fopen(argv[1], \"rb\"); 280+ if (!ifp) return 1; 281+ i = fseek(ifp, 0, SEEK_END); 282+ if (i < 0) return 1; 283+ l = ftell(ifp); 284+ if (l < 0) return 1; 285+ i = fseek(ifp, 0, SEEK_SET); 286+ if (i < 0) return 1; 287+ ofp = fopen(argv[2], \"wb+\"); 288+ if (!ofp) return 1; 289+ fprintf(ofp, \"#define %s_size %d\\n\\n\" 290+ \"#if defined __GNUC__\\n\" 291+ \"__attribute__((aligned (4096)))\\n\" 292+ \"#elif defined _MSC_VER\\n\" 293+ \"__declspec(align(4096))\\n\" 294+ \"#endif\\n\" 295+ \"static const unsigned char %s[%s_size+1] = {\", 296+ argv[3], l, 297+ argv[3], argv[3]); 298+ i = 0; 299+ while ((c = getc(ifp)) != EOF) { 300+ if (0 == (i&7)) fprintf(ofp, \"\\n \"); 301+ fprintf(ofp, \" 0x%02x,\", c); 302+ ++i; 303+ } 304+ fprintf(ofp, \" 0x00\\n};\\n\\n\"); 305+ fclose(ifp); 306+ fclose(ofp); 307+ return 0; 308+} 309+") 310 311 add_executable(bc2h ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c) 312 if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") 313diff --git a/src/comgr-device-libs.cpp b/src/comgr-device-libs.cpp 314index 4d2b914..80786d1 100644 315--- a/src/comgr-device-libs.cpp 316+++ b/src/comgr-device-libs.cpp 317@@ -35,7 +35,7 @@ 318 319 #include "comgr-device-libs.h" 320 #include "comgr.h" 321-#include "libraries.inc" 322+#include "comgr-libraries.h" 323 #include "llvm/ADT/StringSwitch.h" 324 #include <cstdint> 325 326diff --git a/src/comgr-libraries.h b/src/comgr-libraries.h 327new file mode 100644 328index 0000000..3caa0a0 329--- /dev/null 330+++ b/src/comgr-libraries.h 331@@ -0,0 +1,34 @@ 332+#include "libraries.inc" 333+#include "opencl1.2-c.inc" 334+#include "opencl2.0-c.inc" 335+#include "llvm/ADT/StringRef.h" 336+#include "llvm/ADT/ArrayRef.h" 337+ 338+static std::tuple<const char*, const void*, size_t> get_oclc_isa_version(llvm::StringRef gfxip) { 339+#define AMD_DEVICE_LIBS_GFXIP(target, target_gfxip) \ 340+ if (gfxip == target_gfxip) return std::make_tuple(#target ".bc", target##_lib, target##_lib_size); 341+#include "libraries_defs.inc" 342+ 343+ return std::make_tuple(nullptr, nullptr, 0); 344+} 345+ 346+#define AMD_DEVICE_LIBS_FUNCTION(target, function) \ 347+ static std::tuple<const char*, const void*, size_t> get_oclc_##function(bool on) { \ 348+ return std::make_tuple( \ 349+ on ? "oclc_" #function "_on_lib.bc" : "oclc_" #function "_off_lib.bc", \ 350+ on ? oclc_##function##_on_lib : oclc_##function##_off_lib, \ 351+ on ? oclc_##function##_on_lib_size : oclc_##function##_off_lib_size \ 352+ ); \ 353+ } 354+#include "libraries_defs.inc" 355+ 356+llvm::ArrayRef<std::tuple<llvm::StringRef, llvm::StringRef>> COMGR::getDeviceLibraries() { 357+ static std::tuple<llvm::StringRef, llvm::StringRef> DeviceLibs[] = { 358+#define AMD_DEVICE_LIBS_TARGET(target) \ 359+ {#target ".bc", llvm::StringRef(reinterpret_cast<const char *>(target##_lib), target##_lib_size)}, 360+#include "libraries_defs.inc" 361+ }; 362+ return DeviceLibs; 363+} 364+ 365+