diff --git a/CMakeLists.txt b/CMakeLists.txt index 1598eae3c31..e49be68c718 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,54 +6,56 @@ cmake_minimum_required(VERSION 3.3) +# If we are not building as a part of LLVM, build Flang as a +# standalone project, using LLVM as an external library: +if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + project(Flang) +endif() + # In order to bootstrap the runtime library we need to skip # CMake's Fortran tests SET(CMAKE_Fortran_COMPILER_WORKS 1) - -if( NOT DEFINED TARGET_ARCHITECTURE ) - execute_process(COMMAND uname -m OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE TARGET_ARCHITECTURE) +if (WIN32) + SET(CMAKE_Fortran_ABI_COMPILED 0) + SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1) endif() -if( NOT DEFINED TARGET_OS ) - execute_process(COMMAND uname -s OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE TARGET_OS) +set(TARGET_OS ${CMAKE_SYSTEM_NAME} CACHE STRING "Target OS") +set(TARGET_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture") + +if (POLICY CMP0054) + cmake_policy(SET CMP0054 NEW) endif() if( ${TARGET_OS} STREQUAL "Linux" ) set(OS "LINUX") set(OSNAME "Linux") - if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) - set(ARCHNAME x86-64) - set(ARCH X86) - set(WRDSZ 64) - elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" ) - set(ARCHNAME aarch64) - set(ARCH ARM) - set(WRDSZ 64) - elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" ) - set(ARCHNAME ppc64le) - set(ARCH POWER) - set(WRDSZ 64) - else() - message("Unsupported architecture: ${TARGET_ARCHITECTURE}" ) - return() - endif() else() message("Unsupported OS: ${TARGET_OS}" ) return() endif() -# The cmake documentation states that these are set. They are not so we -# set them here -set(CMAKE_HOST_SYSTEM_NAME ${TARGET_OS}) -set(CMAKE_HOST_SYSTEM_PROCESSOR ${TARGET_ARCHITECTURE}) +if (${TARGET_ARCHITECTURE} MATCHES "^(x86_64|AMD64|amd64)$") + set(TARGET_ARCHITECTURE x86_64) + set(ARCHNAME x86-64) + set(ARCH X86) +elseif (${TARGET_ARCHITECTURE} MATCHES "^(aarch64|arm64)$") + set(TARGET_ARCHITECTURE aarch64) + set(ARCHNAME aarch64) + set(ARCH ARM) +elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" ) + set(ARCHNAME ppc64le) + set(ARCH POWER) +else() + message("Unsupported architecture: ${TARGET_ARCHITECTURE}" ) + return() +endif() + +math(EXPR WRDSZ "${CMAKE_SIZEOF_VOID_P} * 8") # If we are not building as a part of LLVM, build Flang as an # standalone project, using LLVM as an external library: if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - project(Flang) - # Rely on llvm-config. set(CONFIG_OUTPUT) diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 33dc89b848b..ab3c9ba574f 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -9,31 +9,31 @@ set (RUNTIME_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared) add_definitions( -DMAXCPUS=256 -DMAXCPUSL=8 - -DMAXCPUSR=8 - -DTARGET_LINUX - -DTARGET_LLVM - -DLINUX + -DMAXCPUSR=8 + -DTARGET_LLVM -DPGF90 -DPGFLANG -DNATIVE_FPCVT -DPGI_LITTLE_ENDIAN -DINLINE_MEMOPS + -DTARGET_${OS} + -D${OS} ) if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) add_definitions( -DTARGET_X8664 - -DTARGET_LINUX_X8664 + -DTARGET_${OS}_X8664 ) elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" ) add_definitions( -DTARGET_LLVM_ARM64 - -DTARGET_LINUX_ARM + -DTARGET_${OS}_ARM ) elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" ) add_definitions( - -DTARGET_LINUX_POWER - -DLINUX_POWER + -DTARGET_${OS}_POWER + -D${OS}_POWER ) endif() diff --git a/runtime/flang/CMakeLists.txt b/runtime/flang/CMakeLists.txt index 8ad885de315..4b775a15334 100644 --- a/runtime/flang/CMakeLists.txt +++ b/runtime/flang/CMakeLists.txt @@ -8,7 +8,11 @@ enable_language(C ASM Fortran) # Enable assembly and Fortran SET(ASM_OPTIONS "-DLINUX_ELF") SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" ) -SET(CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs") +if (NOT MSVC) + SET(CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs") +else () + SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -no-flang-libs") +endif () # We are using Fortran driver to build this library with fresh compiler # components, so point its binary directory to the build directory to pick up @@ -187,7 +191,7 @@ SET(FTN_INTRINSICS_DESC_DEP red_any.c red_count.c red_findloc.c - red_iany.c + red_iany.c red_maxloc.c red_minloc.c red_maxval.c @@ -418,7 +422,7 @@ separate_arguments(SEPARATED_CMAKE_Fortran_FLAGS NATIVE_COMMAND ${CMAKE_Fortran_ add_custom_command( OUTPUT "${I8_FILES_DIR}/ieee_arithmetic.F95" COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS} - "${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8 + "${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8 > "${I8_FILES_DIR}/ieee_arithmetic.F95" COMMENT "Preprocessing ieee_arithmetic.F95" VERBATIM @@ -428,7 +432,7 @@ add_custom_command( add_custom_command( OUTPUT "${I8_FILES_DIR}/ieee_exceptions.F95" COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS} - "${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8 + "${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8 > "${I8_FILES_DIR}/ieee_exceptions.F95" COMMENT "Preprocessing ieee_exceptions.F95" VERBATIM @@ -460,7 +464,7 @@ FOREACH(file ${FTN_SUPPORT_DESC_DEP}) ENDFOREACH(file) LIST(APPEND FTN_SUPPORT_DESC_DEP ieee_arithmetic.F95 ieee_exceptions.F95 norm2_1.F95) -LIST(APPEND FTN_SUPPORT_I8 +LIST(APPEND FTN_SUPPORT_I8 "${I8_FILES_DIR}/ieee_arithmetic.F95" "${I8_FILES_DIR}/ieee_exceptions.F95" "${I8_FILES_DIR}/norm2_1.F95" @@ -475,7 +479,11 @@ add_flang_library(flang_static ${FTN_SUPPORT_I8} ${SHARED_SOURCES} ) -set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang) +if (MSVC) + set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang) +else() + set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang) +endif() set(SHARED_LIBRARY TRUE) add_flang_library(flang_shared @@ -489,7 +497,6 @@ add_flang_library(flang_shared ) set_property(TARGET flang_shared PROPERTY OUTPUT_NAME flang) -# # Seralize the building of flang_shared and flang_static to eliminate # conflicts with the same module files from the shared and static builds # being created/recreated in the common directory @@ -499,15 +506,19 @@ set_property(TARGET flang_shared PROPERTY OUTPUT_NAME flang) # add_dependencies(flang_shared flang_static) -target_link_libraries(flang_shared ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/libflangrti.so) +target_link_libraries(flang_shared flangrti_shared) # Resolve symbols against libm and librt -target_link_libraries(flang_shared m rt) +if (NOT MSVC) + target_link_libraries(flang_shared m rt) +else() + set_target_properties(flang_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() set(SHARED_LIBRARY FALSE) set_property( SOURCE ${FTN_INTRINSICS_DESC_INDEP} ${FTN_INTRINSICS_DESC_DEP} ${SHARED_SOURCES} - PROPERTY COMPILE_DEFINITIONS + PROPERTY COMPILE_DEFINITIONS PGF90 KANJI INT32PTR64 @@ -517,7 +528,7 @@ set_property( set_property( SOURCE ${FTN_INTRINSICS_I8} - PROPERTY COMPILE_DEFINITIONS + PROPERTY COMPILE_DEFINITIONS PGF90 KANJI INT32PTR64 @@ -527,16 +538,16 @@ set_property( ) set_property( - SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP} - PROPERTY COMPILE_DEFINITIONS + SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP} + PROPERTY COMPILE_DEFINITIONS INT32PTR64 TM_I8 HAVE_LONG_LONG_INT ) set_property( - SOURCE ${FTN_SUPPORT_I8} - PROPERTY COMPILE_DEFINITIONS + SOURCE ${FTN_SUPPORT_I8} + PROPERTY COMPILE_DEFINITIONS INT32PTR64 TM_I8 DESC_I8 @@ -585,7 +596,7 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") # State a dependency on the module set_source_files_properties( ${I8_FILES_DIR}/ieee_arithmetic.F95 - PROPERTIES + PROPERTIES COMPILE_DEFINITIONS DESC_I8 OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod @@ -593,7 +604,7 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") set_source_files_properties( ${I8_FILES_DIR}/ieee_exceptions.F95 - PROPERTIES + PROPERTIES COMPILE_DEFINITIONS DESC_I8 OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod @@ -601,25 +612,30 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") set_source_files_properties( norm2_1.F95 - PROPERTIES + PROPERTIES OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic.mod OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions.mod ) set_source_files_properties( ${I8_FILES_DIR}/norm2_1.F95 - PROPERTIES + PROPERTIES OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod ) +else () + set_target_properties(flang_static + PROPERTIES + Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include-static + ) endif() set_target_properties(flang_static flang_shared PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR} ) - -target_include_directories(flang_static + +target_include_directories(flang_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} @@ -632,20 +648,24 @@ target_include_directories(flang_shared ) # Make sure the compiler is built before we bootstrap -add_dependencies(flang_static +add_dependencies(flang_static flang1 flang2 ) # Make sure the compiler is built before we bootstrap -add_dependencies(flang_shared +add_dependencies(flang_shared flang1 flang2 ) -target_compile_options(flang_static PRIVATE -fPIC) - -target_compile_options(flang_shared PRIVATE -fPIC) +if (NOT MSVC) + target_compile_options(flang_static PRIVATE -fPIC) + target_compile_options(flang_shared PRIVATE -fPIC) +else() + set_target_properties(flang_static PROPERTIES LINKER_LANGUAGE CXX) + set_target_properties(flang_shared PROPERTIES LINKER_LANGUAGE CXX) +endif() target_compile_options(flang_static PUBLIC $<$:-Mreentrant>) diff --git a/runtime/flangrti/CMakeLists.txt b/runtime/flangrti/CMakeLists.txt index 6c72f0701ae..d99c3a5e38d 100644 --- a/runtime/flangrti/CMakeLists.txt +++ b/runtime/flangrti/CMakeLists.txt @@ -1,3 +1,4 @@ + # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. @@ -10,7 +11,7 @@ SET(ASM_OPTIONS "-DLINUX_ELF") SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" ) if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) - set(ARCH_DEP_FILES + set(ARCH_DEP_FILES x86_64-Linux/x86_daz.c x86_64-Linux/x86_flushz.c x86_64-Linux/dumpregs.c @@ -61,7 +62,11 @@ add_flang_library(flangrti_static ${PGC_SRC_FILES} ${SHARED_SOURCES} ) -set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti) +if (MSVC) + set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME libflangrti) +else() + set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti) +endif() set(SHARED_LIBRARY TRUE) @@ -71,28 +76,31 @@ add_flang_library(flangrti_shared ) # Resolve symbols against libm -target_link_libraries(flangrti_shared m) +if (NOT MSVC) + target_link_libraries(flangrti_shared PRIVATE m) +endif() + # Resolve symbols against libpthread find_package(Threads REQUIRED) if (CMAKE_THREAD_LIBS_INIT) - target_link_libraries(flangrti_shared "${CMAKE_THREAD_LIBS_INIT}") + target_link_libraries(flangrti_shared PRIVATE "${CMAKE_THREAD_LIBS_INIT}") endif() # Import OpenMP if (NOT DEFINED LIBOMP_EXPORT_DIR) - find_library( + find_library( FLANG_LIBOMP - libomp.so + NAMES omp libomp HINTS ${CMAKE_BINARY_DIR}/lib) - target_link_libraries(flangrti_shared ${FLANG_LIBOMP}) + target_link_libraries(flangrti_shared PRIVATE ${FLANG_LIBOMP}) endif() -find_library( +find_library( LIBPGMATH - libpgmath.so + NAMES pgmath libpgmath HINTS ${CMAKE_BINARY_DIR}/lib) -target_link_libraries(flangrti_shared ${LIBPGMATH}) +target_link_libraries(flangrti_shared PRIVATE ${LIBPGMATH}) if( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" ) target_compile_definitions(flangrti_static PRIVATE TARGET_LINUX_ARM) @@ -118,9 +126,12 @@ target_include_directories(flangrti_shared set_target_properties(flangrti_shared flangrti_static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR}) -target_compile_options(flangrti_static PRIVATE -fPIC) - -target_compile_options(flangrti_shared PRIVATE -fPIC) +if (NOT MSVC) + target_compile_options(flangrti_static PRIVATE -fPIC) + target_compile_options(flangrti_shared PRIVATE -fPIC) +else() + set_target_properties(flangrti_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() target_compile_options(flangrti_static PUBLIC $<$:-Mreentrant>) diff --git a/runtime/ompstub/CMakeLists.txt b/runtime/ompstub/CMakeLists.txt index c3c5c0446e9..9b3890ac2ad 100644 --- a/runtime/ompstub/CMakeLists.txt +++ b/runtime/ompstub/CMakeLists.txt @@ -7,11 +7,18 @@ set(OMPSTUB_SRC init_nomp.c ompstubs.c) add_flang_library(ompstub_static ${OMPSTUB_SRC}) -set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub) +if (MSVC) + set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME libompstub) +else() + set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub) +endif() set(SHARED_LIBRARY TRUE) add_flang_library(ompstub_shared ${OMPSTUB_SRC}) set_property(TARGET ompstub_shared PROPERTY OUTPUT_NAME ompstub) +if (MSVC) + set_target_properties(ompstub_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() set(SHARED_LIBRARY FALSE) set_target_properties(ompstub_static ompstub_shared diff --git a/tools/flang1/flang1exe/CMakeLists.txt b/tools/flang1/flang1exe/CMakeLists.txt index 0249866f50d..7298861d3cc 100644 --- a/tools/flang1/flang1exe/CMakeLists.txt +++ b/tools/flang1/flang1exe/CMakeLists.txt @@ -155,10 +155,13 @@ target_compile_options(flang1 target_link_libraries(flang1 PRIVATE flangArgParser - ${FLANG_LIB_DIR}/scutil.a - -lm + scutil ) +if (NOT MSVC) + target_link_libraries(flang1 PRIVATE m) +endif() + # Install flang1 executable install(TARGETS flang1 RUNTIME DESTINATION bin) diff --git a/tools/flang1/utils/symtab/CMakeLists.txt b/tools/flang1/utils/symtab/CMakeLists.txt index bb26358f043..2608f79eb5b 100644 --- a/tools/flang1/utils/symtab/CMakeLists.txt +++ b/tools/flang1/utils/symtab/CMakeLists.txt @@ -13,7 +13,7 @@ add_custom_command( ${UTILS_SYMTAB_BIN_DIR}/symtabdf.c ${UTILS_SYMTAB_BIN_DIR}/symnames.h ${FLANG1_DOC_BIN_DIR}/symtab.rst - COMMAND ${CMAKE_BINARY_DIR}/bin/fesymutil ${CMAKE_CURRENT_SOURCE_DIR}/symtab.n + COMMAND fesymutil ${CMAKE_CURRENT_SOURCE_DIR}/symtab.n ${CMAKE_CURRENT_SOURCE_DIR}/symtab.in.h -o -n ${UTILS_SYMTAB_BIN_DIR}/symtab.out.n ${UTILS_SYMTAB_BIN_DIR}/symtab.h @@ -43,7 +43,7 @@ add_custom_command( ${UTILS_SYMTAB_BIN_DIR}/astdf.d ${UTILS_SYMTAB_BIN_DIR}/ilmtp.h ${FLANG1_DOC_BIN_DIR}/symini.rst - COMMAND ${CMAKE_BINARY_DIR}/bin/fesymini ${UTILS_SYMTAB_DIR}/symini_ftn.n + COMMAND fesymini ${UTILS_SYMTAB_DIR}/symini_ftn.n -o ${UTILS_SYMTAB_BIN_DIR}/syminidf.h ${UTILS_SYMTAB_BIN_DIR}/pd.h ${UTILS_SYMTAB_BIN_DIR}/ast.d diff --git a/tools/flang2/CMakeLists.txt b/tools/flang2/CMakeLists.txt index 9a2dde76d01..9bbd3d46fd1 100644 --- a/tools/flang2/CMakeLists.txt +++ b/tools/flang2/CMakeLists.txt @@ -23,11 +23,8 @@ set(FLANG2_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include) include_directories(${FLANG2_INCLUDE_DIR}) -if( ${TARGET_OS} STREQUAL "Linux" ) - if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) - set(X86_64 ON) - set(LINUX86 ON) - endif() +if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) + set(X86_64 ON) endif() option(FLANG_OPENMP_GPU_NVIDIA "Enable OpenMP Accelerator Offload." OFF) diff --git a/tools/flang2/flang2exe/CMakeLists.txt b/tools/flang2/flang2exe/CMakeLists.txt index 26af1a77f0a..ae42fe5ef50 100644 --- a/tools/flang2/flang2exe/CMakeLists.txt +++ b/tools/flang2/flang2exe/CMakeLists.txt @@ -143,6 +143,10 @@ target_link_libraries(flang2 scutil ) +if (NOT MSVC) + target_link_libraries(flang2 PRIVATE m) +endif() + add_dependencies(flang2 gen_backend_error_headers # Error message headers gen_backend_symtab # Symbol table headers diff --git a/tools/flang2/include/platform.h.in b/tools/flang2/include/platform.h.in index 0dc0360af96..64e333feb53 100644 --- a/tools/flang2/include/platform.h.in +++ b/tools/flang2/include/platform.h.in @@ -15,7 +15,6 @@ * - true for all arch/arch */ #define BIGOBJ 1 -#cmakedefine LINUX86 1 #define LONG_IS_64 1 #define NOLZ 1 #cmakedefine X86_64 1 diff --git a/tools/flang2/utils/upper/CMakeLists.txt b/tools/flang2/utils/upper/CMakeLists.txt index cacd96521bc..3ab3314aa44 100644 --- a/tools/flang2/utils/upper/CMakeLists.txt +++ b/tools/flang2/utils/upper/CMakeLists.txt @@ -4,18 +4,26 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # -set(ENV{LC_ALL} "C") - add_executable(upperl upperl.c ) # Generate upper tables +file(STRINGS "${UTILS_UPPER_DIR}/upperilm.in" UPPERILM_H_CONTENTS) +list(SORT UPPERILM_H_CONTENTS) +set(UPPERILM_H_CONTENTS_SORTED "") +foreach(Line ${UPPERILM_H_CONTENTS}) + # Don't modify the line if it contains #local at the end. + string(SUBSTRING "${Line}" 0 1 FIRST_CHAR) + if(NOT "${FIRST_CHAR}" STREQUAL "#") + set(UPPERILM_H_CONTENTS_SORTED "${UPPERILM_H_CONTENTS_SORTED}${Line}\n") + endif() +endforeach() +file(WRITE ${UTILS_UPPER_BIN_DIR}/upperilm.sort "${UPPERILM_H_CONTENTS_SORTED}") add_custom_command( OUTPUT ${UTILS_UPPER_BIN_DIR}/upperilm.h - COMMAND LC_ALL=C sort ${UTILS_UPPER_DIR}/upperilm.in | grep -v "^ *\#" > ${UTILS_UPPER_BIN_DIR}/upperilm.sort - COMMAND ${CMAKE_BINARY_DIR}/bin/upperl ${UTILS_UPPER_BIN_DIR}/upperilm.sort ${UTILS_UPPER_BIN_DIR}/upperilm.h + COMMAND upperl ${UTILS_UPPER_BIN_DIR}/upperilm.sort ${UTILS_UPPER_BIN_DIR}/upperilm.h DEPENDS upperl ${UTILS_UPPER_DIR}/upperilm.in )