Skip to content

Commit 1b6d82c

Browse files
authored
Help make this software more portable. (#138)
* meta/all.py: Remove unused pip import * meta/code_settings: add missing stding.h include for uint32_t https://stackoverflow.com/a/11069172/4935114 * Add -mbig-obj ar flag conditionally Reference: fmtlib/fmt@e06790c. * cmake: Always install things * Allow to build without conan
1 parent 08842fc commit 1b6d82c

File tree

7 files changed

+56
-22
lines changed

7 files changed

+56
-22
lines changed

app/CMakeLists.txt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,22 @@ cmake_minimum_required(VERSION 3.5)
33
project(Forscape VERSION 0.0.3 LANGUAGES CXX)
44
set(EXE_NAME "Forscape")
55

6-
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/conan-dependencies ${CMAKE_MODULE_PATH})
7-
include(${CMAKE_BINARY_DIR}/conan-dependencies/conanbuildinfo.cmake)
8-
conan_basic_setup(NO_OUTPUT_DIRS KEEP_RPATHS)
9-
include_directories(${CONAN_INCLUDE_DIRS})
6+
option(USE_CONAN "Use Conan for dependency management" ON)
7+
8+
if(USE_CONAN)
9+
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/conan-dependencies ${CMAKE_MODULE_PATH})
10+
include(${CMAKE_BINARY_DIR}/conan-dependencies/conanbuildinfo.cmake)
11+
conan_basic_setup(NO_OUTPUT_DIRS KEEP_RPATHS)
12+
include_directories(${CONAN_INCLUDE_DIRS})
13+
add_compile_definitions(USE_CONAN_EIGEN)
14+
endif()
1015

1116
find_package(Eigen3 REQUIRED)
12-
find_package(phmap REQUIRED)
17+
# This is a header only library, that should be included in the system's
18+
# default include directory if conan is not used.
19+
if(USE_CONAN)
20+
find_package(phmap REQUIRED)
21+
endif()
1322
find_package(readerwriterqueue REQUIRED)
1423

1524
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -268,6 +277,7 @@ if(QT_VERSION_MAJOR EQUAL 6)
268277
endif()
269278

270279
add_compile_definitions($<$<CONFIG:Release>:EIGEN_NO_DEBUG>)
280+
include(CheckCXXCompilerFlag)
271281

