diff --git a/.gitignore b/.gitignore index 8a2b3f8..29b8b26 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,16 @@ *.pcf *.png *.svg + +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps +DartConfiguration.tcl diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9321893 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +# +# Copyright (c) 2021 Barcelona Supercomputing Center (BSC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +cmake_minimum_required(VERSION 3.10) + +project(OVNI LANGUAGES C) + +add_compile_options(-Wall -Wextra -Wformat + -Wmissing-prototypes -Wstrict-prototypes + #-Wconversion -Wsign-conversion + -Wold-style-definition -pedantic + -Werror +) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_EXTENSIONS FALSE) + +include(CheckIPOSupported) +check_ipo_supported(RESULT ipo_available OUTPUT error LANGUAGES C) + +# Enable IPO by default, if available +if(ipo_available) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) +else() + message(WARNING "IPO is not supported, expect performance penalty\n${error}") +endif() + +add_library(ovni SHARED + ovni.c + parson.c +) + +target_include_directories(ovni PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_executable(emu + chan.c + emu.c + emu_nosv.c + emu_openmp.c + emu_ovni.c + emu_tampi.c + emu_nanos6.c + ovni.c + parson.c + pcf.c + prv.c +) + +add_executable(dump + dump.c + ovni.c + parson.c +) + +add_executable(ovni2prv + ovni2prv.c + ovni.c + parson.c +) + +find_package(MPI REQUIRED) +add_executable(ovnisync ovnisync.c) +target_include_directories(ovnisync PRIVATE ${MPI_C_INCLUDE_PATH}) +target_compile_options(ovnisync PRIVATE ${MPI_C_COMPILE_FLAGS}) +target_link_libraries(ovnisync m ${MPI_C_LIBRARIES} ${MPI_C_LINK_FLAGS}) + +install(TARGETS ovni LIBRARY) +install(TARGETS emu dump ovni2prv ovnisync RUNTIME) +install(FILES ovni.h DESTINATION include) diff --git a/Makefile b/Makefile deleted file mode 100644 index ffe734d..0000000 --- a/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -CFLAGS=-fPIC -CFLAGS+=-std=c11 -pedantic -Werror -Wformat -CFLAGS+=-Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition - -# Debug flags -#CFLAGS+=-fsanitize=address -#LDFLAGS+=-fsanitize=address -#CFLAGS+=-g -O0 -#CFLAGS+=-DENABLE_DEBUG -#CFLAGS+=-fno-omit-frame-pointer - -# Performance flags -CFLAGS+=-O3 -CFLAGS+=-fstack-protector-explicit -CFLAGS+=-flto - -BIN=dump test_speed ovni2prv emu libovni.so ovnisync - -all: $(BIN) - -libovni.a: ovni.o - ar -crs $@ $^ - -dump: ovni.o dump.o parson.o - -test_speed: test_speed.c ovni.o parson.o - -emu: emu.o emu_ovni.o emu_nosv.o emu_tampi.o emu_openmp.o emu_nanos6.o ovni.o prv.o pcf.o parson.o chan.o - -libovni.so: ovni.o parson.o - $(LINK.c) -shared $^ -o $@ - -ovni2prv: ovni2prv.c ovni.o parson.o - -ovnisync: ovnisync.c - mpicc $(CFLAGS) $(LDFLAGS) -lm $^ -o $@ - -clean: - rm -f *.o $(BIN)