-
Notifications
You must be signed in to change notification settings - Fork 12
/
CMakeLists.txt
120 lines (92 loc) · 2.99 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# This file is automatically generated from cmake.toml - DO NOT EDIT
# See https://github.com/build-cpp/cmkr for more information
cmake_minimum_required(VERSION 3.15)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build")
endif()
# Regenerate CMakeLists.txt automatically in the root project
set(CMKR_ROOT_PROJECT OFF)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(CMKR_ROOT_PROJECT ON)
# Bootstrap cmkr
include(cmkr.cmake OPTIONAL RESULT_VARIABLE CMKR_INCLUDE_RESULT)
if(CMKR_INCLUDE_RESULT)
cmkr()
endif()
# Enable folder support
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()
# Create a configure-time dependency on cmake.toml to improve IDE support
if(CMKR_ROOT_PROJECT)
configure_file(cmake.toml cmake.toml COPYONLY)
endif()
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO" CACHE STRING "")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO" CACHE STRING "")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS- /EHs-")
project(EfiCMake)
set(CMAKE_EXECUTABLE_SUFFIX ".efi")
include(FetchContent)
message(STATUS "Fetching edk2...")
FetchContent_Declare(edk2
URL
"https://github.com/tianocore/edk2/archive/refs/tags/edk2-stable202205.tar.gz"
URL_HASH
SHA256=E6CF93BAE78B30A10732B8AFB5CC438735DC9EC976AE65D12DAB041C18BB7987
)
FetchContent_MakeAvailable(edk2)
# Target edk2_headers
set(CMKR_TARGET edk2_headers)
set(edk2_headers_SOURCES "")
set(CMKR_SOURCES ${edk2_headers_SOURCES})
add_library(edk2_headers INTERFACE)
if(edk2_headers_SOURCES)
target_sources(edk2_headers INTERFACE ${edk2_headers_SOURCES})
endif()
add_library(edk2::headers ALIAS edk2_headers)
target_compile_features(edk2_headers INTERFACE
cxx_std_17
)
target_include_directories(edk2_headers INTERFACE
"${edk2_SOURCE_DIR}/MdePkg/Include"
"${edk2_SOURCE_DIR}/MdePkg/Include/X64"
)
if(MSVC) # msvc
target_link_options(edk2_headers INTERFACE
"/NODEFAULTLIB"
"/ENTRY:EfiEntry"
"/SUBSYSTEM:EFI_APPLICATION"
"/MANIFESTUAC:NO"
"/DYNAMICBASE:NO"
"/NXCOMPAT:NO"
)
endif()
unset(CMKR_TARGET)
unset(CMKR_SOURCES)
# Target EfiCMake
set(CMKR_TARGET EfiCMake)
set(EfiCMake_SOURCES "")
list(APPEND EfiCMake_SOURCES
"src/EfiCMake/main.cpp"
"src/EfiCMake/Efi.hpp"
"src/EfiCMake/ProcessorBind.hpp"
)
list(APPEND EfiCMake_SOURCES
cmake.toml
)
set(CMKR_SOURCES ${EfiCMake_SOURCES})
add_executable(EfiCMake)
if(EfiCMake_SOURCES)
target_sources(EfiCMake PRIVATE ${EfiCMake_SOURCES})
endif()
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT)
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT EfiCMake)
endif()
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${EfiCMake_SOURCES})
target_link_libraries(EfiCMake PRIVATE
edk2::headers
)
unset(CMKR_TARGET)
unset(CMKR_SOURCES)