272282
if(MSVC)
273283
target_compile_options(Forscape PRIVATE
@@ -285,9 +295,10 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
285295
$<$<CONFIG:Release>: -Ofast -fmodulo-sched -fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las -fdelete-null-pointer-checks
286296
-fomit-frame-pointer -funroll-loops -fvisibility=hidden -fwhole-program -flto>
287297
)
288-
target_link_options(Forscape PRIVATE
289-
-Wa,-mbig-obj
290-
)
298+
check_cxx_compiler_flag("-Wa,-mbig-obj" HAS_MBIG_OBJ)
299+
if(HAS_MBIG_OBJ)
300+
target_link_options(Forscape PRIVATE "-Wa,-mbig-obj")
301+
endif()
291302
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
292303
# using Clang
293304
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
@@ -306,7 +317,7 @@ add_custom_target(
306317

307318
add_dependencies(Forscape codegen)
308319

320+
install(TARGETS Forscape RUNTIME)
309321
if (${MAKE_DEB})
310-
install(TARGETS Forscape RUNTIME)
311322
include(Packing.cmake)
312323
endif ()

meta/all.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import os
2-
import pip
32
import shutil
43

54

meta/code_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def main():
88

99
header_writer = cpp.HeaderWriter(
1010
name="code_settings_constants",
11-
includes=["array", "string_view"],
11+
includes=["array", "string_view", "stdint.h"],
1212
)
1313

1414
header_writer.write(f"#define NUM_CODE_SETTINGS {len(entries)}\n\n")

meta/interpreter_dispatch.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ def main():
3838
with open("../src/generated/forscape_interpreter_gen.cpp", "w", encoding="utf-8") as codegen_file:
3939
codegen_file.write("#include \"forscape_interpreter.h\"\n\n")
4040
codegen_file.write("#include <math.h>\n")
41-
codegen_file.write("#include <unsupported/Eigen/MatrixFunctions>\n\n")
41+
codegen_file.write("#ifdef USE_CONAN_EIGEN\n")
42+
codegen_file.write(" #include <unsupported/Eigen/MatrixFunctions>\n")
43+
codegen_file.write("#else\n")
44+
codegen_file.write(" #include <eigen3/unsupported/Eigen/MatrixFunctions>\n")
45+
codegen_file.write("#endif\n")
4246
codegen_file.write("using namespace Eigen;\n")
4347
codegen_file.write("using namespace std;\n\n")
4448
codegen_file.write("namespace Forscape {\n\n")

src/forscape_interpreter.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@
66
#include "forscape_symbol_link_pass.h"
77

88
#include <thread>
9-
#include <unsupported/Eigen/MatrixFunctions>
9+
10+
#ifdef USE_CONAN_EIGEN
11+
#include <unsupported/Eigen/MatrixFunctions>
12+
#else
13+
#include <eigen3/unsupported/Eigen/MatrixFunctions>
14+
#endif
1015

1116
#ifndef NDEBUG
1217
#include <iostream>

src/forscape_value.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
#include <memory>
77
#include <variant>
88
#include <vector>
9-
#include <Eigen/Core>
9+
#ifdef USE_CONAN_EIGEN
10+
#include <Eigen/Core>
11+
#else
12+
#include <eigen3/Eigen/Core>
13+
#endif
1014

1115
namespace Forscape {
1216

test/CMakeLists.txt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,22 @@ option(TEST_QT OFF)
44

55
project(ForscapeTests LANGUAGES CXX)
66

7-
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/conan-dependencies ${CMAKE_MODULE_PATH})
8-
include(${CMAKE_BINARY_DIR}/conan-dependencies/conanbuildinfo.cmake)
9-
conan_basic_setup(NO_OUTPUT_DIRS KEEP_RPATHS)
10-
include_directories(${CONAN_INCLUDE_DIRS})
7+
option(USE_CONAN "Use Conan for dependency management" ON)
8+
9+
if(USE_CONAN)
10+
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/conan-dependencies ${CMAKE_MODULE_PATH})
11+
include(${CMAKE_BINARY_DIR}/conan-dependencies/conanbuildinfo.cmake)
12+
conan_basic_setup(NO_OUTPUT_DIRS KEEP_RPATHS)
13+
include_directories(${CONAN_INCLUDE_DIRS})
14+
add_compile_definitions(USE_CONAN_EIGEN)
15+
endif()
1116

1217
find_package(Eigen3 REQUIRED)
13-
find_package(phmap REQUIRED)
18+
# This is a header only library, that should be included in the system's
19+
# default include directory if conan is not used.
20+
if(USE_CONAN)
21+
find_package(phmap REQUIRED)
22+
endif()
1423
find_package(readerwriterqueue REQUIRED)
1524

1625
set(CMAKE_CXX_STANDARD 17)
@@ -234,6 +243,7 @@ endif ()
234243
add_test(NAME IntegrationTest COMMAND ForscapeTests.exe)
235244

236245
add_compile_definitions($<$<CONFIG:Release>:EIGEN_NO_DEBUG>)
246+
include(CheckCXXCompilerFlag)
237247

238248
if(MSVC)
239249
target_compile_options(ForscapeTests PRIVATE
@@ -254,9 +264,10 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
254264
$<$<CONFIG:Release>: -Ofast -fmodulo-sched -fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las -fdelete-null-pointer-checks
255265
-fomit-frame-pointer -funroll-loops -fvisibility=hidden -fwhole-program -flto>
256266
)
257-
target_link_options(ForscapeTests PRIVATE
258-
-Wa,-mbig-obj
259-
)
267+
check_cxx_compiler_flag("-Wa,-mbig-obj" HAS_MBIG_OBJ)
268+
if(HAS_MBIG_OBJ)
269+
target_link_options(Forscape PRIVATE "-Wa,-mbig-obj")
270+
endif()
260271
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
261272
# using Clang
262273
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")

0 commit comments

Comments
 (0)